[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"@babel/preset-react\", \"@babel/preset-env\"],\n  \"comments\": false,\n  \"plugins\": [\n    [\n      \"formatjs\",\n      {\n        \"idInterpolationPattern\": \"[sha512:contenthash:base64:6]\",\n        \"ast\": true\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "umd/* binary\npackage-lock.json binary\n*.min.css binary\nsrc/i18n.min/* binary\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve TinodeWeb\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\nIf you want to ask a question, please post to https://groups.google.com/d/forum/tinode instead.\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Environment (please complete the following information):**\n - OS: [e.g. Mac OS, Windows 10 Home]\n - Browser [e.g. Chrome, Safari]\n - TinodeWeb Version [e.g. 0.16.6]\n\n**Console log**\nPlease attach or insert console log which illustrates the problem. Please use the log produced by `index-dev.html`, not `index.html`; `index.html` uses minified javascript which produces unusable logs.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: feature request\nassignees: ''\n\n---\n\nIf you want to ask a question, please post to https://groups.google.com/d/forum/tinode instead.\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules\nsrc/i18n/srci/\nwebapp.code-workspace.code-workspace\n"
  },
  {
    "path": ".well-known/assetlinks.json",
    "content": "[{\n  \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n  \"target\": {\n    \"namespace\": \"android_app\",\n    \"package_name\": \"co.tinode.tindroidx\",\n    \"sha256_cert_fingerprints\":\n    [\"25:9A:71:EE:BD:2E:9F:D3:2D:64:1E:90:49:33:BD:F3:E3:42:BD:C4:DD:FA:BA:68:EE:D2:EB:76:65:33:DC:92\"]\n  }\n},\n{\n  \"relation\": [\"delegate_permission/common.get_login_creds\"],\n  \"target\": {\n    \"namespace\": \"web\",\n    \"site\": \"https://web.tinode.co\"\n  }\n},\n{\n  \"relation\": [\"delegate_permission/common.get_login_creds\"],\n  \"target\": {\n    \"namespace\": \"android_app\",\n    \"package_name\": \"co.tinode.tindroidx\",\n    \"sha256_cert_fingerprints\":\n    [\"5B:BE:6A:C4:A7:66:A8:BB:4B:C1:52:66:E5:A4:BD:66:3C:33:50:04:11:CB:17:44:45:89:5E:3C:8D:55:77:7A\"]\n  }\n}\n]\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# Tinode Web\n\n## Briefing\n\nSingle-page web chat application for [Tinode](https://github.com/tinode/chat/). The app is built on\n[React](https://reactjs.org/). The [Tinode javascript SDK](https://github.com/tinode/tinode-js/) has no external dependencies.\nOverall, it's a lot like open source WhatsApp or Telegram web apps.\n\nAlthough the app is generally usable, keep in mind that this is work in progress. Some bugs probably exist, some features are missing. The app was tested in the latest Chrome & Firefox only. NPM package is [available](https://www.npmjs.com/package/tinode-webapp).\n\nTry possibly newer or older version live at https://sandbox.tinode.co/.\n\n<a href=\"https://web.tinode.co/\"><img src=\"web-app.svg\" height=36></a>\n\nFor demo access and other instructions [see here](https://github.com/tinode/chat/#demosandbox).\n\n## Installing and running\n\nThis is _NOT_ a standalone app, this is just a frontend, a client. It requires a [backend](https://github.com/tinode/chat/). See [installation instructions](https://github.com/tinode/chat/blob/master/INSTALL.md). See instructions for [enabling push notifications](push.md).\n\n## Getting support\n\n* Read [client-side](http://tinode.github.io/js-api/) and [server-side](https://github.com/tinode/chat/blob/master/docs/API.md) API documentation.\n* For support, general questions, discussions post to [https://groups.google.com/d/forum/tinode](https://groups.google.com/d/forum/tinode).\n* For bugs and feature requests [open an issue](https://github.com/tinode/webchat/issues/new).\n* Use https://tinode.co/contact for commercial inquiries.\n\n## Helping out\n\n* If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.\n* Consider buying paid support: https://tinode.co/support.html\n* If you are a software developer, send us your pull requests with bug fixes and new features.\n* If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing [feature requests](https://github.com/tinode/chat/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22feature+request%22) you find most valuable.\n* If you speak a language other than English, [translate](https://github.com/tinode/chat/blob/devel/docs/translations.md#webapp) the apps into your language. You may also review and improve existing translations.\n* If you are a UI/UX expert, help us polish the app UI.\n* Use it: install it for your colleagues or friends at work or at home.\n\n## Internationalization\n\nThe app is fully internationalized using [React-Intl](https://github.com/formatjs/react-intl). The UI language is selected automatically from the language specified by the browser. A specific language can be forced by adding `#?hl=XX` parameter to the URL when starting the app, e.g. https://web.tinode.co/#?hl=fr.\n\nThe app is currently available in the following languages:\n * English - default\n * Arabic\n * Chinese simplified\n * Chinese traditional\n * French\n * German\n * Italian\n * Korean\n * Romanian\n * Russian\n * Spanish\n * Thai\n * Ukrainian\n * Vietnamese\n\nMore translations are welcome. See [instructions](https://github.com/tinode/chat/blob/devel/docs/translations.md#webapp).\n\n\n## Not done yet\n\n* End-to-End encryption.\n* Emoji support is weak.\n* Mentions, hashtags.\n* Previews not generated for links and docs.\n* Location and contact sharing.\n* Recording video messages.\n\n## Other\n\n* Demo avatars and some other graphics are from https://www.pexels.com/ under [CC0 license](https://www.pexels.com/photo-license/).\n* Background patterns from http://subtlepatterns.com/, commercial and non-commercial use allowed with attribution.\n* [Fonts](https://fonts.google.com/) and [icons](https://google.github.io/material-design-icons/#icon-font-for-the-web) from Google under [license](https://developers.google.com/terms) which permits commercial and non-commercial use.\n* Push notifications built with https://firebase.google.com/.\n\n## Responsive design\n\n### Desktop screenshot\n\n<p align=\"center\">\n  <img src=\"web-desktop.jpg\" alt=\"Desktop web: full app\" width=810 />\n</p>\n\n### Mobile screenshots\n\n<p align=\"center\">\n  <kbd><img src=\"web-mob-contacts.png\" alt=\"Mobile web: contacts\" width=250 /></kbd> <kbd><img src=\"web-mob-chat.png\" alt=\"Mobile web: chat\" width=250 /></kbd> <kbd><img src=\"web-mob-chat-dark.png\" alt=\"Mobile web: chat dark mode\" width=250 /></kbd> <kbd><img src=\"web-mob-info.png\" alt=\"Mobile web: topic info\" width=250 /></kbd> <kbd><img src=\"web-mob-forward.png\" alt=\"Mobile web: forward message\" width=250 /></kbd> <kbd><img src=\"web-mob-video-call.png\" alt=\"Mobile web: video call\" width=250 /></kbd>\n</p>\n"
  },
  {
    "path": "css/base.css",
    "content": ":root {\n  color-scheme: light dark;\n\n  /* Size of text in message bubbles */\n  --message-text-size: 10pt;\n\n  /* Height of caption panel */\n  --caption-panel-height: 4rem;\n\n  /* Wallpaper */\n  --wallpaper-url: url('../img/bkg/a00.png'); /* path relative to CSS file */\n  --wallpaper-repeat: repeat;\n  --wallpaper-blur: 0px;\n  --wallpaper-invert: 0;\n  --wallpaper-brightness: 1;\n  --wallpaper-size: contain;\n  --wallpaper-position: center;\n\n\n  /* Core Palette */\n  --clr-bright: light-dark(#fff, #181818);\n  --clr-dark: light-dark(#000, #fff);\n  --clr-transparent: transparent;\n  --clr-std-gray: #808080; /* Standard gray color */\n  --clr-std-ltgray: light-dark(#c0c0c0, #3f3f3f); /* Standard silver color */\n  --clr-std-teal: teal; /* Standard teal color */\n  --clr-std-grey: grey; /* Standard grey color */\n  --clr-std-orange: #ffa500; /* Standard orange color */\n\n  /* Primary Accent Colors */\n  --clr-primary-accent: light-dark(#2094f3, #0e6dba); /* blue 500, links, borders */\n  --clr-primary-accent-hover: light-dark(#0a6ebd, #116ab4); /* hover for primary accent */\n  --clr-primary-accent-focus-shadow: light-dark(rgba(33, 150, 243, 0.25), rgba(3, 7, 12, 0.25)); /* focus shadow for inputs with primary accent */\n  --clr-primary-accent-transparent-medium: light-dark(rgba(33, 150, 243, 0.3), rgba(20, 70, 120, 0.3)); /* for active call shadow */\n  --clr-primary-action: light-dark(#1e89e6, #1571c1); /* blue 600, primary buttons */\n  --clr-primary-action-hover: light-dark(#2962ff, #0037b8); /* hover for primary action */\n  --clr-secondary-accent: light-dark(#0097a8, #006570); /* Checkmark icon, unread badge bg */\n  --clr-primary-light-blue: light-dark(#bcdefb, #78a0be); /* light-blue 100, side caption panel text/link */\n  --clr-light-blue-accent: light-dark(#0398e2, #0379b5); /* light-blue accent, reply quote border, pinned active dot */\n\n  /* Secondary/Neutral Grays & Backgrounds */\n  --clr-body-background: var(--clr-std-ltgray); /* Main page background */\n  --clr-text-primary: light-dark(#666, #999); /* Default text color */\n  --clr-text-secondary: light-dark(#757575, #8a8a8a); /* Muted text, icons e.g. menu trigger */\n  --clr-text-tertiary: light-dark(#999, #787878); /* Even more muted text, borders, some icons */\n  --clr-text-tertiary-activated: #888; /* Activated (hover, focus) tertiary text */\n  --clr-text-placeholder: light-dark(#bbb, #555); /* Placeholder text */\n  --clr-text-disabled: light-dark(#888, #777); /* Disabled text e.g. in-place-edit */\n  --clr-border-light: light-dark(#ccc, #555); /* Common light border, separator */\n  --clr-border-muted: light-dark(#ddd, #444); /* Softer border, e.g. in-place-edit dashed */\n  --clr-background-off-white: light-dark(#fafafa, #222); /* Common very light background */\n  --clr-background-light-gray: light-dark(#f0f0f0, #0f0f0f); /* HR background, action button hover */\n  --clr-background-extra-light-gray: light-dark(#eee, #222); /* Flat button faux bg, tabbar bg, chip bg */\n  --clr-background-blue-gray-50: light-dark(#edf0f2, #202c33); /* Contact hover, messages panel, send message panel */\n  --clr-background-blue-gray-75: light-dark(#e1e8eb, #182124); /* Contact pinned */\n  --clr-background-blue-gray-100: light-dark(#cfd8dc, #20272a); /* Contact selected, uploader bar */\n  --clr-background-blue-gray-300: light-dark(#b0bec5, #354146); /* Topic/Info caption panel bg, some lettertiles */\n  --clr-blue-wash-light: light-dark(#f0f0ff, #22222d); /* bot form button bg */\n  --clr-blue-wash-medium: light-dark(#d8e8ff, #123550); /* Pinned active bg */\n  --clr-primary-wash: light-dark(#e3f2fd, #072f45); /* Secondary button hover, avatar upload hover, bubble meta deleted bg */\n  --clr-indigo-50: light-dark(#e8eaf6, #1a2c44); /* Outline button hover */\n\n  /* Semantic Colors: Danger, Warning, Success, Info */\n  --clr-danger-text: light-dark(#d33131, #931f1f); /* Danger text, invalid label */\n  --clr-danger-text-hover: light-dark(#f44034, #cc1100); /* Hover for danger text */\n  --clr-error-text-muted: light-dark(#cc6666, #993333); /* For less critical errors like invalid in-place edit icon/text */\n  --clr-error-bg-light: light-dark(#ffccd1, #ff6675); /* Info box error bg */\n  --clr-error-border-light: light-dark(#ffbdc6, #ff334e); /* Info box error border */\n  --clr-error-text-dark: light-dark(#b51c1c, #de2323); /* Info box error text, icon */\n  --clr-error-icon: light-dark(#ef5552, #d81b0e); /* Info box error icon specific */\n  --clr-warning-accent: light-dark(#FFC107, #808020); /* Amber, danger-color */\n  --clr-warning-bg-light: light-dark(#fff9c4, #00060c); /* Info box warning bg */\n  --clr-warning-border-light: light-dark(#fff59d, #000a2b); /* Info box warning border */\n  --clr-warning-text-dark: light-dark(#6d4c41, #a08356); /* Info box warning text */\n  --clr-warning-icon: light-dark(#fbc02d, #b48204); /* Info box warning icon specific */\n  --clr-info-bg-light: light-dark(#e1f5fe, #010a0e); /* Info box info bg */\n  --clr-info-border-light: light-dark(#b3e5fc, #001824); /* Info box info border */\n  --clr-info-text-dark: light-dark(#0288d1, #00151f); /* Info box info text, icon */\n\n  /* Special UI Elements Colors */\n  --clr-header-stripe-bg: light-dark(#3949AB, #12152f); /* Deep-blue stripe at top */\n  --clr-scrollbar-thumb: light-dark(rgba(0,0,0,0.3), rgba(255,255,255,0.3));\n  --clr-scrollbar-track: light-dark(rgba(255,255,255,0.1), rgba(0,0,0,0.1));\n  --clr-menu-item-hover-bg: light-dark(#f5f5f5, #0a0a0a);\n  --clr-alert-overlay-bg: light-dark(rgba(240,240,240,0.85), rgba(15,15,15,0.85));\n  --clr-verified-accent: light-dark(#02a6f2, #027db6); /* Verified color */\n  --clr-staff-accent: light-dark(#689f38, #598830); /* Staff color */\n  --clr-badge-inv: light-dark(#fffd, #cccd); /* Badge inverted text */\n  --clr-cyan-50: light-dark(#e0f7fa, #2f3e43); /* Dummy view bg */\n  --clr-overlay-white-strong: light-dark(rgba(255, 255, 255, 0.9), rgba(0,0,0,0.90)); /* Image preview bg, video container bg */\n  --clr-gray-medium-bg: light-dark(#777, #444); /* Image preview container bg (darker gray) */\n  --clr-toast-bg: #333;\n  --clr-toast-text: light-dark(#eee, #aaa);\n  --clr-online: #4caf50;\n  --clr-offline: light-dark(#ccc, #999);\n\n  /* Shadow Colors & Values */\n  --clr-shadow-input-underline: rgba(0,0,0, 0.1);\n  --clr-shadow-hr-inset: rgba(0,0,0,0.15);\n  --clr-shadow-scrollbar-track-webkit: rgba(0,0,0,0.2);\n  --clr-shadow-button: rgba(0,0,0, 0.25); /* General purpose shadow for buttons, spinners etc. */\n  --clr-shadow-button-inset-active: rgba(0,0,0, 0.125);\n  --clr-shadow-dialog: rgba(0,0,0, 0.45); /* For menus, alerts, dialogs */\n  --clr-shadow-panel-divider: rgba(0,0,0,0.1); /* For subtle shadows under/above panels */\n  --clr-shadow-gray-strong: light-dark(var(--clr-std-gray), #333); /* For panel box-shadows using 'gray' keyword */\n  --clr-shadow-silver-subtle: light-dark(var(--clr-std-ltgray), #333); /* For panel box-shadows using 'silver' keyword */\n  --clr-shadow-bubble-drop: rgba(0,0,0,0.3);\n\n  /* Buttons */\n  --clr-button-primary-bg: var(--clr-primary-action);\n  --clr-button-primary-text: var(--clr-bright);\n  --clr-button-primary-hover-bg: var(--clr-primary-action-hover);\n  --clr-button-secondary-bg: var(--clr-bright);\n  --clr-button-secondary-text: var(--clr-primary-accent);\n  --clr-button-secondary-hover-bg: var(--clr-primary-wash);\n  --clr-button-outline-text: var(--clr-primary-accent);\n  --clr-button-outline-border: var(--clr-std-ltgray);\n  --clr-button-outline-hover-bg: var(--clr-indigo-50);\n  --clr-button-danger-bg: light-dark(#ec645f, #d74742);\n  --clr-button-danger-text: var(--clr-bright);\n  --clr-button-danger-hover-bg: light-dark(#f77, #a55);\n  --clr-button-positive-bg: light-dark(#71c46f, #3f983e);\n  --clr-button-positive-text: var(--clr-bright);\n  --clr-button-positive-hover-bg: light-dark(#7fed7f, #6ec26e);\n\n  /* Inputs */\n  --clr-input-text: var(--clr-text-primary);\n  --clr-input-border: var(--clr-border-light);\n  --clr-input-border-focus: var(--clr-primary-accent);\n  --clr-input-shadow: var(--clr-shadow-input-underline);\n  --clr-input-shadow-focus: var(--clr-primary-accent-focus-shadow);\n  --clr-input-invalid-border: light-dark(#e57171, #561010);\n  --clr-input-invalid-shadow: light-dark(#e5737340, #1a0c0c40);\n  --clr-input-placeholder-text: var(--clr-text-placeholder);\n\n  /* Chat Bubbles */\n  --clr-bubble-left-bg: light-dark(#c4e0a3, #3e5c1f);\n  --clr-bubble-left-bg-flash: light-dark(#94a97c, #2c4517);\n  --clr-bubble-right-bg: var(--clr-background-off-white);\n  --clr-bubble-right-bg-flash: var(--clr-border-light);\n  --clr-bubble-text: light-dark(#212121, #bbc);\n  --clr-bubble-meta-text: var(--clr-text-primary);\n  --clr-bubble-meta-deleted-bg: var(--clr-primary-wash);\n  --clr-bubble-meta-date-bg: light-dark(rgba(255 255 255 / 80%), rgba(40 40 40 / 80%));\n  --clr-bubble-timestamp-text: light-dark(#777, #888);\n  --clr-bubble-author-text: light-dark(#777, #666);\n\n  /* Reply Quotes */\n  --clr-reply-quote-border: var(--clr-light-blue-accent);\n  --clr-reply-quote-text: var(--clr-text-primary);\n  --clr-reply-quote-left-bg: light-dark(rgba(255, 255, 255, 0.4), rgba(0, 0, 0, 0.4));\n  --clr-reply-quote-right-bg: light-dark(#8080801f, #c4c4c42e);\n  --clr-reply-quote-preview-bg: var(--clr-background-off-white);\n\n  /* Badges (small inline labels) */\n  --clr-badge-default-bg: light-dark(#e8e8e8, #171717);\n  --clr-badge-default-text: var(--clr-text-primary);\n  --clr-badge-default-border: var(--clr-std-ltgray);\n  --clr-badge-green-bg: light-dark(#efe, #131);\n  --clr-badge-green-text: light-dark(#383, #363);\n  --clr-badge-green-border: light-dark(#aca, #242);\n  --clr-badge-yellow-bg: light-dark(#ffe, #331); /* Note: #ffe is close to white, dark will be black */\n  --clr-badge-yellow-text: light-dark(#660, #660);\n  --clr-badge-yellow-border: light-dark(#cc9, #552);\n  --clr-badge-blue-bg: light-dark(#f0f0ff, #224);\n  --clr-badge-blue-text: light-dark(#339, #447);\n  --clr-badge-blue-border: light-dark(#aad, #336);\n  --clr-badge-red-bg: light-dark(#fee, #522);\n  --clr-badge-red-text: light-dark(#933, #744);\n  --clr-badge-red-border: light-dark(#c99, #633);\n  --clr-badge-magenta-bg: light-dark(#fef, #535);\n  --clr-badge-magenta-text: light-dark(#939, #747);\n  --clr-badge-magenta-border: light-dark(#c9c, #636);\n\n    /* Chips */\n  --clr-chip-bg: var(--clr-background-extra-light-gray);\n  --clr-chip-invalid-text: var(--clr-error-text-muted);\n  --clr-chip-invalid-bg: var(--clr-badge-red-bg);\n  --clr-chip-remove-icon-bg: light-dark(#aaa, #555);\n  --clr-chip-remove-icon-text: var(--clr-background-extra-light-gray);\n  --clr-chip-remove-icon-hover-bg: var(--clr-text-placeholder);\n  --clr-chip-remove-icon-hover-text: var(--clr-bright);\n\n    /* Tabbar */\n  --clr-tabbar-bg: var(--clr-background-extra-light-gray);\n  --clr-tabbar-inactive-text: light-dark(rgba(33,150,243,0.6), rgba(22,90,160,1));\n  --clr-tabbar-active-text: var(--clr-primary-accent);\n  --clr-tabbar-inactive-border: var(--clr-border-light);\n  --clr-tabbar-active-border: var(--clr-primary-accent);\n\n  /* Miscellaneous UI */\n  --clr-highlight-text: var(--clr-std-teal);\n  --clr-highlight-preview-text: light-dark(#5f9ea0, #205e60);\n  --clr-spinner-track: light-dark(#f3f3f3, #0c0c0c);\n  --clr-spinner-active: var(--clr-primary-action);\n  --clr-cropper-bounding-box-border: var(--clr-primary-action);\n  --clr-cropper-bounding-box-bg: var(--clr-text-tertiary);\n  --clr-cropper-cutout-border: var(--clr-text-tertiary);\n  --clr-cropper-cutout-shadow: light-dark(rgb(230 246 255 / 66%), rgb(25 10 0 / 66%));\n  --clr-audio-bg: var(--clr-background-extra-light-gray);\n  --clr-audio-icon: light-dark(rgba(102, 117, 117, 0.8), rgba(153, 138, 138, 0.8));\n  --clr-audio-icon-disabled: light-dark(rgba(153  153  153 / 75%), rgba(102 102 102 / 75%));\n  --clr-audio-timer-text: light-dark(rgba(102, 102, 102, 0.75), rgba(153, 153, 153, 0.75));\n  --clr-pinned-menu-bg: light-dark(#f8f8f8, #1a1a1a);\n  --clr-drag-n-drop-border: var(--clr-std-grey);\n  --clr-drag-n-drop-text: var(--clr-std-grey);\n  --clr-drag-n-drop-bg: light-dark(rgba(255,255,255,.95), rgba(0,0,0,.95));\n  --clr-drag-n-drop-outline: light-dark(rgba(255,255,255,.95), rgba(0,0,0,.95));\n\n  /* Letter Tiles Base */\n  --clr-lettertile-default-text: light-dark(#fafafacc, #dcdcdccc);\n  --clr-lettertile-hover-text: var(--clr-bright);\n\n  /* Letter Tile Backgrounds (lt-bg) */\n  --clr-lt-bg-0: #ef9a9a;\n  --clr-lt-bg-1: #90caf9;\n  --clr-lt-bg-2: #b0bec4;\n  --clr-lt-bg-3: #b49edb;\n  --clr-lt-bg-4: #ffa98f;\n  --clr-lt-bg-5: #a4d5a6;\n  --clr-lt-bg-6: #ededed;\n  --clr-lt-bg-7: #e6ee9b;\n  --clr-lt-bg-8: #c4e0a3;\n  --clr-lt-bg-9: #f0e57f;\n  --clr-lt-bg-10: #f490b1;\n  --clr-lt-bg-11: #a0a8da;\n  --clr-lt-bg-12: #ffdf80;\n  --clr-lt-bg-13: #bcaaa4;\n  --clr-lt-bg-14: #80deea;\n  --clr-lt-bg-15: #cd92d8;\n\n  /* Letter Tile Dark Backgrounds (dk-bg) */\n  --clr-dk-bg-0: #c72929;\n  --clr-dk-bg-1: #ad1457;\n  --clr-dk-bg-2: #681b98;\n  --clr-dk-bg-3: #4527a0;\n  --clr-dk-bg-4: #293594;\n  --clr-dk-bg-5: #1565c1;\n  --clr-dk-bg-6: #0277bb;\n  --clr-dk-bg-7: #00838f;\n  --clr-dk-bg-8: #006b5f;\n  --clr-dk-bg-9: #2f7f33;\n  --clr-dk-bg-10: #54892f;\n  --clr-dk-bg-11: #9e9e24;\n  --clr-dk-bg-12: #f9a824;\n  --clr-dk-bg-13: #ff9100;\n  --clr-dk-bg-14: #f06c00;\n  --clr-dk-bg-15: #d54215;\n\n  /* Letter Tile Foreground Colors (lt-fg) */\n  --clr-lt-fg-0: var(--clr-lt-bg-0); /* Use same as bg, as these are for text, will follow light-dark */\n  --clr-lt-fg-1: var(--clr-lt-bg-1);\n  --clr-lt-fg-2: var(--clr-lt-bg-2);\n  --clr-lt-fg-3: var(--clr-lt-bg-3);\n  --clr-lt-fg-4: var(--clr-lt-bg-4);\n  --clr-lt-fg-5: var(--clr-lt-bg-5);\n  --clr-lt-fg-6: var(--clr-lt-bg-6);\n  --clr-lt-fg-7: var(--clr-lt-bg-7);\n  --clr-lt-fg-8: var(--clr-lt-bg-8);\n  --clr-lt-fg-9: var(--clr-lt-bg-9);\n  --clr-lt-fg-10: var(--clr-lt-bg-10);\n  --clr-lt-fg-11: var(--clr-lt-bg-11);\n  --clr-lt-fg-12: var(--clr-lt-bg-12);\n  --clr-lt-fg-13: var(--clr-lt-bg-13);\n  --clr-lt-fg-14: var(--clr-lt-bg-14);\n  --clr-lt-fg-15: var(--clr-lt-bg-15);\n\n  /* Letter Tile Dark Foreground Colors (dk-fg) */\n  --clr-dk-fg-0: var(--clr-dk-bg-0); /* Use same as bg, as these are for text, will follow light-dark */\n  --clr-dk-fg-1: var(--clr-dk-bg-1);\n  --clr-dk-fg-2: var(--clr-dk-bg-2);\n  --clr-dk-fg-3: var(--clr-dk-bg-3);\n  --clr-dk-fg-4: var(--clr-dk-bg-4);\n  --clr-dk-fg-5: var(--clr-dk-bg-5);\n  --clr-dk-fg-6: var(--clr-dk-bg-6);\n  --clr-dk-fg-7: var(--clr-dk-bg-7);\n  --clr-dk-fg-8: var(--clr-dk-bg-8);\n  --clr-dk-fg-9: var(--clr-dk-bg-9);\n  --clr-dk-fg-10: var(--clr-dk-bg-10);\n  --clr-dk-fg-11: var(--clr-dk-bg-11);\n  --clr-dk-fg-12: var(--clr-dk-bg-12);\n  --clr-dk-fg-13: var(--clr-dk-bg-13);\n  --clr-dk-fg-14: var(--clr-dk-bg-14);\n  --clr-dk-fg-15: var(--clr-dk-bg-15);\n}\n\n* {\n  box-sizing: border-box;\n  padding: 0;\n  margin: 0;\n  font-family: Roboto, Arial, sans-serif;\n  text-rendering: optimizeLegibility;\n  scrollbar-width: thin;\n  scrollbar-color: var(--clr-scrollbar-thumb) var(--clr-scrollbar-track);\n}\n\n/* Basic elements defined */\n\nhtml, body {\n  height: 100%;\n  width: 100%;\n  height: 100dvh;\n  width: 100dvw;\n  font-size: 10pt; /* 13.33 px/rem */\n  color: var(--clr-text-primary);\n  overflow: hidden;\n  background-color: var(--clr-body-background);\n  box-shadow: inset 0 10rem var(--clr-header-stripe-bg); /* the deep-plue stripe accross the top */\n}\n\ntt {\n  font-family: 'Roboto Mono', Courier, monospace;\n}\n\na {\n  color: var(--clr-primary-accent);\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: var(--clr-primary-accent-hover);\n  text-decoration: underline;\n}\n\na.danger {\n  color: var(--clr-danger-text);\n}\na.danger:hover,\na.danger:focus {\n  color: var(--clr-danger-text-hover);\n}\n\na.gray:hover,\na.gray:focus {\n  color: var(--clr-text-tertiary);\n}\n\nform {\n  font-size: 1.1rem;\n  padding: 0.5rem 0.75rem;\n  line-height: 1.5;\n}\n\nlabel {\n  font-size: 1.1rem;\n  margin-right: auto;\n}\n\nlabel.small {\n  color: var(--clr-primary-action);\n  font-size: 0.95rem;\n}\n\nlabel.large {\n  color: var(--clr-primary-action);\n  font-size: 1.1rem;\n}\n\nlabel.invalid {\n  color: var(--clr-danger-text);\n}\n\nimg.avatar {\n  width: 100%;\n  height: 100%;\n  border-radius: 50%;\n}\n\nimg.avatar.self {\n  padding: 7%;\n}\n\n/* Input fields and buttons */\n\nbutton {\n  display: inline-block;\n  font-family: inherit;\n  font-size: 1.05rem;\n  height: 2.2rem;\n  line-height: 2.2rem;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  border: 1px solid var(--clr-transparent);\n  white-space: nowrap;\n  padding-left: 1.2rem;\n  padding-right: 1.2rem;\n  border-radius: 4px;\n  box-shadow: 0 1px 3px 0 var(--clr-shadow-button);\n  text-transform: uppercase;\n  min-width: 5rem;\n  margin: 0 0.35rem 0 0.35rem;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n  opacity: 0.65;\n  box-shadow: none;\n  filter: grayscale(50%);\n}\n\nbutton.round {\n  border-radius: 50%;\n  width: 3rem;\n  height: 3rem;\n  padding: 0;\n  margin: 0;\n  line-height: 3.5rem;\n  outline: none; /* otherwise a square outline is shown */\n  box-shadow: 0 2px 0.5rem 0 var(--clr-shadow-button);\n  z-index: 2;\n}\n\nbutton.round.small {\n  width: 2rem;\n  height: 2rem;\n  line-height: 2rem;\n  box-shadow: 0 2px 0.35rem 0 var(--clr-shadow-button);\n}\n\nbutton:hover:not([disabled]), button:active:not([disabled]) {\n  color: var(--clr-bright);\n}\nbutton:active {\n  box-shadow: inset 0 3px 0.5rem var(--clr-shadow-button-inset-active);\n}\nbutton:active.round.small {\n  box-shadow: inset 0 2px 0.35rem var(--clr-shadow-button-inset-active);\n}\n\nbutton.primary {\n  background-color: var(--clr-button-primary-bg);\n  color: var(--clr-button-primary-text);\n}\nbutton.primary:hover:not([disabled]), button.primary:active:not([disabled]) {\n  background-color: var(--clr-button-primary-hover-bg);\n}\n\nbutton.secondary {\n  background-color: var(--clr-button-secondary-bg);\n  color: var(--clr-button-secondary-text);\n}\nbutton.secondary:hover:not([disabled]), button.secondary:active:not([disabled]) {\n  background-color: var(--clr-button-secondary-hover-bg);\n}\n\nbutton.outline {\n  background-color: var(--clr-transparent);\n  color: var(--clr-button-outline-text);\n  border: 1px solid var(--clr-button-outline-border);\n  box-shadow: none;\n}\nbutton.outline:hover:not([disabled]), button.outline:active:not([disabled]) {\n  color: var(--clr-button-outline-text);\n  background-color: var(--clr-button-outline-hover-bg);\n}\n\nbutton.danger {\n  background-color: var(--clr-button-danger-bg);\n  color: var(--clr-button-danger-text);\n}\nbutton.danger:hover:not([disabled]), button.danger:active:not([disabled]) {\n  background-color: var(--clr-button-danger-hover-bg);\n}\n\nbutton.positive {\n  background-color: var(--clr-button-positive-bg);\n  color: var(--clr-button-positive-text);\n}\nbutton.positive:hover:not([disabled]), button.positive:active:not([disabled]) {\n  background-color: var(--clr-button-positive-hover-bg);\n}\n\ntextarea, input {\n  font-family: inherit;\n  font-size: 1.1rem;\n  background: var(--clr-transparent);\n  border: none;\n  margin: 0.25rem 0;\n  padding: 0 0.125rem;\n  outline: none;\n  color: var(--clr-input-text);\n}\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"password\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\ntextarea {\n  height: 2.5rem;\n  border-bottom: 1px solid var(--clr-input-border);\n  box-shadow: 0 1px 0 var(--clr-input-shadow);\n  transition: all 0.1s ease-in-out, height 0s;\n}\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"password\"],\ninput[type=\"tel\"],\ntextarea {\n  width: 100%;\n}\n\ntextarea:focus,\ninput[type=\"text\"]:focus,\ninput[type=\"email\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"search\"]:focus,\ninput[type=\"tel\"]:focus {\n  border-bottom: 1px solid var(--clr-input-border-focus);\n  box-shadow: 0 1px 0 var(--clr-input-shadow-focus);\n}\n\ntextarea.invalid,\ninput[type=\"text\"].invalid,\ninput[type=\"email\"].invalid,\ninput[type=\"password\"].invalid,\ninput[type=\"search\"].invalid,\ninput[type=\"tel\"].invalid {\n  border-bottom: 1px solid var(--clr-input-invalid-border);\n  box-shadow: 0 1px 0 var(--clr-input-invalid-shadow);\n}\n\ninput[type=\"text\"]::placeholder,\ninput[type=\"email\"]::placeholder,\ninput[type=\"password\"]::placeholder,\ninput[type=\"search\"]::placeholder,\ninput[type=\"tel\"]::placeholder,\ntextarea::placeholder {\n  color: var(--clr-input-placeholder-text);\n  font-weight: lighter;\n}\n\ninput[type=\"text\"].with-icon-right,\ninput[type=\"password\"].with-icon-right {\n  margin-right:-2rem;\n  padding-right:2rem;\n}\n\ninput[type=\"text\"].with-icon-left,\ninput[type=\"password\"].with-icon-left {\n  margin-left:-1.45rem;\n  padding-left:1.75rem;\n}\n\ntextarea {\n  resize: none;\n  padding-top: 0.45rem;\n}\n\ninput[type=\"range\"] {\n  width: 90%;\n}\n\noption {\n  padding: 0;\n}\n\ndatalist {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  width: 100%;\n}\n\n/* END of input and buttons */\n\n/* BEGIN scrollbar styling.  */\n\n/* Chrome & other webkit browsers */\n::-webkit-scrollbar {\n  width: 0.6rem;\n}\n\n::-webkit-scrollbar-track {\n  -webkit-box-shadow: inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);\n  box-shadow: inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);\n  background-color: var(--clr-scrollbar-track);\n}\n\n::-webkit-scrollbar-thumb {\n  background-color: var(--clr-scrollbar-thumb);\n}\n\n/* END of Scrollbar styling.  */\n\n/* BEGIN Popup/dropdown menu */\n\nul.menu {\n  position: absolute;\n  list-style: none;\n  width: 12rem;\n  border-radius: 0.2rem;\n  padding-top: 0.35rem;\n  padding-bottom: 0.35rem;\n  box-shadow: 0 1px 6px var(--clr-shadow-dialog);\n  background-color: var(--clr-bright);\n  z-index: 4;\n}\n\nul.menu > li {\n  padding: 0.75rem 0.75rem 0.75rem 1.25rem;\n  cursor: pointer;\n}\n\nul.menu > li:hover {\n  background-color: var(--clr-menu-item-hover-bg);\n}\n\nul.menu > li.separator {\n  padding: 0;\n  margin: 2px;\n  height: 1px;\n  background-color: var(--clr-border-light);\n}\n\nul.menu > li.separator:hover {\n  background-color: var(--clr-border-light);\n}\n\nul.menu > li.disabled {\n  pointer-events: none;\n  opacity: 0.6;\n}\n\n/* The down arrow head - trigger for context menu */\n.menuTrigger {\n  position: absolute;\n  right: 0.25rem;\n  width: 1.4rem;\n  height: 1.4rem;\n  line-height: 1.4rem;\n  border-radius: 0.7rem;\n  text-align: center;\n  opacity: 0;\n  background-color: inherit;\n  user-select: none;\n}\n.menuTrigger a {\n  color: var(--clr-text-secondary);\n}\n\nli .menuTrigger {\n  top: 0.25rem;\n}\nli:hover .menuTrigger {\n  opacity: 0.9;\n}\nli:hover .menuTrigger a {\n  color: var(--clr-text-secondary);\n}\n\n/* END popup/dropdown menu */\n\n/* Begin Alert: modal window with message and buttons. */\ndiv.alert-container {\n  position: absolute;\n  display: flex;\n  padding: 1rem;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background: var(--clr-alert-overlay-bg);\n  z-index: 3;\n}\n\ndiv.alert {\n  position: relative;\n  background-color: var(--clr-bright);\n  box-shadow: 0.15rem 0.15rem 1.5rem var(--clr-shadow-dialog);\n  padding: 1rem;\n  border-radius: 0.3rem;\n  margin: auto 2rem auto 2rem;\n  width: fit-content;\n  height: min-content;\n  min-width: 16rem;\n  max-width: 24rem;\n  max-height: 40rem;\n  overflow: hidden;\n}\n\ndiv.alert-container .title {\n  position: relative;\n  color: var(--clr-primary-accent);\n  font-size: 1.2rem;\n  font-weight: 500;\n  width: 100%;\n  padding: 0 0 0.35rem 0;\n}\n\ndiv.alert-container .title.with-control {\n  position: relative;\n  display: flex;\n  padding: 0.5rem 0.5rem 0 0.5rem;\n  align-items: center;\n  flex: none;\n  justify-content: space-between;\n}\n\ndiv.alert-container .content {\n  position: relative;\n  padding: 0.5rem 0 0.5rem 0;\n}\n/* END Alert */\n\n/* BEGIN trusted badges with legend */\ndiv.trusted-badge {\n  margin: 0.25rem 0;\n}\n/* END trusted badges */\n\n/* Generic text colors */\n.blue {\n  color: var(--clr-primary-accent)!important; /* blue 500 */\n}\n.lt-blue {\n  color: var(--clr-lt-fg-1)!important; /* blue 300, using lt-fg-1 which is #90caf9 */\n}\n\n.orange {\n  color: var(--clr-std-orange)!important;\n}\n\n.verified-color {\n  color: var(--clr-verified-accent)!important; /* lt-blue 500 */\n}\n\n.staff-color {\n  color: var(--clr-staff-accent)!important; /* light green 700 */\n}\n\n.danger-color {\n  color: var(--clr-warning-accent)!important; /* amber 500 */\n}\n\n.green {\n  color: light-dark(#388e3c, #1a9a1d); /* green 700 */\n}\n\n.white {\n  color: var(--clr-bright)!important; /* 100% white */\n}\n\n.red {\n  color: var(--clr-danger-text)!important; /* red 700 */\n}\n\n/* Color of an inverted icon badges */\n.badge-inv {\n  color: var(--clr-badge-inv)!important;\n}\n\n.gray {\n  color: var(--clr-text-secondary)!important;\n}\n\n.light-gray {\n  color: var(--clr-text-placeholder)!important;\n}\n\n.large {\n  font-size: 120%;\n}\n\n/* Other universal style components */\n.small {\n  font-size: 90%;\n}\n\n.float-right {\n  position: absolute;\n  right: 0.5rem;\n}\n\n.hr {\n  display: block;\n  width: 100%;\n  height: 0.45rem;\n  min-height: 0.3rem;\n  background-color: var(--clr-background-light-gray);\n  box-shadow: inset 0 0.25rem 0.25rem -0.25rem var(--clr-shadow-hr-inset),\n    inset 0 -0.25rem 0.25rem -0.25rem var(--clr-shadow-hr-inset);\n}\n\n.hr.thin {\n  height: 0.015rem;\n}\n\n/* Vertical divider line */\n.divider {\n  display: inline-block;\n  width: 1px;\n  margin: 0 0.25rem;\n  border-left: var(--clr-border-muted) 1.5px groove;\n}\n\n.ellipsized {\n  overflow-x: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.flat-button {\n  display: flex;\n  align-items: center;\n  margin: 0.15rem 0.35rem;\n  height: 2em;\n  line-height: 2em;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  white-space: nowrap;\n  text-transform: uppercase;\n  background-color: var(--clr-bright);\n  z-index: 1;\n}\n.flat-button:hover,\n.flat-button:focus {\n  text-decoration: none;\n}\n\n.flat-button.disabled,\n.flat-button.disabled:hover,\n.flat-button.disabled:focus {\n  color: var(--clr-primary-accent);\n  cursor: default;\n  opacity: 0.75;\n  filter: grayscale(75%);\n}\n\n.flat-button.faux {\n  display: inline-block;\n  height: 1.4em;\n  line-height: 1.4em;\n  text-transform: none;\n  padding: 0 .35rem;\n  margin: 0.15rem;\n  border: 1px solid var(--clr-text-tertiary);\n  border-radius: 3px;\n  background-color: var(--clr-background-extra-light-gray);\n}\n\n.action-button {\n  display: block;\n  position: absolute;\n  color: var(--clr-text-secondary);\n  font-size: 1.8rem;\n  background-color: var(--clr-background-off-white);\n  border-radius: 50%;\n  width: 3.25rem;\n  height: 3.25rem;\n  min-width: unset;\n  min-height: unset;\n  padding: 0;\n  margin: 0;\n  outline: none; /* otherwise a square outline is shown */\n  box-shadow: 0 2px 0.5rem 0 var(--clr-shadow-button);\n  transition: all 150ms;\n  z-index: 2;\n}\n\n.action-button:focus,\n.action-button:hover,\n.action-button:hover:not([disabled]),\n.action-button:active:not([disabled]) {\n  color: var(--clr-text-tertiary-activated);\n  background-color: var(--clr-primary-action-hover);\n}\n.action-button:active {\n  color: var(--clr-text-tertiary-activated);\n  background-color: var(--clr-primary-action);\n}\n\n.action-button.hidden {\n  width: 1px;\n  height: 1px;\n  font-size: 1px;\n  line-height: 1px;\n  right: 2.625rem;\n  bottom: 2.625rem;\n  opacity: 0;\n}\n\n/* Element which can take focus but shows no outline */\n.group-focus {\n  outline: none;\n}\n\n/* END generic text colors */\n\n/* END of basic elements */\n\n#mountPoint {\n  height: 100%;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Top-level application layout style: sidepanel + main view */\n#noscript-message {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  max-width: 30rem;\n  overflow: hidden;\n  margin-top: 5rem;\n  margin-left: auto;\n  margin-right: auto;\n  border-radius: 0.25rem;\n  box-shadow: 1px 2px 0.3rem var(--clr-shadow-gray-strong);\n  background-color: var(--clr-bright);\n}\n\n#noscript-title {\n  padding: 1rem;\n  font-size: 120%;\n  font-weight: bolder;\n  background-color: var(--clr-primary-accent); /* blue 500 */\n  color: var(--clr-primary-light-blue); /* light-blue 100 */\n}\n\n#noscript-content {\n  padding: 1rem;\n}\n\n#app-container {\n  position: relative;\n  display: flex;\n  height: 100%;\n  max-width: 84rem;\n  overflow: hidden;\n  margin-left: auto;\n  margin-right: auto;\n  border-radius: 0.25rem;\n  box-shadow: 1px 2px 0.3rem var(--clr-shadow-gray-strong);\n  background-color: var(--clr-bright);\n}\n\n#sidepanel {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 0;\n  flex-shrink: 0.3;\n  width: 24rem;\n  min-width: 18rem;\n  height: 100%;\n}\n\n#topic-view {\n  position: relative;\n  display: flex;\n  overflow-x: hidden;\n  flex-direction: column;\n  width: 100%;\n  height: 100%;\n}\n\n#info-view {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 0;\n  flex-shrink: 0.3;\n  width: 24rem;\n  min-width: 18rem;\n  height: 100%;\n}\n\n/* Generic announcement text, centered vertically and horizontally */\n.center-medium-text {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  font-size: 1.4rem;\n}\n\n/* Class to alternatively hide sidepanel/topic-view/info-view */\n.nodisplay {\n  display: none!important;\n}\n\n/* Quoted div */\n.quoted {\n  margin-left: 1rem;\n}\n\n/* Extra space on the right */\n.space-right {\n  margin-right: 0.25rem;\n}\n\n/* Container with whitish background and rounded corners */\n.rounded-container {\n  position: relative;\n  background-color: var(--clr-background-off-white);\n  border-radius: 0.1rem;\n  padding: 0.25rem;\n  margin: 0.25rem;\n}\n\n/* BEGIN InPlaceEdit styles */\nspan.in-place-edit, div.in-place-edit {\n  display: inline-block;\n  font-family: inherit;\n  font-size: 1rem;\n  margin: 0.25rem 0.125rem 0 0.125rem;\n  width: 100%;\n  vertical-align: baseline;\n  border-bottom: 1px dashed var(--clr-border-muted);\n  cursor: pointer;\n}\n\n.in-place-edit.short {\n  display: inline-flex;\n  align-items: center;\n  font-size: 1.1rem;\n  height: 2.5rem;\n  line-height: 2.25;\n  white-space: nowrap;\n}\n\n.in-place-edit.disabled {\n  border-bottom: none;\n  cursor: default;\n  color: var(--clr-text-disabled);\n}\n\n.in-place-edit.placeholder {\n  color: var(--clr-text-placeholder);\n}\n\n.in-place-edit span {\n  display: inline-block;\n}\n\n.in-place-edit.short span {\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  width: 100%;\n}\n\n.in-place-edit .material-icons {\n  display: inline-block;\n}\n\n.material-icons.invalid {\n  color: var(--clr-error-text-muted);\n}\n\ntextarea.in-place-edit {\n  height: unset;\n  font-size: unset;\n}\n\ninput.in-place-edit.invalid {\n  color: var(--clr-error-text-muted);\n}\n\n/* END of InPlaceEdit styles */\n\ntable.permission-editor {\n  width: 100%;\n}\n\ntable.permission-editor td {\n  margin: 0.35rem 0;\n  font-size: 1.1rem;\n  vertical-align: middle;\n}\n\ntable.permission-editor td.checkbox {\n  text-align: center;\n  color: var(--clr-text-tertiary);\n}\n\n.permission-editor .material-icons {\n  font-size: 1.3rem;\n  line-height: 1.3rem;\n}\n\n.material-icons.clickable {\n  cursor: pointer;\n  border-bottom: none;\n}\n\n.clickable {\n  border-bottom: 1px dashed var(--clr-border-muted);\n  cursor: pointer;\n}\n\n.image-clickable {\n  cursor: pointer;\n}\n\n.clean-clickable {\n  cursor: pointer;\n}\n\n\n/* END of top-level layout */\n\n/* Sidepanel styles */\n.panel-title {\n  font-size: 1.4rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.panel-title.deleted {\n  text-decoration: line-through;\n}\n\n.caption-panel {\n  display: flex;\n  align-items: center;\n  flex: none;\n  padding: 0.5rem;\n  height: var(--caption-panel-height);\n  white-space: nowrap;\n  box-shadow: 0 1px 2px var(--clr-shadow-gray-strong);\n  overflow-x: hidden;\n  z-index: 1; /* otherwise the shadow becomes invisible */\n}\n\n.dialog-buttons {\n  display: flex;\n  padding: 0.5rem;\n  justify-content: flex-end;\n  align-items: center;\n}\n\n.dialog-buttons button {\n  margin: 0 0.5rem;\n}\n\n.avatar-box {\n  position: relative;\n  flex-grow: 0;\n  flex-shrink: 0;\n}\n\n.bot-form {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  min-width: 8rem;\n  line-height: 2rem;\n}\n.bot-form div {\n  min-height: 2rem;\n  vertical-align: middle;\n}\n.bot-form button {\n  display: inline-block;\n  margin: 0.15rem;\n  background-color: var(--clr-blue-wash-light);\n  color: var(--clr-primary-accent); /* blue 500 */\n  font-size: inherit;\n  text-transform: none;\n  height: 2rem;\n  line-height: 2rem;\n}\n.bot-form > div > button {\n  width: auto;\n}\n.bot-form button:focus,\n.bot-form button:hover,\n.bot-form button:active {\n  outline: 0;\n  color: var(--clr-dk-fg-5); /* #1565C0, a darker blue */\n  background-color: var(--clr-primary-wash);\n}\n\n#side-caption-panel {\n  background-color: var(--clr-primary-accent); /* blue 500 */\n  color: var(--clr-primary-light-blue); /* light-blue 100 */\n}\n\n#side-caption-panel a {\n  color: var(--clr-primary-light-blue); /* blue 100 */\n  padding-left: 0.5rem;\n  line-height: 1;\n}\n\n#side-caption-panel :hover {\n  color: var(--clr-bright);\n}\n\n#sidepanel-title {\n  margin-right: auto;\n  margin-left: 0.5rem;\n}\n\n#self-avatar {\n  width: 3rem;\n  min-width: 3rem;\n  height: 3rem;\n  flex: none;\n  border-radius: 50%;\n}\n\n#self-avatar.avatar-box {\n  font-size: 1.8rem;\n}\n\n/* Application settings */\n#settings-form ul {\n  list-style: none;\n}\n\n#settings-form li {\n  vertical-align: middle;\n}\n#settings-form label {\n  display: inline-block;\n  padding-left: 0.5rem;\n}\n\ninput#host-name {\n  width: 100%;\n}\n\n/* Input with a search icon on the left */\ninput.search {\n  text-indent: 1.4rem;\n}\ni.search {\n  position: absolute;\n  left: .6rem;\n}\n\n/* Area which displays an error message */\n.info-box {\n  position: relative;\n  display: none;\n  overflow: hidden;\n  padding: 1rem 1.5rem 0.75rem 0.5rem;\n}\n\n.info-box > span {\n  line-height: 1.35rem;\n}\n\n.info-box .cancel {\n  position: absolute;\n  right: 0.25rem;\n  top: 0.5rem;\n}\n\n.info-box.error {\n  display: flex;\n  background-color: var(--clr-error-bg-light);\n  border-bottom: 1px solid var(--clr-error-border-light);\n  color: var(--clr-error-text-dark);\n}\n.info-box.warning {\n  display: flex;\n  background-color: var(--clr-warning-bg-light);\n  border-bottom: 1px solid var(--clr-warning-border-light);\n  color: var(--clr-warning-text-dark);\n}\n.info-box.info {\n  display: flex;\n  background-color: var(--clr-info-bg-light);\n  border-bottom: 1px solid var(--clr-info-border-light);\n  color: var(--clr-info-text-dark);\n}\n\n.info-box .cancel .material-icons {\n  font-size: 1rem;\n  color: var(--clr-text-secondary);\n}\n.info-box.error .cancel .material-icons {\n  color: var(--clr-error-text-dark);\n}\n.info-box .icon {\n  display: block;\n  margin-right: 0.5rem;\n}\n.info-box .icon .material-icons {\n  font-size: 1.5rem;\n}\n.info-box.warning .icon .material-icons {\n  color: var(--clr-warning-icon);\n}\n.info-box.error .icon .material-icons {\n  color: var(--clr-error-icon);\n}\n.info-box.info .icon .material-icons {\n  color: var(--clr-info-text-dark);\n}\n/* List of contacts */\n.flex-column {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  overflow-x: hidden;\n}\n\n.flex-column.narrow {\n  height: auto;\n}\n\n.scrollable-panel {\n  overflow-x: hidden;\n  overflow-y: auto;\n  margin-top: 0.25rem;\n  margin-bottom: auto;\n  height: 100%;\n  scroll-behavior: smooth;\n}\n\n.contact-box {\n  list-style: none;\n  overflow-x: hidden;\n}\n\n.contact-box > li {\n  position: relative;\n  display: flex;\n  padding: 0.35rem 0.25rem 0.5rem 0.35rem;\n  min-height: 3.75rem;\n  flex-grow: 0;\n  flex-shrink: 0;\n  /* partial bottom border */\n  background: linear-gradient(to right, var(--clr-transparent) 3.5rem, var(--clr-background-extra-light-gray) 1px, var(--clr-background-extra-light-gray) 100%) 0 100% / 100% 1px no-repeat, var(--clr-bright);\n  overflow-x: hidden;\n  cursor: pointer;\n}\n\n.contact-box.small > li {\n  padding: 0.25rem 0.25rem 0.35rem 0.35rem;\n  min-height: 2.5rem;\n}\n\n.contact-box > li:last-child {\n  /* remove border from the last contact */\n  background: var(--clr-bright);\n}\n.contact-box > li:hover {\n  background-color: var(--clr-background-blue-gray-50); /* blue-gray 50 highlight */\n}\n.contact-box > li.selected {\n  background-color: var(--clr-background-blue-gray-100); /* blue-gray 100 highlight */\n}\n.contact-box > li.tpinned {\n  border-right: 1.5px solid var(--clr-secondary-accent);\n  background-color: var(--clr-background-blue-gray-75); /* blue-gray 75 highlight */\n}\n.contact-box > li.action {\n  min-height: 2.5rem;\n  border-bottom: none;\n}\n\n.contact-box .text-box {\n  overflow-x: hidden;\n}\n\n.contact-box .contact-title {\n  font-size: 1.05rem;\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  white-space: nowrap;\n}\n\n.contact-box .contact-title.deleted {\n  opacity: 0.66;\n  text-decoration: line-through;\n  text-decoration-thickness: 0.5px;\n}\n\n.contact-box .contact-comment {\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  white-space: nowrap;\n  font-weight: lighter;\n}\n\n.contact-box .contact-comment > span {\n  overflow-x: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.contact-box .contact-comment b {\n  font-weight: bolder;\n}\n\n.contact-box .contact-comment .material-icons {\n  margin-bottom: 0.2rem;\n  color: light-dark(#777, #666); /* #777 */\n}\n\n/* Avatar and online-offline indicator */\n.contact-box .avatar-box {\n  position: relative;\n  margin-right: 0.35rem;\n  width: 3rem;\n  min-width: 3rem;\n  height: 3rem;\n  min-height: 3rem;\n  font-size: 1.8rem;\n  overflow: hidden;\n  padding: 0;\n}\n.contact-box .avatar {\n  width: 3rem;\n  height: 3rem;\n  border-radius: 50%;\n}\n\n.contact-box.small .avatar-box {\n  width: 2rem;\n  min-width: 2rem;\n  height: 2rem;\n  min-height: 2rem;\n  font-size: 1.2rem;\n}\n.contact-box.small .avatar {\n  width: 2rem;\n  height: 2rem;\n}\n\n.avatar.deleted {\n  opacity: 0.75;\n  filter: grayscale(1);\n}\n\n.contact-box .avatar-box > .material-icons {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-around;\n  font-size: 2.4rem;\n  line-height: 3rem;\n}\n.contact-box .avatar-box > .checkmark.material-icons {\n  line-height: unset;\n}\n.contact-box.small .avatar-box > .material-icons {\n  font-size: 1.6rem;\n  line-height: 2rem;\n}\n.contact-box .text-box {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-around;\n}\n.contact-box .text-box > div {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n\n.contact-box .action-text {\n  text-align: center;\n  font-size: 0.95rem;\n  line-height: 2.5rem;\n  margin: 0 auto 0 auto;\n  cursor: pointer;\n}\n\nimg.channel {\n  width: 1.25rem;\n  height: 1.25rem;\n  vertical-align: middle;\n  margin-left: 0.3rem;\n}\n\n.large img.channel {\n  width: 1.45rem;\n  height: 1.45rem;\n  margin-left: 0.5rem;\n  margin-bottom: 0.15rem;\n}\n\n/* Online-offline indicator positioned inside avatar-box */\n.avatar-box .online, .offline {\n  position: absolute;\n  width: 0.75rem;\n  min-width: 0.75rem;\n  height: 0.75rem;\n  min-height: 0.75rem;\n  flex-shrink: 0;\n  border-radius: 50%;\n  right: 0;\n  bottom: 0.1rem;\n}\n.avatar-box .online {\n  background-color: var(--clr-online); /* Specific green for online status */\n}\n.avatar-box .offline {\n  background-color: var(--clr-offline); /* #C0C0C0 (silver) or #ccc */\n}\n\n/* Typing indicator: animation of the online dot */\n.online.typing {\n  animation: typing 0.5s infinite;\n}\n@keyframes typing {\n  0%, 100% {\n    transform: translateX(0);\n  }\n  50% {\n    transform: translateX(-0.3rem);\n  }\n}\n\n.contact-box .checkmark.material-icons {\n  width: 1.5rem;\n  height: 1.5rem;\n  font-size: 1.5rem;\n  color: var(--clr-secondary-accent);\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  background-color: var(--clr-bright);\n  overflow: visible;\n  border: 0.0px solid var(--clr-transparent);\n  padding-left: 0.5px;\n}\n\n.contact-box .deleted.material-icons {\n  width: 1.5rem;\n  height: 1.5rem;\n  font-size: 1.5rem;\n  color: var(--clr-text-tertiary);\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  background-color: var(--clr-bright);\n}\n\n/* END of avatar box */\n\n#add-topic {\n  position: absolute;\n  right: 1rem;\n  bottom: 1rem;\n}\n\n/* Various forms inside a panel (signup form, new topic form) */\n.panel-form {\n  display: flex;\n  position: relative;\n  flex-direction: column;\n  padding: 0;\n}\n\n.panel-form-row {\n  display: flex;\n  position: relative;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  line-height: 1.5;\n  flex-grow: 0;\n  flex-shrink: 0;\n}\n\n.panel-form-column {\n  display: flex;\n  position: relative;\n  flex-direction: column;\n  flex-grow: 0;\n  padding: 0.5rem 0.75rem;\n  line-height: 1.5;\n  overflow-x: clip;\n}\n\n/* Make sure padding is only applied at the top level panel */\n.panel-form-row > .panel-form-column,\n.panel-form-column > .panel-form-column {\n  padding: 0!important;\n  flex-grow: 1;\n}\n.panel-form-column > .panel-form-row,\n.panel-form-row > .panel-form-row {\n  padding: 0!important;\n}\n\n.panel-form-column > .group {\n  margin-top: 0.25rem;\n  margin-bottom: 0.25rem;\n}\n\n/* Styling of avatar upload control */\n.avatar-upload {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 0;\n  width: 10rem;\n  height: 10.5rem;\n  font-size: 4.5rem;\n  padding: 0;\n  margin: 0.25rem;\n}\n\n.avatar-upload.read-only {\n  height: auto;\n}\n\n.avatar-upload .clear-avatar {\n  position: absolute;\n  font-size: 1rem;\n  top: 0;\n  right: 0;\n  opacity: 0;\n  background-image: radial-gradient(var(--clr-bright) 40%, var(--clr-transparent) 75%);\n}\n\n.avatar-upload:hover .clear-avatar {\n  opacity: 1;\n}\n\n.avatar-upload .avatar-box {\n  position: relative;\n  width: 10rem;\n  height: 10rem;\n}\n\n.avatar-upload .avatar-box > .material-icons {\n  position: relative;\n  font-size: 4rem;\n  line-height: 10rem;\n  vertical-align: middle;\n}\n\n/* Clearfix */\n.avatar-upload:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n.avatar-upload .blank {\n  text-align: center;\n  vertical-align: middle;\n  border: 1px dashed var(--clr-text-tertiary);\n  font-size: 1rem;\n  flex-shrink: 0;\n  width: 10rem;\n  height: 10rem;\n  overflow: hidden;\n  color: var(--clr-text-tertiary);\n  line-height: 10rem;\n  border-radius: 50%;\n}\n\n.avatar-upload img.preview {\n  width: 10rem;\n  height: 10rem;\n  overflow: hidden;\n  border-radius: 50%;\n}\n\n.avatar-upload img.preview::before {\n  position: absolute;\n  content: \" \";\n  display: flex;\n  font-size: 0.9rem;\n  font-weight: lighter;\n  color: var(--clr-text-primary);\n  top: 0;\n  left: 0;\n  width: 10rem;\n  height: 10rem;\n  justify-content: center;\n  background: center no-repeat url(\"../img/broken_image.png\");\n  border-radius: 50%;\n}\n\n.avatar-upload .inputfile.hidden {\n  width: 0.1px;\n  height: 0.1px;\n  opacity: 0;\n  overflow: hidden;\n  position: absolute;\n}\n\n.avatar-upload .inputfile + label.round {\n  display: flex;\n  position: absolute;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  width: 3rem;\n  height: 3rem;\n  line-height: 3rem;\n  border-radius: 50%;\n  box-shadow: 0 1px 4px var(--clr-shadow-dialog); /* rgba(0,0,0,0.4) similar to menu */\n  bottom: 0;\n  right: 0;\n  background-color: var(--clr-background-off-white);\n  z-index: 1;\n}\n\n.avatar-upload .inputfile:focus + label.round {\n  outline: none;\n}\n\n.avatar-upload .inputfile:focus + label,\n.avatar-upload .inputfile + label:hover {\n  background-color: var(--clr-primary-wash);\n  color: var(--clr-primary-accent);\n}\n/* END of avatar upload */\n/* END of new account panel */\n/* END of sidepanel styles */\n\n/* Topic/messages view */\n#topic-caption-panel {\n  background-color: var(--clr-background-blue-gray-300);\n}\n#topic-caption-panel a {\n  color: var(--clr-text-secondary);\n  text-decoration: none;\n}\n\n#topic-caption-panel :hover {\n  color: var(--clr-dark);\n}\n\n#topic-caption-panel .avatar-box {\n  position: relative;\n  width: 3rem;\n  min-width: 3rem;\n  height: 3rem;\n  font-size: 1.8rem;\n  margin-right: 0.35rem;\n}\n\n#topic-caption-panel .avatar-box > .material-icons {\n  font-size: 2.4rem;\n  line-height: 3rem;\n}\n\n#topic-title-group {\n  overflow-x: hidden;\n}\n\n#hide-message-view {\n  display: block;\n  margin-right: 0.35rem;\n}\n\n#topic-users {\n  margin-left: auto;\n  margin-right: 1rem;\n  width: min-content;\n}\n\n#topic-users .avatar-box {\n  display: inline-block;\n  width: 1.8rem;\n  min-width: 1.8rem;\n  height: 1.8rem;\n  min-height: 1.8rem;\n  font-size: 1rem;\n  margin-right: 0.2rem;\n}\n\n#topic-users .avatar-box > .material-icons {\n  font-size: 1.4rem;\n  line-height: 1.8rem;\n}\n\n/* Overflow span \"+18 more\" */\n#topic-users > span {\n  line-height: 2rem;\n  vertical-align: top;\n}\n\n/* Div holding QR code */\n.qr-code {\n  align-self: center;\n}\n\n#messages-container {\n  position: relative;\n  overflow-y: hidden;\n  height: 100%;\n}\n\n\n#messages-container::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  background-color: var(--clr-background-blue-gray-50);\n  background-image: var(--wallpaper-url);\n  background-repeat: var(--wallpaper-repeat);\n  background-size: var(--wallpaper-size);\n  background-position: var(--wallpaper-position);\n  filter: blur(var(--wallpaper-blur))\n    invert(var(--wallpaper-invert))\n    brightness(var(--wallpaper-brightness));\n  pointer-events: none;\n  z-index: 0;\n}\n\n/* Dark mode wallpaper adjustments: image wallpaper *\n#messages-container.dark.wpimg::before {\n  filter: brightness(50%);\n}\n/* Dark mode wallpaper adjustments: pattern wallpaper *\n#messages-container.dark.wppatt::before {\n  filter: invert(1);\n}\n*/\n\n/* Scrollable panel where the messages are shown */\n#messages-panel {\n  position: relative;\n  padding: 0.75rem;\n  overflow-y: scroll;\n  height: 100%;\n}\n\n#write-only-background {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  background-image: repeating-linear-gradient(45deg, rgba(255,255,255,0.5), rgba(255,255,255,.5) 0.5rem,\n    rgba(255,255,255,.8) 0.5rem, rgba(255,255,255,.8) 1rem); /* Specific gradient, keep as is or break down further if these opacities are common */\n}\n\n#write-only-note {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  background-color: var(--clr-bright);\n  color: var(--clr-text-primary);\n  height: auto;\n  width: auto;\n  line-height: 2rem;\n  text-align: center;\n  padding: 0.75rem 1.25rem 0.75rem 1.25rem;\n  border-radius: 0.5rem;\n  box-shadow: 0 1px 0.5px var(--clr-shadow-button-inset-active); /* rgba(0, 0, 0, 0.12) */\n}\n\n#peer-messaging-disabled-note {\n  position: absolute;\n  left: 50%;\n  bottom: 4.3rem;\n  transform: translate(-50%);\n  background-color: var(--clr-bright);\n  color: var(--clr-text-primary);\n  width: fit-content;\n  line-height: 2rem;\n  text-align: center;\n  padding: 0.75rem 1.25rem 0.75rem 1.25rem;\n  border-radius: 0.5rem;\n  box-shadow: 0 1px 0.5px var(--clr-shadow-button-inset-active); /* rgba(0, 0, 0, 0.12) */\n}\n\n/* Footer-panel with the input for the new message */\n#send-message-panel {\n  display: flex;\n  align-items: center;\n  flex: none;\n  padding: 0.4rem 0.4rem 0.4rem 0.6rem;\n  background-color: var(--clr-background-blue-gray-50);\n  z-index: 2;\n  min-height: 4rem;\n}\n\n#send-message-panel #writing-disabled {\n  width: 100%;\n  text-align: center;\n  font-size: 1.2rem;\n}\n\n#send-message-wrapper {\n  background-color: var(--clr-background-blue-gray-50);\n  box-shadow: 0px -2px 3px -1px var(--clr-shadow-panel-divider); /* Faint shadow above panel */\n  z-index: 2;\n}\n\n#sendMessage {\n  overflow: hidden;\n  overflow-wrap: break-word;\n}\n\n#send-message-panel .material-icons {\n  min-width: 2rem;\n  font-size: 1.6rem;\n}\n\n#send-message-panel .material-icons.secondary, .material-icons.disabled {\n  color: var(--clr-text-tertiary)!important;\n}\n\n#send-message-panel .material-icons.secondary:hover {\n  color: var(--clr-primary-accent)!important;\n}\n\n/* The textarea where the message is entered. */\n#send-message-input {\n  overflow: hidden auto;\n  min-height: 2.5rem;\n  max-height: 6rem;\n}\n\n/* New chat invitation panel */\n\n.accept-invite-panel {\n  background-color: var(--clr-background-blue-gray-50);\n  box-shadow: 0px -2px 3px -1px var(--clr-shadow-panel-divider); /* Faint shadow above panel */\n  width: 100%;\n  z-index: 1;\n}\n\n.accept-invite-panel .title {\n  font-size: 1.2rem;\n  padding: 0.75rem;\n}\n\n.accept-invite-panel .footer {\n  background-color: var(--clr-background-off-white);\n  white-space: nowrap;\n  padding-bottom: 0.35rem;\n  text-align: center;\n}\n\n.accept-invite-panel button {\n  font-size: 1rem;\n  height: 2em;\n  line-height: 2em;\n  border: 1px solid var(--clr-transparent);\n  margin: 0.25rem;\n  box-shadow: 0 1px 2px 0 var(--clr-shadow-button);\n}\n\n/* END of chat invitation panel */\n\n/* A static panel shown when no topic is selected */\n#dummy-view {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: var(--clr-cyan-50);\n}\n#dummy-view a {\n  text-decoration: none;\n  display: block;\n  text-align: center;\n}\n\n#image-preview {\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n  background-color: var(--clr-overlay-white-strong);\n}\n\n\n#preview-caption-panel {\n  display: flex;\n  justify-content: space-between;\n  background-color: var(--clr-background-blue-gray-50);\n  box-shadow: 0 1px 2px var(--clr-shadow-silver-subtle); /* Faint shadow under the panel */\n  line-height: 2rem;\n  flex-shrink: 0;\n  flex-grow: 0;\n  height: var(--caption-panel-height);\n  padding: 1rem 0.75rem 0 0.75rem;\n  font-size: 120%;\n  z-index: 3;\n}\n\n#preview-caption-panel a {\n  color: var(--clr-text-secondary);\n  text-decoration: none;\n}\n\n#preview-caption-panel a:hover {\n  color: var(--clr-dark);\n}\n\n#image-preview-container {\n  display: flex;\n  justify-content: space-around;\n  align-items: center;\n  overflow: hidden;\n  background-color: var(--clr-gray-medium-bg);\n  width: 100%;\n  height: 100%;\n}\n\n#image-preview-footer {\n  display: flex;\n  justify-content: space-around;\n  height: 3.2rem;\n  line-height: 1.5rem;\n  background-color: var(--clr-background-blue-gray-50);\n  box-shadow: 0px -2px 3px -1px var(--clr-shadow-panel-divider); /* Faint shadow above panel */\n  flex-grow: 0;\n  flex-shrink: 0;\n  z-index: 1;\n}\n\n#image-preview-container .material-icons {\n  font-size: 6rem;\n}\n\n#image-preview-container .doc-card {\n  display: flex;\n  flex-direction: column;\n  overflow-x: hidden;\n  background-color: var(--clr-std-ltgray);\n  padding: 1rem;\n  border-radius: 0.5rem;\n  max-width: 30rem;\n}\n\n.doc-card .avatar-box {\n  width: 10rem;\n  height: 10rem;\n  font-size: 4.5rem;\n}\n\n.doc-card .avatar-box .material-icons {\n  line-height: 10rem;\n}\n\n/* Video-call related styles */\n\n#video-container {\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: var(--clr-overlay-white-strong);\n  z-index: 3;\n}\n\n#video-container.minimized {\n  left: auto;\n  top: 1rem;\n  right: 1rem;\n  width: 18rem;\n  height: 18rem;\n  background-color: unset;\n  user-select: none;\n  cursor: grab;\n  box-shadow: 0.15rem 0.15rem 1.5rem var(--clr-shadow-dialog);\n  border-radius: 0.5rem;\n}\n\n#controls {\n  position: absolute;\n  display: flex;\n  column-gap: 1rem;\n  align-items: center;\n  align-self: center;\n  justify-content: center;\n  bottom: 2.5rem;\n  z-index: 1;\n}\n\n#controls.minimized {\n  column-gap: 0.5rem;\n  bottom: 1.75rem;\n}\n\n.incoming-call #controls {\n  bottom: 1rem;\n}\n\n#controls button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 50%;\n  width: 4rem;\n  height: 4rem;\n  min-width: initial;\n  box-shadow: 0 3px 6px 0 var(--clr-shadow-button);\n}\n\n#controls.minimized button {\n  width: 2.75rem;\n  height: 2.75rem;\n  box-shadow: 0 2px 4px 0 var(--clr-shadow-button);\n}\n\n#controls button .material-icons {\n  font-size: 1.8rem;\n}\n\n#controls.minimized button .material-icons {\n  font-size: 1.4rem;\n}\n\nbutton.full-screen {\n  position: absolute;\n  top: 2rem;\n  left: 2rem;\n  z-index: 1;\n  width: 2.5rem;\n  height: 2.5rem;\n  border-radius: 0.5rem;\n  padding: 0;\n  box-shadow: none;\n  background-color: transparent;\n  min-width: unset;\n}\n\n.minimized button.full-screen {\n  top: 1rem;\n  left: 1rem;\n  width: 2rem;\n  height: 2rem;\n}\n\nbutton.full-screen:hover:not([disabled]), button:active:not([disabled]) {\n  color: var(--clr-text-secondary);\n}\n\nbutton.full-screen .material-icons {\n  font-size: x-large;\n}\n\n.minimized button.full-screen .material-icons {\n  font-size: large;\n}\n\n#video-container-panel {\n  position: relative;\n  height: 100%;\n  width: 100%;\n}\n\n.call-party {\n  background-color: var(--clr-background-extra-light-gray);\n  border-radius: 0.5rem;\n  border: 2px solid var(--clr-border-light);\n  overflow: hidden;\n}\n\n.call-party:hover {\n  border-color: var(--clr-primary-accent);\n}\n\n.minimized .call-party {\n  border-width: 1px;\n}\n\n.call-party.peer {\n  position: absolute;\n  top: 1rem;\n  left: 1rem;\n  right: 1rem;\n  bottom: 1rem;\n  z-index: 1;\n}\n\n.minimized .call-party.peer {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.call-party.self {\n  position: absolute;\n  right: 0.5rem;\n  bottom: 0.5rem;\n  width: 10rem;\n  height: 10rem;\n  z-index: 2;\n}\n\n.call-party.self[disabled] {\n  display: none;\n}\n\nvideo {\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n}\n\n.call-party.self video {\n  transform: scaleX(-1);\n}\n\n.call-party[disabled] video {\n  display: none;\n}\n\n.caller-card {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n}\n\n.caller-card .avatar-box {\n  width: 10rem;\n  height: 10rem;\n  font-size: 6rem;\n}\n\n.caller-card.pulse img.avatar,\n.caller-card.pulse .lettertile {\n  animation: active-call 1.5s linear infinite;\n}\n\n.caller-card .avatar-box .material-icons {\n  font-size: 6rem;\n  line-height: 1.6;\n}\n\n.minimized .caller-card .avatar-box {\n  width: 6rem;\n  height: 6rem;\n  font-size: 3.6rem;\n}\n\n/* Badge with \"You\" for current user or peer's name. */\n.call-party .caller-name {\n  max-width: 12rem;\n  padding: 0.15rem 0.5rem;\n  border-radius: 0.35rem;\n  z-index: 1;\n  text-shadow: 0 0 1px var(--clr-bright);\n  background-color: var(--clr-background-off-white);\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  white-space: nowrap;\n}\n\n.call-party.self .caller-name.inactive {\n  position: absolute;\n  bottom: 0.25rem;\n  right: 0.25rem;\n}\n\n.caller-card .caller-name {\n  font-size: larger;\n  margin-top: 0.5rem;\n}\n\n.caller-card .trusted-badge {\n  display: inline-block;\n}\n\n.call-party.peer .caller-name.inactive {\n  position: absolute;\n  font-size: larger;\n  left: 1rem;\n  bottom: 0.5rem;\n  margin: 0 auto;\n}\n\n.minimized .caller-name {\n  padding: 0.1rem 0.35rem;\n  border-radius: 0.25rem;\n  font-weight: lighter;\n}\n\n.incoming-call {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  background-color: var(--clr-bright);\n  box-shadow: 0.15rem 0.15rem 1.5rem var(--clr-shadow-dialog);\n  border-radius: 0.3rem;\n  margin: auto 2rem auto 2rem;\n  width: fit-content;\n  min-width: 16rem;\n  max-width: 24rem;\n}\n\n.incoming-call .caller-card {\n  position: relative;\n  top: initial;\n  left: initial;\n  width: 100%;\n  height: 100%;\n  padding: 4rem 3.5rem 5.5rem 3.5rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n}\n\n.incoming-call .caller-name {\n  padding: 0.15rem 0.5rem;\n  border-radius: 0.35rem;\n  z-index: 1;\n  text-shadow: 0 0 1px var(--clr-bright);\n  background-color: var(--clr-background-off-white);\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  white-space: nowrap;\n}\n\n.call-message {\n  display: flex;\n  flex-direction: row;\n}\n\n.call-message .duration {\n  font-weight: lighter;\n}\n\n#go-to-latest {\n  right: 1.5rem;\n  bottom: 1rem;\n}\n\n@keyframes active-call {\n  0% {\n    box-shadow:\n      0 0 0 0.1rem var(--clr-primary-accent-transparent-medium),\n      0 0 0 0.3rem var(--clr-primary-accent-transparent-medium),\n      0 0 0 0.5rem var(--clr-primary-accent-transparent-medium);\n  }\n  100% {\n    box-shadow:\n      0 0 0 0.4rem var(--clr-primary-accent-transparent-medium),\n      0 0 0 2rem rgba(33, 150, 243, 0), /* End with transparent */\n      0 0 0 3rem rgba(33, 150, 243, 0); /* End with transparent */\n  }\n}\n\n/* Talk bubbles */\n.chat-box {\n  list-style: none;\n  padding: 0 0 3.5rem 0;\n  margin: 0 0.5rem;\n  scroll-behavior: smooth;\n}\n\n/* Group chats have avatars on the left. Make left margin smaller */\n.chat-box.group {\n  margin-left: -0.4rem;\n}\n\n.chat-box li {\n  display: flex;\n  margin: 0;\n  padding: 0;\n  align-items: flex-end;\n}\n\n.chat-box .right {\n  justify-content: flex-end;\n}\n\n.bubble {\n  position: relative;\n  display: flex;\n  max-width: 36rem;\n  min-width: 9rem;\n  height: auto;\n  padding: 0.75rem 0.5rem 0.75rem 0.5rem;\n  margin: 0;\n  text-align: left;\n  color: var(--clr-bubble-text);\n  border-radius: 0.5rem;\n  transition: ease-out background-color 0.5s;\n  transition-delay: 0.3s;\n  filter: drop-shadow(0.5px 0.5px 0.7px var(--clr-shadow-bubble-drop));\n}\n\n.chat-box li.single {\n  margin-top: 0.25rem;\n  margin-bottom: 0.75rem;\n}\n\n.chat-box li.first {\n  margin-top: 0.25rem;\n  margin-bottom: 0.15rem;\n}\n\n.chat-box li.middle {\n  margin-top: 0.15rem;\n  margin-bottom: 0.15rem;\n}\n\n.chat-box li.last {\n  margin-top: 0.15rem;\n  margin-bottom: 0.75rem;\n}\n\n.left .bubble {\n  background-color: var(--clr-bubble-left-bg);\n  margin-right: 0.5rem;\n}\n\n.left.flash .bubble {\n  background-color: var(--clr-bubble-left-bg-flash);\n}\n\n.left .bubble.tip {\n  border-bottom-left-radius: 0;\n}\n\n.right .bubble {\n  background-color: var(--clr-bubble-right-bg);\n  margin-left: 1.75rem;\n}\n\n.right.flash .bubble {\n  background-color: var(--clr-bubble-right-bg-flash);\n}\n\n.right .bubble.tip {\n  border-bottom-right-radius: 0;\n}\n\n.chat-box .meta {\n  justify-content: center;\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.chat-box .meta .bubble {\n  color: var(--clr-bubble-meta-text);\n  min-width: unset;\n}\n\n.meta .bubble.deleted {\n  background-color: var(--clr-bubble-meta-deleted-bg);\n  padding: 0.75rem 0.75rem 0.5rem 0.75rem;\n}\n\n.meta .bubble.date {\n  font-size: smaller;\n  padding: 0.5rem 0.5rem 0.5rem 0.5rem;\n  background-color: var(--clr-bubble-meta-date-bg);\n  text-transform: uppercase;\n  user-select: none;\n}\n\n/* Left triangle placed bottom left flush. */\n.left .bubble.tip::before {\n  content: '';\n  position: absolute;\n  width: 0.85rem;\n  height: 0.85rem;\n  left: -0.8rem;\n  bottom: 0;\n  background-color: var(--clr-bubble-left-bg);\n  clip-path: polygon(100% 0, 0 110%, 100% 110%);\n  -webkit-clip-path: polygon(100% 0, 0 110%, 100% 110%);\n  border-bottom-left-radius: 0.3rem;\n  transition: ease-out background-color 0.5s;\n  transition-delay: 0.3s;\n}\n\n.left.flash .bubble.tip::before {\n  background-color: var(--clr-bubble-left-bg-flash);\n}\n\n/* Right triangle placed bottom right flush. */\n.right .bubble.tip::before {\n  content: '';\n  position: absolute;\n  width: 0.85rem;\n  height: 0.85rem;\n  left: 99.8%;\n  bottom: 0;\n  background-color: var(--clr-bubble-right-bg);\n  clip-path: polygon(0 0, 100% 110%, 0 110%);\n  -webkit-clip-path: polygon(0 0, 100% 110%, 0 110%);\n  border-bottom-right-radius: 0.3rem;\n  transition: ease-out background-color 0.5s;\n  transition-delay: 0.3s;\n}\n\n.right.flash .bubble.tip::before {\n  background-color: var(--clr-bubble-right-bg-flash);\n}\n\n.chat-box .avatar-box {\n  position: relative;\n  width: 1.4rem;\n  min-width: 1.4rem;\n  height: 1.4rem;\n  min-height: 1.4rem;\n  font-size: 0.8rem;\n  margin-bottom: 0.8rem;\n  margin-right: 0.8rem;\n}\n\n/* Message text + timestamp and delivery marker */\n.bubble div.content-meta {\n  width: 100%;\n}\n\n.bubble div.message-content {\n  position: relative;\n  margin: 0;\n  width: 100%;\n  max-width: 36rem;\n  overflow-wrap: anywhere;\n  padding: 0 0.75rem 0 0.75rem;\n  font-size: var(--message-text-size);\n}\n\n/* Increase font size when the message contains only emojis.\nFont from 3x to almost normal, from 1 to 5 emojis in a message */\n.bubble div.message-content.emoji-1 {\n  font-size: 300%;\n}\n.bubble div.message-content.emoji-2 {\n  font-size: 241%;\n}\n.bubble div.message-content.emoji-3 {\n  font-size: 193%;\n}\n.bubble div.message-content.emoji-4 {\n  font-size: 155%;\n}\n.bubble div.message-content.emoji-5 {\n  font-size: 125%;\n}\n\n/* The timestamp is a floating element. Need to ensure div.message-content is expanded\n * to accomodate it. It's usually called clearfix. */\n.bubble div.message-content:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n.chat-box .timestamp-padding {\n  display: inline-block;\n  width: 4rem;\n  height: 0;\n}\n\n.chat-box .timestamp {\n  position: relative;\n  font-size: 80%;\n  color: var(--clr-bubble-timestamp-text);\n  top: 0.35rem;\n  float: right;\n  white-space: nowrap;\n  user-select: none;\n}\n\n/* The name of the person who sent the message\n * (group chat only)\n */\n.chat-box .author {\n  font-size: 80%;\n  color:var(--clr-bubble-author-text);\n  max-width: 12em;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow-x: hidden;\n}\n\n/* Inline and preview image styles */\n.inline-image, .image-preview {\n  position: relative;\n  overflow: hidden;\n  border-radius: 0.1rem;\n}\n\n.inline-image {\n  max-width: 36rem;\n  max-height: 24rem;\n}\n\n/* Container with upload progress */\n.inline-image > .rounded-container {\n  position: relative;\n  margin: 0.25rem auto;\n  bottom: 2rem;\n  /* Imitating minimum margins on the left and right */\n  border-left: 0.25rem solid var(--clr-transparent);\n  border-right: 0.25rem solid var(--clr-transparent);\n}\n\n/* Broken image graphics which replaces the stock graphics. */\nimg.inline-image::before, img.image-preview::before {\n  position: absolute;\n  display: flex;\n  font-size: 0.9rem;\n  font-weight: lighter;\n  color: var(--clr-text-primary);\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  justify-content: center;\n  background: center no-repeat var(--clr-border-light) url(\"../img/broken_image.png\");\n}\n\nimg.inline-image::before {\n  content: attr(alt);\n  background-size: 3rem 3rem;\n}\n\nimg.image-preview::before {\n  content: \" \";\n  background-size: 10rem 10rem;\n}\n\n.inline-image.video > img.inline-image::before, img.image-preview.video::before {\n  background: center no-repeat var(--clr-border-light) url(\"../img/broken_video.png\");\n}\n\n.inline-image.video > img.inline-image::before {\n  background-size: 3rem 3rem;\n}\n\n.inline-video {\n  display: flex;\n  position: relative;\n  align-items: center;\n  justify-content: center;\n}\n\n.inline-video > img.inline-image::before {\n  background: var(--clr-border-light);\n}\n\n.inline-video .duration {\n  padding: 0.25rem 0.5rem;\n  color: var(--clr-toast-bg); /* #333 */\n  background-color: rgba(255, 255, 255, 0.5); /* Specific rgba */\n  position: absolute;\n  bottom: 0.25rem;\n  left: 0.25rem;\n  font-size: 80%;\n  border-radius: 0.3rem;\n}\n\n.inline-video .play-control {\n  display: flex;\n  position: absolute;\n  align-items: center;\n  justify-content: center;\n  width: 4rem;\n  height: 4rem;\n  background-color: rgba(0, 0, 0, 0.4); /* Specific rgba */\n  border-radius: 50%;\n  pointer-events: none;\n  cursor: pointer;\n}\n\n/* Attachment styles */\n.attachment {\n  display: flex;\n}\n.attachment:last-of-type {\n  margin-bottom: -0.45rem;\n}\n\n/* END of talk bubbles */\n/* END of topic/mesages view */\n\n/* InfoView styles */\n#info-caption-panel {\n  background-color: var(--clr-background-blue-gray-300);\n}\n#info-caption-panel a {\n  color: var(--clr-text-secondary);\n  line-height: 1;\n  text-decoration: none;\n}\n#info-caption-panel :hover {\n  color: var(--clr-dark);\n}\n\n#info-title {\n  margin-right: auto;\n}\n\n#group-manager {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  overflow-y: hidden;\n}\n\n#group-manager-buttons {\n  display: flex;\n  background-color: var(--clr-background-blue-gray-50);\n  box-shadow: 0 -1px var(--clr-shadow-panel-divider); /* Faint shadow above panel */\n  z-index: 2;\n  justify-content: space-around;\n  padding: 0.4rem;\n  height: 4rem;\n  border-left: 1px solid var(--clr-border-light);\n}\n\n/* END of InfoView */\n\n/* BEGIN Tabs */\n\nul.tabbar {\n  display: flex;\n  flex-grow: 0;\n  flex-shrink: 0;\n  background: var(--clr-tabbar-bg);\n  list-style:none;\n  margin: 0;\n  width: 100%;\n  overflow: hidden;\n  padding: 0;\n  padding-left: 1rem;\n}\n\nul.tabbar > li {\n  position: relative;\n  height: 2.4rem;\n  box-shadow: inset 0 -2px 2.5px -1px var(--clr-shadow-button); /* rgba(0,0,0,0.25) */\n}\n\nul.tabbar li.active {\n  background: var(--clr-bright);\n}\n\nul.tabbar li:after {\n  height: 0.10rem;\n  width: 100%;\n  content: \"\";\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  background: var(--clr-tabbar-inactive-border);\n}\n\nul.tabbar li.active:after {\n  height: 0.15rem;\n  content: \"\";\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  background: var(--clr-tabbar-active-border);\n  animation: tabbar-border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0s alternate forwards;\n}\n\n@keyframes tabbar-border-expand {\n  0% {\n    opacity: 0;\n    width: 0;\n  }\n  100% {\n    opacity: 1;\n    width: 100%;\n  }\n}\n\nul.tabbar > li > a {\n  position: relative;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  text-align: center;\n  line-height: 2.4rem;\n  font-weight: 400;\n  font-size: 1.3rem;\n  font-variant: small-caps;\n  text-decoration: none;\n  color: var(--clr-tabbar-inactive-text);\n  overflow: hidden;\n}\n\nul.tabbar li.active > a {\n  color: var(--clr-tabbar-active-text);\n}\n\n/* END Tabs */\n\n/* Miscellaneous */\n\n/* Badge with the number of unread messages */\n.unread {\n  display: inline-block;\n  font-size: 0.75rem;\n  font-weight: bolder;\n  background-color: var(--clr-secondary-accent);\n  color: var(--clr-bright);\n  border-radius: 50%;\n  width: 1.35rem;\n  height: 1.35rem;\n  margin-left: 0.5rem;\n  line-height: 1.45rem;\n  text-align: center;\n  vertical-align: middle;\n}\n\n.material-icons.as-badge {\n  padding-left: 0.2rem;\n  font-size: 1.15rem;\n  color: var(--clr-chip-remove-icon-bg); /* #aaa */\n}\n\n/* Badge with a label, like [you], [muted], etc */\n.badge {\n  font-family: 'Roboto Mono', Courier, monospace, sans-serif;\n  font-size: 0.8rem;\n  border: 1px solid var(--clr-badge-default-border);\n  background-color: var(--clr-badge-default-bg);\n  color: var(--clr-badge-default-text);\n  padding: 0.05rem 0.25rem 0.05rem 0.25rem;\n  margin: 0.05rem 0.1rem 0.05rem 0.1rem;\n  border-radius: 0.2rem;\n  display: inline-block;\n  align-self: flex-start;\n}\n\n.badge.green {\n  border-color: var(--clr-badge-green-border);\n  background-color: var(--clr-badge-green-bg);\n  color: var(--clr-badge-green-text);\n}\n\n.badge.yellow {\n  border-color: var(--clr-badge-yellow-border);\n  background-color: var(--clr-badge-yellow-bg);\n  color: var(--clr-badge-yellow-text);\n}\n\n.badge.blue {\n  border-color: var(--clr-badge-blue-border);\n  background-color: var(--clr-badge-blue-bg);\n  color: var(--clr-badge-blue-text);\n}\n\n.badge.red {\n  border-color: var(--clr-badge-red-border);\n  background-color: var(--clr-badge-red-bg);\n  color: var(--clr-badge-red-text);\n}\n\n.badge.magenta {\n  border-color: var(--clr-badge-magenta-border);\n  background-color: var(--clr-badge-magenta-bg);\n  color: var(--clr-badge-magenta-text);\n}\n\n/* Letter tile base style, responsive square box */\n.lettertile {\n  width: 100%;\n  padding-bottom: 100%;\n  border-radius: 50%;\n  user-select: none;\n}\n\n/* Div with letter tile content */\n.lettertile > div {\n  position: absolute;\n  display: flex;\n  flex-shrink: 0;\n  flex-grow: 0;\n  top: 0; bottom: 0; left: 0; right: 0;\n  text-transform: uppercase;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  border-radius: 50%;\n  line-height: 1;\n  padding-top: 0.1em;\n  color: var(--clr-lettertile-default-text); /* default text color #FAFAFA, gray 50 */\n}\n\n.lettertile:hover {\n  color: var(--clr-lettertile-hover-text);\n}\n\n.lettertile.disabled {\n  opacity: 0.5;\n}\n\n/* Colors of letter tiles */\n.lt-bg-0 { background-color: var(--clr-lt-bg-0); }\n.lt-bg-1 { background-color: var(--clr-lt-bg-1); }\n.lt-bg-2 { background-color: var(--clr-lt-bg-2); }\n.lt-bg-3 { background-color: var(--clr-lt-bg-3); }\n.lt-bg-4 { background-color: var(--clr-lt-bg-4); }\n.lt-bg-5 { background-color: var(--clr-lt-bg-5); }\n.lt-bg-6 { background-color: var(--clr-lt-bg-6); }\n.lt-bg-7 { background-color: var(--clr-lt-bg-7); }\n.lt-bg-8 { background-color: var(--clr-lt-bg-8); }\n.lt-bg-9 { background-color: var(--clr-lt-bg-9); }\n.lt-bg-10 { background-color: var(--clr-lt-bg-10); }\n.lt-bg-11 { background-color: var(--clr-lt-bg-11); }\n.lt-bg-12 { background-color: var(--clr-lt-bg-12); }\n.lt-bg-13 { background-color: var(--clr-lt-bg-13); }\n.lt-bg-14 { background-color: var(--clr-lt-bg-14); }\n.lt-bg-15 { background-color: var(--clr-lt-bg-15); }\n\n/* Darker version of letter tile colors */\n.dk-bg-0 { background-color: var(--clr-dk-bg-0); }\n.dk-bg-1 { background-color: var(--clr-dk-bg-1); }\n.dk-bg-2 { background-color: var(--clr-dk-bg-2); }\n.dk-bg-3 { background-color: var(--clr-dk-bg-3); }\n.dk-bg-4 { background-color: var(--clr-dk-bg-4); }\n.dk-bg-5 { background-color: var(--clr-dk-bg-5); }\n.dk-bg-6 { background-color: var(--clr-dk-bg-6); }\n.dk-bg-7 { background-color: var(--clr-dk-bg-7); }\n.dk-bg-8 { background-color: var(--clr-dk-bg-8); }\n.dk-bg-9 { background-color: var(--clr-dk-bg-9); }\n.dk-bg-10 { background-color: var(--clr-dk-bg-10); }\n.dk-bg-11 { background-color: var(--clr-dk-bg-11); }\n.dk-bg-12 { background-color: var(--clr-dk-bg-12); }\n.dk-bg-13 { background-color: var(--clr-dk-bg-13); }\n.dk-bg-14 { background-color: var(--clr-dk-bg-14); }\n.dk-bg-15 { background-color: var(--clr-dk-bg-15); }\n\n/* Same colors as above but for text as opposite to background */\n.lt-fg-0 { color: var(--clr-lt-fg-0)!important; }\n.lt-fg-1 { color: var(--clr-lt-fg-1)!important; }\n.lt-fg-2 { color: var(--clr-lt-fg-2)!important; }\n.lt-fg-3 { color: var(--clr-lt-fg-3)!important; }\n.lt-fg-4 { color: var(--clr-lt-fg-4)!important; }\n.lt-fg-5 { color: var(--clr-lt-fg-5)!important; }\n.lt-fg-6 { color: var(--clr-lt-fg-6)!important; }\n.lt-fg-7 { color: var(--clr-lt-fg-7)!important; }\n.lt-fg-8 { color: var(--clr-lt-fg-8)!important; }\n.lt-fg-9 { color: var(--clr-lt-fg-9)!important; }\n.lt-fg-10 { color: var(--clr-lt-fg-10)!important; }\n.lt-fg-11 { color: var(--clr-lt-fg-11)!important; }\n.lt-fg-12 { color: var(--clr-lt-fg-12)!important; }\n.lt-fg-13 { color: var(--clr-lt-fg-13)!important; }\n.lt-fg-14 { color: var(--clr-lt-fg-14)!important; }\n.lt-fg-15 { color: var(--clr-lt-fg-15)!important; }\n\n.dk-fg-0 { color: var(--clr-dk-fg-0)!important; }\n.dk-fg-1 { color: var(--clr-dk-fg-1)!important; }\n.dk-fg-2 { color: var(--clr-dk-fg-2)!important; }\n.dk-fg-3 { color: var(--clr-dk-fg-3)!important; }\n.dk-fg-4 { color: var(--clr-dk-fg-4)!important; }\n.dk-fg-5 { color: var(--clr-dk-fg-5)!important; }\n.dk-fg-6 { color: var(--clr-dk-fg-6)!important; }\n.dk-fg-7 { color: var(--clr-dk-fg-7)!important; }\n.dk-fg-8 { color: var(--clr-dk-fg-8)!important; }\n.dk-fg-9 { color: var(--clr-dk-fg-9)!important; }\n.dk-fg-10 { color: var(--clr-dk-fg-10)!important; }\n.dk-fg-11 { color: var(--clr-dk-fg-11)!important; }\n.dk-fg-12 { color: var(--clr-dk-fg-12)!important; }\n.dk-fg-13 { color: var(--clr-dk-fg-13)!important; }\n.dk-fg-14 { color: var(--clr-dk-fg-14)!important; }\n.dk-fg-15 { color: var(--clr-dk-fg-15)!important; }\n\n/* Material icons resized from the default 24pt */\n.material-icons {\n  font-size: 1.4rem;\n  line-height: 1;\n  vertical-align: middle;\n  text-align: center;\n  user-select: none;\n}\n.material-icons.small {\n  font-size: 1rem;\n}\n.material-icons.medium {\n  font-size: 1.2rem;\n}\n.material-icons.large {\n  font-size: 1.6rem;\n}\n.material-icons.big {\n  font-size: 2.2rem;\n}\n.material-icons.x-big {\n  font-size: 3rem;\n}\n.material-icons.huge {\n  font-size: 4rem;\n}\n.composed-material {\n  display: inline-block;\n  position: relative;\n}\n.composed-material .second {\n  position: absolute;\n  font-size: 85%;\n  top: 7%;\n  left: 39%;\n  font-weight: bold;\n}\n.composed-material .second-small {\n  position: absolute;\n  font-size: 62%;\n  top: 14%;\n  left: 30%;\n  font-weight: bold;\n}\n\n/* White outline */\n.material-icons.outline {\n  position: relative;\n  text-shadow: -1px 1px var(--clr-bright), 1px 1px var(--clr-bright), 1px -1px var(--clr-bright), -1px -1px var(--clr-bright);\n}\n\n#self-avatar .material-icons {\n  font-size: 2.4rem;\n  line-height: 3rem;\n}\n.avatar-box .material-icons {\n  color: var(--clr-lettertile-default-text); /* #fafafa, gray 50 */\n  border-radius: 50%;\n  width: inherit;\n  height: inherit;\n}\n\n.chip-input {\n  display: flex;\n  flex-wrap: wrap;\n  flex-grow: 1;\n  cursor: text;\n  font-size: 1.1rem;\n  font-weight: normal;\n  background: var(--clr-transparent);\n  border-bottom: 1px solid var(--clr-input-border);\n  box-shadow: 0 1px 0 var(--clr-input-shadow);\n  transition: all 0.1s ease-in-out;\n  max-height: 10rem;\n  min-height: 4rem;\n  overflow-y: scroll;\n  margin: 0.25rem 0 0.25rem 0;\n  outline: none;\n  color: var(--clr-input-text);\n  align-items: center;\n  justify-content: flex-start;\n  text-align: center;\n}\n\n.chip-input.focused {\n  border-bottom: 1px solid var(--clr-input-border-focus);\n  box-shadow: 0 1px 0 var(--clr-input-shadow-focus);\n}\n\n.chip-input > input[type=\"text\"] {\n  display: inline-block;\n  width: auto;\n  border: none;\n  line-height: 1.8;\n  box-shadow: none;\n  min-width: 4rem;\n  flex: 1 0 auto;\n  height: 1.8rem;\n  margin: 0.125rem;\n}\n\n.chip {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  height: 1.8rem;\n  line-height: 1.8;\n  border-radius: 0.9rem;\n  margin: 0.125rem;\n  background-color: var(--clr-chip-bg);\n  white-space: nowrap;\n  font-size: 90%;\n  max-width: 12rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.chip > span {\n  white-space: nowrap;\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n}\n\n.chip.invalid {\n  color: var(--clr-chip-invalid-text);\n  background-color: var(--clr-chip-invalid-bg);\n}\n\n.chip > a {\n  display: inline-block;\n  color: var(--clr-chip-remove-icon-text);\n  background-color: var(--clr-chip-remove-icon-bg);\n  border-radius: 50%;\n  margin: 0.3rem;\n  width: 1.175rem;\n  min-width: 1.175rem;\n  height: 1.175rem;\n  line-height: 1.15;\n  text-decoration: none;\n}\n\n.chip > a:focus,\n.chip > a:hover {\n  text-decoration: none;\n  color: var(--clr-chip-remove-icon-hover-text);\n  background-color: var(--clr-chip-remove-icon-hover-bg);\n}\n\n.chip .avatar-box {\n  position: relative;\n  width: 1.8rem;\n  min-width: 1.8rem;\n  height: 1.8rem;\n  min-height: 1.8rem;\n  font-size: 1rem;\n  margin-right: 0.2rem;\n}\n\n.chip .avatar-box .material-icons {\n  font-size: 1.4rem;\n  line-height: 1.8rem;\n}\n\n.chip .spacer {\n  display: inline-block;\n  margin: 0.3rem;\n  width: 0.25rem;\n  height: 1.175rem;\n}\n\n.load-spinner-box {\n  --size-small: 2.5rem;\n  --size-large: 4rem;\n  position: absolute;\n  box-shadow: 0.1rem 0.1rem 0.15rem 1px var(--clr-shadow-button);\n  border-radius: 50%;\n  padding: 0.25rem;\n  width: var(--size-small);\n  height: var(--size-small);\n  left: 0;\n  right: 0;\n  top: 5rem;\n  margin-left: auto;\n  margin-right: auto;\n  background-color: var(--clr-bright);\n  z-index: 2;\n}\n\n.load-spinner-box.large {\n  width: var(--size-large);\n  height: var(--size-large);\n}\n\n.load-spinner-box.clear {\n  box-shadow: 0.1rem 0.1rem 0.15rem 1px var(--clr-shadow-button-inset-active); /* rgba(0,0,0,0.12) */\n  background-color: rgba(255,255,255,0.5); /* Specific rgba */\n}\n\n.load-spinner-box.centered {\n  top: calc(var(--size-small)/2 - 0.25rem);\n}\n\n.load-spinner-box.large.centered {\n  top: calc(var(--size-large)/2 - 0.25rem);\n}\n\n.loader-spinner {\n  border: 0.35rem solid var(--clr-spinner-track);\n  border-radius: 50%;\n  border-top: 0.35rem solid var(--clr-spinner-active);\n  width: 2rem;\n  height: 2rem;\n  animation: spin 1.5s linear infinite;\n}\n\n.load-spinner-box.large .loader-spinner {\n  width: 3.5rem;\n  height: 3.5rem;\n}\n\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n/* File upload styles */\n.uploader {\n  display: flex;\n}\n/* Gray uploader bar of fixed length (background) */\n.uploader > div {\n  position: relative;\n  height: 0.6rem;\n  padding: 0.15rem;\n  margin: 0.35rem;\n  width: 6rem;\n  line-height: 0;\n  border-radius: 0.1rem;\n  background-color: var(--clr-background-blue-gray-100);\n}\n/* Colored uploader progress bar of variable length */\n.uploader > div > span {\n  display: inline-block;\n  height: 0.3rem;\n  background-color: var(--clr-primary-action);\n  border-radius: 0.08rem;\n}\n\n/* Highlighted text */\n.highlight {\n  color: var(--clr-highlight-text);\n  font-weight: bolder;\n}\n\n.highlight .preview {\n  color: var(--clr-highlight-preview-text);\n  font-weight: inherit;\n}\n\n/* Image cropping widget */\n\n.cropper {\n  position: relative;\n  width: 18rem;\n  height: 21rem;\n  margin: auto;\n  margin-top: 1rem;\n  align-self: center;\n  transform: translateZ(0);\n  border-radius: 0.25rem;\n}\n\n.cropper .bounding-box {\n  position: relative;\n  width: 18rem;\n  height: 18rem;\n  overflow: hidden;\n  z-index: 1;\n  border-radius: 0.25rem;\n  border: solid 2px var(--clr-cropper-bounding-box-border);\n  box-shadow: 1px 1px 3px var(--clr-shadow-cropper-gray);\n  background-color: var(--clr-cropper-bounding-box-bg);\n}\n\n.cropper .preview {\n  position: absolute;\n  max-height: none;\n  max-width: none;\n  z-index: -1;\n}\n\n.cropper .cutout {\n  position: absolute;\n  width: 17.8rem;\n  height: 17.8rem;\n  border: 1px dashed var(--clr-cropper-cutout-border);\n  margin: auto;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  left: 0;\n  box-shadow: 0 0 150rem 150rem var(--clr-cropper-cutout-shadow);\n  z-index: 0;\n}\n\n.cropper .cutout.circle {\n  border-radius: 50%;\n}\n\n.cropper .overlay {\n  position: absolute;\n  cursor: move;\n  touch-action: none;\n  z-index: 1;\n}\n\n.cropper .zoom-wrapper {\n  height: 2rem;\n  width: 80%;\n  margin: 1rem auto;\n  text-align: center;\n}\n\n.cropper .zoom {\n  box-shadow: none;\n  pointer-events: none;\n  z-index: 2;\n}\n\n.cropper .zoom:focus {\n  outline: none;\n}\n\n/* Quoted (cited) content */\n.reply-quote {\n  position: relative;\n  padding: 0.15rem 0.5rem 0.25rem 0.5rem;\n  border-left: 0.25rem solid var(--clr-reply-quote-border);\n  line-height: 1.5em;\n  font-weight: lighter;\n  border-radius: 0.25rem;\n  color: var(--clr-reply-quote-text);\n  cursor: pointer;\n}\n\n.chat-box .bubble .reply-quote {\n  margin: 0.15rem -0.75rem 0.3rem -0.75rem;\n}\n\n.chat-box .bubble .reply-quote:first-child {\n  margin-top: -0.25rem;\n}\n\n.chat-box .left .reply-quote {\n  background-color: var(--clr-reply-quote-left-bg);\n}\n\n.chat-box .right .reply-quote {\n  background-color: var(--clr-reply-quote-right-bg);\n}\n\n.reply-quote .inline-image {\n  vertical-align: middle;\n  margin-bottom: 0.1rem;\n}\n\n.reply-quote img.inline-image::before {\n  content: '';\n}\n\n#reply-quote-preview {\n  display: flex;\n  align-items: center;\n}\n\n#reply-quote-preview .reply-quote {\n  width: 100%;\n  background-color: var(--clr-reply-quote-preview-bg);\n  margin: 0.35rem 0.5rem 0 0;\n  cursor: initial;\n}\n\n#reply-quote-preview .cancel {\n  min-width: 2.4rem;\n  text-align: center;\n}\n\n#reply-quote-preview .inline-image {\n  background-color: var(--clr-border-light);\n}\n\n#reply-quote-preview img.inline-image::before {\n  content: '';\n}\n\n#send-message-panel #reply-quote-preview {\n  width: 100%;\n}\n#send-message-panel #reply-quote-preview .reply-quote {\n  margin-bottom: 0.35rem;\n}\n\n.forwarding-quote {\n  font-size: 200%;\n  line-height: 200%;\n}\n\n.mention {\n  font-weight: 500;\n}\n\n/* Message forwarding. */\n.forward-dialog {\n  position: relative;\n  overflow: hidden;\n  background-color: var(--clr-bright);\n  box-shadow: 0.15rem 0.15rem 1.5rem var(--clr-shadow-dialog);\n  padding: 0.5rem;\n  border-radius: 0.3rem;\n  margin: auto 1rem auto 1rem;\n  width: 24rem;\n  height: 80%;\n}\n\n.forward-dialog .scrollable-panel {\n  height: 80%;\n}\n\n.audio {\n  display: flex;\n  margin-left: auto;\n  align-items: center;\n  flex: none;\n  background-color: var(--clr-audio-bg);\n  height: 3rem;\n  border-radius: 1.5rem;\n}\n\n.audio canvas {\n  width: 14rem;\n  height: 2.6rem;\n  margin-right: 2rem;\n}\n\n.audio canvas.playback {\n  margin-right: 0;\n}\n\n.audio .duration {\n  font-size: large;\n}\n\n.audio-player {\n  display: flex;\n  align-items: center;\n}\n\n.audio-player .material-icons.large {\n  font-size: 2.4rem;\n  color: var(--clr-audio-icon);\n}\n\n.audio-player .material-icons.disabled {\n  color: var(--clr-audio-icon-disabled);\n  cursor: default;\n}\n\n.audio-player .playback {\n  width: 14rem;\n  height: 2.6rem;\n}\n\n.audio-player canvas.playback {\n  display: block;\n}\n\n.audio-player div.playback {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--clr-audio-icon);\n  font-size: small;\n}\n\n.audio-player .timer {\n  font-size: smaller;\n  color: var(--clr-audio-timer-text);\n}\n\n/* Pinned messages */\n#pinned-wrapper {\n  position: relative;\n  display: flex;\n  align-items: center;\n  height: 100%;\n  margin-right: 0.5rem;\n}\n\n.pinned {\n  position: relative;\n  display: flex;\n  align-items: center;\n  padding: 0.15rem 0.5rem 0.25rem 0.5rem;\n  background-color: var(--clr-background-off-white);\n  background-position: center;\n  font-weight: lighter;\n  border-radius: 0 0.25rem 0.25rem 0;\n  color: var(--clr-text-primary);\n  height: 100%;\n  width: 24rem;\n  min-width: 0;\n  cursor: pointer;\n  transition: background 0.4s;\n}\n\n.pinned > p {\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.pinned:hover {\n  background-color: var(--clr-bright); /* #fafdff is very close to white */\n}\n\n.pinned:active {\n  background-color: var(--clr-blue-wash-medium);\n  transition: background 0s;\n}\n\n.pinned-scroll {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  border-radius: 0.25rem 0 0 0.25rem;\n  background-color: var(--clr-background-extra-light-gray);\n  justify-content: space-evenly;\n  height: 100%;\n  padding: 0.2rem;\n  margin-left: 0.35rem;\n  user-select: none;\n}\n\n.pinned-scroll .dot {\n  width: 0.3rem;\n  height: 0.3rem;\n  border-radius: 50%;\n  background-color: var(--clr-text-tertiary);\n  user-select: none;\n}\n\n.pinned-scroll .adot {\n  width: 0.45rem;\n  height: 0.45rem;\n  border-radius: 50%;\n  background-color: var(--clr-light-blue-accent);\n  user-select: none;\n}\n\n#pinned-wrapper:hover .menuTrigger {\n  opacity: 0.9;\n}\n#pinned-wrapper:hover .menuTrigger a {\n  color: var(--clr-text-secondary);\n}\n\n.pinned-menu {\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  background-color: var(--clr-pinned-menu-bg);\n  border-radius: 0 0.25rem 0.25rem 0;\n  justify-content: space-evenly;\n  top: 0;\n  bottom: 0;\n  right: 0;\n}\n\n.pinned-menu .menuTrigger {\n  position: relative;\n  right: 0;\n}\n/* END of pinned messages */\n\n/* Contact attachments */\n.contact-card {\n  position: relative;\n  background-color: var(--clr-background-off-white);\n  border-radius: 0.5rem;\n  display: flex;\n  flex-direction: column;\n  min-width: 14rem;\n}\n\n.contact-card .avatar-box {\n  position: relative;\n  width: 1.8rem;\n  height: 1.8rem;\n  font-size: 1rem;\n  margin-right: 0.75rem;\n  margin-bottom: 0;\n}\n\n.contact-card .contact-body {\n  align-items: center;\n  background-color: var(--clr-background-blue-gray-50);\n  display: flex;\n  padding: 0.75rem;\n  border-radius: 0.5rem 0.5rem 0 0;\n  border-bottom: none;\n}\n\n.contact-card .contact-body .name-box {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.contact-card .contact-body .name-box .name {\n  color: var(--clr-text-primary);\n  font-weight: 500;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.contact-card .contact-body .name-box .org {\n  color: var(--clr-text-secondary);\n  font-size: 90%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-weight: 300;\n}\n\n.contact-card .contact-actions {\n  display: flex;\n  justify-content: space-evenly;\n  align-items: center;\n  padding: 0 0.5rem;\n  border-radius: 0 0 0.5rem 0.5rem;\n  border-top: none;\n  background-color: var(--clr-bright);\n}\n\n.contact-card .contact-actions a {\n  cursor: pointer;\n}\n\n.contact-card .contact-actions .divider {\n  height: 1.8rem;\n  opacity: 0.5;\n}\n\n/* END of contact attachments */\n\n/*\n Drag-and-drop area.\n */\n.drag-n-drop {\n  display: flex;\n  border: dashed var(--clr-drag-n-drop-border) 0.15rem;\n  border-radius: 1rem;\n  background-color: var(--clr-drag-n-drop-bg);\n  position: absolute;\n  top: 1.5rem;\n  bottom: 1.5rem;\n  left: 1.5rem;\n  right: 1.5rem;\n  z-index: 3;\n  justify-content: center;\n  align-items: center;\n  font-size: 2rem;\n  color: var(--clr-drag-n-drop-text);\n  outline: 0.5rem solid var(--clr-drag-n-drop-outline);\n}\n\n.country-flag {\n  display: inline-block;\n  font-size: larger;\n}\n\n.dial-code {\n  white-space: nowrap;\n  display: inline-block;\n  cursor: pointer;\n  vertical-align: middle;\n  margin-bottom: 0.15rem;\n}\n\nul.phone-country-selector {\n  list-style: none;\n  overflow-x: hidden;\n}\n\nul.phone-country-selector > li {\n  position: relative;\n  font-weight: lighter;\n  padding: 0.25rem 0.5rem 0.15rem 0.5rem;\n  cursor: pointer;\n  width: 100%;\n}\n\nul.phone-country-selector > li:hover {\n  background-color: var(--clr-background-blue-gray-50); /* blue-gray 50 highlight */\n}\nul.phone-country-selector > li.selected {\n  background-color: var(--clr-background-blue-gray-100); /* blue-gray 100 highlight */\n}\n\nul.phone-country-selector .dial-code {\n  position: absolute;\n  right: 0.5rem;\n  color: var(--clr-primary-action);\n  font-weight: normal;\n}\n\nul.phone-country-selector span {\n  display: inline-block;\n}\n\nul.phone-country-selector span.country {\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n}\n\n.image-grid {\n  position: relative;\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(7rem, 1fr));\n  gap: 0.35rem;\n  padding: 0.25rem;\n}\n\n.image-grid-cell {\n  padding: 0;\n  margin: 0;\n  width: 100%;\n  height: 7rem;\n  overflow: hidden;\n  border-radius: 0.25rem;\n  border: 1.5px solid transparent;\n  cursor: pointer;\n  box-shadow: 0 0 0.2rem var( --clr-shadow-hr-inset); /* gray */\n}\n\n.image-grid-cell img {\n  object-fit: cover;\n}\n\n.image-grid-cell.selected {\n  border: 1.5px solid var(--clr-secondary-accent);\n}\n\nimg.inverted {\n  filter: invert(1);\n}\n\ndiv.toast {\n  visibility: hidden;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: absolute;\n  min-width: 10rem;\n  padding: 0.5rem 1rem;\n  height: 3rem;\n  z-index: 3;\n  font-weight: lighter;\n  color: var(--clr-toast-text);\n  background-color: var(--clr-toast-bg);\n  border-radius: 0.5rem;\n  box-shadow: 1px 2px 0.3rem var(--clr-shadow-gray-strong); /* gray */\n  bottom: 2rem;\n  left: 50%;\n  translate: -50%;\n}\n\ndiv.toast.show {\n  visibility: visible;\n  animation: fadein 0.5s, fadeout 0.5s 2.5s;\n}\n\n@keyframes fadein {\n  from {\n    bottom: 0;\n    opacity: 0;\n  }\n  to {\n    bottom: 2rem;\n    opacity: 1;\n  }\n}\n\n@keyframes fadeout {\n  from {\n    bottom: 2rem;\n    opacity: 1;\n  }\n  to {\n    bottom: 0;\n    opacity: 0;\n  }\n}\n\n/*\n Very wide monitor.\n */\n@media (min-width: 1440px){\n  #app-container {\n    max-width: 114rem;\n  }\n}\n\n/*\n Mobile styles.\n */\n\n@media (max-width: 960px) {\n  #mountPoint {\n    padding: 0;\n  }\n\n  .pinned {\n    width: 16rem;\n  }\n}\n\n@media (max-width: 640px) {\n  #app-container {\n    width: 100%;\n    border-radius: 0;\n    box-shadow: none;\n  }\n\n  #sidepanel {\n    width: 100%;\n  }\n\n  #info-view {\n    width: 100%;\n  }\n\n  /* Bottom sheet rather than a dialog */\n  .forward-dialog {\n    border-radius: 0.3rem 0.3rem 0 0;\n    margin: auto 0 0 0;\n    width: 100%;\n  }\n\n  /* Must make it a bit visible on mobile because there is no :hover */\n  .menuTrigger {\n    opacity: 0.3;\n  }\n\n  #send-message-input {\n    /* Just an indicator that the screen is in mobile mode */\n    transition-property: -tinode-mobile;\n  }\n\n  #pinned-wrapper {\n    height: 3.5rem;\n    margin: 0.25rem;\n  }\n\n  .pinned {\n    width: unset;\n  }\n\n  #video-container.minimized {\n    flex-direction: row;\n    left: 0;\n    top: var(--caption-panel-height);\n    width: 100%;\n    height: 11rem;\n    border-radius: unset;\n    box-shadow: 0 0 0.5rem var(--clr-shadow-gray-strong);\n  }\n\n  #controls.minimized {\n    flex-direction: column;\n    row-gap: 0.5rem;\n    bottom: auto;\n    column-gap: unset;\n    right: 1rem;\n  }\n\n  .minimized .call-party {\n    border-radius: unset;\n    box-shadow: unset;\n  }\n\n  .call-party.self {\n    bottom: 8.5rem;\n    border-radius: unset;\n  }\n}\n"
  },
  {
    "path": "firebase-init.js",
    "content": "// Get these values for your project from the https://console.firebase.google.com/\nconst FIREBASE_INIT = {\n  // Set up a web application in console then get the config object.\n  // The following keys are copied from the object:\n  apiKey: \"AIzaSyD6X4ULR-RUsobvs1zZ2bHdJuPz39q2tbQ\",\n  messagingSenderId: \"114126160546\",\n  projectId: \"tinode-1000\",\n  appId: \"1:114126160546:web:aca6ea2981feb81fb44dfb\",\n  // Project Settings -> Cloud Messaging -> Web configuration -> Web Push certificates.\n  // This value IS NOT included in the generated js config you get from\n  // the firebase console. It needs to be added separately.\n  messagingVapidKey: \"BOgQVPOMzIMXUpsYGpbVkZoEBc0ifKY_f2kSU5DNDGYI6i6CoKqqxDd7w7PJ3FaGRBgVGJffldETumOx831jl58\",\n  // Google analytics tag. Uncomment and use one you got from https://analytics.google.com/.\n  // measurementId: \"G-ABCDEF1234\"\n};\n"
  },
  {
    "path": "img/bkg/index.json",
    "content": "{\n  \"patt\": [\n    {\"name\": \"a00.png\", \"size\": 200}, {\"name\": \"a01.jpg\", \"size\": 384}, {\"name\": \"a02.jpg\", \"size\": 384},\n    {\"name\": \"a03.jpg\", \"size\": 384}, {\"name\": \"a04.png\", \"size\": 400}, {\"name\": \"a05.jpg\", \"size\": 400},\n    {\"name\": \"a06.jpg\", \"size\": 256}, {\"name\": \"a07.jpg\", \"size\": 384}, {\"name\": \"a08.jpg\", \"size\": 384},\n    {\"name\": \"a09.jpg\", \"size\": 400}, {\"name\": \"a10.jpg\", \"size\": 256}, {\"name\": \"a11.png\", \"size\": 200}\n  ],\n  \"img\": [\n    {\"name\": \"w01.jpg\", \"pr\": \"p01.jpg\"}, {\"name\": \"w02.jpg\", \"pr\": \"p02.jpg\"}, {\"name\": \"w03.jpg\", \"pr\": \"p03.jpg\"},\n    {\"name\": \"w04.jpg\", \"pr\": \"p04.jpg\"}, {\"name\": \"w05.jpg\", \"pr\": \"p05.jpg\"}, {\"name\": \"w06.jpg\", \"pr\": \"p06.jpg\"},\n    {\"name\": \"w07.jpg\", \"pr\": \"p07.jpg\"}, {\"name\": \"w08.jpg\", \"pr\": \"p08.jpg\"}, {\"name\": \"w09.jpg\", \"pr\": \"p09.jpg\"},\n    {\"name\": \"w10.jpg\", \"pr\": \"p10.jpg\"}, {\"name\": \"w11.jpg\", \"pr\": \"p11.jpg\"}, {\"name\": \"w12.jpg\", \"pr\": \"p12.jpg\"},\n    {\"name\": \"w13.jpg\", \"pr\": \"p13.jpg\"}, {\"name\": \"w14.jpg\", \"pr\": \"p14.jpg\"}, {\"name\": \"w15.jpg\", \"pr\": \"p15.jpg\"},\n    {\"name\": \"w16.jpg\", \"pr\": \"p16.jpg\"}, {\"name\": \"w17.jpg\", \"pr\": \"p17.jpg\"}, {\"name\": \"w18.jpg\", \"pr\": \"p18.jpg\"},\n    {\"name\": \"w19.jpg\", \"pr\": \"p19.jpg\"}, {\"name\": \"w20.jpg\", \"pr\": \"p20.jpg\"}, {\"name\": \"w21.jpg\", \"pr\": \"p21.jpg\"},\n    {\"name\": \"w22.jpg\", \"pr\": \"p22.jpg\"}, {\"name\": \"w23.jpg\", \"pr\": \"p23.jpg\"}, {\"name\": \"w24.jpg\", \"pr\": \"p24.jpg\"}\n  ]\n}\n"
  },
  {
    "path": "index-dev.html",
    "content": "<!-- DEVELOPMENT version of the web app. -->\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Tinode</title>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"application-name\" content=\"Tinode Web, version for developers\" />\n    <meta name=\"description\" content=\"Tinode instant messenger, development version\" />\n    <meta name=\"application-url\" content=\"https://web.tinode.co/\">\n    <!-- Browser styling for Chrome, FF, Opera -->\n    <meta name=\"theme-color\" content=\"#3949AB\" />\n    <!-- Ask Google not to offer page translation -->\n    <meta name=\"google\" value=\"notranslate\" />\n    <!-- Open Graph description -->\n    <meta name=\"og:url\" content=\"https://web.tinode.co/\">\n    <meta name=\"og:title\" content=\"Tinode Web Development\">\n    <meta name=\"og:image\" content=\"img/og-logo.jpeg\">\n    <meta name=\"og:description\" content=\"Tinode instant messenger, development version\" />\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <link rel=\"manifest\" href=\"manifest.json\" />\n    <link rel=\"shortcut icon\" id=\"shortcut-icon\" href=\"img/logo32x32.png\" type=\"image/png\" />\n    <link rel=\"apple-touch-icon\" sizes=\"192x192\" href=\"img/logo192.png\" type=\"image/png\" />\n    <link rel=\"canonical\" href=\"https://web.tinode.co/\" />\n    <!-- Google's Roboto font -->\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,700,700i\" />\n    <!-- Google's material design icons -->\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" />\n    <!-- Styles for local elements -->\n    <link rel=\"stylesheet\" href=\"css/base.css\" />\n    <!-- Polyfill Intl.Segmenter for Firefox 124 and earlier. This can be safely removed in the end of 2024. -->\n    <script crossorigin=\"anonymous\" src=\"https://polyfill-fastly.io/v3/polyfill.min.js?features=Intl.Segmenter\"></script>\n    <!-- ReactJS -->\n    <script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react@18/umd/react.development.js\"></script>\n    <script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.development.js\"></script>\n    <!-- React-Intl for translations -->\n    <script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react-intl@7/react-intl.iife.js\"></script>\n    <!-- Displaying QR code with ID of the topic -->\n    <script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.js\"></script>\n  </head>\n\n  <body>\n    <noscript><div id=\"noscript-message\"><div id=\"noscript-title\">Javascript support is required.</div>\n      <div id=\"noscript-content\">It appears JavaScript is turned off or is not supported by your browser.\n        TinodeWeb does not work without JavaScript. Please enable JavaScript by changing your browser options,\n        then <a href=\"\">try again</a>.\n      </div>\n    </div></noscript>\n    <div id=\"mountPoint\"></div>\n    <script src=\"firebase-init.js\"></script>\n    <script src=\"umd/tinode.dev.js\"></script>\n    <script src=\"umd/index.dev.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<title>Tinode</title>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n<meta name=\"application-name\" content=\"Tinode Web\" />\n<meta name=\"description\" content=\"Tinode instant messenger in a browser\" />\n<meta name=\"application-url\" content=\"https://web.tinode.co/\">\n<meta name=\"theme-color\" content=\"#3949AB\" />\n<meta name=\"google\" value=\"notranslate\" />\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"og:url\" content=\"https://web.tinode.co/\">\n<meta name=\"og:title\" content=\"Tinode Web\">\n<meta name=\"og:image\" content=\"img/og-logo.jpeg\">\n<meta name=\"og:description\" content=\"Tinode instant messenger in a browser\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"mobile-web-app-capable\" content=\"yes\">\n<link rel=\"manifest\" href=\"manifest.json\" />\n<link rel=\"shortcut icon\" id=\"shortcut-icon\" href=\"img/logo32x32.png\" type=\"image/png\" />\n<link rel=\"apple-touch-icon\" sizes=\"192x192\" href=\"img/logo192.png\" type=\"image/png\" />\n<link rel=\"canonical\" href=\"https://web.tinode.co/\" />\n<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,700,700i\" />\n<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" />\n<link rel=\"stylesheet\" href=\"css/base.min.css\" />\n<script crossorigin=\"anonymous\" src=\"https://polyfill-fastly.io/v3/polyfill.min.js?features=Intl.Segmenter\"></script>\n<script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react@18.3.1/umd/react.production.min.js\"></script>\n<script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react-dom@18.3.1/umd/react-dom.production.min.js\"></script>\n<script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/react-intl@7.1.6/react-intl.iife.min.js\"></script>\n<script crossorigin=\"anonymous\" src=\"https://cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.min.js\"></script>\n</head>\n<body>\n<noscript><div id=\"noscript-message\"><div id=\"noscript-title\">Javascript support is required.</div>\n<div id=\"noscript-content\">It appears JavaScript is turned off or is not supported by your browser.\nTinodeWeb does not work without JavaScript. Please enable JavaScript by changing your browser options,\nthen <a href=\"\">try again</a>.</div></div></noscript>\n<div id=\"mountPoint\"></div>\n<script src=\"firebase-init.js\"></script>\n<script src=\"umd/tinode.prod.js\"></script>\n<script src=\"umd/index.prod.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "manifest.json",
    "content": "{\n  \"name\": \"Tinode\",\n  \"short_name\": \"Tinode\",\n  \"description\": \"Tinode Web App.\\nSee more at https://tinode.co/\",\n  \"categories\": [\"chat\", \"communication\", \"productivity\"],\n  \"icons\": [\n    {\n      \"src\":\"img/logo96.png\",\n      \"sizes\": \"96x96\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\":\"img/logo192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"img/logo.svg\",\n      \"type\": \"image/svg+xml\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \"/\",\n  \"background_color\": \"silver\",\n  \"theme_color\": \"#3949AB\",\n  \"display\": \"standalone\",\n  \"gcm_sender_id\": \"103953800507\",\n  \"prefer_related_applications\": true,\n  \"related_applications\": [\n    {\n      \"platform\": \"play\",\n      \"url\": \"https://play.google.com/store/apps/details?id=co.tinode.tindroidx\",\n      \"id\": \"co.tinode.tindroidx\"\n    },\n    {\n      \"platform\": \"itunes\",\n      \"url\": \"https://apps.apple.com/us/app/tinode/id1483763538\"\n    }\n  ],\n  \"permissions\": {\n    \"audio-capture\": {\n      \"description\": \"Required for recording voice messages\"\n    }\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"tinode-webapp\",\n  \"description\": \"Tinode messenger for the web\",\n  \"version\": \"0.25.2\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/tinode/webapp.git\"\n  },\n  \"scripts\": {\n    \"start\": \"echo 'Read installation instructions'\",\n    \"build\": \"npm run vers && npm run build:css && npm run extract && npm run build:i18n && npm run build:prod && npm run build:dev\",\n    \"clean\": \"rm umd/* && rm css/base.min.css && rm src/i18n.min/*\",\n    \"build:css\": \"postcss css/base.css > css/base.min.css\",\n    \"build:dev\": \"webpack --mode development\",\n    \"build:prod\": \"webpack --mode production\",\n    \"build:i18n\": \"node scripts/i18n.js\",\n    \"i18n:missing\": \"node scripts/i18n.js missing\",\n    \"i18n:obsolete\": \"node scripts/i18n.js obsolete\",\n    \"vers\": \"node scripts/gen-version.js\",\n    \"extract\": \"formatjs extract \\\"src/**/*.{js,jsx}\\\" --out-file src/i18n/ex/base-en.json --id-interpolation-pattern '[sha512:contenthash:base64:6]'\",\n    \"compile\": \"formatjs compile\",\n    \"test\": \"jest\"\n  },\n  \"browserslist\": [\n    \"defaults\"\n  ],\n  \"files\": [\n    \"umd/*.js\",\n    \"umd/*.map\",\n    \"audio/*.m4a\",\n    \"css/base.css\",\n    \"css/base.min.css\",\n    \"img/*.png\",\n    \"img/*.svg\",\n    \"img/*.jpeg\",\n    \"img/bkg/*.jpg\",\n    \"img/bkg/*.png\",\n    \"img/bkg/*.json\",\n    \"index-dev.html\",\n    \"index.html\",\n    \"manifest.json\",\n    \"service-worker.js\",\n    \"version.js\"\n  ],\n  \"keywords\": [\n    \"chat\",\n    \"instant-messenger\",\n    \"message\",\n    \"messenger\",\n    \"react\",\n    \"web\"\n  ],\n  \"locales\": [\n    \"ar\",\n    \"de\",\n    \"en\",\n    \"es\",\n    \"fr\",\n    \"it\",\n    \"ko\",\n    \"ro\",\n    \"ru\",\n    \"th\",\n    \"uk\",\n    \"vi\",\n    \"zh\",\n    \"zh-TW\"\n  ],\n  \"main\": \"umd/index.prod.js\",\n  \"bugs\": {\n    \"url\": \"https://github.com/tinode/webapp/issues\"\n  },\n  \"homepage\": \"https://github.com/tinode/chat\",\n  \"email\": \"info@tinode.co\",\n  \"author\": \"Tinode Authors <info@tinode.co>\",\n  \"license\": \"Apache-2.0\",\n  \"dependencies\": {\n    \"firebase\": \"^11.0.0\",\n    \"libphonenumber-js\": \"^1.10.40\",\n    \"qrcodejs\": \"^1.0.0\",\n    \"react\": \"^18.3.0\",\n    \"react-dom\": \"^18.3.0\",\n    \"react-intl\": \"^7.0.0\",\n    \"tinode-sdk\": \"^0.25.2\",\n    \"webm-duration-fix\": \"^1.0.4\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.22.10\",\n    \"@babel/preset-env\": \"^7.22.10\",\n    \"@babel/preset-react\": \"^7.22.5\",\n    \"@formatjs/cli\": \"^6.1.3\",\n    \"babel-loader\": \"^10.0.0\",\n    \"babel-plugin-formatjs\": \"^10.5.3\",\n    \"browserslist\": \"^4.21.10\",\n    \"copy-webpack-plugin\": \"^13.0.0\",\n    \"cssnano\": \"^7.0.6\",\n    \"glob\": \"^13.0.0\",\n    \"jest\": \"^30.0.0\",\n    \"postcss\": \"^8.4.27\",\n    \"postcss-cli\": \"^11.0.0\",\n    \"webpack\": \"^5.88.2\",\n    \"webpack-cli\": \"^6.0.0\"\n  }\n}\n"
  },
  {
    "path": "postcss.config.js",
    "content": "module.exports = {\n    plugins: [\n        require('cssnano')({\n            preset: 'default',\n        }),\n    ],\n};\n"
  },
  {
    "path": "push.md",
    "content": "# Push notifications\n\nIf you want to use the app with your own server and want web push notification to work you have to set them up:\n\n* Register at https://firebase.google.com/, set up the project if you have not done so already.\n* Follow instructions to create a web application https://support.google.com/firebase/answer/9326094 in your project.\n* Follow instructions at https://support.google.com/firebase/answer/7015592 to get a Firebase configuration object (\"Firebase SDK snippet\").\n* Locate `firebase-init.js` in the root folder of your copy of TinodeWeb app. Copy-paste the following keys from the configuration object to `firebase-init.js`: `apiKey`, `messagingSenderId`, `projectId`, `appId` (you may copy all keys).\n* Copy `Web Push certificate` (Project Settings -> Cloud Messaging -> Web configuration -> Web Push certificates) to `messagingVapidKey` field in `firebase-init.js`.\n* Double check that `firebase-init.js` contains the following keys: `apiKey`, `messagingSenderId`, `projectId`, `appId`, `messagingVapidKey`. The file may contain other optional keys.\n* Copy Google-provided server key to `tinode.conf`, see details [here](https://github.com/tinode/chat/blob/master/docs/faq.md#q-how-to-setup-fcm-push-notifications).\n"
  },
  {
    "path": "scripts/gen-version.js",
    "content": "const fs = require('fs');\nconst version = require('../package.json').version;\n\nfunction writeVersion(fileName, useExport) {\n  fs.writeFile(fileName,\n    '// This is a generated file. Don\\'t edit.\\n\\n'+\n    `${useExport ? 'export ' : ''}const PACKAGE_VERSION = \"${version}\";\\n`,\n    { flag: 'w' },\n    (err) => {\n      if (err) {\n          return console.error(err);\n      }\n    }\n  );\n}\n\nwriteVersion('./src/version.js', true);\nwriteVersion('./version.js', false);\n"
  },
  {
    "path": "scripts/i18n.js",
    "content": "// 1. Updates translations files with new messages, mark no longer needed translations as obsolete.\n// 2. Takes all translations and groups them into a single file.\n// 3. When called with parameters 'missing' or 'obsolete' writes missing and obsolete translations to console.\n\nconst fs = require('fs');\nconst path = require('path');\nconst globSync = require('glob').sync;\n\nconst EXTRACTED_STRINGS = './src/i18n/ex/base-en.json';\nconst BASE_LANG        = 'en';\nconst LANG_PATTERN     = './src/i18n/*.json';\nconst LANG_PATTERN_ONE = './src/i18n/%s.json';\nconst OUTPUT_PATTERN   = './src/i18n.min/%s.json';\n\nconst args = process.argv.slice(2);\n\nfunction getLocaleFromFileName(filename) {\n  const parts = filename.split(path.sep);\n  return parts[parts.length - 1].split('.json')[0];\n}\n\nfunction printf(str) {\n  const args = [].slice.call(arguments, 1);\n  let i = 0;\n  return str.replace(/%s/g, () => args[i++]);\n}\n\n// Called with one or two parameters?\nif (args[0] == 'missing' || args[0] == 'obsolete') {\n  // Extract missing or obsolete translations as requested.\n  // Read either all or just one translation.\n  const pattern = args[1] ? printf(LANG_PATTERN_ONE, args[1]) : LANG_PATTERN;\n  const extracted = globSync(pattern)\n    .map((filename) => {\n      const locale = getLocaleFromFileName(filename);\n      const translated = JSON.parse(fs.readFileSync(filename, 'utf8'));\n\n      const dest = {};\n      // Copy messages while skipping missing and obsolete ones.\n      for (let key in translated) {\n        if ((args[0] == 'missing' && translated[key].missing) ||\n          (args[0] == 'obsolete' && translated[key].obsolete)) {\n          dest[key] = translated[key];\n        }\n      }\n\n      return { [locale]: dest };\n    })\n    .reduce((collection, descriptors) => {\n      return { ...collection, ...descriptors };\n    }, {});\n\n  console.log(JSON.stringify(extracted, null, 2)+\"\\n\");\n  return;\n}\n\n// The formatjs/cli saves extracted messages into a file {'message_id': {defaultMessage: 'default message text', description: '...'}, ...}.\n// Rewrite them into a single file en.json {'message_id': 'default message text', }.\n\n// Read master-set of messages in default language.\nconst baseMessages = JSON.parse(fs.readFileSync(EXTRACTED_STRINGS, 'utf8'));\n\n// Find messages present in baseMessages but missing in translations and vice versa.\n// Mark missing or obsolete messages as such.\nglobSync(LANG_PATTERN)\n  .map((filename) => {\n    const translated = JSON.parse(fs.readFileSync(filename, 'utf8'));\n    const locale = getLocaleFromFileName(filename);\n\n    // Refresh existing entries with possible new descriptions and default messages, add missing.\n    Object.entries(baseMessages).forEach((ent) => {\n      const [key, value] = ent;\n      let translation = translated[key] ? translated[key].translation : \"\";\n      if (!translation && locale == BASE_LANG) {\n        translation = value.defaultMessage;\n      }\n\n      translated[key] = {\n        translation: translation,\n        defaultMessage: value.defaultMessage,\n        description: value.description,\n        missing: !translation,\n        obsolete: false\n      };\n    });\n\n    // Find no longer needed messages.\n    Object.entries(translated).forEach((ent) => {\n      const [key, value] = ent;\n      if (!baseMessages[key] && translated[key]) {\n        // Obsolete, no longer missing.\n        translated[key].missing = !translated[key].translation;\n        translated[key].obsolete = true;\n      }\n    });\n\n    fs.writeFileSync(filename, JSON.stringify(translated, null, 2)+\"\\n\");\n  });\n\n// Legacy: Combine all translations into a single json {\"lang_1\": {...}, \"lang_2: {...}\"}\n// while removing messages marked as missing or obsolete.\n// New way: Emit one file per language with all unnecessary data stripped.\n\n// Read all translations.\nconst messages = globSync(LANG_PATTERN)\n  .map((filename) => {\n    const locale = getLocaleFromFileName(filename);\n    const translated = JSON.parse(fs.readFileSync(filename, 'utf8'));\n\n    const dest = {};\n    // Copy messages while skipping missing and obsolete ones.\n    for (let key in translated) {\n      if (!translated[key].missing && !translated[key].obsolete) {\n        dest[key] = translated[key].translation;\n      }\n    }\n\n    return { [locale]: dest };\n  })\n  .reduce((collection, descriptors) => {\n    return { ...collection, ...descriptors };\n  }, {});\n\n// Write minified translation files, one per language.\nfor (let lang in messages) {\n  fs.writeFileSync(printf(OUTPUT_PATTERN, lang), JSON.stringify(messages[lang]));\n}\n"
  },
  {
    "path": "service-worker.js",
    "content": "// Must be located at the root.\nimportScripts('https://cdn.jsdelivr.net/npm/firebase@9.14.0/firebase-app-compat.js');\nimportScripts('https://cdn.jsdelivr.net/npm/firebase@9.14.0/firebase-messaging-compat.js');\nimportScripts('firebase-init.js');\nimportScripts('version.js');\n\n// Channel to notify the webapp. There is no BroadcastChannel in Safari.\nconst webAppChannel = (typeof BroadcastChannel == 'function') ?\n  new BroadcastChannel('tinode-sw') : null;\n\n// Basic internationalization.\nconst i18n = {\n  'ar': {\n    'new_message': \"رسالة جديدة\",\n    'new_chat': \"محادثة جديدة\",\n  },\n  'de': {\n    'new_message': \"Neue Nachricht\",\n    'new_chat': \"Neuer Chat\",\n  },\n  'en': {\n    'new_message': \"New message\",\n    'new_chat': \"New chat\",\n  },\n  'fr': {\n    'new_message': \"Nouveau message\",\n    'new_chat': \"Nouvelle conversation\",\n  },\n  'es': {\n    'new_message': \"Nuevo mensaje\",\n    'new_chat': \"Nueva conversación\",\n  },\n  'it': {\n    'new_message': \"Nuovo Messaggio\",\n    'new_chat': \"Nuova Chat\",\n  },\n  'ko': {\n    'new_message': \"새로운 메시지\",\n    'new_chat': \"새로운 채팅\",\n  },\n  'ro': {\n    'new_message': \"Mesaj nou\",\n    'new_chat': \"Chat nou\",\n  },\n  'ru': {\n    'new_message': \"Новое сообщение\",\n    'new_chat': \"Новый чат\",\n  },\n  'th': {\n    'new_message': \"ข้อความใหม่\",\n    'new_chat': \"แชทใหม่\",\n  },\n  'uk': {\n    'new_message': \"Нове повідомлення\",\n    'new_chat': \"Новий чат\",\n  },\n  'vi': {\n    'new_message': \"Tin nhắn mới\",\n    'new_chat': \"Cuộc trò chuyện mới\",\n  },\n  'zh': {\n    'new_message': \"新讯息\",\n    'new_chat': \"新聊天\",\n  },\n  'zh-TW': {\n    'new_message': \"新訊息\",\n    'new_chat': \"新聊天\",\n  }\n};\n\nself.i18nMessage = function (id) {\n  if (!id) {\n    return null;\n  }\n  // Choose translations: given something like 'de-CH', try 'de-CH' then 'de' then 'en'.\n  const lang = i18n[self.locale] || i18n[self.baseLocale] || i18n['en'];\n  // Try finding string by id in the specified language, if missing try English, otherwise use the id itself\n  // as the last resort.\n  return lang[id] || i18n['en'][id] || id;\n}\n\nfirebase.initializeApp(FIREBASE_INIT);\nconst fbMessaging = firebase.messaging();\n\n// This method shows the push notifications while the window is in background.\nfbMessaging.onBackgroundMessage(payload => {\n  // Notify webapp that a message was received.\n  if (webAppChannel) {\n    webAppChannel.postMessage(payload.data);\n  }\n\n  if (payload.data.silent == 'true') {\n    // No need to show anything.\n    return;\n  }\n\n  const titles = { 'msg': 'new_message', 'sub': 'new_chat' };\n  const pushType = payload.data.what || 'msg';\n  const title = payload.data.title || self.i18nMessage(titles[pushType]);\n  if (title) {\n    const options = {\n      body: payload.data.content || '', // TODO: content for 'sub' should be topic's or user's title.\n      icon: '/img/logo96.png', // TODO: use topic's or user's avatar (would have to fetch for 'sub', read from db for 'msg').\n      badge: '/img/badge96.png',\n      tag: payload.data.topic || undefined,\n      data: {\n        topic: payload.data.topic\n      }\n    };\n    return self.registration.showNotification(title, options);\n  }\n});\n\n// Update service worker immediately for both the current client\n// and all other active clients.\nself.addEventListener('install', _ => {\n  self.skipWaiting();\n});\n\n// This code handles a click on notification: takes\n// the user to the browser tab with the chat or opens a new tab.\nself.addEventListener('notificationclick', event => {\n  const data = event.notification.data;\n  event.notification.close();\n  if (!data) {\n    console.info(\"Missing 'data' in notification\", event.notification);\n    return;\n  }\n\n  const urlHash = '#/' + data.topic;\n\n  event.waitUntil(self.clients.matchAll({\n    type: 'window',\n    includeUncontrolled: true\n  })\n    .then(windowClients => {\n      let anyClient = null;\n      for (let i = 0; i < windowClients.length; i++) {\n        const url = new URL(windowClients[i].url);\n        if (url.hash.includes(data.topic)) {\n          // Found the Tinode tab with the right topic open.\n          return windowClients[i].focus();\n        } else {\n          // This will be the least recently used tab.\n          anyClient = windowClients[i];\n        }\n      }\n\n      // Found tab with Tinode on a different topic,\n      // navigate to the right topic.\n      if (anyClient) {\n        const url = new URL(anyClient.url);\n        url.hash = urlHash;\n        return anyClient.focus().then(thisClient => {\n          return thisClient.navigate(url);\n        });\n      }\n\n      // Did not find a Tinode browser tab. Open one.\n      const url = new URL(self.location.origin);\n      url.hash = urlHash;\n      return clients.openWindow(url);\n    }));\n});\n\n// This is needed for 'Add to Home Screen'.\nself.addEventListener('fetch', event => {\n  if (event.request.method != 'GET') {\n    return;\n  }\n\n  event.respondWith((async _ => {\n    //  Try to find the response in the cache.\n    const cache = await caches.open(PACKAGE_VERSION);\n\n    const reqUrl = new URL(event.request.url);\n    // Using ignoreSearch=true to read cached images and docs despite different auth signatures.\n    const cachedResponse = await cache.match(event.request, { ignoreSearch: (self.location.origin == reqUrl.origin) });\n    if (cachedResponse) {\n      return cachedResponse;\n    }\n    // Not found in cache.\n    const response = await fetch(event.request);\n    if (!response || response.status != 200 || response.type != 'basic') {\n      return response;\n    }\n    if (reqUrl.protocol == 'http:' || reqUrl.protocol == 'https:') {\n      await cache.put(event.request, response.clone());\n    }\n    return response;\n  })());\n});\n\n// This code gets the human language from the webapp.\nself.addEventListener('message', event => {\n  const data = JSON.parse(event.data);\n\n  // The locale is used for selecting strings in an appropriate language.\n  self.locale = data.locale || '';\n  self.baseLocale = self.locale.toLowerCase().split(/[-_]/)[0];\n});\n"
  },
  {
    "path": "src/config.js",
    "content": "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.24');\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 = 24;\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\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n\n// Swipe distance to register as a gesture, in pixels.\nexport const MIN_SWIPE_DISTANCE = REM_SIZE * 3;\n\n// Self-topic avatar as an SVG icon encoded as data URI\nexport const SELF_AVATAR_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=' // eslint-disable-line max-len\n\n// Toast display duration, milliseconds.\nexport const TOAST_DURATION = 3_000;\n\n// Initial/default color scheme.\nexport const DEFAULT_COLOR_SCHEME = 'auto';\n\n// Default text size in points.\nexport const DEFAULT_TEXT_SIZE = 10;\n\n// MIME type for the legacy Drafty form-response data.\nexport const DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\n\n// Path to wallpaper images.\nexport const WALLPAPER_DEFAULTS = {type: 'patt', index: 0, path:'img/bkg/'};\n"
  },
  {
    "path": "src/constants.js",
    "content": "// 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"
  },
  {
    "path": "src/dcodes.json",
    "content": "[{\"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\"}]\n"
  },
  {
    "path": "src/i18n/ar.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"حظر جهة الاتصال\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"إلغاء\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"مسح الرسائل\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"مسح الرسائل للجميع\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"مغادرة المحادثة\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"الإبلاغ عن المحادثة\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"جهات الاتصال المؤرشفة ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"غير موثوق به\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"مالك\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"إدارة الموقع\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"موثق/رسمي\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"أنت\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حظر جهة الاتصال هذه؟\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"جهات الاتصال المحظورة ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"إضافة أعضاء\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"إلغاء\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"تأكيد\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"إنشاء\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"حذف الحساب\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"تعديل\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"تسجيل الخروج\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"موافق\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"إعادة تعيين\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"إرسال طلب\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"تسجيل الدخول\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"إنشاء حساب\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"اشتراك\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"تحديث\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"لا يمكن بدء تحميل الملف\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"قناة\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"هذه قناة\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"أنت مدعو لبدء محادثة جديدة. ماذا تريد أن تفعل؟\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"قبول\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"حظر\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"تجاهل\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد مسح جميع الرسائل؟ لا يمكن التراجع عن هذا الإجراء.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"الرمز غير متطابق\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"ليس لديك محادثات\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"لا توجد جهات اتصال تطابق ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"البريد الإلكتروني للتسجيل\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"حذف الحساب\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حذف حسابك؟ لا يمكن التراجع عن هذا الإجراء.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حذف جميع الرسائل للجميع؟ لا يمكن التراجع عن هذا الإجراء.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"تحميل\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"مرفق\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"نموذج:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"صورة\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"البريد الإلكتروني\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"البريد الإلكتروني، مثال: jdoe@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"تفعيل\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"رمز التأكيد\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"معرف غير صالح\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"حجم الملف {size} يتجاوز الحد {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"نسيت كلمة المرور؟\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"الاسم الكامل، مثال: جون دو\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"ممنوح\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"لا يوجد أعضاء\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"معرف المجموعة أو المستخدم\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"وصف الصورة\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"محتوى غير صالح\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"رمز الأمان غير صالح\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"العميل:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"نوع المحتوى:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"وضع الوصول الافتراضي:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"اسم الملف:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"أعضاء المجموعة:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"وضع التخفي:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"صوت الرسالة:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"صامت:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"آخر\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"كلمة المرور\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"الصلاحيات:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"تعليق خاص\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"تنبيهات الإشعارات:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"تنبيهات الإشعارات (يتطلب HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"إرسال بريد إلكتروني لإعادة تعيين كلمة المرور:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"الخادم:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"عنوان الخادم:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"الخادم المراد استخدامه:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"الحجم:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"الاسم\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"جهات الاتصال\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"المعرف:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"نقل البيانات:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"أنت:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"اسمك\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"صلاحياتك:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"آخر ظهور\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد مغادرة هذه المحادثة؟\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"اتصل بنا\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"سياسة الخصوصية\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"شروط الخدمة\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"تسجيل الدخول\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"أرشفة\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"حظر\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"مسح الرسائل\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"مسح للجميع\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"حذف\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"حذف للجميع\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"حذف\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"تعديل الصلاحيات\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"معلومات\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"إزالة\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"كتم\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"رد\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"استعادة\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"إعادة المحاولة\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"إلغاء الحظر\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"إلغاء الكتم\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"جاري الإرسال...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"فشل\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"لا يمكن الوصول إلى الرسائل\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"المراسلة معطلة\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} آخرون\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"رسالة جديدة\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"أدخل كلمة المرور الجديدة\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"لا يوجد اتصال\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"ليس لديك جهات اتصال :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"أرقام فقط\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"متصل الآن\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"كلمة المرور\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"لم يتغير\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"المراسلة معطلة للطرف الآخر\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"الموافقة ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"حذف ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"انضمام ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"مالك ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"تلقي الإشعارات ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"قراءة ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"مشاركة ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"كتابة ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"هاتف\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"مرئي لك فقط\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"فشل في تهيئة الإشعارات\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"تم قطع الاتصال. إعادة الاتصال خلال {seconds}...\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"حاول الآن\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"إعادة تحميل\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حظر والإبلاغ عن هذه المحادثة؟\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"مطلوب\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"حفظ\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"استخدم البحث للعثور على جهات الاتصال\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"لم يسفر البحث عن أي نتائج\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"قائمة مثل alice@example.com، +17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"الإشعارات\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"الدعم\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"إعدادات الحساب\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"المحادثات المؤرشفة\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"المحادثات المحظورة\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"تأكيد بيانات الاعتماد\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"تسجيل الدخول\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"بدء محادثة جديدة\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"إنشاء حساب\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"إعادة تعيين كلمة المرور\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"الإعدادات\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"البقاء متصلاً\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"بحث\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"بواسطة المعرف\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"مجموعة جديدة\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"أضف بعض الوسوم\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"لا توجد وسوم محددة. أضف بعضها.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"جميع جهات الاتصال\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"أعضاء المجموعة\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"إدارة\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"غير موجود\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"الصلاحيات\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"الوسوم (البحث والاكتشاف)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حظر هذه المحادثة؟\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"هل أنت متأكد من أنك تريد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"اسم حر للمجموعة\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"بدون اسم\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"يتوفر تحديث.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"جاري الإنهاء...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"غير موجود\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"وصف اختياري\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"الوصف\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"الأمان\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"اسحب للتعديل\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"عام\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"الأعضاء\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"الأمان\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"معلومات\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"مجهول\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"مصادق عليه\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"حذف المحادثة\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"صلاحيات المستخدم\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"تم إرسال بريد إلكتروني يحتوي على رمز الأمان.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"مؤرشف:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"إعادة توجيه\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"إعادة توجيه إلى\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"البحث عن جهات الاتصال\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"كلمة المرور الجديدة\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"غير مدعوم\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"مكالمة واردة\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"مكالمة صادرة\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"أنت\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"مكالمة فيديو\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"أنت بالفعل في مكالمة جارية!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"تم الإلغاء\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"فائتة\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"تم الرفض\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"تم قطع الاتصال\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"استخدام اتصال آمن\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"تم التأكيد بنجاح\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"تعديل\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"جاري التعديل\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \"، تم التعديل\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"إضافة صورة\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"إرفاق ملف\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"حذف التسجيل\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"إيقاف مؤقت\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"تشغيل\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"تسجيل رسالة صوتية\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"استئناف\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"إرسال رسالة\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"اسحب الملف هنا\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"تسجيل فيديو\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"جارية\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"مكالمة\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"تنسيق هذا الفيديو غير معروف\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"جاري التحميل...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"لدي رمز\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"إرسال رسالة نصية لإعادة تعيين كلمة المرور:\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"رقم الهاتف المحمول\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"تم إرسال رسالة نصية تحتوي على رمز الأمان.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"رقم الهاتف المحمول مطلوب\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"البريد الإلكتروني الحالي\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"رقم الهاتف الحالي\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"بريد إلكتروني جديد\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"رقم هاتف جديد\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"تغيير البريد الإلكتروني\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"تغيير رقم الهاتف\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"مشغول\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"فشل في تهيئة تسجيل الصوت\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"تم إعادة تعيين كلمة المرور بنجاح\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"مسح رمز QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(مُستخدم بالفعل)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"الاسم المستعار (اختياري)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(غير صالح)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"الاسم المستعار:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"الاسم المستعار\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"تم حذف الرسالة\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"لم يتم العثور على الرسالة\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"تثبيت\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"اختر الدولة\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"الرسائل المحفوظة\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"تم النسخ إلى الحافظة\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"إلغاء التثبيت\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"داكن\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"فاتح\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"افتراضي النظام\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"‏المظهر:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"‏حجم النص:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"إخفاء حالة اتصالك ومؤشرات الكتابة.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"إرسال بـ {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"اضغط Enter لسطر جديد\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"إرسال بـ Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"اضغط Shift + Enter لسطر جديد\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"عام\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"لوحة المفاتيح:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"تثبيت\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"إلغاء التثبيت\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"الأعضاء:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"المشتركون:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"صورة\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"نمط\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"استعادة الافتراضي\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"الخلفيات\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"ضبابية:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"مسح معرفي:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"غير معروف\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"حفظ\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"تعذّر تحليل ملف vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"محادثة\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"بحث\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"بطاقة الاتصال\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"جهات الاتصال\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"إضافة أعضاء\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/de.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Kontakt blockieren\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"Abbrechen\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Nachrichten leeren\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Nachrichten für alle löschen\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Unterhaltung verlassen\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Unterhaltung melden\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Archivierte Kontakte ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Verdächtig\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"Besitzer\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Verwaltung\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Verifiziert\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"Sie\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Möchten Sie diesen Kontakt wirklich blockieren?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Blockierte Kontakte ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Mitglieder hinzufügen\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Abbrechen\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Bestätigen\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Erstellen\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Konto löschen\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Bearbeiten\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Abmelden\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Zurücksetzen\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Anfrage senden\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Anmelden\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Anmelden\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Abbonieren\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Aktualisieren\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Datei kann nicht hochgeladen werden.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"Sender\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Dies ist ein Sender\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Akzeptieren\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Blockieren\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignorieren\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Code stimmt nicht überein\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Sie haben keine Unterhaltungen\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Keine Kontakte für ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"E-Mail Adresse für Registrierung\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Konto löschen\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"herunterladen\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Dateianhang\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Formular:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Bild\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"E-Mail\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"E-Mail, z.B. lisam@beispiel.de\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Aktivieren\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ungültige ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Die Dateigröße {size} überschreitet das Limit von {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Passwort vergessen?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Vollständiger Name, z.B. Lisa Musterfrau\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Erteilt\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Keine Mitglieder\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"Gruppe oder Benutzer ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Bildunterschrift\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"ungültiger Inhalt\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Ungültiger Sicherheitsschlüssel\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Inhaltsart:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Standard Zugriffsmodus:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Dateiname:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Gruppenmitglieder:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"inkognito-Modus:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Benachrichtigungston:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Stumm geschaltet:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Andere\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Passwort\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Berechtigungen:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Privater Kommentar\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Benachrichtigungsmeldungen:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Benachrichtigungsmeldungen (erfordert HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Passwort per E-Mail wiederherstellen:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Server:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Server Adresse:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Server verwenden:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Größe:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Name\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Kontakte\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Übertragung per Kabel:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Sie:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Ihr Name\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Ihre Berechtigungen:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Zuletzt gesehen\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Möchten Sie diese Unterhaltung wirklich verlassen?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Kontakt\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Datenschutzerklärung\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Nutzungsbedingungen\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Anmelden\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Archivieren\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Blockieren\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Nachrichten leeren\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Für alle leeren\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Löschen\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Für alle löschen\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Entfernen\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Berechtigungen ändern\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Entfernen\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Unterhaltung stumm schalten\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Wiederherstellen\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Wiederholen\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Blockierung aufheben\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Stumm schalten beenden\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"wird gesendet...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"fehlgeschlagen\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"Neue Nachrichten können nicht gelesen werden\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Nachrichtenübermittlung deaktiviert\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} mehr\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Neue Nachricht\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Geben Sie ein neues Passwort ein\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Keine Verbindung\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Sie haben keine Kontakte :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Nur zahlen\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"jetzt online\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Passwort\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"unverändert\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Gruppennachrichten sind deaktiviert\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Bestätigen ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Entfernen ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Beitreten ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Besitzer ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Benachrichtigt werden ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Lesen ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Teilen ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Schreiben ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"Telefon\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Nur für Sie sichtbar\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Initialisierung von Push-Benachrichtigungen fehlgeschlagen\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Getrennt. Wiederverbinden in {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Jetzt probieren\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Neu laden\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Möchten Sie diese Unterhaltung wirklich blockieren und melden?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Angefordert\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"Speichern\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Nutzen Sie die Suche um Kontakte zu finden\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Die Suche hatte keine Ergebnisse\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Liste: email:lisa@beispiel.de, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Benachrichtigungen\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Unterstützung\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Konto-Einstellungen\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Archivierte Unterhaltungen\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Blockierte Unterhaltungen\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Anmeldeinformationen bestätigen\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Anmelden\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Neue Unterhaltung starten\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Konto erstellen\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Passwort zurücksetzen\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Einstellungen\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Angemeldet bleiben\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"Suchen\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"nach ID\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"Neue Gruppe\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Schlagworte hinzufügen\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Keine Schlagworte definiert. Erstellen Sie welche.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Alle Kontakte\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Gruppenmitglieder\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Verwalten\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Nicht gefunden\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Berechtigungen\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Schlagworte (Nutzer entdecken)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Möchten Sie diese Unterhaltung wirklich blockieren?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Möchten Sie diese Unterhaltung wirklich löschen?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Freiform Name der Gruppe\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Unbenannt\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Aktualisierung verfügbar.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"wird abgeschlossen...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Nicht gefunden\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Beschreibung (optional)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Beschreibung\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Sicherheit\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Allgemein\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Sicherheit\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Zum Anpassen ziehen\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Mitglieder\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anonym\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Authentifiziert\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Chat löschen\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Benutzerberechtigungen\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Eine E-Mail mit Sicherheitscode wurde gesendet.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Archiviert:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Antwort\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Nach vorne\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Weiterleiten\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Kontakte durchsuchen\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Neues Kennwort\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Nicht unterstützt\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Eingehender Anruf\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Ausgehender Anruf\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Du\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Videoanruf\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Du redest schon!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"abgebrochen\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"verpasster\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"abgelehnt\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"getrennt\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Verwenden Sie eine sichere Verbindung\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Erfolgreich bestätigt\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Bearbeiten\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Bearbeitung\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", bearbeitet\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Bild hinzufügen\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Datei anhängen\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Aufnahme löschen\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Wiedergabe pausieren\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Aufnahme abspielen\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Sprachnachricht aufnehmen\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Wiedergabe fortsetzen\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Nachricht senden\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Datei hierher ziehen\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Videoaufnahme\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"in Arbeit\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Anruf\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Das Format dieses Videos wird nicht erkannt\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Laden...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"Ich habe Code\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"SMS zum Zurücksetzen des Passworts senden\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Mobiltelefonnummer\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"Eine SMS mit einem Sicherheitscode wurde gesendet.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Handynummer erforderlich\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Aktuelle E-Mail\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Aktuelle Telefonnummer\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Neue E-Mail\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Neue Telefonnummer\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"E-Mail ändern\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Telefonnummer ändern\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"besetzt\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Audioaufnahme konnte nicht initialisiert werden\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Anpinnen\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Lösen\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Passwort erfolgreich zurückgesetzt\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"QR-Code scannen\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Gespeicherte Nachrichten\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"Nachricht nicht gefunden\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"Nachricht gelöscht\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (optional)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(bereits vergeben)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(ungültig)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Land auswählen\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"In die Zwischenablage kopiert\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Dunkel\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Hell\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Systemstandard\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Thema:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Textgröße:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Online-Status und Tipp-Indikatoren verbergen.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Senden mit {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Drücken Sie Enter für eine neue Zeile\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Senden mit Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Drücken Sie Shift + Enter für eine neue Zeile\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Allgemein\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Tastatur:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Anheften\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Loslösen\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Mitglieder:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Abonnenten:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"Bild\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"Muster\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Standard wiederherstellen\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Hintergrundbilder\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Unschärfe:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Meine ID scannen:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Unbekannt\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Speichern\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"vCard-Datei konnte nicht verarbeitet werden.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Chatten\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Suchen\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Kontaktkarte\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Kontakte\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"Mitglieder hinzufügen\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/en.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Block Contact\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"cancel\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Clear Messages\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Clear Messages for All\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Leave Conversation\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Report Conversation\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Archived contacts ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Untrustworthy\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"owner\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Staff-managed\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Verified/official\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"you\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Are you sure you want to block this contact?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Blocked contacts ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Add members\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Cancel\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Confirm\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Create\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Delete account\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Edit\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Logout\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Reset\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Send request\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Sign in\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Sign up\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Subscribe\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Update\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Cannot initiate file upload.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"channel\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"This is a channel\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"You are invited to start a new chat. What would you like to do?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Accept\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Block\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignore\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Code does not match\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"You have no chats\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"No contacts match ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Your registration email\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Delete account\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"download\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Attachment\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Form:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Picture\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"email\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Email, e.g. jdoe@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Enable\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Confirmation code\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"Invalid ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"The file size {size} exceeds the {limit} limit.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Forgot password?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Full name, e.g. John Doe\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Granted\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"No members\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"Group or User ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Image caption\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"invalid content\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Invalid security token\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Content type:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Default access mode:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"File name:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Group members:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Incognito mode:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Message sound:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Muted:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Other\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Password\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Permissions:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Private comment\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Notification alerts:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Notification alerts (requires HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Send a password reset email:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Server:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Server address:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Server to use:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Size:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Name\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Contacts\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Wire transport:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"You:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Your name\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Your permissions:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Last seen\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Are you sure you want to leave this conversation?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Contact Us\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Privacy Policy\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Terms of Service\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Login\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Archive\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Block\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Clear messages\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Clear for All\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Delete\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Delete for All\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Delete\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Edit permissions\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Remove\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Mute\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Reply\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Restore\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Retry\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Unblock\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Unmute\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"sending...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"failed\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"no access to messages\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Messaging disabled\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} more\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"New message\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Enter new password\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"No connection\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"You have no contacts :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Numbers only\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"online now\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Password\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Unchanged\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Peer's messaging is disabled.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Approve ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Delete ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Join ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Owner ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Get notified ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Read ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Share ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Write ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"phone\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Visible to you only\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Failed to initialize push notifications\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Try now\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Reload\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Are you sure you want to block and report this conversation?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Requested\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"save\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Use search to find contacts\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Search returned no results\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"List like email:alice@example.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Notifications\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Support\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Account Settings\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Archived Chats\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Blocked Chats\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Confirm Credentials\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Sign In\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Start New Chat\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Create Account\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Reset Password\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Settings\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Stay logged in\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"find\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"by id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"new group\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Add some tags\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"No tags defined. Add some.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"All Contacts\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Group Members\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Manage\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Not found\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Permissions\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Tags (search & discovery)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Are you sure you want to block this conversation?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Are you sure you want to delete this conversation?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Freeform name of the group\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Unnamed\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Update available.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"finishing...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Not found\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Optional description\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Description\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Security\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Drag to Adjust\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"General\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Members\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Security\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anonymous\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Authenticated\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Delete Conversation\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"User's Permissions\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"An email with security code has been 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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Archived:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Forward\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Forward to\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Search contacts\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"New password\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Unsupported\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Incoming call\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Outgoing call\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"You\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Video call\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"You already in an ongoing call!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"cancelled\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"missed\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"declined\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"disconnected\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Use secure connection\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Confirmed successfully\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Edit\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Editing\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", edited\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Add image\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Attach file\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Delete\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Pause\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Play\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Record voice message\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Resume\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Send message\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Drag file here\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Video recording\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"in progress\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Call\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Format of this video is not recognized\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Loading...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"I have code\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Send a password reset SMS:\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Mobile phone number\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"A text message with security code has been 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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Mobile phone number required\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Current email\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Current phone number\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"New email\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"New phone number\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Change email\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Change phone number\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"busy\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Failed to initialize audio recording\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Pin\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Unpin\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Password reset successfully\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Scan QR Code\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Notes, messages, links, files saved for posterity\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Saved messages\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"message not found\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"message deleted\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (optional)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(already taken)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(invalid)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Select country\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Copied to clipboard\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Dark\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Light\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"System default\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Theme:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Text size:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Hide your online status and typing indicators.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Send on {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Press Enter for new line\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Send on Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Press Shift + Enter for new line\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"General\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Keyboard:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Pin\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Unpin\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Members:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Subscribers:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} member} other {{count, number} members}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"image\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"pattern\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Restore default\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Wallpapers\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Blur:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Scan my ID:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Unknown\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Save\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Cannot parse vCard file.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Chat\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Find\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Contact Card\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Contacts\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"add members\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/es.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Bloquear contacto\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"cancelar\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Borrar mensajes\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Borrar mensajes para todos\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Dejar conversación\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Reportar conversación\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Contactos archivados ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Suspicaz\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"propietario\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Administración\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Verificado\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"tú\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres bloquear a este contacto?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Contactos bloqueados ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Añadir miembros\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Cancelar\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Confirmar\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Crear\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Eliminar cuenta\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Editar\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Cerrar sesión\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Restablecer\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Enviar petición\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Entrar\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Regístrate\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Suscribirse\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Actualizar\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"No se pudo iniciar la carga del archivo.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"canal\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Este es un canal\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Aceptar\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Bloquear\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignorar\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"El código no coincide\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"No tienes chats\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Ningún contacto coincide con ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Tu correo electrónico de registro\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Eliminar cuenta\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"descargar\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Archivo\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Formulario:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Imagen\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"correo electrónico\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Correo electrónico, p.ej. juan@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Habilitar\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Introduzca el código de confirmación enviado a tu {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID inválido\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"El tamaño del archivo {size} excede el límite de {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"¿Olvidaste tu contraseña?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Nombre completo, p.ej. Juan González Hernández\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Otorgados\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"No hay miembros\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"ID del grupo o usuario\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Añade un comentario\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"contenido inválido\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Token de seguridad inválido\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Cliente:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Tipo de contenido:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Modo de acceso predeterminado:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Nombre del archivo:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Miembros del grupo:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Modo incógnito:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Sonido de mensaje:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Silenciado:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Otros\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Contraseña\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Permisos:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Comentario privado\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Alertas de notificaciones:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Alertas de notificaciones (requiere HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Enviar un correo electrónico de restablecimiento de contraseña:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Servidor:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Dirección del servidor:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Servidor para usar:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Tamaño:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Nombre del tema\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Contactos\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Transporte de alambre:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Tú:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Tu nombre\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Tus permisos:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Últ. vez\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres dejar esta conversación?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Contáctanos\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Política de privacidad\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Términos de uso\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Nombre de usuario\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Archivar\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Bloquear\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Borrar mensajes\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Borrar para todos\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Eliminar\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Eliminar para todos\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Eliminar\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Editar permisos\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Información\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Eliminar\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Silenciar\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Restaurar\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Inténtalo de nuevo\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Desbloquear\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Anular el silencio\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"enviando...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"no se pudo enviar el mensaje\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"sin acceso a mensajes\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"El envío de mensajes está deshabilitado\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} más\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Nuevo mensaje\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Introduzca una nueva contraseña\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Sin conexión\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"No tienes contactos :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Sólo números\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"en línea\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Contraseña\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Sin cambios\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"La mensajería Peer está deshabilitada.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Approbar ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Eliminar ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Unirse ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Propietario ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Ser notificado ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Leer ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Compartir ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Escribir ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"teléfono\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Sólo visible para tí\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Error al inicializar las notificaciones push\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Desconectado. Reconectando en {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Reintentar\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Recargar\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres bloquear y reportar a esta conversación?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Solicitados\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"guardar\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Usa la búsqueda para encontrar contactos\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"La búsqueda no arrojó resultados\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Ej. email:alice@example.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Notificaciones\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Soporte\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Ajustes de la cuenta\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Chats archivados\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Chats bloqueados\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Confirmar credenciales\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Iniciar sesión\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Iniciar un nuevo chat\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Crear cuenta\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Restablecer contraseña\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Ajustes\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Permanecer conectado\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"encontrar\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"por ID\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"nuevo grupo\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Añadir etiquetas\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"No hay etiquetas definidas. Añade unas.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Todos los contactos\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Miembros del grupo\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Gestionar\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"No encontrado\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Permisos\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Etiquetas (descubrimiento de usuarios)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres bloquear esta conversación\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"¿Estás seguro de que quieres eliminar esta conversación?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Nombre del grupo\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Sin nombre\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Actualización disponible.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"terminando...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Usuario no encontrado\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Descripción (opcional)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Descripción\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Seguridad\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Arrastra para ajustar\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"General\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Miembros\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Seguridad\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Información\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anónimo\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Autenticado\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Eliminar chat\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Permisos del usuario\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Se ha enviado un correo electrónico con el código de seguridad.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Archivado:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Respuesta\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Reenviar\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Reenviar a\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Buscar contactos\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Nueva contraseña\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"No soportado\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Llamada entrante\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Llamada saliente\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Tú\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Videollamada\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"¡Ya estás hablando!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"cancelada\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"perdida\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"rechazada\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"desconectada\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Usar conexión segura\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Confirmado con éxito\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Editar\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Edición\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", editado\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Añadir imagen\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Adjuntar archivo\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Eliminar grabación\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Pausar reproducción\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Reproducir grabación\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Grabar mensaje de voz\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Reanudar la reproducción\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Enviar mensaje\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Arrastra el archivo aquí\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Grabación de vídeo\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"en progreso\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Llamada\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"No se reconoce el formato de este video\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Cargando...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"Tengo código\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Enviar SMS para restablecer la contraseña\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Número de teléfono móvil\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"Se ha enviado un mensaje de texto con un código de seguridad.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Número de teléfono móvil requerido\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Correo electrónico actual\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Número de teléfono actual\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Nuevo correo electrónico\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Nuevo número de teléfono\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Cambiar correo electrónico\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Cambiar número de teléfono\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"ocupado\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Fijar\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Desanclar\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Error al inicializar la grabación de audio\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Restablecimiento de contraseña con éxito\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Escanear código QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Notas, mensajes, enlaces, archivos guardados para la posteridad\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Mensajes guardados\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"Mensaje no encontrado\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"Mensaje eliminado\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (opcional)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(ya tomado)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(inválido)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Seleccionar país\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Copiado al portapapeles\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Oscuro\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Claro\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Predeterminado del sistema\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Tema:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Tamaño del texto:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Ocultar tu estado en línea e indicadores de escritura.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Enviar con {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Presiona Enter para nueva línea\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Enviar con Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Presiona Shift + Enter para nueva línea\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"General\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Teclado:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Fijar\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Desfijar\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Miembros:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Suscriptores:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"imagen\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"patrón\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Restaurar predeterminado\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Fondos de pantalla\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Desenfoque:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Escanear mi ID:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Desconocido\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Guardar\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"No se puede analizar el archivo vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Chatear\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Buscar\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Tarjeta de contacto\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Contactos\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"añadir miembros\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/ex/base-en.json",
    "content": "{\n  \"action_block_contact\": {\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\"\n  },\n  \"action_cancel\": {\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\"\n  },\n  \"action_clear_messages\": {\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\"\n  },\n  \"action_delete_messages\": {\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\"\n  },\n  \"action_leave_chat\": {\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\"\n  },\n  \"action_report_chat\": {\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\"\n  },\n  \"add_members_prompt\": {\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\"\n  },\n  \"alias_already_taken\": {\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\"\n  },\n  \"alias_editing_placeholder\": {\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\"\n  },\n  \"alias_invalid\": {\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\"\n  },\n  \"already_in_call\": {\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\"\n  },\n  \"archived_contacts\": {\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\"\n  },\n  \"badge_danger\": {\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\"\n  },\n  \"badge_owner\": {\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\"\n  },\n  \"badge_staff\": {\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\"\n  },\n  \"badge_verified\": {\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\"\n  },\n  \"badge_you\": {\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\"\n  },\n  \"block_contact_warning\": {\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\"\n  },\n  \"blocked_contacts_link\": {\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\"\n  },\n  \"button_add_members\": {\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\"\n  },\n  \"button_cancel\": {\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\"\n  },\n  \"button_confirm\": {\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\"\n  },\n  \"button_create\": {\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\"\n  },\n  \"button_delete_account\": {\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\"\n  },\n  \"button_edit\": {\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\"\n  },\n  \"button_logout\": {\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\"\n  },\n  \"button_ok\": {\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\"\n  },\n  \"button_reset\": {\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\"\n  },\n  \"button_restore\": {\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\"\n  },\n  \"button_security\": {\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\"\n  },\n  \"button_send_request\": {\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\"\n  },\n  \"button_sign_in\": {\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\"\n  },\n  \"button_sign_up\": {\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\"\n  },\n  \"button_subscribe\": {\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\"\n  },\n  \"button_update\": {\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\"\n  },\n  \"call_busy\": {\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\"\n  },\n  \"call_cancelled\": {\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\"\n  },\n  \"call_declined\": {\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\"\n  },\n  \"call_disconnected\": {\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\"\n  },\n  \"call_in_progress\": {\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\"\n  },\n  \"call_missed\": {\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\"\n  },\n  \"calls_incoming\": {\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\"\n  },\n  \"calls_outgoing\": {\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\"\n  },\n  \"calls_you_label\": {\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\"\n  },\n  \"cannot_initiate_file_upload\": {\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\"\n  },\n  \"cannot_parse_vcard\": {\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\"\n  },\n  \"change_email\": {\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\"\n  },\n  \"change_phone\": {\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\"\n  },\n  \"channel\": {\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\"\n  },\n  \"channel_prompt\": {\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\"\n  },\n  \"chat_invitation\": {\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\"\n  },\n  \"chat_invitation_accept\": {\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\"\n  },\n  \"chat_invitation_block\": {\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\"\n  },\n  \"chat_invitation_ignore\": {\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\"\n  },\n  \"chat_now\": {\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\"\n  },\n  \"clear_messages_warning\": {\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\"\n  },\n  \"code_doesnot_match\": {\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\"\n  },\n  \"color_schema_dark\": {\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\"\n  },\n  \"color_schema_light\": {\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\"\n  },\n  \"color_schema_system\": {\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\"\n  },\n  \"contacts_not_found\": {\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\"\n  },\n  \"contacts_not_found_short\": {\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\"\n  },\n  \"cred_confirmed_successfully\": {\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\"\n  },\n  \"credential_email_prompt\": {\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\"\n  },\n  \"current_email\": {\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\"\n  },\n  \"current_phone\": {\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\"\n  },\n  \"delete_account\": {\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\"\n  },\n  \"delete_account_warning\": {\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\"\n  },\n  \"delete_messages_warning\": {\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\"\n  },\n  \"description_editing_placeholder\": {\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\"\n  },\n  \"download_action\": {\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\"\n  },\n  \"drafty_attachment\": {\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\"\n  },\n  \"drafty_form\": {\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\"\n  },\n  \"drafty_image\": {\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\"\n  },\n  \"drafty_unknown\": {\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\"\n  },\n  \"drafty_video\": {\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\"\n  },\n  \"drag_file\": {\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\"\n  },\n  \"editing_message\": {\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\"\n  },\n  \"email_dative\": {\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\"\n  },\n  \"email_prompt\": {\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\"\n  },\n  \"enable_peers_messaging\": {\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\"\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\"\n  },\n  \"error_invalid_id\": {\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\"\n  },\n  \"failed_to_init_audio\": {\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\"\n  },\n  \"file_attachment_too_large\": {\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\"\n  },\n  \"find_user\": {\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\"\n  },\n  \"forgot_password_link\": {\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\"\n  },\n  \"forward_to\": {\n    \"defaultMessage\": \"Forward to\"\n  },\n  \"forward_to_search_placeholder\": {\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\"\n  },\n  \"full_name_prompt\": {\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\"\n  },\n  \"granted_permissions\": {\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\"\n  },\n  \"group_has_no_members\": {\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\"\n  },\n  \"group_user_id_prompt\": {\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\"\n  },\n  \"icon_title_add_image\": {\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\"\n  },\n  \"icon_title_attach_file\": {\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\"\n  },\n  \"icon_title_delete\": {\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\"\n  },\n  \"icon_title_pause\": {\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\"\n  },\n  \"icon_title_play\": {\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\"\n  },\n  \"icon_title_record_voice\": {\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\"\n  },\n  \"icon_title_resume\": {\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\"\n  },\n  \"icon_title_send\": {\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\"\n  },\n  \"image_caption_prompt\": {\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\"\n  },\n  \"incognito_mode_description\": {\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\"\n  },\n  \"invalid_content\": {\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\"\n  },\n  \"invalid_security_token\": {\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\"\n  },\n  \"label_alias\": {\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\"\n  },\n  \"label_alias_edit\": {\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\"\n  },\n  \"label_blur_wallpaper\": {\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\"\n  },\n  \"label_client\": {\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\"\n  },\n  \"label_color_schema\": {\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\"\n  },\n  \"label_contact_card\": {\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\"\n  },\n  \"label_contacts\": {\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\"\n  },\n  \"label_content_type\": {\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\"\n  },\n  \"label_default_access_mode\": {\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\"\n  },\n  \"label_description\": {\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\"\n  },\n  \"label_file_name\": {\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\"\n  },\n  \"label_group_members\": {\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\"\n  },\n  \"label_incognito_mode\": {\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\"\n  },\n  \"label_keyboard\": {\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\"\n  },\n  \"label_member_count\": {\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\"\n  },\n  \"label_message_sound\": {\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\"\n  },\n  \"label_muting_topic\": {\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\"\n  },\n  \"label_new_password\": {\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\"\n  },\n  \"label_other_user\": {\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\"\n  },\n  \"label_password\": {\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\"\n  },\n  \"label_permissions\": {\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\"\n  },\n  \"label_private\": {\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\"\n  },\n  \"label_push_notifications\": {\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\"\n  },\n  \"label_push_notifications_disabled\": {\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\"\n  },\n  \"label_reset_password\": {\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\"\n  },\n  \"label_reset_password_tel\": {\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\"\n  },\n  \"label_scan_id\": {\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\"\n  },\n  \"label_sdk\": {\n    \"defaultMessage\": \"SDK:\"\n  },\n  \"label_server\": {\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\"\n  },\n  \"label_server_address\": {\n    \"defaultMessage\": \"Server address:\"\n  },\n  \"label_server_to_use\": {\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\"\n  },\n  \"label_size\": {\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\"\n  },\n  \"label_subscriber_count\": {\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\"\n  },\n  \"label_text_size\": {\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\"\n  },\n  \"label_topic_name\": {\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\"\n  },\n  \"label_unarchive_topic\": {\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\"\n  },\n  \"label_use_secure_connection\": {\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\"\n  },\n  \"label_user_contacts\": {\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\"\n  },\n  \"label_user_id\": {\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\"\n  },\n  \"label_wire_transport\": {\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\"\n  },\n  \"label_you\": {\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\"\n  },\n  \"label_your_name\": {\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\"\n  },\n  \"label_your_permissions\": {\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\"\n  },\n  \"last_seen_timestamp\": {\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\"\n  },\n  \"leave_chat_warning\": {\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\"\n  },\n  \"link_contact_us\": {\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\"\n  },\n  \"link_privacy_policy\": {\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\"\n  },\n  \"link_terms_of_service\": {\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\"\n  },\n  \"loading_note\": {\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\"\n  },\n  \"login_prompt\": {\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\"\n  },\n  \"member_count\": {\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\"\n  },\n  \"menu_item_archive_topic\": {\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\"\n  },\n  \"menu_item_audio_call\": {\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\"\n  },\n  \"menu_item_block\": {\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\"\n  },\n  \"menu_item_clear_messages\": {\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\"\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\"\n  },\n  \"menu_item_delete\": {\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\"\n  },\n  \"menu_item_delete_for_all\": {\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\"\n  },\n  \"menu_item_delete_topic\": {\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\"\n  },\n  \"menu_item_edit\": {\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\"\n  },\n  \"menu_item_edit_permissions\": {\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\"\n  },\n  \"menu_item_forward\": {\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\"\n  },\n  \"menu_item_info\": {\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\"\n  },\n  \"menu_item_member_delete\": {\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\"\n  },\n  \"menu_item_mute\": {\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\"\n  },\n  \"menu_item_reply\": {\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\"\n  },\n  \"menu_item_restore_topic\": {\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\"\n  },\n  \"menu_item_send_retry\": {\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\"\n  },\n  \"menu_item_unblock\": {\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\"\n  },\n  \"menu_item_unmute\": {\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\"\n  },\n  \"menu_item_video_call\": {\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\"\n  },\n  \"message_deleted\": {\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\"\n  },\n  \"message_edited_marker\": {\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\"\n  },\n  \"message_not_found\": {\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\"\n  },\n  \"message_sending\": {\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\"\n  },\n  \"message_sending_failed\": {\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\"\n  },\n  \"messages_not_readable\": {\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\"\n  },\n  \"messaging_disabled_prompt\": {\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\"\n  },\n  \"mobile_number_required\": {\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\"\n  },\n  \"mobile_phone_number\": {\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\"\n  },\n  \"more_online_members\": {\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\"\n  },\n  \"new_email\": {\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\"\n  },\n  \"new_message_prompt\": {\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\"\n  },\n  \"new_password_placeholder\": {\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\"\n  },\n  \"new_phone_number\": {\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\"\n  },\n  \"no_connection\": {\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\"\n  },\n  \"no_contacts\": {\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\"\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\"\n  },\n  \"online_now\": {\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\"\n  },\n  \"panel_title_crop\": {\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\"\n  },\n  \"panel_title_general\": {\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\"\n  },\n  \"panel_title_info\": {\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\"\n  },\n  \"panel_title_members\": {\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\"\n  },\n  \"panel_title_security\": {\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\"\n  },\n  \"password_i_have_code\": {\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\"\n  },\n  \"password_prompt\": {\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\"\n  },\n  \"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    \"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  \"password_reset_success\": {\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\"\n  },\n  \"password_unchanged_prompt\": {\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\"\n  },\n  \"peers_messaging_disabled\": {\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\"\n  },\n  \"permission_admin\": {\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\"\n  },\n  \"permission_delete\": {\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\"\n  },\n  \"permission_join\": {\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\"\n  },\n  \"permission_owner\": {\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\"\n  },\n  \"permission_pres\": {\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\"\n  },\n  \"permission_read\": {\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\"\n  },\n  \"permission_share\": {\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\"\n  },\n  \"permission_write\": {\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\"\n  },\n  \"permissions_anonymous\": {\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\"\n  },\n  \"permissions_authenticated\": {\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\"\n  },\n  \"permissions_user\": {\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\"\n  },\n  \"phone_dative\": {\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\"\n  },\n  \"pin_chat\": {\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\"\n  },\n  \"pin_message\": {\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\"\n  },\n  \"private_editing_placeholder\": {\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\"\n  },\n  \"push_init_failed\": {\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\"\n  },\n  \"reconnect_countdown\": {\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\"\n  },\n  \"reconnect_now\": {\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\"\n  },\n  \"reload_update\": {\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\"\n  },\n  \"report_chat_warning\": {\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\"\n  },\n  \"requested_permissions\": {\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\"\n  },\n  \"save_action\": {\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\"\n  },\n  \"save_attachment\": {\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\"\n  },\n  \"scan_qr_code\": {\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\"\n  },\n  \"search_for_contacts\": {\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\"\n  },\n  \"search_no_results\": {\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\"\n  },\n  \"search_placeholder\": {\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\"\n  },\n  \"select_country\": {\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\"\n  },\n  \"self_topic_comment\": {\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\"\n  },\n  \"self_topic_name\": {\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\"\n  },\n  \"send_command\": {\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\"\n  },\n  \"send_command_explained\": {\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\"\n  },\n  \"send_plain\": {\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\"\n  },\n  \"send_plain_explained\": {\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\"\n  },\n  \"sidepanel_title_acc_general\": {\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\"\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\"\n  },\n  \"sidepanel_title_acc_support\": {\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\"\n  },\n  \"sidepanel_title_account_settings\": {\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\"\n  },\n  \"sidepanel_title_archive\": {\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\"\n  },\n  \"sidepanel_title_blocked\": {\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\"\n  },\n  \"sidepanel_title_cred\": {\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\"\n  },\n  \"sidepanel_title_login\": {\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\"\n  },\n  \"sidepanel_title_newtpk\": {\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\"\n  },\n  \"sidepanel_title_register\": {\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\"\n  },\n  \"sidepanel_title_reset\": {\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\"\n  },\n  \"sidepanel_title_settings\": {\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\"\n  },\n  \"stay_logged_in\": {\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\"\n  },\n  \"subscriber_count\": {\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\"\n  },\n  \"tabtitle_find_user\": {\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\"\n  },\n  \"tabtitle_group_by_id\": {\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\"\n  },\n  \"tabtitle_image\": {\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\"\n  },\n  \"tabtitle_new_group\": {\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\"\n  },\n  \"tabtitle_pattern\": {\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\"\n  },\n  \"tags_editor_no_tags\": {\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\"\n  },\n  \"tags_not_found\": {\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\"\n  },\n  \"text_copied\": {\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\"\n  },\n  \"title_all_contacts\": {\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\"\n  },\n  \"title_group_members\": {\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\"\n  },\n  \"title_manage_tags\": {\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\"\n  },\n  \"title_not_found\": {\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\"\n  },\n  \"title_permissions\": {\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\"\n  },\n  \"title_tag_manager\": {\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\"\n  },\n  \"topic_block_warning\": {\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\"\n  },\n  \"topic_delete\": {\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\"\n  },\n  \"topic_delete_warning\": {\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\"\n  },\n  \"topic_name_editing_placeholder\": {\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\"\n  },\n  \"unknown_name\": {\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\"\n  },\n  \"unnamed_topic\": {\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\"\n  },\n  \"unpin_chat\": {\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\"\n  },\n  \"unpin_message\": {\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\"\n  },\n  \"unrecognized_video_format\": {\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\"\n  },\n  \"update_available\": {\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\"\n  },\n  \"upload_finishing\": {\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\"\n  },\n  \"user_not_found\": {\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\"\n  },\n  \"wallpapers\": {\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\"\n  }\n}\n"
  },
  {
    "path": "src/i18n/fr.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Bloquer le Contact\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"annuler\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Effacer les Messages\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Effacer les Messages pour Tous\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Quitter la Conversation\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Signaler la Conversation\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Contacts archivés ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Non fiable\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"propriétaire\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Géré par le Staff\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Vérifié / Officiel\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"vous\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Êtes-vous sûr de bloquer le contact ?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Contacts bloqués ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Ajouter des membres\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Annuler\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Confirmer\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Créer\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Supprimer le compte\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Modifier\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Déconnexion\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Remettre à Zéro\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Envoyer une demande\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Connexion\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Créer un compte\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"S'abonner\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Mettre à jour\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Impossible de démarrer l'envoi.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"canal\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"C'est un canal\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Accepter\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Bloquer\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignorer\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Le code ne correspond pas\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Vous n'avez aucune conversation\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Aucun contact ne correspond à ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Votre email d'enregistrement\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Supprimer le compte\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"télécharger\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Pièce(s) jointe(s)\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Formulaire:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Image\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"email\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Email, par exemple jdoe@exemple.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Activer\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Entrez le code de confirmation envoyé par {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"Identifiant invalide\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Le fichier de taille {size} dépasse la limite de {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Mot de passe oublié ?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Nom complet, par exemple John Doe\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Accordé\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Aucun membre\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"Identifiant d'utilisateur ou de groupe\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Description de l'image\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"contenu invalide\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Token de sécurité invalide\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client :\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Type de contenu :\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Mode d'accès par défaut :\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Nom du fichier :\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Membres du groupe :\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Mode incognito :\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Son du message :\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Mué :\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Autre\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Mot de passe\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Permissions :\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Commentaire privé\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Notifications :\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Notifications (requière HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Envoyer un mail de remise à zéro de mot de passe :\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK :\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Serveur :\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Adresse du serveur :\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Serveur à utiliser :\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Taille :\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Nom\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Contacts\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID :\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Transport par cable :\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Vous :\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Votre nom\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Vos permissions :\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Vu pour la dernière fois\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir quitter cette conversation ?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Contactez Nous\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Politique de confidentialité\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Conditions d'utilisation\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Connexion\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Archiver\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Bloquer\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Effacer les messages\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Effacer pour Tous\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Supprimer\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Supprimer pour Tous\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Supprimer\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Modifier les permissions\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Informations\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Supprimer\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Rendre muer\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Répondre\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Restorer\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Réessayer\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Débloquer\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Recevoir à nouveau\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"envoi en cours...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"échoué\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"aucun accès aux messages\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Discussion désactivée\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} de plus\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Nouveau message\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Entrez un nouveau mot de passe\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Aucune connexion\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Vous n'avez pas de contacts :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Nombres seulement\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"en ligne\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Mot de passe\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Non changé\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"La messagerie point à point est désactivée.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Approver ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Supprimer ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Rejoindre ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Propriétaire ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Recevoir une notification ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Lire ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Partager ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Ecrire ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"téléphone\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Visible par vous seulement\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Impossible d'initialiser les notifications push\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Déconnecté. Reconnexion dans {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Essayer maintenant\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Recharger\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Demandé\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"sauvegarder\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Utilisez la recherche pour trouver des contacts\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"La recherche n'a donné aucun résultat\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Liste comme email:alice@exemple.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Notifications\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Support\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Paramètres du compte\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Conversations Archivées\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Conversations Bloquées\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Confirmer les identifiants\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Se Connecter\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Démarrer une nouvelle Conversation\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Créer un compte\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Remettre à Zéro le Mot de Passe\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Paramètres\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Rester connecté\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"trouver\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"par identifiant\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"nouveau groupe\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Ajouter des étiquettes\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Aucune étiquette définie. Ajoutez en.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Tous les Contacts\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Membres du Groupe\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Gérer\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Pas trouvé\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Permissions\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Etiquettes (recherche & découverte)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir bloquer cette conversation ?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Êtes-vous sûr de vouloir supprimer cette conversation ?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Nom libre du groupe\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Non nommé\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Mise à jour disponible.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"fin...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Pas trouvé\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Description facultative\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Description\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Sécurité\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Déplacez pour ajuster\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Général\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Membres\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Sécurité\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Informations\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anonyme\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Authentifié\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Supprimer la Conversation\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Permissions d'Utilisateur\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Un e-mail avec code de sécurité a été envoyé.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Archivé:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Transférer\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Transférer à\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Rechercher des contacts\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Nouveau mot de passe\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Non supporté\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Vous êtes déjà dans un appel en cours!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"annulé\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"refusé\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"manqué\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Appel entrant\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Appel sortant\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Tu\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Appel vidéo\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"débranché\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Utiliser une connexion sécurisée\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Confirmé avec succès\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Modifier\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Édition\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", édité\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Ajouter une image\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Pièce jointe\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Supprimer l'enregistrement\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Interrompre la lecture\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Lire l'enregistrement\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Enregistrer un message vocal\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Reprendre la lecture\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Envoyer le message\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Faites glisser le fichier ici\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Enregistrement video\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"en cours\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Appel\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Le format de cette vidéo n'est pas reconnu\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Chargement...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"J'ai du code\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Envoyer un SMS pour réinitialiser le mot de passe\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Numéro de téléphone mobile\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"Un message texte avec un code de sécurité a été envoyé.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Numéro de téléphone portable requis\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Courriel actuel\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Numéro de téléphone actuel\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Nouvel e-mail\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Nouveau numéro de téléphone\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Modifier l'e-mail\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Modifier le numéro de téléphone\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"occupé\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Épingler\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Détacher\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Échec de l'initialisation de l'enregistrement audio\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Mot de passe réinitialisé avec succès\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Scanner le code QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Notes, messages, liens, fichiers sauvegardés\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Messages sauvegardés\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"message introuvable\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"message supprimé\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (facultatif)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(déjà utilisé)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(invalide)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Sélectionner un pays\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Copié dans le presse-papiers\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Sombre\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Clair\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Thème du système\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Thème :\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Taille du texte :\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Masquer votre statut en ligne et les indicateurs de frappe.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Envoyer avec {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Appuyez sur Entrée pour une nouvelle ligne\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Envoyer avec Entrée\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Appuyez sur Shift + Entrée pour une nouvelle ligne\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Général\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Clavier :\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Épingler\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Désépingler\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Membres :\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Abonnés :\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} membre} other {{count, number} membres}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"image\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"motif\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Restaurer par défaut\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Fonds d'écran\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Flou :\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Scanner mon ID :\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Inconnu\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Enregistrer\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Impossible d'analyser le fichier vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Discuter\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Rechercher\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Carte de contact\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Contacts\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"ajouter des membres\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/it.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Bloccare contatto\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"cancella\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Cancella messaggi\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Cancella messaggi per tutti\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Lascia la conversazione\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Report conversazione\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Contatti archiviati ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Sospetto\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"propietario\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Amministrazione\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Verificato\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"tu\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Sei sicuro di bloccare questo contatto?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Contatti bloccati ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Aggiungi membri\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Cancella\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Conferma\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Crea\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Elimina account\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Editare\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Fine sessione\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Reset\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Invia richiesta\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Entrare\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Registrazione\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Sottoscrivi\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Aggiorna\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Non è possibile iniziare il caricamento dell'archivio.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"canale\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Questo è un canale\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Accettare\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Bloccare\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignorare\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Il codice non conicide\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Non hai chats\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Nessun contatto coincide con ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"La tua mail di registrazione\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Elimina l'account\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"Scarica\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Allegato\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Form:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Immagine\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"posta elettronica\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Posta elettronica, per es. mario@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Abilitare\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Inserire il codice di conferma {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID non valido\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"La grandezza del file {size} eccede il limite di {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Hai dimenticato la password?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Nome completo, per es. Mario Rossi\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Garantito\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Non hai membri\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"ID del gruppo o dell'utente\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Aggiungi un'immagine\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"contenuto non valido\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Token di sicurezza invalido\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Cliente:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Tipo di contenuto:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Modalità di accesso predefinito:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Nome del file:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Membri del gruppo:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Modalità incognito:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Suono del messaggio:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Silenziato:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Altri\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Password\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Permessi:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Commento privato\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Allarmi di notifica:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Allarmi di notifica (richiede HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Invia una mail per il reset della password:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Server:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Indirizzo del server:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Server da usare:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Grandezza:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Nome dell'argomento\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Contatti\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Tipo di Trasporto:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Tu:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Il tuo nome\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"I tuoi permessi:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Ultimo visto\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Sei sicuro di voler lasciare questa conversazione?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Contattaci\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Política della privacy\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Termini d'uso del servizio\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Nome dell'utente\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Archivia\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Bloccare\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Cancella i messaggi\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Cancella per tutti\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Elimina\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Elimina per tutti\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Eliminare\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Modifica permessi\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Informazioni\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Eliminare\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Silenziare\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Ripristinare\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Riprova\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Sblocca\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Riattiva le notifiche\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"invio...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"non è possibile inviare il messaggio\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"nessun accesso ai messaggi\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"L'invio dei messaggi è disabilitato\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} e oltre\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Nuovo messaggio\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Inserire nuova password\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Nessuna connessione\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Non ci sono contatti :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Solo numeri\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"in linea\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Password\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Non è cambiata\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"I messaggi punto punto sono disabilitati.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Approvare ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Eliminare ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Unisci ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Propietario ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Notifica arrivata ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Leggi ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Condividi ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Scrivi ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"telefono\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Visibile solo a te\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Non è possibile inizializzare le notifiche push\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Disconnesso. Riconnessione in {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Riprovare\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Ricaricare\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Sei sicuro di bloccare e denunciare questa conversazione?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Sollecito\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"salva\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Usa la ricerca per trovare i contatti\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"La ricerca non ha trovato nessun risultato\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Elenca come: email:mario@example.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Notifiche\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Supporto\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Impostazioni dell'account\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Chats archiviate\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Chats bloccate\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Conferma le credenziali\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Entra\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Comincia una Nuova Chat\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Creare Account\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Resetta la Password\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Impostazioni\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Rimani loggato\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"cerca\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"per ID\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"nuovo gruppo\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Aggiungi alcune etichette\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Non ci sono etichette definite. Aggiungine alcune.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Tutti i contatti\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Membri del gruppo\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Gestisci\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Non trovato\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Permessi\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Etichette (trova e scopri)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Sei sicuro di voler bloccare questa conversazione?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Sei sicuro di voler eliminare questa conversazione?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Nome del gruppo\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Senza nome\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Aggiornamento disponibile.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"sto terminando...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Non trovato\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Descrizione (opzionale)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Descrizione\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Sicurezza\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Trascina per aggiustare\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Generale\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Membri\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Sicurezza\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Informazione\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anonimo\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Autenticato\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Elimina la conversazione\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Permessi dell'utente\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Una mail con il codice di sicurezza è stata inviata.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Archiviato:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Replica\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Reinvia\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Reinvia a\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Cerca i contatti\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Nuova password\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Non supportato\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Chiamata in arrivo\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Chiamata in uscita\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Tu\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Videochiamata\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Sei già in una chiamata in uscita!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"cancellata\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"persa\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"rifiutata\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"disconnessa\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Usa una connessione sicura\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Confermato con successo\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Modifica\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Edita\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", editando\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Aggiungi immagine\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Allega un file\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Eliminare la registrazione\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Riproduzione in pausa\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Riproduci la registrazione\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Registra un messaggio vocale\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Riprendi la riproduzione\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Inviare il messaggio\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Trascina il file qui\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Registrazione video\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"avanzamento\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Chiamata\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Il formato di questo video non è riconosciuto\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Caricando...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"Ho un codice\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Invia un SMS per resettare la password\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Numero di telefono cellulare\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"Un SMS con il codice di sicurezza è stato inviato.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"E' richiesto il numero di telefono cellulare\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Email attuale\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Numero di telefono attuale\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Nuova email\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Nuovo numero di telefono\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Cambiare l'indirizzo di posta elettronica\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Cambiare numero di telefono\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"occupato\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Fissare\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Rimuovere\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Non è possibile cominciare la registrazione audio\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Il reset della password è avvenuto con successo\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Scansionare il codice QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Note, messaggi, links e archivi, sono salvati per i posteri\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Messaggi salvati\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"Messaggi non trovati\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"Messaggi eliminati\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (opzionale)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(già utilizzato)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(invalido)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Seleziona la nazione\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Copia nella clipboard\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Nascondi il tuo stato online e gli indicatori di digitazione.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Invia con {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Premi Invio per una nuova riga\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Invia con Invio\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Premi Shift + Invio per una nuova riga\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Generale\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Tastiera:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Scuro\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Chiaro\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Predefinito del sistema\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Tema:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Dimensione testo:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Fissa\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Sblocca\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Membri:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Iscritti:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} membro} other {{count, number} membri}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"immagine\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"motivo\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Ripristina predefinito\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Sfondi\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Sfocatura:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Scansiona il mio ID:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Sconosciuto\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Salva\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Impossibile analizzare il file vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Chatta\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Cerca\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Scheda contatto\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Contatti\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"aggiungi membri\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/ko.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"연락차단\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"취소\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"메시지지우기\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"모든메시지지우기\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"대화나누기\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"대화기록\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"보관된연락처({수})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"의심 많은\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"소유자\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"직원 관리하에\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"확인 됨\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"당신\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"이연락처를차단하시겠습니까?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"차단된연락처({수})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"회원추가\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"취소\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"확인\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"작성\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"계정삭제\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"편집\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"로그아웃\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"재설정\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"요청보내기\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"로그인\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"가입\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"구독\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"업데이트\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"파일업로드를시작할수없습니다.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"채널\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"이 채널입니다\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"수락\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"차단\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"무시\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"모든메시지를지우시겠습니까?실행취소할수없습니다.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"코드가일치하지않습니다\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"채팅이없습니다\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"'{문의}'와일치하는연락처가없습니다.\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"등록이메일\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"계정삭제\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"계정을삭제하시겠습니까?실행취소할수없습니다.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"다운로드\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"부착\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"형태:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"이미지\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"이메일\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"이메일(예:hong@example.com)\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"활성화\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"{방법}으로보낸확인코드를입력하십시오:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"잘못된ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"파일크기{크기}이(가){제한}제한을초과합니다.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"비밀번호를잊으셨습니까?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"전체이름(예:홍길동)\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"승낙하다\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"회원없음\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"그룹또는사용자ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"이미지설명\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"잘못된내용\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"유효하지않은보안토큰\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"클라이언트: \",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"컨텐츠유형: \",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"기본액세스모드: \",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"파일이름: \",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"그룹회원: \",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"시크릿모드: \",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"메시지소리: \",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"음소거: \",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"기타\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"비밀번호\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"권한: \",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"개인코멘트\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"통지경보: \",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"통지경보(HTTPS필요): \",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"비밀번호재설정이메일보내기: \",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"서버: \",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"서버주소: \",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"사용할서버:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"크기: \",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"이름\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"연락처\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"와이어수송:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"당신: \",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"이름\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"권한: \",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"마지막으로본\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"이대화를나가시겠습니까?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"문의처\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"개인정보보호정책\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"서비스약관\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"로그인\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"보관\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"차단\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"메시지지우기\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"모두지우기\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"삭제\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"모두삭제\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"삭제\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"편집권한\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"정보\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"제거\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"음소거\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"복원\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"다시시도\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"차단해제\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"음소거해제\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"보내기...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"실패\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"메시지에 액세스 할 수 없습니다\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"메시지비활성화\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{넘침}더보기\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"새메시지\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"새비밀번호입력\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"연결없음\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"연락처가없습니다 (._.)\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"숫자만\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"현재접속중\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"비밀번호\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"변경되지않음\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"동료의메시지가비활성화되었습니다.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"승인({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"삭제({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"참여({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"소유자({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"알림받기({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"읽기({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"공유({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"쓰기({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"전화\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"나만볼수있습니다\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"푸시알림을초기화하지못했습니다\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"연결이끊어졌습니다.다시연결하는중{초}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"지금시도\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"재로드\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"이대화를차단하고기록하시겠습니까?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"요청\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"저장\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"검색을사용하여연락처찾기\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"검색결과가없습니다\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"email:alice@example.com,tel:17025550003...와같은목록\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"알림\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"지원\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"계정설정\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"보관된채팅\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"차단된채팅\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"자격증명확인\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"로그인\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"새채팅시작\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"계정만들기\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"비밀번호재설정\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"설정\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"로그인상태유지\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"찾기\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"id로\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"새그룹\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"일부태그추가\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"태그가정의되지않았습니다.일부를추가하십시오.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"모든연락처\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"그룹구성원\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"관리\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"찾을수없음\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"권한\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"태그(사용자검색)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"이대화를차단하시겠습니까?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"이대화를삭제하시겠습니까?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"그룹의자유형이름\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"이름없는\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"업데이트가능.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"마무리...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"찾을수없음\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"설명(선택 사항)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"설명\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"보안\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"드래그하여 조정\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"일반\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"구성원\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"보안\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"정보\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"익명\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"인증됨\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"채팅 삭제\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"사용자 권한\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"보안 코드가 포함된 이메일이 전송되었습니다.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"보관됨:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"회신하다\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"리디렉션\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"메시지를 리디렉션\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"연락처 검색\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"새 비밀번호\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"지원되지 않음\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"수신 전화\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"발신 전화\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"너\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"영상 통화\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"당신은 이미 말하고 있습니다!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"취소 된\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"부재중\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"통화 거부\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"연결 끊김\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"보안 연결 사용\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"성공적으로 확인됨\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"편집\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"교정하다\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \" 수정됨\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"이미지 추가\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"파일을 첨부\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"녹음 삭제\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"재생 일시 중지\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"녹음 재생\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"음성 메시지 녹음\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"재생 재개\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"문자 보내\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"여기로 파일 드래그\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"녹화\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"통화 중\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"전화\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"이 동영상의 형식을 인식할 수 없습니다.\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"로드 중...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"코드가 있습니다\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"비밀번호 재설정을 위해 SMS 보내기\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"휴대전화 번호\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"보안 코드가 포함된 문자 메시지가 전송되었습니다.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"휴대전화 번호 필요\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"현재 이메일\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"현재 전화번호\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"새 이메일 주소\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"새 전화번호\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"이메일 변경\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"전화번호 변경\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"바쁘다\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"고정\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"고정 해제\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"오디오 녹음 초기화 실패\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"비밀번호 재설정 성공\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"QR 코드 스캔\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"후세를 위해 저장된 메모, 메시지, 링크, 파일\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"저장된 메시지\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"메시지를 찾을 수 없음\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"메시지 삭제됨\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"별칭(선택 사항)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"별칭:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(이미 취함)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(잘못된)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"별칭\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"국가 선택\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"클립보드에 복사됨\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"어둡게\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"밝게\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"시스템 기본값\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"테마:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"텍스트 크기:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"온라인 상태와 입력 표시기를 숨깁니다.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"{key}로 전송\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"새 줄로 이동하려면 Enter를 누르세요\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Enter로 전송\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"새 줄로 이동하려면 Shift + Enter를 누르세요\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"일반\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"키보드:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"고정\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"고정 해제\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, other {구독자 {count, number}명}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"멤버:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"구독자:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, other {멤버 {count, number}명}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"이미지\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"패턴\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"기본값 복원\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"배경화면\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"흐림:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"내 ID 스캔:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"알 수 없음\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"저장\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"vCard 파일을 파싱할 수 없습니다.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"채팅\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"찾기\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"연락처 카드\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"연락처\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"멤버 추가\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/ro.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Blochează contact\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"anulează\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Șterge mesajele\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Șterge toate mesajele\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Ieși din conversație\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Raportează conversația\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Contacte arhivate ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Suspicios\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"owner\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Administrare\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Verificat\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"tu\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Ești sigur că dorești să blochezi acest contact?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Contact blocate ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Adaugă persoane\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Anulează\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Confirmă\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Creează\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Șterge cont\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Editează\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Deconectare\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Resetează\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Trimite cerere\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Conectează-te\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Creează cont\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Subscribe\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Actualizează\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Nu se poate face încărcarea.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"canal\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Acesta este un canal\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Ai primit invitație într-o conversație. Accepți?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Da, accept\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Blochează\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ignoră\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Codul furnizat nu este valid\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Nu ai contacte salvate\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Niciun contact găsit după criteriile ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Adresa de e-mail\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Șterge contul\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"download\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Atasament\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Formă:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Imagine\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"email\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Adresa de e-mail\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Activează\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Introu codul de confirmare trimis pe {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID Invalid\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Dimensiunea fișiterului {size} depășește limita de {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Ți-ai uitat parola?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Numele tău\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Oferite\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"În acest grup nu se află persoane\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"Grup sau user ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Titlul imaginii\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"conținut invalid\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Codul de securitate este invalid\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Tip conținut:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Default access mode:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Nume fișier:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Membrii grupului:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Mod incognito:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Sunet de mesaj:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Mod silențios (muted):\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Altele\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Parola\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Permisiuni:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Comentariu privat\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Alerte de notificare:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Alerte de notificare (necesită HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Resetează parola:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Server:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Adresa serverului:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Server de utilizat:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Size:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Nume\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Contacte\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Transportul legat:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Tu:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Numele tău\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Permisiuniile tale:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Văzut ultima dată\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Ești sigur că dorești să ieși din conersație?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Contactează-ne\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Politica de Confidențialitate\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Termenii Serviciului\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Conectează-te\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Arhivează\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Blochează\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Șterge mesajele\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Ștergele pe toate\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Șterge\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Ștergele pe toate\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Șterge\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Editează permisiuni\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Șterge persoană\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Mute\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Restabili\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Reîncearcă\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Deblochează\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Unmute\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"se trimite...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"eroare\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"Mesajele nu pot fi citite\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Mesageria este dezactivată\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} mai mult\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Mesaj nou\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Introdu parolă\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Nu există conexiune\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Nu ai contacte adăugate :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Doar cifre\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"online acum\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Parola\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Neschimbată\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Mesageria de tip Peer este dezactivată.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Aprobare ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Ștergere ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Participare ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Deținător ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Notificare ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Citire ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Distribuire ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Scriere ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"telefon\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Vizibil doar ție\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Nu s-a reușit inițializarea tip push notifications\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Deconectat. Se încearcă conectarea în {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Încearcă din nou\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Reîncarcă\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Ești sigur că dorești să blochezi și să raportezi această conversație?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Necesare\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"salvează\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Caută în contacte\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Nu s-au găsit rezultate\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Caută după e-mail sau număr telefon...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Notificări\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Ajutor\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Setările Contului\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Conversații Arhivate\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Conversații Blocate\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Confirmă credențiale\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Conectează-te\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Creeză un nou Chat\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Creează Cont\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Resetează Parola\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Setări\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Rămâi conectat\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"caută\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"după id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"grup nou\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Adaugă tag-uri\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Niciun tag definit. Adaugă.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Toate Contactele\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Persoanele din grup\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Administrează\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Nu a fost găsit\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Permisiuni\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Tag-uri (user discovery)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Ești sigur că dorești să blochezi această conversație?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Ești sigur că dorești să șterge această conversație?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Numele grupului\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Nedenumit\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Actualizare disponibilă.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"se încarcă...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Utilizatorul nu a fost găsit\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Descriere (opțional)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Descriere\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Securitate\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Trageți pentru a ajusta\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Generale\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Membri\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Securitate\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Anonim\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Autentificat\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Ștergeți Chat\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Permisiunile utilizatorului\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"A fost trimis un e-mail cu cod de securitate.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Arhivat:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"A raspunde\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Redirecţiona\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Redirecționați către\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Căutați contacte\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Parolă Nouă\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Neacceptat\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Apel primit\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Apel efectuat\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Tu\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Apel video\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Deja vorbesti!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"anulat\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"pierdut\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"refuzat\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"deconectat\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Utilizați conexiune securizată\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Confirmat cu succes\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Editează\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Editare\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", editat\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Adauga imagine\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Ataseaza fisier\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Ștergeți înregistrarea\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Întrerupeți redarea\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Redați înregistrarea\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Înregistrați mesajul vocal\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Reluați redarea\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Trimite mesaj\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Trageți fișierul aici\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Înregistrare video\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"în curs\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Apel\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Formatul acestui videoclip nu este recunoscut\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Se încarcă...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"Am cod\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Trimite SMS pentru a reseta parola\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Număr de telefon mobil\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"A fost trimis un mesaj text cu cod de securitate.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Este necesar un număr de telefon mobil\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"E-mail curent\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Număr de telefon actual\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"E-mail nou\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Număr de telefon nou\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Schimbați adresa de e-mail\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Schimbați numărul de telefon\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"ocupat\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Fixați\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Anulați fixarea\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Inițializarea înregistrării audio a eșuat\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Resetarea parolei cu succes\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Scanați codul QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Note, mesaje, linkuri, fișiere salvate pentru posteritate\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Mesaje salvate\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"mesajul nu a fost găsit\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"mesaj șters\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Alias (opțional)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Alias:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(deja luat)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(nevalid)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Alias\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Selectați țara\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Copiat în clipboard\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Întunecat\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Luminos\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Implicit sistem\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Temă:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Dimensiune text:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Ascunde statusul tău online și indicatorii de tastare.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Trimite cu {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Apasă Enter pentru linie nouă\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Trimite cu Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Apasă Shift + Enter pentru linie nouă\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"General\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Tastatură:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Fixează\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Anulează fixarea\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Membri:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Abonați:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"imagine\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"model\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Restabilește implicit\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Imagini de fundal\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Estompare:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Scanează ID-ul meu:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Necunoscut\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Salvează\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Nu se poate procesa fișierul vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Conversație\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Caută\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Card de contact\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Contacte\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"adaugă membri\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/ru.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Заблокировать контакт\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"отменить\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Удалить сообщения\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Удалить сообщения\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Уйти из чата\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Сообщить о нарушении\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Чаты в архиве ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Подозрительный\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"влад.\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Администрация\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Верифицированный\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"вы\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Вы действительно заблокировать этот контакт?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Заблокированные ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Добавить\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Отменить\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Подтвердить\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Создать\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Удалить аккаунт\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Изменить\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Выйти\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Изменить\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Отправить\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Войти\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Создать аккаунт\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Подписаться\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Применить\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Ошибка загрузки файла.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"канал\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Создать канал\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Вас пригласили начать новый чат. Как вы хотите поступить?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Принять\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Заблокировать\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Игнорировать\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Код не совпадает\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Чатов нет\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Нет контактов для запроса ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Регистрационный емейл\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Удалить аккаунт\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Вы действительно хотите удалить все сообщения?\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"скачать\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Аттачмент\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Форма:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Картинка\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"емейлу\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Email, напр. ivan@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Разблокировать.\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Код подтверждения, полученный по {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"Неверный ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Размер файла {size} превышает {limit} лимит.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Напомнить пароль\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Полное имя, напр. Иван Петров\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Получены\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Нет участников\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"ID чата или пользователя\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Подпись к фото\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"сообщение не читается\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Токен некорректен\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Клиент:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Тип:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Доступ по умолчанию:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Имя файла:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Участники чата:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Режим инкогнито:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Звук нового сообщения:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Без уведомлений\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Второй\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Пароль\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Права доступа:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Комментарий\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Уведомления:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Уведомления (требуют HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Отправить емейл для смены пароля:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Сервер:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Адрес сервера:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Использовать сервер:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Размер:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Название\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Конакты\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Соединение:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Вы:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Ваше имя\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Ваши права доступа:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Был активен\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Вы действительно хотите покинуть этот чат?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Связаться с нами\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Политика конфиденциальности\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Условия сервиса\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Логин\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"В архив\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Заблокировать\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Удалить сообщения\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Удалить для всех\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Удалить\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Удалить для всех\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Удалить чат\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Права доступа\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Информация\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Отписать\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Не уведомлять\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Разархивировать\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Отправить заново\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Разблокировать\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Уведомлять\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"в пути...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"ошибка\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"нет доступа к сообщениям\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Отправка недоступна\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+еще {overflow}\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Новое сообщение\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Введите новый пароль\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Нет связи\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Ничего нет :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Только цифры\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"онлайн\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Пароль\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Не изменен\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Чат заблокирован у корреспондента.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Подтверждать ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Удалять ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Подписываться ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Владелец ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Уведомлять ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Читать ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Приглашать ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Писать ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"телефону\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Виден только вам\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Ошибка инициализации пуш уведомлений\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Нет связи. Подключение через {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Подключить сейчас.\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Обновить\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Требуются\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"сохранить\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Поиск контактов\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Ничего не найдено\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Список, напр. email:alice@example.com, tel:+17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Уведомления\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Поддержка\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Настройки аккаунта\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Архив чатов\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Заблокированные чаты\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Подтвердить\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Авторизация\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Новый чат\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Зарегистрироваться\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Сменить пароль\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Настройки\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Запомнить\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"найти\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"по id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"создать\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Добавьте теги\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Тегов нет. Добавьте.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Все контакты\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Участники\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Редактировать\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Не найден\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Права доступа\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Теги для поиска\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Вы действительно хотите заблокировать этот чат?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Вы действительно хотите удалить этот чат?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Название чата\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Без названия\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Есть новая версия приложения.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"завершение...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Не найден\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Описание (не обязательно)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Описание\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Безопасность\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Обрезать картинку\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Общие настройки\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Участники\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Безопасность\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Подробности\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Анонимный\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Авторизованный\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Удалить чат\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Права доступа\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Сообщение было отправлено на указанный email.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Архивирован:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Ответить\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Переслать\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Переслать\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Поиск контактов\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Новый пароль\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Не поддерживается\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Входящий звонок\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Исходящий звонок\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Вы\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Видеозвонок\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Вы уже звоните кому-то!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"отменен\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"пропущен\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"отклонен\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"разъединен\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Безопасное соединение\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Подтверждено успешно\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Изменить\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Редактирование\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", изменено\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Добавить изображение\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Прикрепить файл\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Удалить запись\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Пауза воспроизведения\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Воспроизвести запись\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Записать голосовое сообщение\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Продолжить\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Отправить сообщение\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Перетащите файл сюда\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Видеозапись\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"в процессе\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Позвонить\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Неизвестный формат видео файла\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Загружается...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"У меня есть код\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Отправить SMS для сброса пароля\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Номер мобильного телефона\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"SMS с защитным кодом отправлен.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Номер мобильного телефона\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Текущий e-mail\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Текущий номер телефона\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Новый e-mail\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Новый номер телефона\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Изменить e-mail\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Изменить номер телефона\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"занято\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Закрепить\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Открепить\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Не удалось инициализировать аудиозапись\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Пароль успешно изменен\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Отсканируйте QR код\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Заметки, сообщения, ссылки, файлы, сохраненные для потомков\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Сохраненные сообщения\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"сообщение не найдено\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"сообщение удалено\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Псевдоним (необязательно)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Псевдоним:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(уже занято)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(некорректно)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Псевдоним\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Выберите страну\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Скопировано в буфер обмена\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Тёмная\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Светлая\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Системная\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Тема:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Размер текста:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Скрывать онлайн статус и индикаторы набора текста.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Отправлять на {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Нажмать Enter для новой строки\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Отправлять на Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Нажимать Shift + Enter для новой строки\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Основные\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Клавиатура:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Закрепить\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Открепить\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Участники:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Подписчики:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"картинка\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"узор\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Восстановить по умолчанию\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Обои\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Размытие:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Отсканируйте мой ID:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Неизвестный\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Сохранить\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Не удалось обработать файл vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Написать\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Найти\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Карточка контакта\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Контакты\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"добавить участников\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/th.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"บล็อครายชื่อ\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"ยกเลิก\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"ล้างข้อความ\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"ล้างข้อความทั้งหมด\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"ออกจากการสนทนา\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"รายงานการสนทนา\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"รายชื่อที่สำเร็จ ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"ไม่น่าไว้วางใจ\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"เจ้าของ\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"ผู้ดูแล\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"ยืนยันแล้ว/ทางการ\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"คุณ\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่? คุณต้องการบล็อครายชื่อนี้\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"รายชื่อที่ถูกบล็อก ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"เพิ่มสมาชิก\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"ยกเลิก\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"ยืนยัน\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"สร้าง\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"ลบบัญชี\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"แก้ไข\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"ลงชื่อออก\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"ตกลง\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"รีเซ็ต\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"ส่งคำขอ\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"ลงชื่อเข้าใช้\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"สร้างบัญชี\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"ติดตาม\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"อัพเดต\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"ไม่สามารถอัพโหลดไฟล์\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"ช่อง\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"นี่คือช่อง\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"คุณถูกเชิญให้เข้าร่วมแชทใหม่ คุณต้องการทำอะไร?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"ยอมรับ\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"บล็อค\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"ไม่สนใจ\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่จะล้างข้อความทั้งหมด? ส่ิงนี้ไม่สามารถเลิกทำได้\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"โค้ด ไม่ถูกต้อง\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"ไม่พบแชท \\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"ไม่พบรายชื่อ ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"อีเมลที่ลงทะเบียนของคุณ\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"ลบบัญชี\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่จะลบบัญชีผู้ใช้ของคุณ? สิ่งนี้ไม่สามารถเลิกทำได้.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่จะลบข้อความทั้งหมดสำหรับทุกคน? ส่ิงนี้ไม่สามารถเลิกทำได้\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"ดาวน์โหลด\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"สิ่งที่แนบมา\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"ฟอร์ม:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"รูปภาพ\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"อีเมล์\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"อีเมล, เช่น jdoe@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"เปิดใช้งาน\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"รหัสยืนยัน\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID ไม่ถูกต้อง\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"ลืมรหัสผ่าน?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"ชื่อเต็ม, เช่น John Doe\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"ยินยอม\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"ไม่มีสมาชิก\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"กลุ่ม หรือ ID ผู้ใช้\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"คำอธิบายภาพ\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"เนื้อหาไม่ถูกต้อง\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"security token ไม่ถูกต้อง\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"ชนิดของเนื้อหา:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"โหมดการเข้าถึงเริ่มต้น:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"ชื่อไฟล์:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"สมาชิกกลุ่ม:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"โหมดไม่ระบุตัวตน:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"เสียงข้อความ:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"ไม่สนใจ:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"อื่นๆ\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"รหัสผ่าน\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"สิทธิ์:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"ความคิดเห็นส่วนตัว\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"การแจ้งเตือน:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"การแจ้งเตือน (requires HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"ส่งรหัสรีเซ็ตอีเมล:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"เซิร์ฟเวอร์:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"ที่อยู่เซิร์ฟเวอร์:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"เลือกเซิร์ฟเวอร์:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"ขนาด:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"ชื่อ\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"รายชื่อ\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Wire transport:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"คุณ:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"ชื่อของคุณ\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"สิทธิของคุณ:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"ล่าสุดเมื่อ\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่จะออกจากการสนทนานี้?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"ติดต่อเรา\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"ข้อกำหนดความเป็นส่วนตัว\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"ข้อกำหนดการใช้งาน\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"ล็อกอิน\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"สำเร็จ\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"บล็อค\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"ล้างข้อความ\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"ล้างทั้งหมด\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"ลบ\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"ลบทั้งหมด\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"ลบ\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"แก้ไขสิทธิ\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"ข้อมูล\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"ลบ\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"ปิดการแจ้งเตือน\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"ตอบกลับ\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"เรื่มใหม่\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"ลองอีกครั้ง\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"ปลดบล็อค\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"เปิดการแจ้งเตือน\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"กำลังส่ง...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"ล้มเหลว\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"ไม่มีสิทธิเข้าถึงข้อความ\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"ปิดการส่งข้อความ\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} เพิ่มเติม\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"ข้อความใหม่\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"ใส่รหัสใหม่\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"ไม่มีการเชื่อมต่อ\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"คุณไม่มีรายชื่อ :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"ตัวเลขเท่านั้น\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"ออนไลน์อยู่\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"รหัสผ่าน\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"ไม่เปลี่ยนแปลง\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"ปิดใช้งาน การส่งข้อความ Peer's\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"ยอมรับ ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"ลบ ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"เข้าร่วม ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"เจ้าของ ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"รับการแจ้งเตือน ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"อ่าน ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"แชร์ ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"เขียน ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"มือถือ\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"แค่คุณที่เห็นสิ่งนี้\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"การแจ้งเตือนล้มเหลว\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"ถูกตัดการเชื่อมต่อ. จะเชื่อมต่อใหม่ใน {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"ลองเลย\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"โหลดใหม่\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่จะบล็อคและรายงานการสนทนานี้\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"ต้องการ\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"บันทึก\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"ใช้ค้นหารายชื่อ\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"ไม่พบผลลัพธ์\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"เช่น email:alice@example.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"การแจ้งเตือน\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"สนับสนุน\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"การตั้งค่าบัญชี\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"แชทที่สำเร็จ\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"แชทที่ถูกบล็อค\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"ยืนยันตัวตน\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"ลงชื่อเข้าใช้\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"เริ่มแชทใหม่\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"สร้างบัญชี\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"รีเซ็ตรหัสผ่าน\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"ตั้งค่า\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"คงอยู่ในระบบ\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"หา\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"ด้วย ID\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"กลุ่มใหม่\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"เพิ่มแท็ก\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"ไม่มีการกำหนดแท็ก เพิ่มแท็กเลย\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"รายชื่อทั้งหมด\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"สมาชิกกลุ่ม\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"จัดการ\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"ไม่พบ\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"การอนุญาต\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"แท็ก (ค้นหา & ค้นพบ)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่ต้องการบล็อกการสนทนานี้?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"คุณแน่ใจหรือไม่ที่ต้องการลบการสนทนานี้? สิ่งนี้ไม่สามารถเลิกทำได้\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"ชื่อกลุ่มอิสระ\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"ไม่มีชื่อ\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"มีการอัพเดตพร้อมใช้งาน\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"กำลังจบ...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"ไม่พบ\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"คำอธิบาย (ไม่บังคับ)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"คำอธิบาย\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"ความปลอดภัย\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"ลากเพื่อปรับ\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"ทั่วไป\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"สมาชิก\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"ความปลอดภัย\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"ข้อมูล\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"ไม่ระบุตัวตน\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"รับรองความถูกต้องแล้ว\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"ลบการสนทนา\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"การอนุญาตของผู้ใช้\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"รหัสความปลอดภัยถูกส่งไปยังอีเมลแล้ว\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"สำเร็จ:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"ส่งต่อ\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"ส่งต่อไปยัง\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"ค้นหารายชื่อ\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"รหัสผ่านใหม่\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"ไม่รองรับ\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"สายโทรเข้า\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"สายโทรออก\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"คุณ\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"วีดีโอคอล\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"คุณกำลังอยู่ในการสนทนา!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"ยกเลิกแล้ว\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"ไม่ได้รับสาย\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"ไม่รับสาย\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"ตัดการเชื่อมต่อแล้ว\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"ใช้การเชื่อมต่อที่ปลอดภัย\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"การยืนยันสำเร็จ\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"แก้ไข\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"กำลังแก้ไข\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", ถูกแก้ไข\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"เพิ่มรูปภาพ\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"แนบไฟล์\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"ลบ\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"หยุด\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"เล่น\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"บันทึกข้อความเสียง\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"ต่อ\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"ส่งข้อความ\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"ลากไฟล์มาที่นี่\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"กำลังบันทึกวิดีโอ\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"กำลังดำเนินการ\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"โทร\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"ไม่รู้จักรูปแบบของวิดีโอนี้\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"กำลังโหลด...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"ฉันมีรหัส\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"ส่ง SMS เพื่อรีเซ็ตรหัสผ่าน:\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"หมายเลขโทรศัพท์มือถือ\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"ส่งข้อความพร้อมรหัสความปลอดภัยแล้ว\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"จำเป็นต้องระบุหมายเลขโทรศัพท์มือถือ\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"อีเมลปัจจุบัน\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"หมายเลขโทรศัพท์ปัจจุบัน\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"อีเมลใหม่\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"หมายเลขโทรศัพท์ใหม่\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"เปลี่ยนอีเมล\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"เปลี่ยนหมายเลขโทรศัพท์\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"ยุ่งอยู่\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"ไม่สามารถเริ่มต้นการบันทึกเสียงได้\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"รีเซ็ตรหัสผ่านสำเร็จ\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"สแกนรหัส QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"พิน\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"ปลดหมุด\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"ข้อความที่บันทึกไว้\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"ไม่พบข้อความ\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"ข้อความถูกลบ\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"นามแฝง (ไม่บังคับ)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"นามแฝง:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(ใช้ไปแล้ว)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(ไม่ถูกต้อง)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"นามแฝง\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"เลือกประเทศ\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"คัดลอกไปยังคลิปบอร์ดแล้ว\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"มืด\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"สว่าง\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"ค่าเริ่มต้นของระบบ\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"ธีม:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"ขนาดตัวอักษร:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"ส่งด้วย {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"กด Enter เพื่อขึ้นบรรทัดใหม่\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"ส่งด้วย Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"ทั่วไป\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"แป้นพิมพ์:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"ปักหมุด\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"เลิกปักหมุด\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, other {{count, number} ผู้ติดตาม}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"สมาชิก:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"ผู้ติดตาม:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, other {{count, number} สมาชิก}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"รูปภาพ\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"ลายลวดลาย\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"คืนค่าเริ่มต้น\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"วอลเปเปอร์\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"เบลอ:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"สแกน ID ของฉัน:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"ไม่ทราบ\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"บันทึก\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"ไม่สามารถอ่านไฟล์ vCard ได้\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"แชท\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"ค้นหา\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"นามบัตร\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"ผู้ติดต่อ\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"เพิ่มสมาชิก\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/uk.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Заблокувати контакт\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"Скасувати\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Очистити повідомлення\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Очистити повідомлення для всіх\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Покинути чат\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Сповістити про порушення\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Чати в архіві ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Підозрільний\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"власник\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Адміністрація\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Верифікований\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"ви\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Ви дійсно бажаєте заблокувати цей контакт?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Заблоковані контакти ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Додати учасників\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Скасувати\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Підтвердити\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Створити\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Видалити акаунт\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Змінити\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Вийти\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Змінити\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Надіслати\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Увійти\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Створити акаунт\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Підписатися\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Оновити\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Помилка завантаження файлу.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"канал\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Створити канал\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Вас запросили розпочати новий чат. Як ви хочете вчинити?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Прийняти\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Заблокувати\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Ігнорувати\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Ви дійсно бажаєте видалити всі повідомлення в чаті? Їх неможливо буде відновити.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Код не збігається\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Чатів немає\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Немає контактів для запиту ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Реєстраційний емейл\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Видалити акаунт\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Ви впевнені, що хочете видалити свій акаунт? Його неможливо буде відновити.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Ви впевнені, що бажаєте видалити всі повідомлення для всіх? Їх неможливо буде відновити.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"завантажити\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Аттачмент\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Форма:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Картинка\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"емейлу\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Емейл, напр. ivan@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Розблокувати.\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Код підтвердження, отриманий по {method}:\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"Невірний ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Розмір файла {size} перевищує {limit} ліміт.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Нагадати пароль\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Повне ім'я, напр. Дмитро Соколов\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Отримано\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Нема учасників\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"ID чату або користувача\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Підпис до фото\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"повідомлення не читається\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Токен некоректний\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Клієнт:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Тип:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Доступу по замовчуванню:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Ім'я файлу:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Учасники чату:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Режим інкогніто:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Звук нового повідомлення:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Без сповіщень\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Інший\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Пароль\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Права доступу:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Коментарій\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Сповіщення:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Сповіщення (потребують HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Надіслати емейл для зміни пароля:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Сервер:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Адреса сервера:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Використання сервера:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Розмір:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Назва\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Конакти\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"З'єднання:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Ви:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Ваше ім'я\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Ваші права доступу:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Був активний\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Ви дійсно бажаєте покинути цей чат?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Зв'язатися з нами\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Політика конфіденційності\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Умови сервісу\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Логін\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"В архів\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Заблокувати\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Очистити усі повідомлення\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Очистити для всіх\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Видалити повідомлення\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Видалити для всіх\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Видалити чат\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Права доступу\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Інформація\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Відписати\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Не повідомляти\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Розархівувати\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Надіслати заново\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Разблокувати\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Повідомляти\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"відправлення...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"помилка\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"немає доступу до повідомлень\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Відправка недоступна\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+ще {overflow}\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Нове повідомлення\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Введіть новий пароль\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Немає зв'язку\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Ви не маєте контактів :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Тільки цифри\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"онлайн\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Пароль\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Не змінено\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Чат заблоковано у кореспондента.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Підтверджувати ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Видаляти ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Підписуватись ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Власник ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Повідомляти ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Читати ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Запрошувати ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Писати ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"телефону\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Видно тільки вам\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Помилка ініціалізації пуш сповіщень\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Немає зв'язку. Підключення через {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Підключити зараз.\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Оновити\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Ви дійсно бажаєте повідомити про порушення і заблокувати цей?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Потрібні\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"зберегти\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Пошук контактів\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Нічого не знайдено\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Список, напр. email:alice@example.com, tel:+17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Сповіщення\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Підтримка\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Налаштування акаунту\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Архів чатів\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Заблоковані чати\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Підтвердити\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Авторизація\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Новий чат\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Зареєструватися\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Змінити пароль\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Налаштування\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Запам'ятати\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"знайти\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"по id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"створити\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Додайте теги\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Теґів немає. Додайте.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Всі контакти\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Учасники\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Редагувати\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Не знайдено\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Права доступу\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Теги для пошуку\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Ви дійсно бажаєте заблокувати цей чат?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Ви дійсно бажаєте видалити цей чат?\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Назва чата\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Без назви\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Є нова версія програми.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"завершення...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Не найдено\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Опис (не обов'язково)\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Опис\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Безпека\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Обрізати картинку\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Загальні налаштування\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Учасники\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Безпека\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Деталі\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Анонімний\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Авторизований\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Видалити чат\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Права доступу\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Повідомлення було надіслано на вказаний email.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Архівований:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Відповісти\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Переслати\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Переслати\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Пошук контактів\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Новий пароль\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Не підтримується\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Вхідний дзвінок\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Вихідний дзвінок\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Ви\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Відеодзвінок\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Ви вже дзвоните комусь!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"скасовано\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"пропущений\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"відхилений\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"роз'єднаний\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Безпечне з'єднання\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Підтверджено успішно\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Змінити\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Редагування\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", змінено\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Додати зображення\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Прикріпити файл\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Видалити запис\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Пауза програвання\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Програти запис\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Записати голосове повідомлення\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Продовжити\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Надіслати повідомлення\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Перетягніть файл сюди\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Відеозапис\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"в процесі\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Подзвонити\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Невідомий формат відео файлу\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Завантажується...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"У мене є код\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Надіслати СМС для скидання пароля\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Номер мобільного телефону\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"СМС із захисним кодом відправлено.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Номер мобільного телефону\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Поточний e-mail\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Поточний номер телефону\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Новий e-mail\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Новий номер телефону\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Змінити e-mail\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Змінити номер телефону\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"зайнято\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Не вдалося ініціалізувати аудіозапис\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Пароль змінено успішно\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Відскануйте QR-код\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"закріпити\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"відкріпити\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Нотатки, повідомлення, посилання, файли збережені для нащадків\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Збережені повідомлення\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"повідомлення не знайдено\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"повідомлення видалено\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Псевдонім (необов'язково)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Псевдонім:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(вже зайнято)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(недійсний)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Псевдонім\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Виберіть країну\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Скопійовано в буфер обміну\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Темна\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Світла\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Системна\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Тема:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Розмір тексту:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Приховати ваш статус онлайн та індикатори набору тексту.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Надіслати на {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Натисніть Enter для нового рядка\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Надіслати на Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Натисніть Shift + Enter для нового рядка\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Загальні\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Клавіатура:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Закріпити\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Відкріпити\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Учасники:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Підписники:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"зображення\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"візерунок\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Відновити типові\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Шпалери\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Розмиття:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Сканувати мій ID:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Невідомий\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Зберегти\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Не вдалося обробити файл vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Написати\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Знайти\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Картка контакту\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Контакти\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"додати учасників\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/vi.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"Chặn liên hệ\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"hủy\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"Xóa tin nhắn\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"Xóa tin nhắn cho tất cả\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"Rời cuộc trò chuyện\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"Báo cáo cuộc trò chuyện\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"Liên hệ đã lưu trữ ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"Không đáng tin\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"chủ sở hữu\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"Được quản lý bởi nhân viên\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"Đã xác minh/chính thức\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"bạn\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"Bạn có chắc muốn chặn liên hệ này?\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"Liên hệ bị chặn ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"Thêm thành viên\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"Hủy\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"Xác nhận\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"Tạo\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"Xóa tài khoản\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"Sửa\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"Đăng xuất\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"Đặt lại\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"Gửi yêu cầu\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"Đăng nhập\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"Đăng ký\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"Theo dõi\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"Cập nhật\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"Không thể bắt đầu tải tệp lên.\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"kênh\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"Đây là một kênh\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"Chấp nhận\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"Chặn\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"Bỏ qua\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"Mã không khớp\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"Bạn chưa có cuộc trò chuyện nào\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"Không có liên hệ nào khớp với ''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"Email đăng ký của bạn\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"Xóa tài khoản\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"tải xuống\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"Tệp đính kèm\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"Biểu mẫu:\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"Hình ảnh\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"email\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"Email, ví dụ jdoe@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"Bật\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"Mã xác nhận\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID không hợp lệ\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"Kích thước tệp {size} vượt quá giới hạn {limit}.\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"Quên mật khẩu?\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"Họ và tên, ví dụ John Doe\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"Đã cấp\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"Không có thành viên\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"ID nhóm hoặc người dùng\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"Chú thích hình ảnh\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"nội dung không hợp lệ\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"Mã bảo mật không hợp lệ\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"Client:\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"Kiểu nội dung:\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"Chế độ truy cập mặc định:\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"Tên tệp:\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"Thành viên nhóm:\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"Chế độ ẩn danh:\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"Âm thanh tin nhắn:\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"Đã tắt:\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"Khác\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"Mật khẩu\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"Quyền:\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"Chỉ bạn nhìn thấy\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"Cảnh báo thông báo:\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"Cảnh báo thông báo (yêu cầu HTTPS):\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"Gửi email đặt lại mật khẩu:\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK:\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"Máy chủ:\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"Địa chỉ máy chủ:\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"Máy chủ sử dụng:\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"Kích thước:\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"Tên\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"Danh bạ\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID:\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"Giao thức truyền tải:\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"Bạn:\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"Tên của bạn\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"Quyền của bạn:\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"Lần cuối hoạt động: {timestamp}\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"Bạn có chắc muốn rời cuộc trò chuyện này?\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"Liên hệ chúng tôi\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"Chính sách quyền riêng tư\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"Điều khoản dịch vụ\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"Đăng nhập\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"Lưu trữ\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"Chặn\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"Xóa tin nhắn\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"Xóa cho tất cả\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"Xóa\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"Xóa cho tất cả\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"Xóa\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"Sửa quyền\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Thông tin\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"Xóa\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"Tắt thông báo\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"Trả lời\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"Khôi phục\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"Thử lại\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"Bỏ chặn\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"Bật thông báo\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"đang gửi...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"thất bại\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"không có quyền xem tin nhắn\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"Tin nhắn bị tắt\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow} nữa\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"Tin nhắn mới\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"Nhập mật khẩu mới\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"Không có kết nối\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"Bạn chưa có liên hệ nào :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"Chỉ số\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"đang online\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"Mật khẩu\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"Không thay đổi\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Tin nhắn của người kia đã bị tắt.\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"Phê duyệt ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"Xóa ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"Tham gia ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"Chủ sở hữu ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"Nhận thông báo ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"Đọc ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"Chia sẻ ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"Ghi ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"điện thoại\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"Chỉ mình bạn nhìn thấy\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"Khởi tạo thông báo đẩy thất bại\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"Mất kết nối. Kết nối lại sau {seconds}…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"Thử ngay\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"Tải lại\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"Đã yêu cầu\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"lưu\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"Dùng tìm kiếm để tìm liên hệ\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"Không có kết quả nào\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"Liệt kê như email:alice@example.com, tel:17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"Thông báo\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"Hỗ trợ\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"Cài đặt tài khoản\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"Cuộc trò chuyện đã lưu trữ\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"Cuộc trò chuyện bị chặn\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"Xác nhận thông tin\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"Đăng nhập\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"Bắt đầu cuộc trò chuyện mới\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"Tạo tài khoản\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"Đặt lại mật khẩu\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"Cài đặt\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"Giữ tôi đăng nhập\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"tìm\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"theo id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"nhóm mới\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"Thêm vài thẻ\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"Chưa có thẻ nào. Hãy thêm một vài thẻ.\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"Tất cả liên hệ\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"Thành viên nhóm\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"Quản lý\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"Không tìm thấy\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"Quyền\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"Thẻ (tìm kiếm & khám phá)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"Bạn có chắc muốn chặn cuộc trò chuyện này?\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"Tên nhóm tự do\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"Chưa đặt tên\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"Có bản cập nhật.\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"đang hoàn tất...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"Không tìm thấy\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"Mô tả tùy chọn\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"Mô tả\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"Bảo mật\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"Kéo để điều chỉnh\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"Chung\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"Thành viên\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"Bảo mật\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"Thông tin\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"Ẩn danh\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"Đã xác thực\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"Xóa cuộc trò chuyện\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"Quyền của người dùng\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"Email chứa mã bảo mật đã được gửi.\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"Đã lưu trữ:\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"Chuyển tiếp\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"Chuyển tiếp đến\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"Tìm kiếm liên hệ\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"Mật khẩu mới\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"Không hỗ trợ\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"Cuộc gọi đến\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"Cuộc gọi đi\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"Bạn\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"Gọi video\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"Bạn đang có một cuộc gọi đang diễn ra!\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"đã hủy\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"bỏ lỡ\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"từ chối\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"mất kết nối\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"Sử dụng kết nối bảo mật\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"Xác nhận thành công\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"Sửa\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"Đang sửa\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \", đã sửa\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"Thêm hình ảnh\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"Đính kèm tệp\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"Xóa\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"Tạm dừng\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"Phát\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"Ghi âm tin nhắn\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"Tiếp tục\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"Gửi tin nhắn\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"Kéo tệp vào đây\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"Video\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"đang diễn ra\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"Gọi\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"Không nhận dạng được định dạng video này\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"Đang tải...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"Tôi có mã\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"Gửi SMS đặt lại mật khẩu:\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"Số điện thoại di động\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"Tin nhắn chứa mã bảo mật đã được gửi.\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"Cần số điện thoại di động\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"Email hiện tại\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"Số điện thoại hiện tại\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"Email mới\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"Số điện thoại mới\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"Đổi email\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"Đổi số điện thoại\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"bận\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"Không thể khởi tạo ghi âm\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"Đặt lại mật khẩu thành công\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"Quét mã QR\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"thêm thành viên\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"(đã được sử dụng)\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"Bí danh (tùy chọn)\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"(không hợp lệ)\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"Khôi phục mặc định\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"Không thể đọc tệp vCard.\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"Nhắn tin\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"Tối\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"Sáng\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"Mặc định hệ thống\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"Tìm kiếm\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"Bí danh:\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"Bí danh\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"Làm mờ:\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"Giao diện:\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"Danh thiếp\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"Danh bạ\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"Bàn phím:\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"Thành viên:\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"Quét mã của tôi:\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"Người theo dõi:\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"Cỡ chữ:\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"tin nhắn đã xóa\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"không tìm thấy tin nhắn\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"Ghim\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"Ghim\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"Lưu\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"Chọn quốc gia\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"Ghi chú, tin nhắn, liên kết, tệp lưu lại\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"Tin nhắn đã lưu\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"Gửi bằng {key}\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"Nhấn Enter để xuống dòng\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"Gửi bằng Enter\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"Nhấn Shift + Enter để xuống dòng\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"Chung\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"hình ảnh\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"hoa văn\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"Đã sao chép vào clipboard\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"Không rõ\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"Bỏ ghim\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"Bỏ ghim\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"Hình nền\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/zh-TW.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"封鎖聯絡人\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"清除訊息\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"為所有人清除訊息\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"離開對話\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"檢舉對話\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"已封存的聯絡人 ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"不可信\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"擁有者\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"員工管理\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"已驗證/官方\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"您\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"您確定要封鎖此聯絡人嗎？\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"已封鎖的聯絡人 ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"新增成員\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"確認\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"建立\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"刪除帳號\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"編輯\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"登出\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"OK\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"重設\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"傳送要求\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"登入\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"註冊\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"訂閱\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"更新\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"無法為檔案上傳初始化。\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"頻道\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"這是頻道\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"您已被邀請開始新對話。您接下來要做什麼呢？\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"接受\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"封鎖\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"忽略\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"您確定要清除所有訊息嗎？此操作無法復原。\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"代碼不相符\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"您沒有任何對話\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"沒有符合 ''{query}'' 的聯絡人\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"您的註冊電子郵件地址\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"刪除帳號\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"您確定要刪除您的帳戶嗎？此操作無法撤消。\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"您確定要為所有人刪除所有訊息嗎？此操作無法復原。\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"下載\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"附加檔案\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"表單：\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"圖片\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"電子郵件地址\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"電子郵件地址，例如：jdoe@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"啟用\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"輸入透過 {method} 傳送給您的確認碼：\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"ID 無效\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"檔案大小 {size} 超出 {limit} 限制。\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"忘記密碼？\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"全名，例如：王小明\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"已授權\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"無成員\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"群組或使用者 ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"圖片說明\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"內容無效\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"安全權杖無效\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"客戶端：\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"類型：\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"預設存取模式：\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"檔名：\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"群組成員：\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"無痕模式：\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"訊息提示聲：\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"靜音：\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"其他\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"密碼\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"權限：\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"私人留言\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"通知：\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"通知 (需要 HTTPS)：\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"傳送重設密碼郵件：\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"SDK：\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"伺服器：\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"伺服器位址：\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"使用的伺服器：\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"大小：\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"名稱\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"聯絡人\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"ID：\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"線路傳輸：\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"您：\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"您的名字\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"您的權限：\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"最後上線\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"您確定要離開此對話嗎？\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"聯絡我們\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"隱私權政策\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"服務條款\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"登入\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"封存\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"封鎖\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"清除訊息\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"為所有人清除訊息\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"刪除\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"為所有人刪除\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"刪除\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"編輯權限\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"Info\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"移除\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"靜音\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"恢復\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"重試\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"解除封鎖\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"解除靜音\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"正在傳送...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"失敗\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"沒有存取訊息的權限\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"停用訊息\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"+{overflow}\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"新訊息\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"輸入新的密碼\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"無連線\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"您沒有任何聯絡人 :-(\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"僅數字\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"上線中\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"密碼\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"未修改\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"Peer 已停用訊息。\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"核可 ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"刪除 ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"加入 ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"擁有者 ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"收到通知 ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"讀取 ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"分享 ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"撰寫 ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"phone\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"僅您可見\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"初始化通知失敗。\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"已斷線。將在 {seconds} 秒後重新連線…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"現在重試\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"重新載入\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"您確定要封鎖並檢舉此對話嗎？\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"重新請求\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"儲存\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"使用搜尋來尋找聯絡人\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"搜尋無結果\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"例如 email:alice@example.com, tel:17025550003... 的清單\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"通知\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"支援\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"帳號設定\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"已封存的對話\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"已封鎖的對話\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"確認認證\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"登入\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"開始新對話\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"建立帳號\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"重設密碼\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"設定\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"保持登入\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"尋找\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"以 id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"新群組\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"新增一些標籤\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"未定義任何標籤。請新增一些標籤。\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"所有聯絡人\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"群組成員\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"管理\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"找不到\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"權限\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"標籤 (使用者探索)\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"您確定要封鎖此對話嗎？\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"您確定要刪除此對話嗎？\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"群組的任意名稱\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"未命名\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"有可用的更新。\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"正在完成...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"找不到\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"說明（可選）\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"說明\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"安全性\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"拖動調整\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"一般\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"成員\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"安全性\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"資訊\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"匿名\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"已認證\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"刪除聊天\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"用戶權限\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"已發送一封帶有安全代碼的電子郵件。\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"存檔聊天：\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"回答\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"重定向\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"重定向消息\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"搜索聯繫人\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"新密碼\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"不支持\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"來電\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"撥出電話\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"你\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"視頻電話\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"你已經在說話了！\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"未接\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"被拒\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"斷開連接\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"使用安全連接\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"確認成功\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"編輯\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"編輯\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \"，編輯\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"添加圖片\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"附加文件\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"刪除錄音\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"暫停播放\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"播放錄音\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"錄製語音消息\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"恢復播放\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"發信息\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"將文件拖到這裡\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"視頻錄製\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"通話中\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"稱呼\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"無法識別此視頻的格式\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"加載中...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"我有代碼\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"發送短信重置密碼\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"手機號碼\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"已發送帶有安全代碼的短信。\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"需要手機號\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"當前郵箱\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"當前電話號碼\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"新電子郵件地址\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"新電話號碼\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"更改郵箱\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"更改電話號碼\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"忙碌的\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"置頂消息\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"取消置頂消息\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"初始化錄音失敗\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"密碼重置成功\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"掃描二維碼\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"為後代所儲存的註解、訊息、連結、檔案\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"已儲存的訊息\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"未找到訊息\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"訊息已刪除\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"別名（可選）\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"別名：\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"（已採取）\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"（無效）\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"別名\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"選擇國家\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"已複製到剪貼簿\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"深色\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"淺色\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"系統預設\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"主題：\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"文字大小：\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"隱藏您的線上狀態和正在輸入指示器。\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"按 {key} 傳送\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"按 Enter 換行\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"按 Enter 傳送\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"按 Shift + Enter 換行\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"一般\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"鍵盤：\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"置頂\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"取消置頂\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, other {{count, number} 位訂閱者}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"成員：\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"訂閱者：\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, other {{count, number} 位成員}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"圖片\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"圖案\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"恢復預設\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"桌布\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"模糊：\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"掃描我的 ID：\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"未知\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"儲存\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"無法解析 vCard 檔案。\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"聊天\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"尋找\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"聯絡人卡片\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"聯絡人\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"新增成員\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n/zh.json",
    "content": "{\n  \"action_block_contact\": {\n    \"translation\": \"屏蔽联系人\",\n    \"defaultMessage\": \"Block Contact\",\n    \"description\": \"Flat button [Block Contact]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_cancel\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"cancel\",\n    \"description\": \"Call to action [cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_clear_messages\": {\n    \"translation\": \"删除讯息\",\n    \"defaultMessage\": \"Clear Messages\",\n    \"description\": \"Flat button [Clear Messages] (soft-delete messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_delete_messages\": {\n    \"translation\": \"删除所有帖子\",\n    \"defaultMessage\": \"Clear Messages for All\",\n    \"description\": \"Flat button [Clear for All] (hard-delete all messages)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_leave_chat\": {\n    \"translation\": \"离开\",\n    \"defaultMessage\": \"Leave Conversation\",\n    \"description\": \"Flat button [Leave Conversation]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"action_report_chat\": {\n    \"translation\": \"检举垃圾邮件\",\n    \"defaultMessage\": \"Report Conversation\",\n    \"description\": \"Flat button [Report Group]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"archived_contacts\": {\n    \"translation\": \"已归档联系人 ({count})\",\n    \"defaultMessage\": \"Archived contacts ({count})\",\n    \"description\": \"Label for archived chats\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_danger\": {\n    \"translation\": \"可疑的\",\n    \"defaultMessage\": \"Untrustworthy\",\n    \"description\": \"Suspicious or untrustworthy account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_owner\": {\n    \"translation\": \"所有者\",\n    \"defaultMessage\": \"owner\",\n    \"description\": \"Badge for indicating the owner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_staff\": {\n    \"translation\": \"在员工管理下\",\n    \"defaultMessage\": \"Staff-managed\",\n    \"description\": \"Explanation of a staff-managed account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_verified\": {\n    \"translation\": \"值得信赖\",\n    \"defaultMessage\": \"Verified/official\",\n    \"description\": \"Explanation of a verified account or topic badge\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"badge_you\": {\n    \"translation\": \"你\",\n    \"defaultMessage\": \"you\",\n    \"description\": \"Badge for indicating the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"block_contact_warning\": {\n    \"translation\": \"您确定要阻止此联系人吗？\",\n    \"defaultMessage\": \"Are you sure you want to block this contact?\",\n    \"description\": \"Alert dialog warning when blocking a contact.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"blocked_contacts_link\": {\n    \"translation\": \"封锁的联络人 ({count})\",\n    \"defaultMessage\": \"Blocked contacts ({count})\",\n    \"description\": \"Blocked contacts link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_add_members\": {\n    \"translation\": \"添加成员\",\n    \"defaultMessage\": \"Add members\",\n    \"description\": \"Flat button [Add members] (to topic)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_cancel\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"Cancel\",\n    \"description\": \"Button [Cancel]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_confirm\": {\n    \"translation\": \"确认\",\n    \"defaultMessage\": \"Confirm\",\n    \"description\": \"Button [Confirm]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_create\": {\n    \"translation\": \"创建\",\n    \"defaultMessage\": \"Create\",\n    \"description\": \"Button [Create]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_delete_account\": {\n    \"translation\": \"删除帐户\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Button [Delete account]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_edit\": {\n    \"translation\": \"编辑\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Call to action [Edit]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_logout\": {\n    \"translation\": \"登出\",\n    \"defaultMessage\": \"Logout\",\n    \"description\": \"Button [Logout]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_ok\": {\n    \"translation\": \"好\",\n    \"defaultMessage\": \"OK\",\n    \"description\": \"Button [OK]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_reset\": {\n    \"translation\": \"重置\",\n    \"defaultMessage\": \"Reset\",\n    \"description\": \"Button [Reset]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_send_request\": {\n    \"translation\": \"发送请求\",\n    \"defaultMessage\": \"Send request\",\n    \"description\": \"Button [Send request]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_in\": {\n    \"translation\": \"登录\",\n    \"defaultMessage\": \"Sign in\",\n    \"description\": \"Button [Sign In]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_sign_up\": {\n    \"translation\": \"注册\",\n    \"defaultMessage\": \"Sign up\",\n    \"description\": \"Create account button [Sign Up]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_subscribe\": {\n    \"translation\": \"订阅\",\n    \"defaultMessage\": \"Subscribe\",\n    \"description\": \"Button [Subscribe]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_update\": {\n    \"translation\": \"更新\",\n    \"defaultMessage\": \"Update\",\n    \"description\": \"Button [Update]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_initiate_file_upload\": {\n    \"translation\": \"无法初始化文件上传。\",\n    \"defaultMessage\": \"Cannot initiate file upload.\",\n    \"description\": \"Generic error messagewhen attachment fails\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel\": {\n    \"translation\": \"频道\",\n    \"defaultMessage\": \"channel\",\n    \"description\": \"Subtitle shown for channels in MessagesView instead of last seen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"channel_prompt\": {\n    \"translation\": \"这是一个频道\",\n    \"defaultMessage\": \"This is a channel\",\n    \"description\": \"Checkbox label when creating a channel\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation\": {\n    \"translation\": \"你受邀开始新会话。你想怎么做？\",\n    \"defaultMessage\": \"You are invited to start a new chat. What would you like to do?\",\n    \"description\": \"New chat invitation message: [Accept] [Ignore] [Block].\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_accept\": {\n    \"translation\": \"接受\",\n    \"defaultMessage\": \"Accept\",\n    \"description\": \"Action [Accept] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_block\": {\n    \"translation\": \"屏蔽\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Action [Block] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_invitation_ignore\": {\n    \"translation\": \"忽略\",\n    \"defaultMessage\": \"Ignore\",\n    \"description\": \"Action [Ignore] for chat invitation.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"clear_messages_warning\": {\n    \"translation\": \"您确定要清除所有消息吗？无法撤消。\",\n    \"defaultMessage\": \"Are you sure you want to clear all messages? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"code_doesnot_match\": {\n    \"translation\": \"代码不匹配\",\n    \"defaultMessage\": \"Code does not match\",\n    \"description\": \"Error message when the credential validation code is incorrect.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found\": {\n    \"translation\": \"你尚无会话\\n¯∖_(ツ)_/¯\",\n    \"defaultMessage\": \"You have no chats\\\\n¯∖_(ツ)_/¯\",\n    \"description\": \"HTML message shown in ContactList when no contacts are found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"contacts_not_found_short\": {\n    \"translation\": \"无联系人匹配''{query}''\",\n    \"defaultMessage\": \"No contacts match ''{query}''\",\n    \"description\": \"Shown in ContactsView when search returned no results\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"credential_email_prompt\": {\n    \"translation\": \"你的注册邮箱\",\n    \"defaultMessage\": \"Your registration email\",\n    \"description\": \"Placeholder for entering email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account\": {\n    \"translation\": \"删除帐户\",\n    \"defaultMessage\": \"Delete account\",\n    \"description\": \"Title for delete account warning\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_account_warning\": {\n    \"translation\": \"您确定要删除您的帐户吗？无法撤消。\",\n    \"defaultMessage\": \"Are you sure you want to delete your account? It cannot be undone.\",\n    \"description\": \"Warning message when deleting an account\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"delete_messages_warning\": {\n    \"translation\": \"您确定要删除所有消息吗？无法撤消。\",\n    \"defaultMessage\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\n    \"description\": \"Alert dialog warning when hard-deleting all messages.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"download_action\": {\n    \"translation\": \"下载\",\n    \"defaultMessage\": \"download\",\n    \"description\": \"Call to action [download]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_attachment\": {\n    \"translation\": \"附件\",\n    \"defaultMessage\": \"Attachment\",\n    \"description\": \"Comment for attachment in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_form\": {\n    \"translation\": \"形式：\",\n    \"defaultMessage\": \"Form:\",\n    \"description\": \"Comment for form in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_image\": {\n    \"translation\": \"图像\",\n    \"defaultMessage\": \"Picture\",\n    \"description\": \"Comment for embedded images in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_dative\": {\n    \"translation\": \"电子邮件\",\n    \"defaultMessage\": \"email\",\n    \"description\": \"Dative case of 'email', i.e. 'email' in 'by email'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"email_prompt\": {\n    \"translation\": \"电子邮件，例如 zhang@example.com\",\n    \"defaultMessage\": \"Email, e.g. jdoe@example.com\",\n    \"description\": \"Input placeholder for email entry\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enable_peers_messaging\": {\n    \"translation\": \"启用\",\n    \"defaultMessage\": \"Enable\",\n    \"description\": \"Call to action to enable peer's messaging\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"enter_confirmation_code_prompt\": {\n    \"translation\": \"输入通过{method}发送的验证码：\",\n    \"defaultMessage\": \"Confirmation code\",\n    \"description\": \"Request to enter confirmation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"error_invalid_id\": {\n    \"translation\": \"无效 ID\",\n    \"defaultMessage\": \"Invalid ID\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"file_attachment_too_large\": {\n    \"translation\": \"文件大小 {size} 超过 {limit} 限制。\",\n    \"defaultMessage\": \"The file size {size} exceeds the {limit} limit.\",\n    \"description\": \"Error message when attachment is too large\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forgot_password_link\": {\n    \"translation\": \"忘记密码？\",\n    \"defaultMessage\": \"Forgot password?\",\n    \"description\": \"Link to Reset password form\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"full_name_prompt\": {\n    \"translation\": \"全名，例如张伟\",\n    \"defaultMessage\": \"Full name, e.g. John Doe\",\n    \"description\": \"Input placeholder for person's full name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"granted_permissions\": {\n    \"translation\": \"已授予\",\n    \"defaultMessage\": \"Granted\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_has_no_members\": {\n    \"translation\": \"无成员\",\n    \"defaultMessage\": \"No members\",\n    \"description\": \"Shown in place of group members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"group_user_id_prompt\": {\n    \"translation\": \"群组或用户 ID\",\n    \"defaultMessage\": \"Group or User ID\",\n    \"description\": \"Prompt for entering user or group ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"image_caption_prompt\": {\n    \"translation\": \"图片标题\",\n    \"defaultMessage\": \"Image caption\",\n    \"description\": \"Prompt in SendMessage for attached image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_content\": {\n    \"translation\": \"无效内容\",\n    \"defaultMessage\": \"invalid content\",\n    \"description\": \"Shown when the message is unreadable\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"invalid_security_token\": {\n    \"translation\": \"无效的安全令牌\",\n    \"defaultMessage\": \"Invalid security token\",\n    \"description\": \"Error message when resetting password.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_client\": {\n    \"translation\": \"客户端：\",\n    \"defaultMessage\": \"Client:\",\n    \"description\": \"Label for a client version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_content_type\": {\n    \"translation\": \"内容类型：\",\n    \"defaultMessage\": \"Content type:\",\n    \"description\": \"Label for file content type (mime)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_default_access_mode\": {\n    \"translation\": \"默认访问模式：\",\n    \"defaultMessage\": \"Default access mode:\",\n    \"description\": \"Label for default access mode\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_file_name\": {\n    \"translation\": \"文件名：\",\n    \"defaultMessage\": \"File name:\",\n    \"description\": \"Label for a file name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_group_members\": {\n    \"translation\": \"群组成员：\",\n    \"defaultMessage\": \"Group members:\",\n    \"description\": \"Section title or label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_incognito_mode\": {\n    \"translation\": \"无痕模式：\",\n    \"defaultMessage\": \"Incognito mode:\",\n    \"description\": \"Label for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_message_sound\": {\n    \"translation\": \"消息提示音：\",\n    \"defaultMessage\": \"Message sound:\",\n    \"description\": \"Label for message sounds toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_muting_topic\": {\n    \"translation\": \"已静音：\",\n    \"defaultMessage\": \"Muted:\",\n    \"description\": \"Label for Muting/unmuting the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_other_user\": {\n    \"translation\": \"其他\",\n    \"defaultMessage\": \"Other\",\n    \"description\": \"Label for the other user when the user is unnamed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_password\": {\n    \"translation\": \"密码\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Label for password editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_permissions\": {\n    \"translation\": \"权限：\",\n    \"defaultMessage\": \"Permissions:\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_private\": {\n    \"translation\": \"私人评论\",\n    \"defaultMessage\": \"Private comment\",\n    \"description\": \"Label for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications\": {\n    \"translation\": \"通知提醒：\",\n    \"defaultMessage\": \"Notification alerts:\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_push_notifications_disabled\": {\n    \"translation\": \"通知提醒（需要 HTTPS）：\",\n    \"defaultMessage\": \"Notification alerts (requires HTTPS):\",\n    \"description\": \"Label for push notifications switch\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password\": {\n    \"translation\": \"发送密码重置邮件：\",\n    \"defaultMessage\": \"Send a password reset email\",\n    \"description\": \"Label for password reset field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_sdk\": {\n    \"translation\": \"开发包：\",\n    \"defaultMessage\": \"SDK:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server\": {\n    \"translation\": \"服务器：\",\n    \"defaultMessage\": \"Server:\",\n    \"description\": \"Label for a server version\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_address\": {\n    \"translation\": \"服务器地址：\",\n    \"defaultMessage\": \"Server address:\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_server_to_use\": {\n    \"translation\": \"使用的服务器：\",\n    \"defaultMessage\": \"Server to use:\",\n    \"description\": \"Label for server selector in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_size\": {\n    \"translation\": \"大小：\",\n    \"defaultMessage\": \"Size:\",\n    \"description\": \"Label for file size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_topic_name\": {\n    \"translation\": \"名称\",\n    \"defaultMessage\": \"Name\",\n    \"description\": \"Label for editing topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_contacts\": {\n    \"translation\": \"往来\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for user contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_user_id\": {\n    \"translation\": \"地址：\",\n    \"defaultMessage\": \"ID:\",\n    \"description\": \"Label for user address (ID)\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_wire_transport\": {\n    \"translation\": \"线路传输：\",\n    \"defaultMessage\": \"Wire transport:\",\n    \"description\": \"Label for wire transport selection in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_you\": {\n    \"translation\": \"你：\",\n    \"defaultMessage\": \"You:\",\n    \"description\": \"Label for the current user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_name\": {\n    \"translation\": \"你的姓名\",\n    \"defaultMessage\": \"Your name\",\n    \"description\": \"Label for full name editing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_your_permissions\": {\n    \"translation\": \"你的权限：\",\n    \"defaultMessage\": \"Your permissions:\",\n    \"description\": \"Label for current user permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"last_seen_timestamp\": {\n    \"translation\": \"最后可见\",\n    \"defaultMessage\": \"Last seen: {timestamp}\",\n    \"description\": \"Label for the timestamp of when the user or topic was last online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"leave_chat_warning\": {\n    \"translation\": \"您确定要退出此对话吗？\",\n    \"defaultMessage\": \"Are you sure you want to leave this conversation?\",\n    \"description\": \"Alert dialog warning when unsubscribing from a chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_contact_us\": {\n    \"translation\": \"联系我们\",\n    \"defaultMessage\": \"Contact Us\",\n    \"description\": \"Ancor text for contacting us by email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_privacy_policy\": {\n    \"translation\": \"隐私政策\",\n    \"defaultMessage\": \"Privacy Policy\",\n    \"description\": \"Ancor text for privacy policy link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"link_terms_of_service\": {\n    \"translation\": \"条款和条件\",\n    \"defaultMessage\": \"Terms of Service\",\n    \"description\": \"Ancor text for terms of service link\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"login_prompt\": {\n    \"translation\": \"登录\",\n    \"defaultMessage\": \"Login\",\n    \"description\": \"Placeholer for username/login\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_archive_topic\": {\n    \"translation\": \"归档\",\n    \"defaultMessage\": \"Archive\",\n    \"description\": \"Move topic from the list of active chats to archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_block\": {\n    \"translation\": \"屏蔽\",\n    \"defaultMessage\": \"Block\",\n    \"description\": \"Block topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages\": {\n    \"translation\": \"清空消息\",\n    \"defaultMessage\": \"Clear messages\",\n    \"description\": \"Delete all messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_clear_messages_for_all\": {\n    \"translation\": \"全部清除\",\n    \"defaultMessage\": \"Clear for All\",\n    \"description\": \"Delete all message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete\": {\n    \"translation\": \"删除\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete selected messages\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_for_all\": {\n    \"translation\": \"全部删除\",\n    \"defaultMessage\": \"Delete for All\",\n    \"description\": \"Delete selected message(s) for all members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_delete_topic\": {\n    \"translation\": \"删除\",\n    \"defaultMessage\": \"Delete\",\n    \"description\": \"Delete entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit_permissions\": {\n    \"translation\": \"编辑权限\",\n    \"defaultMessage\": \"Edit permissions\",\n    \"description\": \"Menu item [Edit permissions]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_info\": {\n    \"translation\": \"信息\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Show extended topic information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_member_delete\": {\n    \"translation\": \"移除\",\n    \"defaultMessage\": \"Remove\",\n    \"description\": \"Remove user from topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_mute\": {\n    \"translation\": \"静音\",\n    \"defaultMessage\": \"Mute\",\n    \"description\": \"Turn off notifications\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_restore_topic\": {\n    \"translation\": \"从存档中恢复\",\n    \"defaultMessage\": \"Restore\",\n    \"description\": \"Restore topic from archive\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_send_retry\": {\n    \"translation\": \"重试\",\n    \"defaultMessage\": \"Retry\",\n    \"description\": \"Retry sending message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unblock\": {\n    \"translation\": \"取消屏蔽\",\n    \"defaultMessage\": \"Unblock\",\n    \"description\": \"Unblock topic or user\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_unmute\": {\n    \"translation\": \"取消静音\",\n    \"defaultMessage\": \"Unmute\",\n    \"description\": \"Turn notifications on\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending\": {\n    \"translation\": \"正在发送...\",\n    \"defaultMessage\": \"sending...\",\n    \"description\": \"Message being sent, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_sending_failed\": {\n    \"translation\": \"发送失败\",\n    \"defaultMessage\": \"failed\",\n    \"description\": \"Failed to send message, in place of time stamp\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messages_not_readable\": {\n    \"translation\": \"无消息访问权限\",\n    \"defaultMessage\": \"no access to messages\",\n    \"description\": \"Message shown in topic without the read access\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"messaging_disabled_prompt\": {\n    \"translation\": \"消息已禁用\",\n    \"defaultMessage\": \"Messaging disabled\",\n    \"description\": \"Prompt in SendMessage in read-only topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"more_online_members\": {\n    \"translation\": \"还有{overflow}个\",\n    \"defaultMessage\": \"+{overflow} more\",\n    \"description\": \"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_message_prompt\": {\n    \"translation\": \"新消息\",\n    \"defaultMessage\": \"New message\",\n    \"description\": \"Prompt in send message field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_password_placeholder\": {\n    \"translation\": \"输入新密码\",\n    \"defaultMessage\": \"Enter new password\",\n    \"description\": \"Placeholder for entering new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_connection\": {\n    \"translation\": \"无连接\",\n    \"defaultMessage\": \"No connection\",\n    \"description\": \"Warning that the user is offline.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"no_contacts\": {\n    \"translation\": \"你尚无联系人 (._.)\",\n    \"defaultMessage\": \"You have no contacts :-(\",\n    \"description\": \"Shown in ContactsView when the user has no contacts\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"numeric_confirmation_code_prompt\": {\n    \"translation\": \"仅数字\",\n    \"defaultMessage\": \"Numbers only\",\n    \"description\": \"Prompt for numeric conformation code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"online_now\": {\n    \"translation\": \"在线\",\n    \"defaultMessage\": \"online now\",\n    \"description\": \"Indicator that the user or topic is currently online\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_prompt\": {\n    \"translation\": \"密码\",\n    \"defaultMessage\": \"Password\",\n    \"description\": \"Placeholder/prompt for entering password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_unchanged_prompt\": {\n    \"translation\": \"未改变\",\n    \"defaultMessage\": \"Unchanged\",\n    \"description\": \"Message in editor while password is unchanged\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"peers_messaging_disabled\": {\n    \"translation\": \"成员间消息已禁用。\",\n    \"defaultMessage\": \"Peer's messaging is disabled.\",\n    \"description\": \"Shown when the p2p peer's messaging is disabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_admin\": {\n    \"translation\": \"批准 ({val})\",\n    \"defaultMessage\": \"Approve ({val})\",\n    \"description\": \"Name of A permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_delete\": {\n    \"translation\": \"删除 ({val})\",\n    \"defaultMessage\": \"Delete ({val})\",\n    \"description\": \"Name of D permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_join\": {\n    \"translation\": \"加入 ({val})\",\n    \"defaultMessage\": \"Join ({val})\",\n    \"description\": \"Name of J permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_owner\": {\n    \"translation\": \"所有者 ({val})\",\n    \"defaultMessage\": \"Owner ({val})\",\n    \"description\": \"Name of O permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_pres\": {\n    \"translation\": \"获取通知 ({val})\",\n    \"defaultMessage\": \"Get notified ({val})\",\n    \"description\": \"Name of P permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_read\": {\n    \"translation\": \"读取 ({val})\",\n    \"defaultMessage\": \"Read ({val})\",\n    \"description\": \"Name of R permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_share\": {\n    \"translation\": \"分享 ({val})\",\n    \"defaultMessage\": \"Share ({val})\",\n    \"description\": \"Name of S permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permission_write\": {\n    \"translation\": \"写入 ({val})\",\n    \"defaultMessage\": \"Write ({val})\",\n    \"description\": \"Name of W permission\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"phone_dative\": {\n    \"translation\": \"电话\",\n    \"defaultMessage\": \"phone\",\n    \"description\": \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"private_editing_placeholder\": {\n    \"translation\": \"仅自己可见\",\n    \"defaultMessage\": \"Visible to you only\",\n    \"description\": \"Placeholder for editing 'private'\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"push_init_failed\": {\n    \"translation\": \"初始化推送通知失败\",\n    \"defaultMessage\": \"Failed to initialize push notifications\",\n    \"description\": \"Error message when push notifications have failed to initialize.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_countdown\": {\n    \"translation\": \"连接已断开。{seconds} 秒后重新连接…\",\n    \"defaultMessage\": \"Disconnected. Reconnecting in {seconds}…\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reconnect_now\": {\n    \"translation\": \"立即尝试\",\n    \"defaultMessage\": \"Try now\",\n    \"description\": \"Prompt for reconnecting now\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"reload_update\": {\n    \"translation\": \"重新载入\",\n    \"defaultMessage\": \"Reload\",\n    \"description\": \"Call to action to reload application when update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"report_chat_warning\": {\n    \"translation\": \"您确定要停止并报告此对话吗？\",\n    \"defaultMessage\": \"Are you sure you want to block and report this conversation?\",\n    \"description\": \"Alert dialog warning when reporting a conversation for abuse\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"requested_permissions\": {\n    \"translation\": \"已请求\",\n    \"defaultMessage\": \"Requested\",\n    \"description\": \"Title for permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_attachment\": {\n    \"translation\": \"保存\",\n    \"defaultMessage\": \"save\",\n    \"description\": \"Call to save an attachment\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_for_contacts\": {\n    \"translation\": \"使用搜索寻找联系人\",\n    \"defaultMessage\": \"Use search to find contacts\",\n    \"description\": \"Text shown in contacts view when user entered no search query.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_no_results\": {\n    \"translation\": \"搜索返回任何结果\",\n    \"defaultMessage\": \"Search returned no results\",\n    \"description\": \"Text shown in contacts view when query returned no results.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"search_placeholder\": {\n    \"translation\": \"列表如 email:alice@example.com, tel:+17025550003...\",\n    \"defaultMessage\": \"List like alice@example.com, +17025550003...\",\n    \"description\": \"Placeholder in contacts search field\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_notifications\": {\n    \"translation\": \"通知\",\n    \"defaultMessage\": \"Notifications\",\n    \"description\": \"Sidepanel title for AccNotificationsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_support\": {\n    \"translation\": \"支持\",\n    \"defaultMessage\": \"Support\",\n    \"description\": \"Sidepanel title for AccSupportView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_account_settings\": {\n    \"translation\": \"帐号设定\",\n    \"defaultMessage\": \"Account Settings\",\n    \"description\": \"Sidepanel title for AccountSettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_archive\": {\n    \"translation\": \"已存档会话\",\n    \"defaultMessage\": \"Archived Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Archive.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_blocked\": {\n    \"translation\": \"被阻止的聊天\",\n    \"defaultMessage\": \"Blocked Chats\",\n    \"description\": \"Sidepanel title for ContactsView-Blocked.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_cred\": {\n    \"translation\": \"确认凭据\",\n    \"defaultMessage\": \"Confirm Credentials\",\n    \"description\": \"Sidepanel title for ValidationView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_login\": {\n    \"translation\": \"登录\",\n    \"defaultMessage\": \"Sign In\",\n    \"description\": \"Sidepanel title for LoginView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_newtpk\": {\n    \"translation\": \"开始新会话\",\n    \"defaultMessage\": \"Start New Chat\",\n    \"description\": \"Sidepanel title for NewTopicView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_register\": {\n    \"translation\": \"创建账户\",\n    \"defaultMessage\": \"Create Account\",\n    \"description\": \"Sidepanel title for CreateAccountView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_reset\": {\n    \"translation\": \"重置密码\",\n    \"defaultMessage\": \"Reset Password\",\n    \"description\": \"Sidepanel title for PasswordResetView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_settings\": {\n    \"translation\": \"设置\",\n    \"defaultMessage\": \"Settings\",\n    \"description\": \"Sidepanel title for SettingsView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"stay_logged_in\": {\n    \"translation\": \"保持登录\",\n    \"defaultMessage\": \"Stay logged in\",\n    \"description\": \"Label for a checkbox\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_find_user\": {\n    \"translation\": \"搜索\",\n    \"defaultMessage\": \"find\",\n    \"description\": \"Tab title Find\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_group_by_id\": {\n    \"translation\": \"通过 id\",\n    \"defaultMessage\": \"by id\",\n    \"description\": \"Tab title Find topic by ID\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_new_group\": {\n    \"translation\": \"新群组\",\n    \"defaultMessage\": \"new group\",\n    \"description\": \"Tab title New Group\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_editor_no_tags\": {\n    \"translation\": \"添加一些标签\",\n    \"defaultMessage\": \"Add some tags\",\n    \"description\": \"Tag editor prompt when no tags are found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tags_not_found\": {\n    \"translation\": \"尚未定义标签。添加一些。\",\n    \"defaultMessage\": \"No tags defined. Add some.\",\n    \"description\": \"\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_all_contacts\": {\n    \"translation\": \"全部联系人\",\n    \"defaultMessage\": \"All Contacts\",\n    \"description\": \"Section title [All Contacts]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_group_members\": {\n    \"translation\": \"群组成员\",\n    \"defaultMessage\": \"Group Members\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_manage_tags\": {\n    \"translation\": \"管理标签\",\n    \"defaultMessage\": \"Manage\",\n    \"description\": \"Section title for the list of tags\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_not_found\": {\n    \"translation\": \"无法找到\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"Title shown when topic is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_permissions\": {\n    \"translation\": \"权限\",\n    \"defaultMessage\": \"Permissions\",\n    \"description\": \"Section title\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"title_tag_manager\": {\n    \"translation\": \"标签（用户发现）\",\n    \"defaultMessage\": \"Tags (search & discovery)\",\n    \"description\": \"Section title for TagManager\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_block_warning\": {\n    \"translation\": \"您确定要阻止此对话吗？\",\n    \"defaultMessage\": \"Are you sure you want to block this conversation?\",\n    \"description\": \"Alert warning when blocking a topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete_warning\": {\n    \"translation\": \"您确定要删除此对话吗？\",\n    \"defaultMessage\": \"Are you sure you want to delete this conversation? It cannot be undone.\",\n    \"description\": \"Alert warning when deleting entire topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_name_editing_placeholder\": {\n    \"translation\": \"群组自由格式名称\",\n    \"defaultMessage\": \"Freeform name of the group\",\n    \"description\": \"Prompt for entering topic name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unnamed_topic\": {\n    \"translation\": \"未命名\",\n    \"defaultMessage\": \"Unnamed\",\n    \"description\": \"Title shown when the topic has no name\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"update_available\": {\n    \"translation\": \"更新可用。\",\n    \"defaultMessage\": \"Update available.\",\n    \"description\": \"Message shown when an app update is available.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"upload_finishing\": {\n    \"translation\": \"正在结束...\",\n    \"defaultMessage\": \"finishing...\",\n    \"description\": \"Notification that upload is finishing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"user_not_found\": {\n    \"translation\": \"未找到\",\n    \"defaultMessage\": \"Not found\",\n    \"description\": \"In place of a user's full name when the user is not found.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"description_editing_placeholder\": {\n    \"translation\": \"说明（可选）\",\n    \"defaultMessage\": \"Description (optional)\",\n    \"description\": \"Placeholder for editing topic description\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_description\": {\n    \"translation\": \"说明\",\n    \"defaultMessage\": \"Description\",\n    \"description\": \"Label for description of user or topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_security\": {\n    \"translation\": \"安全\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Navigaton button for security panel.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_crop\": {\n    \"translation\": \"拖动调整\",\n    \"defaultMessage\": \"Drag to Adjust\",\n    \"description\": \"Title for AvatarCropView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_general\": {\n    \"translation\": \"常用设定\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Title for TopicCommon.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_members\": {\n    \"translation\": \"成员\",\n    \"defaultMessage\": \"Members\",\n    \"description\": \"Title for managing group members view.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_security\": {\n    \"translation\": \"安全\",\n    \"defaultMessage\": \"Security\",\n    \"description\": \"Title for TopicSecirity and AccSecurity.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"panel_title_info\": {\n    \"translation\": \"信息\",\n    \"defaultMessage\": \"Info\",\n    \"description\": \"Title for InfoView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_anonymous\": {\n    \"translation\": \"匿名\",\n    \"defaultMessage\": \"Anonymous\",\n    \"description\": \"Title for editing default anonymous permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_authenticated\": {\n    \"translation\": \"已认证\",\n    \"defaultMessage\": \"Authenticated\",\n    \"description\": \"Title for editing default authenticated permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"topic_delete\": {\n    \"translation\": \"删除聊天\",\n    \"defaultMessage\": \"Delete Conversation\",\n    \"description\": \"Alert title when deleting the topic.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"permissions_user\": {\n    \"translation\": \"用户权限\",\n    \"defaultMessage\": \"User's Permissions\",\n    \"description\": \"Title for editing user's permissions\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_email_sent\": {\n    \"translation\": \"已发送一封带有安全代码的电子邮件。\",\n    \"defaultMessage\": \"An email with security code has been sent.\",\n    \"description\": \"Notification that the email with password reset instructions has been sent\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_unarchive_topic\": {\n    \"translation\": \"存档：\",\n    \"defaultMessage\": \"Archived:\",\n    \"description\": \"Label for unarchiving the topic\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_reply\": {\n    \"translation\": \"回复\",\n    \"defaultMessage\": \"Reply\",\n    \"description\": \"Reply to message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_forward\": {\n    \"translation\": \"重定向\",\n    \"defaultMessage\": \"Forward\",\n    \"description\": \"Forward message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to\": {\n    \"translation\": \"重定向消息\",\n    \"defaultMessage\": \"Forward to\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"forward_to_search_placeholder\": {\n    \"translation\": \"搜索联系人\",\n    \"defaultMessage\": \"Search contacts\",\n    \"description\": \"Contact search prompt when forwarding a message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_new_password\": {\n    \"translation\": \"新密码\",\n    \"defaultMessage\": \"New password\",\n    \"description\": \"Label for entering a new password\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_unknown\": {\n    \"translation\": \"不支持\",\n    \"defaultMessage\": \"Unsupported\",\n    \"description\": \"Unsupported entity in drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_incoming\": {\n    \"translation\": \"来电\",\n    \"defaultMessage\": \"Incoming call\",\n    \"description\": \"Incoming call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_outgoing\": {\n    \"translation\": \"拨出电话\",\n    \"defaultMessage\": \"Outgoing call\",\n    \"description\": \"Outgoing call label\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"calls_you_label\": {\n    \"translation\": \"你\",\n    \"defaultMessage\": \"You\",\n    \"description\": \"Shown over the local video screen\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_video_call\": {\n    \"translation\": \"视频电话\",\n    \"defaultMessage\": \"Video call\",\n    \"description\": \"Start video call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"already_in_call\": {\n    \"translation\": \"你已经在说话了！\",\n    \"defaultMessage\": \"You already in an ongoing call!\",\n    \"description\": \"Error message when the user tried to accept a new call without finishing pervious one\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_cancelled\": {\n    \"translation\": \"取消\",\n    \"defaultMessage\": \"cancelled\",\n    \"description\": \"Label for cancelled outgoing call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_missed\": {\n    \"translation\": \"未接\",\n    \"defaultMessage\": \"missed\",\n    \"description\": \"Label for missed incoming call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_declined\": {\n    \"translation\": \"被拒\",\n    \"defaultMessage\": \"declined\",\n    \"description\": \"Label for declined call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_disconnected\": {\n    \"translation\": \"断开连接\",\n    \"defaultMessage\": \"disconnected\",\n    \"description\": \"Label for disconnected call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_use_secure_connection\": {\n    \"translation\": \"使用安全连接\",\n    \"defaultMessage\": \"Use secure connection\",\n    \"description\": \"Label for WS/WSS connection type in SettingsView\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cred_confirmed_successfully\": {\n    \"translation\": \"确认成功\",\n    \"defaultMessage\": \"Confirmed successfully\",\n    \"description\": \"Notification message that the credential was successfully validated.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_edit\": {\n    \"translation\": \"编辑\",\n    \"defaultMessage\": \"Edit\",\n    \"description\": \"Edit message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"editing_message\": {\n    \"translation\": \"编辑\",\n    \"defaultMessage\": \"Editing\",\n    \"description\": \"Title over message editing preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_edited_marker\": {\n    \"translation\": \"，编辑\",\n    \"defaultMessage\": \", edited\",\n    \"description\": \"Marker indicating that the message was edited\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_add_image\": {\n    \"translation\": \"添加图片\",\n    \"defaultMessage\": \"Add image\",\n    \"description\": \"Icon tool tip for attaching an image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_attach_file\": {\n    \"translation\": \"附加文件\",\n    \"defaultMessage\": \"Attach file\",\n    \"description\": \"Icon tool tip for attaching a file\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_delete\": {\n    \"translation\": \"删除录音\",\n    \"defaultMessage\": \"Delete recording\",\n    \"description\": \"Icon tool tip for deleting recorded audio\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_pause\": {\n    \"translation\": \"暂停播放\",\n    \"defaultMessage\": \"Pause playback\",\n    \"description\": \"Icon tool tip for pausing audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_play\": {\n    \"translation\": \"播放录音\",\n    \"defaultMessage\": \"Play recording\",\n    \"description\": \"Icon tool tip for starting audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_record_voice\": {\n    \"translation\": \"录制语音信息\",\n    \"defaultMessage\": \"Record voice message\",\n    \"description\": \"Icon tool tip for recording a voice message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_resume\": {\n    \"translation\": \"恢复播放\",\n    \"defaultMessage\": \"Resume playback\",\n    \"description\": \"Icon tool tip for resuming audio playback\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"icon_title_send\": {\n    \"translation\": \"发信息\",\n    \"defaultMessage\": \"Send message\",\n    \"description\": \"Icon tool tip for sending a message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drag_file\": {\n    \"translation\": \"将文件拖到这里\",\n    \"defaultMessage\": \"Drag file here\",\n    \"description\": \"Prompt on the file drag-n-drop overlay banner\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"drafty_video\": {\n    \"translation\": \"视频录制\",\n    \"defaultMessage\": \"Video recording\",\n    \"description\": \"Comment for videos embedded in Drafty\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_in_progress\": {\n    \"translation\": \"通话中\",\n    \"defaultMessage\": \"in progress\",\n    \"description\": \"Label for call in progress\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"menu_item_audio_call\": {\n    \"translation\": \"称呼\",\n    \"defaultMessage\": \"Call\",\n    \"description\": \"Start audio call\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unrecognized_video_format\": {\n    \"translation\": \"无法识别此视频的格式\",\n    \"defaultMessage\": \"Format of this video is not recognized\",\n    \"description\": \"Error message when uploaded video is invalid\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"loading_note\": {\n    \"translation\": \"加载中...\",\n    \"defaultMessage\": \"Loading...\",\n    \"description\": \"Message shown when component is loading\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_i_have_code\": {\n    \"translation\": \"我有代码\",\n    \"defaultMessage\": \"I have code\",\n    \"description\": \"Call to open field to enter password reset code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_reset_password_tel\": {\n    \"translation\": \"发送短信重置密码\",\n    \"defaultMessage\": \"Send SMS to reset password\",\n    \"description\": \"Label for password reset field by phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_phone_number\": {\n    \"translation\": \"手机号\",\n    \"defaultMessage\": \"Mobile phone number\",\n    \"description\": \"Prompt for entering a mobile phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_sms_sent\": {\n    \"translation\": \"已发送带有安全代码的短信。\",\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    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"mobile_number_required\": {\n    \"translation\": \"需要手机号\",\n    \"defaultMessage\": \"Mobile phone number required\",\n    \"description\": \"Error message\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_email\": {\n    \"translation\": \"当前邮箱\",\n    \"defaultMessage\": \"Current email\",\n    \"description\": \"Label for old email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"current_phone\": {\n    \"translation\": \"当前电话号码\",\n    \"defaultMessage\": \"Current phone number\",\n    \"description\": \"Label for old phone\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_email\": {\n    \"translation\": \"新电子邮件地址\",\n    \"defaultMessage\": \"New email\",\n    \"description\": \"Prompt for entering a new email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"new_phone_number\": {\n    \"translation\": \"新电话号码\",\n    \"defaultMessage\": \"New phone number\",\n    \"description\": \"Prompt for entering a new telephone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_email\": {\n    \"translation\": \"更改邮箱\",\n    \"defaultMessage\": \"Change email\",\n    \"description\": \"Prompt to change current email\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"change_phone\": {\n    \"translation\": \"更改电话号码\",\n    \"defaultMessage\": \"Change phone number\",\n    \"description\": \"Prompt to change current phone number\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"call_busy\": {\n    \"translation\": \"忙碌的\",\n    \"defaultMessage\": \"busy\",\n    \"description\": \"Label for busy call line\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_message\": {\n    \"translation\": \"置顶消息\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning message to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_message\": {\n    \"translation\": \"取消置顶消息\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the message.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"failed_to_init_audio\": {\n    \"translation\": \"初始化录音失败\",\n    \"defaultMessage\": \"Failed to initialize audio recording\",\n    \"description\": \"Error message when audio is not available\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"password_reset_success\": {\n    \"translation\": \"密码重置成功\",\n    \"defaultMessage\": \"Password reset successfully\",\n    \"description\": \"Notification message that the password was successfully reset.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"scan_qr_code\": {\n    \"translation\": \"扫描二维码\",\n    \"defaultMessage\": \"Scan QR Code\",\n    \"description\": \"Title for scanning QR code\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_comment\": {\n    \"translation\": \"为后人保存的注释、消息、链接、文件\",\n    \"defaultMessage\": \"Notes, messages, links, files saved for posterity\",\n    \"description\": \"Comment for self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"self_topic_name\": {\n    \"translation\": \"已保存的消息\",\n    \"defaultMessage\": \"Saved messages\",\n    \"description\": \"Name of self topic for UI\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_not_found\": {\n    \"translation\": \"未找到消息\",\n    \"defaultMessage\": \"message not found\",\n    \"description\": \"Pinned message is not found\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"message_deleted\": {\n    \"translation\": \"消息已删除\",\n    \"defaultMessage\": \"message deleted\",\n    \"description\": \"Pinned message is deleted\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_editing_placeholder\": {\n    \"translation\": \"别名（可选）\",\n    \"defaultMessage\": \"Alias (optional)\",\n    \"description\": \"Placeholder for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias\": {\n    \"translation\": \"别名：\",\n    \"defaultMessage\": \"Alias:\",\n    \"description\": \"Label for user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_already_taken\": {\n    \"translation\": \"（已占用）\",\n    \"defaultMessage\": \"(already taken)\",\n    \"description\": \"Error message for alias already taken\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"alias_invalid\": {\n    \"translation\": \"（无效）\",\n    \"defaultMessage\": \"(invalid)\",\n    \"description\": \"Error message for invalid alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_alias_edit\": {\n    \"translation\": \"别名\",\n    \"defaultMessage\": \"Alias\",\n    \"description\": \"Label for editing user or topic alias\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"select_country\": {\n    \"translation\": \"选择国家\",\n    \"defaultMessage\": \"Select country\",\n    \"description\": \"Placeholder for the country selector\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"text_copied\": {\n    \"translation\": \"已复制到剪贴板\",\n    \"defaultMessage\": \"Copied to clipboard\",\n    \"description\": \"Notification that text has been copied to clipboard\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_dark\": {\n    \"translation\": \"深色\",\n    \"defaultMessage\": \"Dark\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_light\": {\n    \"translation\": \"浅色\",\n    \"defaultMessage\": \"Light\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"color_schema_system\": {\n    \"translation\": \"系统默认\",\n    \"defaultMessage\": \"System default\",\n    \"description\": \"Name of the color schema\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_color_schema\": {\n    \"translation\": \"主题：\",\n    \"defaultMessage\": \"Theme:\",\n    \"description\": \"Label for selecting color scheme (dark, light) in Settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_text_size\": {\n    \"translation\": \"文字大小：\",\n    \"defaultMessage\": \"Text size:\",\n    \"description\": \"Label adjusting text size\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"incognito_mode_description\": {\n    \"translation\": \"隐藏您的在线状态和正在输入指示器。\",\n    \"defaultMessage\": \"Hide your online status and typing indicators.\",\n    \"description\": \"Description for incognito mode toggle\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command\": {\n    \"translation\": \"按 {key} 发送\",\n    \"defaultMessage\": \"Send on {key}\",\n    \"description\": \"Config option to send message on hitting CTRL(or Cmd)-Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_command_explained\": {\n    \"translation\": \"按 Enter 换行\",\n    \"defaultMessage\": \"Press Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain\": {\n    \"translation\": \"按 Enter 发送\",\n    \"defaultMessage\": \"Send on Enter\",\n    \"description\": \"Config option to send message on hitting Enter\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"send_plain_explained\": {\n    \"translation\": \"按 Shift + Enter 换行\",\n    \"defaultMessage\": \"Press Shift + Enter for new line\",\n    \"description\": \"Explanation how to enter newline when [Send on Enter] is enabled\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"sidepanel_title_acc_general\": {\n    \"translation\": \"常规\",\n    \"defaultMessage\": \"General\",\n    \"description\": \"Sidepanel title for AccGeneralView.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_keyboard\": {\n    \"translation\": \"键盘：\",\n    \"defaultMessage\": \"Keyboard:\",\n    \"description\": \"Label for send on enter settings\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"pin_chat\": {\n    \"translation\": \"置顶\",\n    \"defaultMessage\": \"Pin\",\n    \"description\": \"Menu item [Pin] for pinning chat to the top.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unpin_chat\": {\n    \"translation\": \"取消置顶\",\n    \"defaultMessage\": \"Unpin\",\n    \"description\": \"Menu item [Unpin] for un-pinning the chat.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"subscriber_count\": {\n    \"translation\": \"{count, plural, other {{count, number} 位订阅者}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}\",\n    \"description\": \"Count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_member_count\": {\n    \"translation\": \"成员：\",\n    \"defaultMessage\": \"Members:\",\n    \"description\": \"Label for the count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_subscriber_count\": {\n    \"translation\": \"订阅者：\",\n    \"defaultMessage\": \"Subscribers:\",\n    \"description\": \"Label for the count of channel subscribers\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"member_count\": {\n    \"translation\": \"{count, plural, other {{count, number} 位成员}}\",\n    \"defaultMessage\": \"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}\",\n    \"description\": \"Count of group topic members\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_image\": {\n    \"translation\": \"图片\",\n    \"defaultMessage\": \"image\",\n    \"description\": \"Tab title Image\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"tabtitle_pattern\": {\n    \"translation\": \"图案\",\n    \"defaultMessage\": \"pattern\",\n    \"description\": \"Tab title Pattern\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"button_restore\": {\n    \"translation\": \"恢复默认\",\n    \"defaultMessage\": \"Restore default\",\n    \"description\": \"Reset setting to default\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"wallpapers\": {\n    \"translation\": \"壁纸\",\n    \"defaultMessage\": \"Wallpapers\",\n    \"description\": \"Link or title for working with wallpapers.\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_blur_wallpaper\": {\n    \"translation\": \"模糊：\",\n    \"defaultMessage\": \"Blur:\",\n    \"description\": \"Label adjusting blur amount\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_scan_id\": {\n    \"translation\": \"扫描我的 ID：\",\n    \"defaultMessage\": \"Scan my ID:\",\n    \"description\": \"Label [Scan my ID:]\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"unknown_name\": {\n    \"translation\": \"未知\",\n    \"defaultMessage\": \"Unknown\",\n    \"description\": \"Name to show when the name is missing\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"save_action\": {\n    \"translation\": \"保存\",\n    \"defaultMessage\": \"Save\",\n    \"description\": \"Label for Save button\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"cannot_parse_vcard\": {\n    \"translation\": \"无法解析 vCard 文件。\",\n    \"defaultMessage\": \"Cannot parse vCard file.\",\n    \"description\": \"Error message when vCard file cannot be parsed\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"chat_now\": {\n    \"translation\": \"聊天\",\n    \"defaultMessage\": \"Chat\",\n    \"description\": \"Label for message button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"find_user\": {\n    \"translation\": \"查找\",\n    \"defaultMessage\": \"Find\",\n    \"description\": \"Label for search button in contact card\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contact_card\": {\n    \"translation\": \"联系人卡片\",\n    \"defaultMessage\": \"Contact Card\",\n    \"description\": \"Label for contact card preview\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"label_contacts\": {\n    \"translation\": \"联系人\",\n    \"defaultMessage\": \"Contacts\",\n    \"description\": \"Label for contact information\",\n    \"missing\": false,\n    \"obsolete\": false\n  },\n  \"add_members_prompt\": {\n    \"translation\": \"添加成员\",\n    \"defaultMessage\": \"add members\",\n    \"description\": \"Placeholder in group members input field\",\n    \"missing\": false,\n    \"obsolete\": false\n  }\n}\n"
  },
  {
    "path": "src/i18n.min/ar.json",
    "content": "{\"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\":\"ليس لديك محادثات\\n¯∖_(ツ)_/¯\",\"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\":\"رمز التأكيد\",\"error_invalid_id\":\"معرف غير صالح\",\"file_attachment_too_large\":\"حجم الملف {size} يتجاوز الحد {limit}.\",\"forgot_password_link\":\"نسيت كلمة المرور؟\",\"full_name_prompt\":\"الاسم الكامل، مثال: جون دو\",\"granted_permissions\":\"ممنوح\",\"group_has_no_members\":\"لا يوجد أعضاء\",\"group_user_id_prompt\":\"معرف المجموعة أو المستخدم\",\"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\":\"المعرف:\",\"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_reply\":\"رد\",\"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\":\"قائمة مثل alice@example.com، +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\":\"بواسطة المعرف\",\"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_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\":\"تم إعادة تعيين كلمة المرور بنجاح\",\"scan_qr_code\":\"مسح رمز QR\",\"alias_already_taken\":\"(مُستخدم بالفعل)\",\"alias_editing_placeholder\":\"الاسم المستعار (اختياري)\",\"alias_invalid\":\"(غير صالح)\",\"label_alias\":\"الاسم المستعار:\",\"label_alias_edit\":\"الاسم المستعار\",\"message_deleted\":\"تم حذف الرسالة\",\"message_not_found\":\"لم يتم العثور على الرسالة\",\"pin_message\":\"تثبيت\",\"select_country\":\"اختر الدولة\",\"self_topic_comment\":\"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل\",\"self_topic_name\":\"الرسائل المحفوظة\",\"text_copied\":\"تم النسخ إلى الحافظة\",\"unpin_message\":\"إلغاء التثبيت\",\"color_schema_dark\":\"داكن\",\"color_schema_light\":\"فاتح\",\"color_schema_system\":\"افتراضي النظام\",\"label_color_schema\":\"‏المظهر:\",\"label_text_size\":\"‏حجم النص:\",\"incognito_mode_description\":\"إخفاء حالة اتصالك ومؤشرات الكتابة.\",\"send_command\":\"إرسال بـ {key}\",\"send_command_explained\":\"اضغط Enter لسطر جديد\",\"send_plain\":\"إرسال بـ Enter\",\"send_plain_explained\":\"اضغط Shift + Enter لسطر جديد\",\"sidepanel_title_acc_general\":\"عام\",\"label_keyboard\":\"لوحة المفاتيح:\",\"pin_chat\":\"تثبيت\",\"unpin_chat\":\"إلغاء التثبيت\",\"subscriber_count\":\"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}\",\"label_member_count\":\"الأعضاء:\",\"label_subscriber_count\":\"المشتركون:\",\"member_count\":\"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}\",\"tabtitle_image\":\"صورة\",\"tabtitle_pattern\":\"نمط\",\"button_restore\":\"استعادة الافتراضي\",\"wallpapers\":\"الخلفيات\",\"label_blur_wallpaper\":\"ضبابية:\",\"label_scan_id\":\"مسح معرفي:\",\"unknown_name\":\"غير معروف\",\"save_action\":\"حفظ\",\"cannot_parse_vcard\":\"تعذّر تحليل ملف vCard.\",\"chat_now\":\"محادثة\",\"find_user\":\"بحث\",\"label_contact_card\":\"بطاقة الاتصال\",\"label_contacts\":\"جهات الاتصال\",\"add_members_prompt\":\"إضافة أعضاء\"}"
  },
  {
    "path": "src/i18n.min/de.json",
    "content": "{\"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\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Anpinnen\",\"unpin_message\":\"Lösen\",\"password_reset_success\":\"Passwort erfolgreich zurückgesetzt\",\"scan_qr_code\":\"QR-Code scannen\",\"self_topic_comment\":\"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert\",\"self_topic_name\":\"Gespeicherte Nachrichten\",\"message_not_found\":\"Nachricht nicht gefunden\",\"message_deleted\":\"Nachricht gelöscht\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(bereits vergeben)\",\"alias_invalid\":\"(ungültig)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Land auswählen\",\"text_copied\":\"In die Zwischenablage kopiert\",\"color_schema_dark\":\"Dunkel\",\"color_schema_light\":\"Hell\",\"color_schema_system\":\"Systemstandard\",\"label_color_schema\":\"Thema:\",\"label_text_size\":\"Textgröße:\",\"incognito_mode_description\":\"Online-Status und Tipp-Indikatoren verbergen.\",\"send_command\":\"Senden mit {key}\",\"send_command_explained\":\"Drücken Sie Enter für eine neue Zeile\",\"send_plain\":\"Senden mit Enter\",\"send_plain_explained\":\"Drücken Sie Shift + Enter für eine neue Zeile\",\"sidepanel_title_acc_general\":\"Allgemein\",\"label_keyboard\":\"Tastatur:\",\"pin_chat\":\"Anheften\",\"unpin_chat\":\"Loslösen\",\"subscriber_count\":\"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}\",\"label_member_count\":\"Mitglieder:\",\"label_subscriber_count\":\"Abonnenten:\",\"member_count\":\"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}\",\"tabtitle_image\":\"Bild\",\"tabtitle_pattern\":\"Muster\",\"button_restore\":\"Standard wiederherstellen\",\"wallpapers\":\"Hintergrundbilder\",\"label_blur_wallpaper\":\"Unschärfe:\",\"label_scan_id\":\"Meine ID scannen:\",\"unknown_name\":\"Unbekannt\",\"save_action\":\"Speichern\",\"cannot_parse_vcard\":\"vCard-Datei konnte nicht verarbeitet werden.\",\"chat_now\":\"Chatten\",\"find_user\":\"Suchen\",\"label_contact_card\":\"Kontaktkarte\",\"label_contacts\":\"Kontakte\",\"add_members_prompt\":\"Mitglieder hinzufügen\"}"
  },
  {
    "path": "src/i18n.min/en.json",
    "content": "{\"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\\n¯∖_(ツ)_/¯\",\"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\",\"password_reset_success\":\"Password reset successfully\",\"scan_qr_code\":\"Scan QR Code\",\"self_topic_comment\":\"Notes, messages, links, files saved for posterity\",\"self_topic_name\":\"Saved messages\",\"message_not_found\":\"message not found\",\"message_deleted\":\"message deleted\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(already taken)\",\"alias_invalid\":\"(invalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Select country\",\"text_copied\":\"Copied to clipboard\",\"color_schema_dark\":\"Dark\",\"color_schema_light\":\"Light\",\"color_schema_system\":\"System default\",\"label_color_schema\":\"Theme:\",\"label_text_size\":\"Text size:\",\"incognito_mode_description\":\"Hide your online status and typing indicators.\",\"send_command\":\"Send on {key}\",\"send_command_explained\":\"Press Enter for new line\",\"send_plain\":\"Send on Enter\",\"send_plain_explained\":\"Press Shift + Enter for new line\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Keyboard:\",\"pin_chat\":\"Pin\",\"unpin_chat\":\"Unpin\",\"subscriber_count\":\"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}\",\"label_member_count\":\"Members:\",\"label_subscriber_count\":\"Subscribers:\",\"member_count\":\"{count, plural, one {{count, number} member} other {{count, number} members}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"pattern\",\"button_restore\":\"Restore default\",\"wallpapers\":\"Wallpapers\",\"label_blur_wallpaper\":\"Blur:\",\"label_scan_id\":\"Scan my ID:\",\"unknown_name\":\"Unknown\",\"save_action\":\"Save\",\"cannot_parse_vcard\":\"Cannot parse vCard file.\",\"chat_now\":\"Chat\",\"find_user\":\"Find\",\"label_contact_card\":\"Contact Card\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"add members\"}"
  },
  {
    "path": "src/i18n.min/es.json",
    "content": "{\"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\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fijar\",\"unpin_message\":\"Desanclar\",\"failed_to_init_audio\":\"Error al inicializar la grabación de audio\",\"password_reset_success\":\"Restablecimiento de contraseña con éxito\",\"scan_qr_code\":\"Escanear código QR\",\"self_topic_comment\":\"Notas, mensajes, enlaces, archivos guardados para la posteridad\",\"self_topic_name\":\"Mensajes guardados\",\"message_not_found\":\"Mensaje no encontrado\",\"message_deleted\":\"Mensaje eliminado\",\"alias_editing_placeholder\":\"Alias (opcional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(ya tomado)\",\"alias_invalid\":\"(inválido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleccionar país\",\"text_copied\":\"Copiado al portapapeles\",\"color_schema_dark\":\"Oscuro\",\"color_schema_light\":\"Claro\",\"color_schema_system\":\"Predeterminado del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Tamaño del texto:\",\"incognito_mode_description\":\"Ocultar tu estado en línea e indicadores de escritura.\",\"send_command\":\"Enviar con {key}\",\"send_command_explained\":\"Presiona Enter para nueva línea\",\"send_plain\":\"Enviar con Enter\",\"send_plain_explained\":\"Presiona Shift + Enter para nueva línea\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Teclado:\",\"pin_chat\":\"Fijar\",\"unpin_chat\":\"Desfijar\",\"subscriber_count\":\"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}\",\"label_member_count\":\"Miembros:\",\"label_subscriber_count\":\"Suscriptores:\",\"member_count\":\"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}\",\"tabtitle_image\":\"imagen\",\"tabtitle_pattern\":\"patrón\",\"button_restore\":\"Restaurar predeterminado\",\"wallpapers\":\"Fondos de pantalla\",\"label_blur_wallpaper\":\"Desenfoque:\",\"label_scan_id\":\"Escanear mi ID:\",\"unknown_name\":\"Desconocido\",\"save_action\":\"Guardar\",\"cannot_parse_vcard\":\"No se puede analizar el archivo vCard.\",\"chat_now\":\"Chatear\",\"find_user\":\"Buscar\",\"label_contact_card\":\"Tarjeta de contacto\",\"label_contacts\":\"Contactos\",\"add_members_prompt\":\"añadir miembros\"}"
  },
  {
    "path": "src/i18n.min/fr.json",
    "content": "{\"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\\n¯∖_(ツ)_/¯\",\"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é\",\"pin_message\":\"Épingler\",\"unpin_message\":\"Détacher\",\"failed_to_init_audio\":\"Échec de l'initialisation de l'enregistrement audio\",\"password_reset_success\":\"Mot de passe réinitialisé avec succès\",\"scan_qr_code\":\"Scanner le code QR\",\"self_topic_comment\":\"Notes, messages, liens, fichiers sauvegardés\",\"self_topic_name\":\"Messages sauvegardés\",\"message_not_found\":\"message introuvable\",\"message_deleted\":\"message supprimé\",\"alias_editing_placeholder\":\"Alias (facultatif)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(déjà utilisé)\",\"alias_invalid\":\"(invalide)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Sélectionner un pays\",\"text_copied\":\"Copié dans le presse-papiers\",\"color_schema_dark\":\"Sombre\",\"color_schema_light\":\"Clair\",\"color_schema_system\":\"Thème du système\",\"label_color_schema\":\"Thème :\",\"label_text_size\":\"Taille du texte :\",\"incognito_mode_description\":\"Masquer votre statut en ligne et les indicateurs de frappe.\",\"send_command\":\"Envoyer avec {key}\",\"send_command_explained\":\"Appuyez sur Entrée pour une nouvelle ligne\",\"send_plain\":\"Envoyer avec Entrée\",\"send_plain_explained\":\"Appuyez sur Shift + Entrée pour une nouvelle ligne\",\"sidepanel_title_acc_general\":\"Général\",\"label_keyboard\":\"Clavier :\",\"pin_chat\":\"Épingler\",\"unpin_chat\":\"Désépingler\",\"subscriber_count\":\"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}\",\"label_member_count\":\"Membres :\",\"label_subscriber_count\":\"Abonnés :\",\"member_count\":\"{count, plural, one {{count, number} membre} other {{count, number} membres}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"motif\",\"button_restore\":\"Restaurer par défaut\",\"wallpapers\":\"Fonds d'écran\",\"label_blur_wallpaper\":\"Flou :\",\"label_scan_id\":\"Scanner mon ID :\",\"unknown_name\":\"Inconnu\",\"save_action\":\"Enregistrer\",\"cannot_parse_vcard\":\"Impossible d'analyser le fichier vCard.\",\"chat_now\":\"Discuter\",\"find_user\":\"Rechercher\",\"label_contact_card\":\"Carte de contact\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"ajouter des membres\"}"
  },
  {
    "path": "src/i18n.min/it.json",
    "content": "{\"action_block_contact\":\"Bloccare contatto\",\"action_cancel\":\"cancella\",\"action_clear_messages\":\"Cancella messaggi\",\"action_delete_messages\":\"Cancella messaggi per tutti\",\"action_leave_chat\":\"Lascia la conversazione\",\"action_report_chat\":\"Report conversazione\",\"archived_contacts\":\"Contatti archiviati ({count})\",\"badge_danger\":\"Sospetto\",\"badge_owner\":\"propietario\",\"badge_staff\":\"Amministrazione\",\"badge_verified\":\"Verificato\",\"badge_you\":\"tu\",\"block_contact_warning\":\"Sei sicuro di bloccare questo contatto?\",\"blocked_contacts_link\":\"Contatti bloccati ({count})\",\"button_add_members\":\"Aggiungi membri\",\"button_cancel\":\"Cancella\",\"button_confirm\":\"Conferma\",\"button_create\":\"Crea\",\"button_delete_account\":\"Elimina account\",\"button_edit\":\"Editare\",\"button_logout\":\"Fine sessione\",\"button_ok\":\"OK\",\"button_reset\":\"Reset\",\"button_send_request\":\"Invia richiesta\",\"button_sign_in\":\"Entrare\",\"button_sign_up\":\"Registrazione\",\"button_subscribe\":\"Sottoscrivi\",\"button_update\":\"Aggiorna\",\"cannot_initiate_file_upload\":\"Non è possibile iniziare il caricamento dell'archivio.\",\"channel\":\"canale\",\"channel_prompt\":\"Questo è un canale\",\"chat_invitation\":\"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?\",\"chat_invitation_accept\":\"Accettare\",\"chat_invitation_block\":\"Bloccare\",\"chat_invitation_ignore\":\"Ignorare\",\"clear_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.\",\"code_doesnot_match\":\"Il codice non conicide\",\"contacts_not_found\":\"Non hai chats\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Nessun contatto coincide con ''{query}''\",\"credential_email_prompt\":\"La tua mail di registrazione\",\"delete_account\":\"Elimina l'account\",\"delete_account_warning\":\"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.\",\"delete_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.\",\"download_action\":\"Scarica\",\"drafty_attachment\":\"Allegato\",\"drafty_form\":\"Form:\",\"drafty_image\":\"Immagine\",\"email_dative\":\"posta elettronica\",\"email_prompt\":\"Posta elettronica, per es. mario@example.com\",\"enable_peers_messaging\":\"Abilitare\",\"enter_confirmation_code_prompt\":\"Inserire il codice di conferma {method}:\",\"error_invalid_id\":\"ID non valido\",\"file_attachment_too_large\":\"La grandezza del file {size} eccede il limite di {limit}.\",\"forgot_password_link\":\"Hai dimenticato la password?\",\"full_name_prompt\":\"Nome completo, per es. Mario Rossi\",\"granted_permissions\":\"Garantito\",\"group_has_no_members\":\"Non hai membri\",\"group_user_id_prompt\":\"ID del gruppo o dell'utente\",\"image_caption_prompt\":\"Aggiungi un'immagine\",\"invalid_content\":\"contenuto non valido\",\"invalid_security_token\":\"Token di sicurezza invalido\",\"label_client\":\"Cliente:\",\"label_content_type\":\"Tipo di contenuto:\",\"label_default_access_mode\":\"Modalità di accesso predefinito:\",\"label_file_name\":\"Nome del file:\",\"label_group_members\":\"Membri del gruppo:\",\"label_incognito_mode\":\"Modalità incognito:\",\"label_message_sound\":\"Suono del messaggio:\",\"label_muting_topic\":\"Silenziato:\",\"label_other_user\":\"Altri\",\"label_password\":\"Password\",\"label_permissions\":\"Permessi:\",\"label_private\":\"Commento privato\",\"label_push_notifications\":\"Allarmi di notifica:\",\"label_push_notifications_disabled\":\"Allarmi di notifica (richiede HTTPS):\",\"label_reset_password\":\"Invia una mail per il reset della password:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Server:\",\"label_server_address\":\"Indirizzo del server:\",\"label_server_to_use\":\"Server da usare:\",\"label_size\":\"Grandezza:\",\"label_topic_name\":\"Nome dell'argomento\",\"label_user_contacts\":\"Contatti\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Tipo di Trasporto:\",\"label_you\":\"Tu:\",\"label_your_name\":\"Il tuo nome\",\"label_your_permissions\":\"I tuoi permessi:\",\"last_seen_timestamp\":\"Ultimo visto\",\"leave_chat_warning\":\"Sei sicuro di voler lasciare questa conversazione?\",\"link_contact_us\":\"Contattaci\",\"link_privacy_policy\":\"Política della privacy\",\"link_terms_of_service\":\"Termini d'uso del servizio\",\"login_prompt\":\"Nome dell'utente\",\"menu_item_archive_topic\":\"Archivia\",\"menu_item_block\":\"Bloccare\",\"menu_item_clear_messages\":\"Cancella i messaggi\",\"menu_item_clear_messages_for_all\":\"Cancella per tutti\",\"menu_item_delete\":\"Elimina\",\"menu_item_delete_for_all\":\"Elimina per tutti\",\"menu_item_delete_topic\":\"Eliminare\",\"menu_item_edit_permissions\":\"Modifica permessi\",\"menu_item_info\":\"Informazioni\",\"menu_item_member_delete\":\"Eliminare\",\"menu_item_mute\":\"Silenziare\",\"menu_item_restore_topic\":\"Ripristinare\",\"menu_item_send_retry\":\"Riprova\",\"menu_item_unblock\":\"Sblocca\",\"menu_item_unmute\":\"Riattiva le notifiche\",\"message_sending\":\"invio...\",\"message_sending_failed\":\"non è possibile inviare il messaggio\",\"messages_not_readable\":\"nessun accesso ai messaggi\",\"messaging_disabled_prompt\":\"L'invio dei messaggi è disabilitato\",\"more_online_members\":\"+{overflow} e oltre\",\"new_message_prompt\":\"Nuovo messaggio\",\"new_password_placeholder\":\"Inserire nuova password\",\"no_connection\":\"Nessuna connessione\",\"no_contacts\":\"Non ci sono contatti :-(\",\"numeric_confirmation_code_prompt\":\"Solo numeri\",\"online_now\":\"in linea\",\"password_prompt\":\"Password\",\"password_unchanged_prompt\":\"Non è cambiata\",\"peers_messaging_disabled\":\"I messaggi punto punto sono disabilitati.\",\"permission_admin\":\"Approvare ({val})\",\"permission_delete\":\"Eliminare ({val})\",\"permission_join\":\"Unisci ({val})\",\"permission_owner\":\"Propietario ({val})\",\"permission_pres\":\"Notifica arrivata ({val})\",\"permission_read\":\"Leggi ({val})\",\"permission_share\":\"Condividi ({val})\",\"permission_write\":\"Scrivi ({val})\",\"phone_dative\":\"telefono\",\"private_editing_placeholder\":\"Visibile solo a te\",\"push_init_failed\":\"Non è possibile inizializzare le notifiche push\",\"reconnect_countdown\":\"Disconnesso. Riconnessione in {seconds}…\",\"reconnect_now\":\"Riprovare\",\"reload_update\":\"Ricaricare\",\"report_chat_warning\":\"Sei sicuro di bloccare e denunciare questa conversazione?\",\"requested_permissions\":\"Sollecito\",\"save_attachment\":\"salva\",\"search_for_contacts\":\"Usa la ricerca per trovare i contatti\",\"search_no_results\":\"La ricerca non ha trovato nessun risultato\",\"search_placeholder\":\"Elenca come: email:mario@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Notifiche\",\"sidepanel_title_acc_support\":\"Supporto\",\"sidepanel_title_account_settings\":\"Impostazioni dell'account\",\"sidepanel_title_archive\":\"Chats archiviate\",\"sidepanel_title_blocked\":\"Chats bloccate\",\"sidepanel_title_cred\":\"Conferma le credenziali\",\"sidepanel_title_login\":\"Entra\",\"sidepanel_title_newtpk\":\"Comincia una Nuova Chat\",\"sidepanel_title_register\":\"Creare Account\",\"sidepanel_title_reset\":\"Resetta la Password\",\"sidepanel_title_settings\":\"Impostazioni\",\"stay_logged_in\":\"Rimani loggato\",\"tabtitle_find_user\":\"cerca\",\"tabtitle_group_by_id\":\"per ID\",\"tabtitle_new_group\":\"nuovo gruppo\",\"tags_editor_no_tags\":\"Aggiungi alcune etichette\",\"tags_not_found\":\"Non ci sono etichette definite. Aggiungine alcune.\",\"title_all_contacts\":\"Tutti i contatti\",\"title_group_members\":\"Membri del gruppo\",\"title_manage_tags\":\"Gestisci\",\"title_not_found\":\"Non trovato\",\"title_permissions\":\"Permessi\",\"title_tag_manager\":\"Etichette (trova e scopri)\",\"topic_block_warning\":\"Sei sicuro di voler bloccare questa conversazione?\",\"topic_delete_warning\":\"Sei sicuro di voler eliminare questa conversazione?\",\"topic_name_editing_placeholder\":\"Nome del gruppo\",\"unnamed_topic\":\"Senza nome\",\"update_available\":\"Aggiornamento disponibile.\",\"upload_finishing\":\"sto terminando...\",\"user_not_found\":\"Non trovato\",\"description_editing_placeholder\":\"Descrizione (opzionale)\",\"label_description\":\"Descrizione\",\"button_security\":\"Sicurezza\",\"panel_title_crop\":\"Trascina per aggiustare\",\"panel_title_general\":\"Generale\",\"panel_title_members\":\"Membri\",\"panel_title_security\":\"Sicurezza\",\"panel_title_info\":\"Informazione\",\"permissions_anonymous\":\"Anonimo\",\"permissions_authenticated\":\"Autenticato\",\"topic_delete\":\"Elimina la conversazione\",\"permissions_user\":\"Permessi dell'utente\",\"password_reset_email_sent\":\"Una mail con il codice di sicurezza è stata inviata.\",\"label_unarchive_topic\":\"Archiviato:\",\"menu_item_reply\":\"Replica\",\"menu_item_forward\":\"Reinvia\",\"forward_to\":\"Reinvia a\",\"forward_to_search_placeholder\":\"Cerca i contatti\",\"label_new_password\":\"Nuova password\",\"drafty_unknown\":\"Non supportato\",\"calls_incoming\":\"Chiamata in arrivo\",\"calls_outgoing\":\"Chiamata in uscita\",\"calls_you_label\":\"Tu\",\"menu_item_video_call\":\"Videochiamata\",\"already_in_call\":\"Sei già in una chiamata in uscita!\",\"call_cancelled\":\"cancellata\",\"call_missed\":\"persa\",\"call_declined\":\"rifiutata\",\"call_disconnected\":\"disconnessa\",\"label_use_secure_connection\":\"Usa una connessione sicura\",\"cred_confirmed_successfully\":\"Confermato con successo\",\"menu_item_edit\":\"Modifica\",\"editing_message\":\"Edita\",\"message_edited_marker\":\", editando\",\"icon_title_add_image\":\"Aggiungi immagine\",\"icon_title_attach_file\":\"Allega un file\",\"icon_title_delete\":\"Eliminare la registrazione\",\"icon_title_pause\":\"Riproduzione in pausa\",\"icon_title_play\":\"Riproduci la registrazione\",\"icon_title_record_voice\":\"Registra un messaggio vocale\",\"icon_title_resume\":\"Riprendi la riproduzione\",\"icon_title_send\":\"Inviare il messaggio\",\"drag_file\":\"Trascina il file qui\",\"drafty_video\":\"Registrazione video\",\"call_in_progress\":\"avanzamento\",\"menu_item_audio_call\":\"Chiamata\",\"unrecognized_video_format\":\"Il formato di questo video non è riconosciuto\",\"loading_note\":\"Caricando...\",\"password_i_have_code\":\"Ho un codice\",\"label_reset_password_tel\":\"Invia un SMS per resettare la password\",\"mobile_phone_number\":\"Numero di telefono cellulare\",\"password_reset_sms_sent\":\"Un SMS con il codice di sicurezza è stato inviato.\",\"mobile_number_required\":\"E' richiesto il numero di telefono cellulare\",\"current_email\":\"Email attuale\",\"current_phone\":\"Numero di telefono attuale\",\"new_email\":\"Nuova email\",\"new_phone_number\":\"Nuovo numero di telefono\",\"change_email\":\"Cambiare l'indirizzo di posta elettronica\",\"change_phone\":\"Cambiare numero di telefono\",\"call_busy\":\"occupato\",\"pin_message\":\"Fissare\",\"unpin_message\":\"Rimuovere\",\"failed_to_init_audio\":\"Non è possibile cominciare la registrazione audio\",\"password_reset_success\":\"Il reset della password è avvenuto con successo\",\"scan_qr_code\":\"Scansionare il codice QR\",\"self_topic_comment\":\"Note, messaggi, links e archivi, sono salvati per i posteri\",\"self_topic_name\":\"Messaggi salvati\",\"message_not_found\":\"Messaggi non trovati\",\"message_deleted\":\"Messaggi eliminati\",\"alias_editing_placeholder\":\"Alias (opzionale)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(già utilizzato)\",\"alias_invalid\":\"(invalido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleziona la nazione\",\"text_copied\":\"Copia nella clipboard\",\"incognito_mode_description\":\"Nascondi il tuo stato online e gli indicatori di digitazione.\",\"send_command\":\"Invia con {key}\",\"send_command_explained\":\"Premi Invio per una nuova riga\",\"send_plain\":\"Invia con Invio\",\"send_plain_explained\":\"Premi Shift + Invio per una nuova riga\",\"sidepanel_title_acc_general\":\"Generale\",\"label_keyboard\":\"Tastiera:\",\"color_schema_dark\":\"Scuro\",\"color_schema_light\":\"Chiaro\",\"color_schema_system\":\"Predefinito del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Dimensione testo:\",\"pin_chat\":\"Fissa\",\"unpin_chat\":\"Sblocca\",\"subscriber_count\":\"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Iscritti:\",\"member_count\":\"{count, plural, one {{count, number} membro} other {{count, number} membri}}\",\"tabtitle_image\":\"immagine\",\"tabtitle_pattern\":\"motivo\",\"button_restore\":\"Ripristina predefinito\",\"wallpapers\":\"Sfondi\",\"label_blur_wallpaper\":\"Sfocatura:\",\"label_scan_id\":\"Scansiona il mio ID:\",\"unknown_name\":\"Sconosciuto\",\"save_action\":\"Salva\",\"cannot_parse_vcard\":\"Impossibile analizzare il file vCard.\",\"chat_now\":\"Chatta\",\"find_user\":\"Cerca\",\"label_contact_card\":\"Scheda contatto\",\"label_contacts\":\"Contatti\",\"add_members_prompt\":\"aggiungi membri\"}"
  },
  {
    "path": "src/i18n.min/ko.json",
    "content": "{\"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\":\"채팅이없습니다\\n¯∖_(ツ)_/¯\",\"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\":\"바쁘다\",\"pin_message\":\"고정\",\"unpin_message\":\"고정 해제\",\"failed_to_init_audio\":\"오디오 녹음 초기화 실패\",\"password_reset_success\":\"비밀번호 재설정 성공\",\"scan_qr_code\":\"QR 코드 스캔\",\"self_topic_comment\":\"후세를 위해 저장된 메모, 메시지, 링크, 파일\",\"self_topic_name\":\"저장된 메시지\",\"message_not_found\":\"메시지를 찾을 수 없음\",\"message_deleted\":\"메시지 삭제됨\",\"alias_editing_placeholder\":\"별칭(선택 사항)\",\"label_alias\":\"별칭:\",\"alias_already_taken\":\"(이미 취함)\",\"alias_invalid\":\"(잘못된)\",\"label_alias_edit\":\"별칭\",\"select_country\":\"국가 선택\",\"text_copied\":\"클립보드에 복사됨\",\"color_schema_dark\":\"어둡게\",\"color_schema_light\":\"밝게\",\"color_schema_system\":\"시스템 기본값\",\"label_color_schema\":\"테마:\",\"label_text_size\":\"텍스트 크기:\",\"incognito_mode_description\":\"온라인 상태와 입력 표시기를 숨깁니다.\",\"send_command\":\"{key}로 전송\",\"send_command_explained\":\"새 줄로 이동하려면 Enter를 누르세요\",\"send_plain\":\"Enter로 전송\",\"send_plain_explained\":\"새 줄로 이동하려면 Shift + Enter를 누르세요\",\"sidepanel_title_acc_general\":\"일반\",\"label_keyboard\":\"키보드:\",\"pin_chat\":\"고정\",\"unpin_chat\":\"고정 해제\",\"subscriber_count\":\"{count, plural, other {구독자 {count, number}명}}\",\"label_member_count\":\"멤버:\",\"label_subscriber_count\":\"구독자:\",\"member_count\":\"{count, plural, other {멤버 {count, number}명}}\",\"tabtitle_image\":\"이미지\",\"tabtitle_pattern\":\"패턴\",\"button_restore\":\"기본값 복원\",\"wallpapers\":\"배경화면\",\"label_blur_wallpaper\":\"흐림:\",\"label_scan_id\":\"내 ID 스캔:\",\"unknown_name\":\"알 수 없음\",\"save_action\":\"저장\",\"cannot_parse_vcard\":\"vCard 파일을 파싱할 수 없습니다.\",\"chat_now\":\"채팅\",\"find_user\":\"찾기\",\"label_contact_card\":\"연락처 카드\",\"label_contacts\":\"연락처\",\"add_members_prompt\":\"멤버 추가\"}"
  },
  {
    "path": "src/i18n.min/ro.json",
    "content": "{\"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\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fixați\",\"unpin_message\":\"Anulați fixarea\",\"failed_to_init_audio\":\"Inițializarea înregistrării audio a eșuat\",\"password_reset_success\":\"Resetarea parolei cu succes\",\"scan_qr_code\":\"Scanați codul QR\",\"self_topic_comment\":\"Note, mesaje, linkuri, fișiere salvate pentru posteritate\",\"self_topic_name\":\"Mesaje salvate\",\"message_not_found\":\"mesajul nu a fost găsit\",\"message_deleted\":\"mesaj șters\",\"alias_editing_placeholder\":\"Alias (opțional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(deja luat)\",\"alias_invalid\":\"(nevalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Selectați țara\",\"text_copied\":\"Copiat în clipboard\",\"color_schema_dark\":\"Întunecat\",\"color_schema_light\":\"Luminos\",\"color_schema_system\":\"Implicit sistem\",\"label_color_schema\":\"Temă:\",\"label_text_size\":\"Dimensiune text:\",\"incognito_mode_description\":\"Ascunde statusul tău online și indicatorii de tastare.\",\"send_command\":\"Trimite cu {key}\",\"send_command_explained\":\"Apasă Enter pentru linie nouă\",\"send_plain\":\"Trimite cu Enter\",\"send_plain_explained\":\"Apasă Shift + Enter pentru linie nouă\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Tastatură:\",\"pin_chat\":\"Fixează\",\"unpin_chat\":\"Anulează fixarea\",\"subscriber_count\":\"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Abonați:\",\"member_count\":\"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}\",\"tabtitle_image\":\"imagine\",\"tabtitle_pattern\":\"model\",\"button_restore\":\"Restabilește implicit\",\"wallpapers\":\"Imagini de fundal\",\"label_blur_wallpaper\":\"Estompare:\",\"label_scan_id\":\"Scanează ID-ul meu:\",\"unknown_name\":\"Necunoscut\",\"save_action\":\"Salvează\",\"cannot_parse_vcard\":\"Nu se poate procesa fișierul vCard.\",\"chat_now\":\"Conversație\",\"find_user\":\"Caută\",\"label_contact_card\":\"Card de contact\",\"label_contacts\":\"Contacte\",\"add_members_prompt\":\"adaugă membri\"}"
  },
  {
    "path": "src/i18n.min/ru.json",
    "content": "{\"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\":\"Чатов нет\\n¯∖_(ツ)_/¯\",\"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\":\"занято\",\"pin_message\":\"Закрепить\",\"unpin_message\":\"Открепить\",\"failed_to_init_audio\":\"Не удалось инициализировать аудиозапись\",\"password_reset_success\":\"Пароль успешно изменен\",\"scan_qr_code\":\"Отсканируйте QR код\",\"self_topic_comment\":\"Заметки, сообщения, ссылки, файлы, сохраненные для потомков\",\"self_topic_name\":\"Сохраненные сообщения\",\"message_not_found\":\"сообщение не найдено\",\"message_deleted\":\"сообщение удалено\",\"alias_editing_placeholder\":\"Псевдоним (необязательно)\",\"label_alias\":\"Псевдоним:\",\"alias_already_taken\":\"(уже занято)\",\"alias_invalid\":\"(некорректно)\",\"label_alias_edit\":\"Псевдоним\",\"select_country\":\"Выберите страну\",\"text_copied\":\"Скопировано в буфер обмена\",\"color_schema_dark\":\"Тёмная\",\"color_schema_light\":\"Светлая\",\"color_schema_system\":\"Системная\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Размер текста:\",\"incognito_mode_description\":\"Скрывать онлайн статус и индикаторы набора текста.\",\"send_command\":\"Отправлять на {key}\",\"send_command_explained\":\"Нажмать Enter для новой строки\",\"send_plain\":\"Отправлять на Enter\",\"send_plain_explained\":\"Нажимать Shift + Enter для новой строки\",\"sidepanel_title_acc_general\":\"Основные\",\"label_keyboard\":\"Клавиатура:\",\"pin_chat\":\"Закрепить\",\"unpin_chat\":\"Открепить\",\"subscriber_count\":\"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}\",\"label_member_count\":\"Участники:\",\"label_subscriber_count\":\"Подписчики:\",\"member_count\":\"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}\",\"tabtitle_image\":\"картинка\",\"tabtitle_pattern\":\"узор\",\"button_restore\":\"Восстановить по умолчанию\",\"wallpapers\":\"Обои\",\"label_blur_wallpaper\":\"Размытие:\",\"label_scan_id\":\"Отсканируйте мой ID:\",\"unknown_name\":\"Неизвестный\",\"save_action\":\"Сохранить\",\"cannot_parse_vcard\":\"Не удалось обработать файл vCard.\",\"chat_now\":\"Написать\",\"find_user\":\"Найти\",\"label_contact_card\":\"Карточка контакта\",\"label_contacts\":\"Контакты\",\"add_members_prompt\":\"добавить участников\"}"
  },
  {
    "path": "src/i18n.min/th.json",
    "content": "{\"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\":\"ไม่พบแชท \\n¯∖_(ツ)_/¯\",\"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\":\"รหัสยืนยัน\",\"error_invalid_id\":\"ID ไม่ถูกต้อง\",\"file_attachment_too_large\":\"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\"forgot_password_link\":\"ลืมรหัสผ่าน?\",\"full_name_prompt\":\"ชื่อเต็ม, เช่น John Doe\",\"granted_permissions\":\"ยินยอม\",\"group_has_no_members\":\"ไม่มีสมาชิก\",\"group_user_id_prompt\":\"กลุ่ม หรือ ID ผู้ใช้\",\"image_caption_prompt\":\"คำอธิบายภาพ\",\"invalid_content\":\"เนื้อหาไม่ถูกต้อง\",\"invalid_security_token\":\"security token ไม่ถูกต้อง\",\"label_client\":\"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\":\"การแจ้งเตือน (requires 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\":\"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_reply\":\"ตอบกลับ\",\"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's\",\"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_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\":\"รีเซ็ตรหัสผ่านสำเร็จ\",\"scan_qr_code\":\"สแกนรหัส QR\",\"pin_message\":\"พิน\",\"unpin_message\":\"ปลดหมุด\",\"self_topic_comment\":\"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต\",\"self_topic_name\":\"ข้อความที่บันทึกไว้\",\"message_not_found\":\"ไม่พบข้อความ\",\"message_deleted\":\"ข้อความถูกลบ\",\"alias_editing_placeholder\":\"นามแฝง (ไม่บังคับ)\",\"label_alias\":\"นามแฝง:\",\"alias_already_taken\":\"(ใช้ไปแล้ว)\",\"alias_invalid\":\"(ไม่ถูกต้อง)\",\"label_alias_edit\":\"นามแฝง\",\"select_country\":\"เลือกประเทศ\",\"text_copied\":\"คัดลอกไปยังคลิปบอร์ดแล้ว\",\"color_schema_dark\":\"มืด\",\"color_schema_light\":\"สว่าง\",\"color_schema_system\":\"ค่าเริ่มต้นของระบบ\",\"label_color_schema\":\"ธีม:\",\"label_text_size\":\"ขนาดตัวอักษร:\",\"incognito_mode_description\":\"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ\",\"send_command\":\"ส่งด้วย {key}\",\"send_command_explained\":\"กด Enter เพื่อขึ้นบรรทัดใหม่\",\"send_plain\":\"ส่งด้วย Enter\",\"send_plain_explained\":\"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่\",\"sidepanel_title_acc_general\":\"ทั่วไป\",\"label_keyboard\":\"แป้นพิมพ์:\",\"pin_chat\":\"ปักหมุด\",\"unpin_chat\":\"เลิกปักหมุด\",\"subscriber_count\":\"{count, plural, other {{count, number} ผู้ติดตาม}}\",\"label_member_count\":\"สมาชิก:\",\"label_subscriber_count\":\"ผู้ติดตาม:\",\"member_count\":\"{count, plural, other {{count, number} สมาชิก}}\",\"tabtitle_image\":\"รูปภาพ\",\"tabtitle_pattern\":\"ลายลวดลาย\",\"button_restore\":\"คืนค่าเริ่มต้น\",\"wallpapers\":\"วอลเปเปอร์\",\"label_blur_wallpaper\":\"เบลอ:\",\"label_scan_id\":\"สแกน ID ของฉัน:\",\"unknown_name\":\"ไม่ทราบ\",\"save_action\":\"บันทึก\",\"cannot_parse_vcard\":\"ไม่สามารถอ่านไฟล์ vCard ได้\",\"chat_now\":\"แชท\",\"find_user\":\"ค้นหา\",\"label_contact_card\":\"นามบัตร\",\"label_contacts\":\"ผู้ติดต่อ\",\"add_members_prompt\":\"เพิ่มสมาชิก\"}"
  },
  {
    "path": "src/i18n.min/uk.json",
    "content": "{\"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\":\"Чатів немає\\n¯∖_(ツ)_/¯\",\"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\":\"Емейл, напр. 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\":\"Надіслати СМС для скидання пароля\",\"mobile_phone_number\":\"Номер мобільного телефону\",\"password_reset_sms_sent\":\"СМС із захисним кодом відправлено.\",\"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\":\"Пароль змінено успішно\",\"scan_qr_code\":\"Відскануйте QR-код\",\"pin_message\":\"закріпити\",\"unpin_message\":\"відкріпити\",\"self_topic_comment\":\"Нотатки, повідомлення, посилання, файли збережені для нащадків\",\"self_topic_name\":\"Збережені повідомлення\",\"message_not_found\":\"повідомлення не знайдено\",\"message_deleted\":\"повідомлення видалено\",\"alias_editing_placeholder\":\"Псевдонім (необов'язково)\",\"label_alias\":\"Псевдонім:\",\"alias_already_taken\":\"(вже зайнято)\",\"alias_invalid\":\"(недійсний)\",\"label_alias_edit\":\"Псевдонім\",\"select_country\":\"Виберіть країну\",\"text_copied\":\"Скопійовано в буфер обміну\",\"color_schema_dark\":\"Темна\",\"color_schema_light\":\"Світла\",\"color_schema_system\":\"Системна\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Розмір тексту:\",\"incognito_mode_description\":\"Приховати ваш статус онлайн та індикатори набору тексту.\",\"send_command\":\"Надіслати на {key}\",\"send_command_explained\":\"Натисніть Enter для нового рядка\",\"send_plain\":\"Надіслати на Enter\",\"send_plain_explained\":\"Натисніть Shift + Enter для нового рядка\",\"sidepanel_title_acc_general\":\"Загальні\",\"label_keyboard\":\"Клавіатура:\",\"pin_chat\":\"Закріпити\",\"unpin_chat\":\"Відкріпити\",\"subscriber_count\":\"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}\",\"label_member_count\":\"Учасники:\",\"label_subscriber_count\":\"Підписники:\",\"member_count\":\"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}\",\"tabtitle_image\":\"зображення\",\"tabtitle_pattern\":\"візерунок\",\"button_restore\":\"Відновити типові\",\"wallpapers\":\"Шпалери\",\"label_blur_wallpaper\":\"Розмиття:\",\"label_scan_id\":\"Сканувати мій ID:\",\"unknown_name\":\"Невідомий\",\"save_action\":\"Зберегти\",\"cannot_parse_vcard\":\"Не вдалося обробити файл vCard.\",\"chat_now\":\"Написати\",\"find_user\":\"Знайти\",\"label_contact_card\":\"Картка контакту\",\"label_contacts\":\"Контакти\",\"add_members_prompt\":\"додати учасників\"}"
  },
  {
    "path": "src/i18n.min/vi.json",
    "content": "{\"action_block_contact\":\"Chặn liên hệ\",\"action_cancel\":\"hủy\",\"action_clear_messages\":\"Xóa tin nhắn\",\"action_delete_messages\":\"Xóa tin nhắn cho tất cả\",\"action_leave_chat\":\"Rời cuộc trò chuyện\",\"action_report_chat\":\"Báo cáo cuộc trò chuyện\",\"archived_contacts\":\"Liên hệ đã lưu trữ ({count})\",\"badge_danger\":\"Không đáng tin\",\"badge_owner\":\"chủ sở hữu\",\"badge_staff\":\"Được quản lý bởi nhân viên\",\"badge_verified\":\"Đã xác minh/chính thức\",\"badge_you\":\"bạn\",\"block_contact_warning\":\"Bạn có chắc muốn chặn liên hệ này?\",\"blocked_contacts_link\":\"Liên hệ bị chặn ({count})\",\"button_add_members\":\"Thêm thành viên\",\"button_cancel\":\"Hủy\",\"button_confirm\":\"Xác nhận\",\"button_create\":\"Tạo\",\"button_delete_account\":\"Xóa tài khoản\",\"button_edit\":\"Sửa\",\"button_logout\":\"Đăng xuất\",\"button_ok\":\"OK\",\"button_reset\":\"Đặt lại\",\"button_send_request\":\"Gửi yêu cầu\",\"button_sign_in\":\"Đăng nhập\",\"button_sign_up\":\"Đăng ký\",\"button_subscribe\":\"Theo dõi\",\"button_update\":\"Cập nhật\",\"cannot_initiate_file_upload\":\"Không thể bắt đầu tải tệp lên.\",\"channel\":\"kênh\",\"channel_prompt\":\"Đây là một kênh\",\"chat_invitation\":\"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?\",\"chat_invitation_accept\":\"Chấp nhận\",\"chat_invitation_block\":\"Chặn\",\"chat_invitation_ignore\":\"Bỏ qua\",\"clear_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.\",\"code_doesnot_match\":\"Mã không khớp\",\"contacts_not_found\":\"Bạn chưa có cuộc trò chuyện nào\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Không có liên hệ nào khớp với ''{query}''\",\"credential_email_prompt\":\"Email đăng ký của bạn\",\"delete_account\":\"Xóa tài khoản\",\"delete_account_warning\":\"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.\",\"delete_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.\",\"download_action\":\"tải xuống\",\"drafty_attachment\":\"Tệp đính kèm\",\"drafty_form\":\"Biểu mẫu:\",\"drafty_image\":\"Hình ảnh\",\"email_dative\":\"email\",\"email_prompt\":\"Email, ví dụ jdoe@example.com\",\"enable_peers_messaging\":\"Bật\",\"enter_confirmation_code_prompt\":\"Mã xác nhận\",\"error_invalid_id\":\"ID không hợp lệ\",\"file_attachment_too_large\":\"Kích thước tệp {size} vượt quá giới hạn {limit}.\",\"forgot_password_link\":\"Quên mật khẩu?\",\"full_name_prompt\":\"Họ và tên, ví dụ John Doe\",\"granted_permissions\":\"Đã cấp\",\"group_has_no_members\":\"Không có thành viên\",\"group_user_id_prompt\":\"ID nhóm hoặc người dùng\",\"image_caption_prompt\":\"Chú thích hình ảnh\",\"invalid_content\":\"nội dung không hợp lệ\",\"invalid_security_token\":\"Mã bảo mật không hợp lệ\",\"label_client\":\"Client:\",\"label_content_type\":\"Kiểu nội dung:\",\"label_default_access_mode\":\"Chế độ truy cập mặc định:\",\"label_file_name\":\"Tên tệp:\",\"label_group_members\":\"Thành viên nhóm:\",\"label_incognito_mode\":\"Chế độ ẩn danh:\",\"label_message_sound\":\"Âm thanh tin nhắn:\",\"label_muting_topic\":\"Đã tắt:\",\"label_other_user\":\"Khác\",\"label_password\":\"Mật khẩu\",\"label_permissions\":\"Quyền:\",\"label_private\":\"Chỉ bạn nhìn thấy\",\"label_push_notifications\":\"Cảnh báo thông báo:\",\"label_push_notifications_disabled\":\"Cảnh báo thông báo (yêu cầu HTTPS):\",\"label_reset_password\":\"Gửi email đặt lại mật khẩu:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Máy chủ:\",\"label_server_address\":\"Địa chỉ máy chủ:\",\"label_server_to_use\":\"Máy chủ sử dụng:\",\"label_size\":\"Kích thước:\",\"label_topic_name\":\"Tên\",\"label_user_contacts\":\"Danh bạ\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Giao thức truyền tải:\",\"label_you\":\"Bạn:\",\"label_your_name\":\"Tên của bạn\",\"label_your_permissions\":\"Quyền của bạn:\",\"last_seen_timestamp\":\"Lần cuối hoạt động: {timestamp}\",\"leave_chat_warning\":\"Bạn có chắc muốn rời cuộc trò chuyện này?\",\"link_contact_us\":\"Liên hệ chúng tôi\",\"link_privacy_policy\":\"Chính sách quyền riêng tư\",\"link_terms_of_service\":\"Điều khoản dịch vụ\",\"login_prompt\":\"Đăng nhập\",\"menu_item_archive_topic\":\"Lưu trữ\",\"menu_item_block\":\"Chặn\",\"menu_item_clear_messages\":\"Xóa tin nhắn\",\"menu_item_clear_messages_for_all\":\"Xóa cho tất cả\",\"menu_item_delete\":\"Xóa\",\"menu_item_delete_for_all\":\"Xóa cho tất cả\",\"menu_item_delete_topic\":\"Xóa\",\"menu_item_edit_permissions\":\"Sửa quyền\",\"menu_item_info\":\"Thông tin\",\"menu_item_member_delete\":\"Xóa\",\"menu_item_mute\":\"Tắt thông báo\",\"menu_item_reply\":\"Trả lời\",\"menu_item_restore_topic\":\"Khôi phục\",\"menu_item_send_retry\":\"Thử lại\",\"menu_item_unblock\":\"Bỏ chặn\",\"menu_item_unmute\":\"Bật thông báo\",\"message_sending\":\"đang gửi...\",\"message_sending_failed\":\"thất bại\",\"messages_not_readable\":\"không có quyền xem tin nhắn\",\"messaging_disabled_prompt\":\"Tin nhắn bị tắt\",\"more_online_members\":\"+{overflow} nữa\",\"new_message_prompt\":\"Tin nhắn mới\",\"new_password_placeholder\":\"Nhập mật khẩu mới\",\"no_connection\":\"Không có kết nối\",\"no_contacts\":\"Bạn chưa có liên hệ nào :-(\",\"numeric_confirmation_code_prompt\":\"Chỉ số\",\"online_now\":\"đang online\",\"password_prompt\":\"Mật khẩu\",\"password_unchanged_prompt\":\"Không thay đổi\",\"peers_messaging_disabled\":\"Tin nhắn của người kia đã bị tắt.\",\"permission_admin\":\"Phê duyệt ({val})\",\"permission_delete\":\"Xóa ({val})\",\"permission_join\":\"Tham gia ({val})\",\"permission_owner\":\"Chủ sở hữu ({val})\",\"permission_pres\":\"Nhận thông báo ({val})\",\"permission_read\":\"Đọc ({val})\",\"permission_share\":\"Chia sẻ ({val})\",\"permission_write\":\"Ghi ({val})\",\"phone_dative\":\"điện thoại\",\"private_editing_placeholder\":\"Chỉ mình bạn nhìn thấy\",\"push_init_failed\":\"Khởi tạo thông báo đẩy thất bại\",\"reconnect_countdown\":\"Mất kết nối. Kết nối lại sau {seconds}…\",\"reconnect_now\":\"Thử ngay\",\"reload_update\":\"Tải lại\",\"report_chat_warning\":\"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?\",\"requested_permissions\":\"Đã yêu cầu\",\"save_attachment\":\"lưu\",\"search_for_contacts\":\"Dùng tìm kiếm để tìm liên hệ\",\"search_no_results\":\"Không có kết quả nào\",\"search_placeholder\":\"Liệt kê như email:alice@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Thông báo\",\"sidepanel_title_acc_support\":\"Hỗ trợ\",\"sidepanel_title_account_settings\":\"Cài đặt tài khoản\",\"sidepanel_title_archive\":\"Cuộc trò chuyện đã lưu trữ\",\"sidepanel_title_blocked\":\"Cuộc trò chuyện bị chặn\",\"sidepanel_title_cred\":\"Xác nhận thông tin\",\"sidepanel_title_login\":\"Đăng nhập\",\"sidepanel_title_newtpk\":\"Bắt đầu cuộc trò chuyện mới\",\"sidepanel_title_register\":\"Tạo tài khoản\",\"sidepanel_title_reset\":\"Đặt lại mật khẩu\",\"sidepanel_title_settings\":\"Cài đặt\",\"stay_logged_in\":\"Giữ tôi đăng nhập\",\"tabtitle_find_user\":\"tìm\",\"tabtitle_group_by_id\":\"theo id\",\"tabtitle_new_group\":\"nhóm mới\",\"tags_editor_no_tags\":\"Thêm vài thẻ\",\"tags_not_found\":\"Chưa có thẻ nào. Hãy thêm một vài thẻ.\",\"title_all_contacts\":\"Tất cả liên hệ\",\"title_group_members\":\"Thành viên nhóm\",\"title_manage_tags\":\"Quản lý\",\"title_not_found\":\"Không tìm thấy\",\"title_permissions\":\"Quyền\",\"title_tag_manager\":\"Thẻ (tìm kiếm & khám phá)\",\"topic_block_warning\":\"Bạn có chắc muốn chặn cuộc trò chuyện này?\",\"topic_delete_warning\":\"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.\",\"topic_name_editing_placeholder\":\"Tên nhóm tự do\",\"unnamed_topic\":\"Chưa đặt tên\",\"update_available\":\"Có bản cập nhật.\",\"upload_finishing\":\"đang hoàn tất...\",\"user_not_found\":\"Không tìm thấy\",\"description_editing_placeholder\":\"Mô tả tùy chọn\",\"label_description\":\"Mô tả\",\"button_security\":\"Bảo mật\",\"panel_title_crop\":\"Kéo để điều chỉnh\",\"panel_title_general\":\"Chung\",\"panel_title_members\":\"Thành viên\",\"panel_title_security\":\"Bảo mật\",\"panel_title_info\":\"Thông tin\",\"permissions_anonymous\":\"Ẩn danh\",\"permissions_authenticated\":\"Đã xác thực\",\"topic_delete\":\"Xóa cuộc trò chuyện\",\"permissions_user\":\"Quyền của người dùng\",\"password_reset_email_sent\":\"Email chứa mã bảo mật đã được gửi.\",\"label_unarchive_topic\":\"Đã lưu trữ:\",\"menu_item_forward\":\"Chuyển tiếp\",\"forward_to\":\"Chuyển tiếp đến\",\"forward_to_search_placeholder\":\"Tìm kiếm liên hệ\",\"label_new_password\":\"Mật khẩu mới\",\"drafty_unknown\":\"Không hỗ trợ\",\"calls_incoming\":\"Cuộc gọi đến\",\"calls_outgoing\":\"Cuộc gọi đi\",\"calls_you_label\":\"Bạn\",\"menu_item_video_call\":\"Gọi video\",\"already_in_call\":\"Bạn đang có một cuộc gọi đang diễn ra!\",\"call_cancelled\":\"đã hủy\",\"call_missed\":\"bỏ lỡ\",\"call_declined\":\"từ chối\",\"call_disconnected\":\"mất kết nối\",\"label_use_secure_connection\":\"Sử dụng kết nối bảo mật\",\"cred_confirmed_successfully\":\"Xác nhận thành công\",\"menu_item_edit\":\"Sửa\",\"editing_message\":\"Đang sửa\",\"message_edited_marker\":\", đã sửa\",\"icon_title_add_image\":\"Thêm hình ảnh\",\"icon_title_attach_file\":\"Đính kèm tệp\",\"icon_title_delete\":\"Xóa\",\"icon_title_pause\":\"Tạm dừng\",\"icon_title_play\":\"Phát\",\"icon_title_record_voice\":\"Ghi âm tin nhắn\",\"icon_title_resume\":\"Tiếp tục\",\"icon_title_send\":\"Gửi tin nhắn\",\"drag_file\":\"Kéo tệp vào đây\",\"drafty_video\":\"Video\",\"call_in_progress\":\"đang diễn ra\",\"menu_item_audio_call\":\"Gọi\",\"unrecognized_video_format\":\"Không nhận dạng được định dạng video này\",\"loading_note\":\"Đang tải...\",\"password_i_have_code\":\"Tôi có mã\",\"label_reset_password_tel\":\"Gửi SMS đặt lại mật khẩu:\",\"mobile_phone_number\":\"Số điện thoại di động\",\"password_reset_sms_sent\":\"Tin nhắn chứa mã bảo mật đã được gửi.\",\"mobile_number_required\":\"Cần số điện thoại di động\",\"current_email\":\"Email hiện tại\",\"current_phone\":\"Số điện thoại hiện tại\",\"new_email\":\"Email mới\",\"new_phone_number\":\"Số điện thoại mới\",\"change_email\":\"Đổi email\",\"change_phone\":\"Đổi số điện thoại\",\"call_busy\":\"bận\",\"failed_to_init_audio\":\"Không thể khởi tạo ghi âm\",\"password_reset_success\":\"Đặt lại mật khẩu thành công\",\"scan_qr_code\":\"Quét mã QR\",\"add_members_prompt\":\"thêm thành viên\",\"alias_already_taken\":\"(đã được sử dụng)\",\"alias_editing_placeholder\":\"Bí danh (tùy chọn)\",\"alias_invalid\":\"(không hợp lệ)\",\"button_restore\":\"Khôi phục mặc định\",\"cannot_parse_vcard\":\"Không thể đọc tệp vCard.\",\"chat_now\":\"Nhắn tin\",\"color_schema_dark\":\"Tối\",\"color_schema_light\":\"Sáng\",\"color_schema_system\":\"Mặc định hệ thống\",\"find_user\":\"Tìm kiếm\",\"incognito_mode_description\":\"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.\",\"label_alias\":\"Bí danh:\",\"label_alias_edit\":\"Bí danh\",\"label_blur_wallpaper\":\"Làm mờ:\",\"label_color_schema\":\"Giao diện:\",\"label_contact_card\":\"Danh thiếp\",\"label_contacts\":\"Danh bạ\",\"label_keyboard\":\"Bàn phím:\",\"label_member_count\":\"Thành viên:\",\"label_scan_id\":\"Quét mã của tôi:\",\"label_subscriber_count\":\"Người theo dõi:\",\"label_text_size\":\"Cỡ chữ:\",\"member_count\":\"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}\",\"message_deleted\":\"tin nhắn đã xóa\",\"message_not_found\":\"không tìm thấy tin nhắn\",\"pin_chat\":\"Ghim\",\"pin_message\":\"Ghim\",\"save_action\":\"Lưu\",\"select_country\":\"Chọn quốc gia\",\"self_topic_comment\":\"Ghi chú, tin nhắn, liên kết, tệp lưu lại\",\"self_topic_name\":\"Tin nhắn đã lưu\",\"send_command\":\"Gửi bằng {key}\",\"send_command_explained\":\"Nhấn Enter để xuống dòng\",\"send_plain\":\"Gửi bằng Enter\",\"send_plain_explained\":\"Nhấn Shift + Enter để xuống dòng\",\"sidepanel_title_acc_general\":\"Chung\",\"subscriber_count\":\"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}\",\"tabtitle_image\":\"hình ảnh\",\"tabtitle_pattern\":\"hoa văn\",\"text_copied\":\"Đã sao chép vào clipboard\",\"unknown_name\":\"Không rõ\",\"unpin_chat\":\"Bỏ ghim\",\"unpin_message\":\"Bỏ ghim\",\"wallpapers\":\"Hình nền\"}"
  },
  {
    "path": "src/i18n.min/zh-TW.json",
    "content": "{\"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\":\"您沒有任何對話\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置頂消息\",\"unpin_message\":\"取消置頂消息\",\"failed_to_init_audio\":\"初始化錄音失敗\",\"password_reset_success\":\"密碼重置成功\",\"scan_qr_code\":\"掃描二維碼\",\"self_topic_comment\":\"為後代所儲存的註解、訊息、連結、檔案\",\"self_topic_name\":\"已儲存的訊息\",\"message_not_found\":\"未找到訊息\",\"message_deleted\":\"訊息已刪除\",\"alias_editing_placeholder\":\"別名（可選）\",\"label_alias\":\"別名：\",\"alias_already_taken\":\"（已採取）\",\"alias_invalid\":\"（無效）\",\"label_alias_edit\":\"別名\",\"select_country\":\"選擇國家\",\"text_copied\":\"已複製到剪貼簿\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"淺色\",\"color_schema_system\":\"系統預設\",\"label_color_schema\":\"主題：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隱藏您的線上狀態和正在輸入指示器。\",\"send_command\":\"按 {key} 傳送\",\"send_command_explained\":\"按 Enter 換行\",\"send_plain\":\"按 Enter 傳送\",\"send_plain_explained\":\"按 Shift + Enter 換行\",\"sidepanel_title_acc_general\":\"一般\",\"label_keyboard\":\"鍵盤：\",\"pin_chat\":\"置頂\",\"unpin_chat\":\"取消置頂\",\"subscriber_count\":\"{count, plural, other {{count, number} 位訂閱者}}\",\"label_member_count\":\"成員：\",\"label_subscriber_count\":\"訂閱者：\",\"member_count\":\"{count, plural, other {{count, number} 位成員}}\",\"tabtitle_image\":\"圖片\",\"tabtitle_pattern\":\"圖案\",\"button_restore\":\"恢復預設\",\"wallpapers\":\"桌布\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"掃描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"儲存\",\"cannot_parse_vcard\":\"無法解析 vCard 檔案。\",\"chat_now\":\"聊天\",\"find_user\":\"尋找\",\"label_contact_card\":\"聯絡人卡片\",\"label_contacts\":\"聯絡人\",\"add_members_prompt\":\"新增成員\"}"
  },
  {
    "path": "src/i18n.min/zh.json",
    "content": "{\"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\":\"你尚无会话\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置顶消息\",\"unpin_message\":\"取消置顶消息\",\"failed_to_init_audio\":\"初始化录音失败\",\"password_reset_success\":\"密码重置成功\",\"scan_qr_code\":\"扫描二维码\",\"self_topic_comment\":\"为后人保存的注释、消息、链接、文件\",\"self_topic_name\":\"已保存的消息\",\"message_not_found\":\"未找到消息\",\"message_deleted\":\"消息已删除\",\"alias_editing_placeholder\":\"别名（可选）\",\"label_alias\":\"别名：\",\"alias_already_taken\":\"（已占用）\",\"alias_invalid\":\"（无效）\",\"label_alias_edit\":\"别名\",\"select_country\":\"选择国家\",\"text_copied\":\"已复制到剪贴板\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"浅色\",\"color_schema_system\":\"系统默认\",\"label_color_schema\":\"主题：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隐藏您的在线状态和正在输入指示器。\",\"send_command\":\"按 {key} 发送\",\"send_command_explained\":\"按 Enter 换行\",\"send_plain\":\"按 Enter 发送\",\"send_plain_explained\":\"按 Shift + Enter 换行\",\"sidepanel_title_acc_general\":\"常规\",\"label_keyboard\":\"键盘：\",\"pin_chat\":\"置顶\",\"unpin_chat\":\"取消置顶\",\"subscriber_count\":\"{count, plural, other {{count, number} 位订阅者}}\",\"label_member_count\":\"成员：\",\"label_subscriber_count\":\"订阅者：\",\"member_count\":\"{count, plural, other {{count, number} 位成员}}\",\"tabtitle_image\":\"图片\",\"tabtitle_pattern\":\"图案\",\"button_restore\":\"恢复默认\",\"wallpapers\":\"壁纸\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"扫描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"保存\",\"cannot_parse_vcard\":\"无法解析 vCard 文件。\",\"chat_now\":\"聊天\",\"find_user\":\"查找\",\"label_contact_card\":\"联系人卡片\",\"label_contacts\":\"联系人\",\"add_members_prompt\":\"添加成员\"}"
  },
  {
    "path": "src/index.js",
    "content": "// Put all packages together.\n// Used to generate umd/index.prod.js\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { IntlProvider } from 'react-intl';\n\nimport TinodeWeb from './views/tinode-web.jsx';\nimport HashNavigation from './lib/navigation.js';\n\n// Insert google analytics script and tag if configured.\nif (typeof FIREBASE_INIT != 'undefined' && FIREBASE_INIT && FIREBASE_INIT.measurementId) {\n  const head = document.getElementsByTagName('head')[0];\n  let script = document.createElement('script');\n  script.src = 'https://www.googletagmanager.com/gtag/js?id=' + FIREBASE_INIT.measurementId;\n  script.async = true;\n  head.prepend(script);\n  window.dataLayer = window.dataLayer || [];\n  function gtag(){dataLayer.push(arguments);}\n  gtag('js', new Date());\n  gtag('config', FIREBASE_INIT.measurementId);\n}\n\n// Allow loading translation strings for just one language.\nconst messageLoader = {\n  'ar': _ => import('./i18n.min/ar.json'),\n  'de': _ => import('./i18n.min/de.json'),\n  'en': _ => import('./i18n.min/en.json'),\n  'es': _ => import('./i18n.min/es.json'),\n  'fr': _ => import('./i18n.min/fr.json'),\n  'it': _ => import('./i18n.min/it.json'),\n  'ko': _ => import('./i18n.min/ko.json'),\n  'ro': _ => import('./i18n.min/ro.json'),\n  'ru': _ => import('./i18n.min/ru.json'),\n  'th': _ => import('./i18n.min/th.json'),\n  'uk': _ => import('./i18n.min/uk.json'),\n  'vi': _ => import('./i18n.min/vi.json'),\n  'zh': _ => import('./i18n.min/zh.json'),\n  'zh-TW': _ => import('./i18n.min/zh-TW.json')\n};\n\n// List of languages that are written right-to-left.\nconst rtl = ['ar', 'fa', 'he', 'ur'];\n\n// Detect human language to use in the UI:\n//  Check parameters from URL hash #?hl=ru, then browser, then use 'en' as a fallback.\nconst { params } = HashNavigation.parseUrlHash(window.location.hash);\nconst language = (params && params.hl) ||\n  (navigator.languages && navigator.languages[0]) ||\n  navigator.language ||\n  navigator.userLanguage ||\n  'en';\n\n// Make sure names like 'en_GB' and 'en-GB' consistently use '-'.\nconst normalized = language.replace('_', '-');\n// Get the base language 'en' from a more specific 'en-US' as a partial fallback.\nconst baseLanguage = normalized.split('-')[0].toLowerCase();\n\n// Try the full locale first, then the locale without the region code, fallback to 'en'.\nconst htmlLang = messageLoader[normalized] ? language : messageLoader[baseLanguage] ? baseLanguage : 'en';\n\nconst html = document.getElementsByTagName('html')[0];\n// Set lang attribute of the HTML element: <html lang=\"XX\">\nhtml.setAttribute('lang', htmlLang);\nif (rtl.includes(baseLanguage)) {\n  // Set right-to-left dir attribute of the HTML element: <html dir=\"rtl\">\n  html.setAttribute('dir', 'rtl');\n}\n// Render the app.\nconst root = createRoot(document.getElementById('mountPoint'));\nmessageLoader[htmlLang]().then(messages =>\n  root.render(\n    <IntlProvider locale={language} messages={messages} textComponent={React.Fragment}>\n      <TinodeWeb />\n    </IntlProvider>\n));\n"
  },
  {
    "path": "src/lib/blob-helpers.js",
    "content": "// File and image helper functions.\nimport { TheCard } from 'tinode-sdk';\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\nexport function importVCard(fileOrBlob) {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onerror = _ => {\n      reject(reader.error);\n    };\n    reader.onload = _ => {\n      const card = TheCard.importVCard(reader.result);\n      if (!card) {\n        reject(new Error(\"Failed to parse vCard\"));\n        return;\n      }\n      resolve(card);\n    };\n    reader.readAsText(fileOrBlob);\n  });\n}\n"
  },
  {
    "path": "src/lib/formatters.js",
    "content": "import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty, TheCard } 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 TheCardMini from '../widgets/the-card-mini.jsx';\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO,\n  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, sanitizeUrl, 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//    onHandleClick:\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 = (e) => this.onHandleClick(e, 'form_button');\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 'LN':\n      if (attr) {\n        // Ensure only safe URL schemes are clickable.\n        attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n      }\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 = (e) => this.onHandleClick(e, 'quote');\n      break;\n    case 'TC':\n      // TheCard\n      el = TheCardMini;\n      attr.content = data;\n      attr.authorizeURL = this.authorizeURL;\n      attr.onChatClick = (e) => this.onHandleClick(e, 'contact_chat');\n      attr.onFindClick = (e) => this.onHandleClick(e, 'contact_find');\n      values = null;\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      }\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 = [<span key=\"x1\" className=\"gray\">{this.formatMessage(messages.drafty_unknown)}</span>];\n        }\n        values = [<i key=\"x0\" className=\"material-icons gray\">extension</i>, ' '].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 = (e) => this.onHandleClick(e, 'image');\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 <img> or <video>.\n    el = UploadingImage;\n  }\n\n  return el;\n}\n\n// Additional processing of attached video 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 = (e) => this.onHandleClick(e, 'video');\n      attr.loading = 'lazy';\n    }\n    el = InlineVideo;\n  } else {\n    // Use custom element instead of <img> or <video>.\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 = [<i key=\"au\" className=\"material-icons\">mic</i>, ' ', 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 = [<i key=\"im\" className=\"material-icons\">photo</i>, ' ', 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 = [<i key=\"fm\" className=\"material-icons\">dashboard</i>,\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 (Drafty.isFormResponseType(data.mime)) {\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 = [<i key=\"ex\" className=\"material-icons\">attachment</i>, ' ', 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 'TC':\n      // TheCard\n      el = React.Fragment;\n      values = [<i key=\"tc\" className=\"material-icons\">contact_mail</i>, ' ',\n        TheCard.getFn(data) || this.formatMessage(messages.drafty_unknown)];\n      break;\n    case 'VD':\n      // Replace image with '[icon] Video'.\n      el = React.Fragment;\n      values = [<i key=\"im\" className=\"material-icons\">play_circle_outline</i>, ' ', this.formatMessage(messages.drafty_video)];\n      break;\n    default:\n      if (!el) {\n        // Unknown element.\n        el = React.Fragment;\n        values = [<i key=\"x0\" className=\"material-icons gray\">extension</i>, ' ', 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//    onHandleClick: this.handleDraftyClick\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 (Drafty.isFormResponseType(data.mime)) {\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 = [<i key=\"ex\" className=\"material-icons\">attachment</i>,\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        [<i key=\"qq\" className=\"material-icons\">format_quote</i>, ' ']);\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"
  },
  {
    "path": "src/lib/host-name.js",
    "content": "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"
  },
  {
    "path": "src/lib/local-storage.js",
    "content": "// 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"
  },
  {
    "path": "src/lib/navigation.js",
    "content": "// 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/?args' into 'path/' and '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        if (params[key] !== undefined) {\n          args.push(key + '=' + encodeURIComponent(params[key]));\n        }\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 removeUrlParams(hash, keys) {\n    if (!Array.isArray(keys)) {\n      keys = [keys];\n    }\n    const parsed = HashNavigation.parseUrlHash(hash);\n    for (const key of keys) {\n      delete parsed.params[key];\n    }\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"
  },
  {
    "path": "src/lib/strformat.js",
    "content": "// 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 <code>fixedMins</code> 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\n// Truncate a string to a specific length and add ellipsis if needed.\n// Support both LTR and RTL languages.\nexport function truncateString(str, maxLength) {\n  if (typeof str !== 'string') {\n    return str;\n  }\n  if (str.length <= maxLength) {\n    return str;\n  }\n\n  // Detect RTL characters in the string and truncate accordingly.\n  const isRTL = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/.test(str);\n  return isRTL ? '…' + str.slice(0, maxLength - 1) : str.slice(0, maxLength - 1) + '…';\n}\n"
  },
  {
    "path": "src/lib/strformat.test.js",
    "content": "import {\n  shortDateFormat,\n  relativeDateFormat,\n  secondsToTime,\n  bytesToHumanSize,\n  shortenFileName,\n  idToColorClass,\n  flagEmoji,\n  truncateString\n} from './strformat.js';\n\ndescribe('shortDateFormat', () => {\n  jest\n    .useFakeTimers()\n    .setSystemTime(new Date('2025-07-25T12:30:00Z'));\n\n  test('should format for same day', () => {\n    const then = new Date('2025-07-25T10:15:00');\n    // Note: output depends on the test runner's locale and timezone.\n    // Assuming a locale where the format is HH:mm.\n    expect(shortDateFormat(then, 'en-US')).toMatch(/10:15/);\n  });\n\n  test('should format for same year, different day', () => {\n    const then = new Date('2025-06-20T10:15:00');\n    expect(shortDateFormat(then, 'en-US')).toMatch(/Jun 20, 10:15/);\n  });\n\n  test('should format for different year', () => {\n    const then = new Date('2024-07-25T10:15:00');\n    expect(shortDateFormat(then, 'en-US')).toBe('Jul 25, 2024');\n  });\n});\n\ndescribe('relativeDateFormat', () => {\n  // Mock current date to a fixed point for consistent testing.\n  jest\n    .useFakeTimers()\n    .setSystemTime(new Date('2025-07-25T12:30:00Z'));\n\n  test('should format for today', () => {\n    const then = new Date('2025-07-25T10:00:00Z');\n    expect(relativeDateFormat(then, 'en-US')).toBe('today');\n  });\n\n  test('should format for yesterday', () => {\n    const then = new Date('2025-07-24T10:00:00Z');\n    expect(relativeDateFormat(then, 'en-US')).toBe('yesterday');\n  });\n\n  test('should format for a past date', () => {\n    const then = new Date('2025-07-20T10:00:00Z');\n    expect(relativeDateFormat(then, 'en-US')).toBe('7/20/2025');\n  });\n\n  test('should format for tomorrow', () => {\n    const then = new Date('2025-07-26T10:00:00Z');\n    expect(relativeDateFormat(then, 'en-US')).toBe('tomorrow');\n  });\n});\n\ndescribe('secondsToTime', () => {\n  test('should format seconds only', () => {\n    expect(secondsToTime(45)).toBe('0:45');\n  });\n\n  test('should format minutes and seconds', () => {\n    expect(secondsToTime(156)).toBe('2:36');\n  });\n\n  test('should format hours, minutes, and seconds', () => {\n    expect(secondsToTime(3756)).toBe('1:02:36');\n  });\n\n  test('should format with fixed minutes', () => {\n    expect(secondsToTime(3726, true)).toBe('1:02:06');\n    expect(secondsToTime(126, true)).toBe('02:06');\n  });\n\n  test('should handle non-number input', () => {\n    expect(secondsToTime('abc')).toBe('');\n  });\n});\n\ndescribe('bytesToHumanSize', () => {\n  test('should format 0 bytes', () => {\n    expect(bytesToHumanSize(0)).toBe('0 Bytes');\n  });\n\n  test('should format bytes', () => {\n    expect(bytesToHumanSize(500)).toBe('500 Bytes');\n  });\n\n  test('should format kilobytes', () => {\n    expect(bytesToHumanSize(1500)).toBe('1.46 KB');\n  });\n\n  test('should format megabytes', () => {\n    expect(bytesToHumanSize(1500000)).toBe('1.43 MB');\n  });\n\n  test('should format gigabytes', () => {\n    expect(bytesToHumanSize(1500000000)).toBe('1.40 GB');\n  });\n});\n\ndescribe('shortenFileName', () => {\n  test('should not shorten if not needed', () => {\n    expect(shortenFileName('shortname.txt', 20)).toBe('shortname.txt');\n  });\n\n  test('should shorten a long file name', () => {\n    const longName = 'this_is_a_very_long_file_name_that_needs_shortening.txt';\n    expect(shortenFileName(longName, 20)).toBe('this_is_a…ening.txt');\n    expect(shortenFileName(longName, 20).length).toBeLessThanOrEqual(20);\n  });\n\n  test('should handle non-string input', () => {\n    expect(shortenFileName(null, 20)).toBeNull();\n    expect(shortenFileName(undefined, 20)).toBeUndefined();\n  });\n});\n\ndescribe('idToColorClass', () => {\n  test('should generate light background color class', () => {\n    expect(idToColorClass('usr123', true, false)).toMatch(/lt-bg-\\d+/);\n  });\n\n  test('should generate dark background color class', () => {\n    expect(idToColorClass('usr123', false, false)).toMatch(/dk-bg-\\d+/);\n  });\n\n  test('should generate light foreground color class', () => {\n    expect(idToColorClass('usr123', true, true)).toMatch(/lt-fg-\\d+/);\n  });\n\n  test('should generate dark foreground color class', () => {\n    expect(idToColorClass('usr123', false, true)).toMatch(/dk-fg-\\d+/);\n  });\n\n  test('should be deterministic', () => {\n    expect(idToColorClass('usr123', true, false)).toBe('lt-bg-2');\n    expect(idToColorClass('grpABC', false, true)).toBe('dk-fg-3');\n  });\n});\n\ndescribe('flagEmoji', () => {\n  test('should convert country code to flag', () => {\n    expect(flagEmoji('US')).toBe('🇺🇸');\n  });\n\n  test('should handle lowercase country code', () => {\n    expect(flagEmoji('jp')).toBe('🇯🇵');\n  });\n});\n\ndescribe('truncateString', () => {\n  test('should not truncate if not needed', () => {\n    expect(truncateString('short', 10)).toBe('short');\n  });\n\n  test('should truncate and add ellipsis for long strings', () => {\n    expect(truncateString('this is a long string', 10)).toBe('this is a…');\n  });\n\n  test('should handle RTL strings (Arabic)', () => {\n    expect(truncateString('هذا مثال لنص عربي طويل يحتاج.', 10)).toBe('…هذا مثال ');\n  });\n\n  test('should handle RTL strings (Hebrew)', () => {\n    expect(truncateString('זה דוגמה לטקסט עברי ארוך', 10)).toBe('…זה דוגמה ');\n  });\n\n  test('should handle RTL strings (Persian/Farsi)', () => {\n    expect(truncateString('این یک نمونه متن فارسی طولانی است', 10)).toBe('…این یک نم');\n  });\n\n  test('should handle RTL strings (Urdu)', () => {\n    expect(truncateString('یہ اردو زبان کا ایک طویل جملہ ہے', 10)).toBe('…یہ اردو ز');\n  });\n\n  test('should handle RTL strings (Arabic with mixed punctuation)', () => {\n    expect(truncateString('النص العربي الطويل! متحف الفن', 10)).toBe('…النص العر');\n  });\n\n  test('should handle RTL strings (Hebrew with English mixed)', () => {\n    expect(truncateString('טקסט עברי עם English מעורב', 10)).toBe('…טקסט עברי');\n  });\n});\n"
  },
  {
    "path": "src/lib/utils.js",
    "content": "// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\nimport { WALLPAPER_DEFAULTS } from '../config.js';\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:[<mediatype>][;base64],<data>\"?\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.replaceAll(/[- ().]*/g, '');\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-z0-9_.+-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.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// //example.com or \\\\example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n  // Replacing backslashes with forward slashes to mimic JS URL parser then testing for\n  // 'scheme:' and '//' with optional space at the start.\n  return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url.replace(/\\\\/g, '/'));\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(/[^\\x21-\\x7E]/gmi, '').trim();\n\n  // Replace backslashes with forward slashes. They will be replaced in the URL parser anyway.\n  url = url.replace(/\\\\/g, '/');\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 <img src=\"url\"> 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// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n  // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n  /*\n  if (typeof window.location == 'object') {\n    if (!url.startsWith(window.location.origin)) {\n      return url;\n    }\n  }\n  */\n  // Check if the URL is a data or blob. Do not alter such URLs.\n  if (url.startsWith('data:') || url.startsWith('blob:')) {\n    return url;\n  }\n\n  // Split URL into host+path, query, fragment.\n  let query = '', fragment = '';\n  const idxF = url.indexOf('#');\n  if (idxF > 0) {\n    fragment = url.substring(idxF+1);\n    url = url.substring(0, idxF);\n  }\n  const idxQ = url.indexOf('?');\n  if (idxQ > 0) {\n    query = url.substring(idxQ+1);\n    url = url.substring(0, idxQ);\n  }\n  // Add parameter and reassemble.\n  const params = new URLSearchParams(query);\n  params.append('asatt', '1');\n  return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\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\nexport function defaultWallpaper() {\n  const wallpaperIndex = require('../../img/bkg/index.json');\n  const wp = wallpaperIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index];\n  return {name: `../${WALLPAPER_DEFAULTS.path}${wp.name}`, size: wp.size};\n}\n\nexport function wallpaperNameFromUrl(wallpaperUrl) {\n  // Get filename from URL.\n  const parts = wallpaperUrl.split('/');\n  return parts[parts.length - 1];\n}\n\nexport function wallpaperTypeFromUrl(wallpaperUrl) {\n  // Get filename from URL.\n  const fname = wallpaperNameFromUrl(wallpaperUrl);\n  const wallpaperIndex = require('../../img/bkg/index.json');\n  for (const type in wallpaperIndex) {\n    for (let i = 0; i < wallpaperIndex[type].length; i++) {\n      if (wallpaperIndex[type][i].name == fname) {\n        return type;\n      }\n    }\n  }\n  return null;\n}\n"
  },
  {
    "path": "src/lib/utils.test.js",
    "content": "import {\n  arrayEqual,\n  asEmail,\n  asPhone,\n  isUrlRelative,\n  sanitizeUrl,\n  sanitizeUrlForMime,\n  urlAsAttachment\n} from './utils';\n\ntest('asPhone', () => {\n  expect(asPhone('123-456-7890')).toBe('1234567890');\n  expect(asPhone('(123) 456-7890')).toBe('1234567890');\n  expect(asPhone('+1 (123) 456-7890')).toBe('+11234567890');\n  expect(asPhone('123.456.7890')).toBe('1234567890');\n  expect(asPhone('123 456 7890')).toBe('1234567890');\n  expect(asPhone('123-456-78901')).toBe('12345678901');\n  expect(asPhone('')).toBeNull();\n  expect(asPhone('abc-def-ghij')).toBeNull();\n  expect(asPhone('123-456-789')).toBeNull();\n  expect(asPhone('123-4i6-78901')).toBeNull();\n});\n\ntest('arrayEqual', () => {\n  expect(arrayEqual([1, 2, 3], [3, 2, 1])).toBe(true);\n  expect(arrayEqual([1, 2, 3], [4, 5, 6])).toBe(false);\n  expect(arrayEqual([1, 2, 3], [1, 2, 3, 4])).toBe(false);\n  expect(arrayEqual([1, 2, 3], [1, 2])).toBe(false);\n  expect(arrayEqual([], [])).toBe(true);\n  expect(arrayEqual([1], [1])).toBe(true);\n  expect(arrayEqual([1], [2])).toBe(false);\n  expect(arrayEqual(null, [1, 2, 3])).toBe(false);\n  expect(arrayEqual([1, 2, 3], null)).toBe(false);\n  expect(arrayEqual(null, null)).toBe(true);\n  expect(arrayEqual(undefined, undefined)).toBe(true);\n  expect(arrayEqual([1, 2, 3], undefined)).toBe(false);\n  expect(arrayEqual([1, 2, 3], [1, 2, '3'])).toBe(false);\n});\n\ntest('asEmail', () => {\n  expect(asEmail('test@example.com')).toBe('test@example.com');\n  expect(asEmail('test@mail.example.com')).toBe('test@mail.example.com');\n  expect(asEmail('test@e-mail.example.com')).toBe('test@e-mail.example.com');\n  expect(asEmail(' test@example.com ')).toBe('test@example.com');\n  expect(asEmail('test.email+alex@leetcode.com')).toBe('test.email+alex@leetcode.com');\n  expect(asEmail('test.email@sub.example.com')).toBe('test.email@sub.example.com');\n  expect(asEmail('test.email@sub.example.co.uk')).toBe('test.email@sub.example.co.uk');\n  expect(asEmail('invalid-email')).toBeNull();\n  expect(asEmail('invalid-email@')).toBeNull();\n  expect(asEmail('invalid-email@example')).toBeNull();\n  expect(asEmail('invalid-email@example.')).toBeNull();\n  expect(asEmail('invalid-email@example..com')).toBeNull();\n  expect(asEmail('invalid-email@.example.com')).toBeNull();\n  expect(asEmail('invalid-email@example.com.')).toBeNull();\n  expect(asEmail('invalid-email@@example.com.')).toBeNull();\n  expect(asEmail('invalid/email@example.com.')).toBeNull();\n});\n\ntest('isUrlRelative', () => {\n  expect(isUrlRelative('example.html')).toBe(true);\n  expect(isUrlRelative('https:example.com')).toBe(false);\n  expect(isUrlRelative('http:/example.com')).toBe(false);\n  expect(isUrlRelative(' \\n https://example.com')).toBe(false);\n  expect(isUrlRelative('//example.com')).toBe(false);\n  expect(isUrlRelative('\\\\example.com')).toBe(true);\n  expect(isUrlRelative('example.com')).toBe(true);\n  expect(isUrlRelative('/example')).toBe(true);\n  expect(isUrlRelative('ftp://example.com')).toBe(false);\n  expect(isUrlRelative('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA')).toBe(false);\n});\n\ntest('sanitizeUrl', () => {\n  // Test with valid URLs\n  expect(sanitizeUrl('http://example.com')).toBe('http://example.com');\n  expect(sanitizeUrl('https://example.com')).toBe('https://example.com');\n  expect(sanitizeUrl('blob:http://example.com')).toBe('blob:http://example.com');\n  expect(sanitizeUrl('example.html')).toBe('example.html');\n\n  // Test with invalid URLs\n  expect(sanitizeUrl('ftp://example.com')).toBeNull();\n  expect(sanitizeUrl('javascript:alert(1)')).toBeNull();\n  expect(sanitizeUrl('data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==')).toBeNull();\n\n  // Test with allowed schemes\n  expect(sanitizeUrl('ftp://example.com', ['ftp'])).toBe('ftp://example.com');\n  expect(sanitizeUrl('ftps://example.com', ['ftp', 'ftps'])).toBe('ftps://example.com');\n\n  // Test with non-string input\n  expect(sanitizeUrl(null)).toBe(null);\n  expect(sanitizeUrl(123)).toBe(123);\n\n  // Test with control characters and whitespace\n  expect(sanitizeUrl(' \\n https://example.com')).toBe('https://example.com');\n  expect(sanitizeUrl('http:\\\\\\\\example.com')).toBe('http://example.com');\n});\n\ntest('sanitizeUrlForMime', () => {\n  expect(sanitizeUrlForMime('data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==', 'image')).toBeNull();\n\n  // Test with empty and null URLs\n  expect(sanitizeUrlForMime('', 'image')).toBeNull();\n  expect(sanitizeUrlForMime(null, 'image')).toBeNull();\n\n  // Test with valid data URL but wrong mime type\n  expect(sanitizeUrlForMime('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA', 'text')).toBeNull();\n});\n\ntest('urlAsAttachment', () => {\n  // Test with a simple URL\n  expect(urlAsAttachment('http://example.com')).toBe('http://example.com?asatt=1');\n\n  // Test with a URL that already has a query parameter\n  expect(urlAsAttachment('http://example.com?param=value')).toBe('http://example.com?param=value&asatt=1');\n\n  // Test with a URL that has a fragment\n  expect(urlAsAttachment('http://example.com#fragment')).toBe('http://example.com?asatt=1#fragment');\n\n  // Test with a URL that has both query parameters and a fragment\n  expect(urlAsAttachment('http://example.com?param=value#fragment')).toBe('http://example.com?param=value&asatt=1#fragment');\n\n  // Test with a data URL\n  expect(urlAsAttachment('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA')).toBe('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA');\n\n  // Test with a blob URL\n  expect(urlAsAttachment('blob:http://example.com/550e8400-e29b-41d4-a716-446655440000')).toBe('blob:http://example.com/550e8400-e29b-41d4-a716-446655440000');\n});\n\n"
  },
  {
    "path": "src/version.js",
    "content": "// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.25.2\";\n"
  },
  {
    "path": "src/views/acc-general-view.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class AccGeneralView extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      colorSchema: props.colorSchema || 'auto',\n      textSize: (props.textSize * 10) || '100',\n      sendOnEnter: props.sendOnEnter || 'plain',\n    };\n\n    this.isMac = ((navigator.userAgentData && navigator.userAgentData.platform)\n      || navigator.platform).toLowerCase().startsWith('mac');\n    this.handleColorSchemaSelected = this.handleColorSchemaSelected.bind(this);\n    this.handleTextSizeChanged = this.handleTextSizeChanged.bind(this);\n    this.handleSendOnEnterSelected = this.handleSendOnEnterSelected.bind(this);\n  }\n\n  handleColorSchemaSelected(e) {\n    this.setState({colorSchema: e.currentTarget.value});\n    this.props.onChangeColorSchema(e.currentTarget.value);\n  }\n\n  handleTextSizeChanged(e) {\n    // In %%.\n    this.setState({textSize: e.currentTarget.value});\n    // Convert %% to pt, 100% = 10pt.\n    this.props.onTextSizeChanged((e.currentTarget.value / 10) | 0);\n  }\n\n  handleSendOnEnterSelected(e) {\n    this.setState({sendOnEnter: e.currentTarget.value});\n    this.props.onSendOnEnterChanged(e.currentTarget.value);\n  }\n\n  render() {\n    return (\n        <div id=\"settings-form\" className=\"scrollable-panel\">\n          <div className=\"panel-form-column\">\n            <div className=\"panel-form-row\">\n              <label className=\"small\">\n                <FormattedMessage id=\"label_color_schema\" defaultMessage=\"Theme:\"\n                  description=\"Label for selecting color scheme (dark, light) in Settings\" />\n              </label>\n            </div>\n            <div className=\"panel-form-row\">\n              <ul className=\"quoted\">\n                <li key=\"system\">\n                  <input type=\"radio\" id=\"system\" name=\"color-scheme-select\" value=\"auto\"\n                    checked={this.state.colorSchema == 'auto'}\n                    onChange={this.handleColorSchemaSelected} />&nbsp;\n                  <label htmlFor=\"system\">\n                    <FormattedMessage id=\"color_schema_system\" defaultMessage=\"System default\" description=\"Name of the color schema\"/>&nbsp;\n                    <img src=\"img/routine.svg\" style={{verticalAlign: 'top', width: '1.6rem', height: '1.6rem'}}/>\n                  </label>\n                </li>\n                <li key=\"light\">\n                  <input type=\"radio\" id=\"light\" name=\"color-scheme-select\" value=\"light\"\n                    checked={this.state.colorSchema == 'light'}\n                    onChange={this.handleColorSchemaSelected} />&nbsp;\n                  <label htmlFor=\"light\">\n                    <FormattedMessage id=\"color_schema_light\" defaultMessage=\"Light\" description=\"Name of the color schema\"/>&nbsp;\n                    <i className=\"material-icons orange large\">light_mode</i>\n                  </label>\n                </li>\n                <li key=\"dark\">\n                  <input type=\"radio\" id=\"dark\" name=\"color-scheme-select\" value=\"dark\"\n                    checked={this.state.colorSchema == 'dark'}\n                    onChange={this.handleColorSchemaSelected} />&nbsp;\n                  <label htmlFor=\"dark\">\n                    <FormattedMessage id=\"color_schema_dark\" defaultMessage=\"Dark\" description=\"Name of the color schema\"/>&nbsp;\n                    <i className=\"material-icons blue large\">dark_mode</i>\n                  </label>\n                </li>\n              </ul>\n            </div>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-row clean-clickable\">\n            <a onClick={this.props.onSelectWallpapers} className=\"flat-button\">\n              <i className=\"material-icons\">wallpaper</i>&nbsp;\n              <FormattedMessage id=\"wallpapers\" defaultMessage=\"Wallpapers\"\n                  description=\"Link or title for working with wallpapers.\" />\n            </a>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-column\">\n            <div className=\"panel-form-row\">\n              <label className=\"small\">\n                <FormattedMessage id=\"label_text_size\" defaultMessage=\"Text size:\"\n                  description=\"Label adjusting text size\" />\n              </label>\n            </div>\n            <div className=\"panel-form-row\">\n              <input type=\"range\" id=\"text_size\" name=\"text_size\" min=\"80\" max=\"120\" step=\"10\"\n                list=\"text_size_options\" value={this.state.textSize} onChange={this.handleTextSizeChanged} />\n            </div>\n            <div className=\"panel-form-row\">\n              <datalist id=\"text_size_options\">\n                <option value=\"80\" label=\"80%\" />\n                <option value=\"90\" label=\"90%\" />\n                <option value=\"100\" label=\"100%\" />\n                <option value=\"110\" label=\"110%\" />\n                <option value=\"120\" label=\"120%\" />\n              </datalist>\n            </div>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-row\">\n            <label className=\"small\">\n              <FormattedMessage id=\"label_keyboard\" defaultMessage=\"Keyboard:\"\n                description=\"Label for send on enter settings\" />\n            </label>\n          </div>\n          <div className=\"panel-form-row\">\n            <ul className=\"quoted\">\n              <li key=\"plain\">\n                <input type=\"radio\" id=\"plain\" name=\"send-select\" value=\"plain\"\n                  checked={this.state.sendOnEnter == 'plain'}\n                  onChange={this.handleSendOnEnterSelected} />&nbsp;\n                <label htmlFor=\"send_plain\">\n                  <FormattedMessage id=\"send_plain\" defaultMessage=\"Send on Enter\"\n                    description=\"Config option to send message on hitting Enter\"/>&nbsp;\n                </label>\n                <div className=\"panel-form-row\">\n                  <span className=\"small gray\">\n                    <FormattedMessage id=\"send_plain_explained\" defaultMessage=\"Press Shift + Enter for new line\"\n                      description=\"Explanation how to enter newline when [Send on Enter] is enabled\" />\n                  </span>\n                </div>\n              </li>\n              <li key=\"command\">\n                <input type=\"radio\" id=\"command\" name=\"send-select\" value=\"command\"\n                  checked={this.state.sendOnEnter == 'command'}\n                  onChange={this.handleSendOnEnterSelected} />&nbsp;\n                <label htmlFor=\"send_command\">\n                  <FormattedMessage id=\"send_command\" defaultMessage=\"Send on {key}\"\n                    values={{key: this.isMac ? '⌘ + Enter' : 'Ctrl + Enter'}}\n                    description=\"Config option to send message on hitting CTRL(or Cmd)-Enter\"/>&nbsp;\n                </label>\n                <div className=\"panel-form-row\">\n                  <span className=\"small gray\">\n                    <FormattedMessage id=\"send_command_explained\" defaultMessage=\"Press Enter for new line\"\n                      description=\"Explanation how to enter newline when [Send on CTRL-Enter] is enabled\" />\n                  </span>\n                </div>\n              </li>\n            </ul>\n          </div>\n        </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/acc-notifications-view.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\n\nexport default class AccNotificationsView 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    }\n  }\n\n  render() {\n    return (\n        <div className=\"scrollable-panel\">\n          <div className=\"panel-form-row\">\n            <label htmlFor=\"message-sound\">\n              <FormattedMessage id=\"label_message_sound\" defaultMessage=\"Message sound:\"\n                description=\"Label for message sounds toggle\" />\n            </label>\n            <CheckBox name=\"sound\" id=\"message-sound\"\n              checked={this.props.messageSounds} onChange={this.handleCheckboxClick} />\n          </div>\n          <div className=\"panel-form-row\">\n            <label htmlFor=\"desktop-alerts\">\n            {this.props.desktopAlertsEnabled ?\n              <FormattedMessage id=\"label_push_notifications\" defaultMessage=\"Notification alerts:\"\n                description=\"Label for push notifications switch\" />\n              :\n              <FormattedMessage id=\"label_push_notifications_disabled\"\n                defaultMessage=\"Notification alerts (requires HTTPS):\"\n                description=\"Label for push notifications switch\" />\n            }\n            </label>\n            <CheckBox name=\"alert\" id=\"desktop-alerts\"\n              checked={this.props.desktopAlerts}\n              onChange={this.props.desktopAlertsEnabled ? this.handleCheckboxClick : null} />\n          </div>\n        </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/acc-security-view.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\nimport InPlaceEdit from '../widgets/in-place-edit.jsx';\nimport PermissionsEditor from '../widgets/permissions-editor.jsx';\n\nconst messages = defineMessages({\n  delete_account: {\n    id: 'delete_account',\n    defaultMessage: 'Delete account',\n    description: 'Title for delete account warning'\n  },\n  delete_account_warning: {\n    id: 'delete_account_warning',\n    defaultMessage: 'Are you sure you want to delete your account? It cannot be undone.',\n    description: 'Warning message when deleting an account'\n  }\n});\n\nclass AccSecurityView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const me = this.props.tinode.getMeTopic();\n    let blockedCount = 0;\n    me.contacts((c) => {\n      if (c.acs && !c.acs.isJoiner()) {\n        blockedCount ++;\n      }\n    });\n    const defacs = me.getDefaultAccess();\n    this.state = {\n      auth: defacs ? defacs.auth : null,\n      anon: defacs ? defacs.anon : null,\n      showPermissionEditorFor: undefined,\n      blockedCount: blockedCount,\n    };\n\n    this.handlePasswordUpdate = this.handlePasswordUpdate.bind(this);\n    this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n    this.handleHidePermissionsEditor = this.handleHidePermissionsEditor.bind(this);\n    this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n    this.handleDeleteAccount = this.handleDeleteAccount.bind(this);\n    this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n  }\n\n  handlePasswordUpdate(pwd) {\n    this.setState({password: pwd});\n    this.props.onUpdatePassword(pwd);\n  }\n\n  handleLaunchPermissionsEditor(which) {\n    this.setState({\n      showPermissionEditorFor: which,\n      editedPermissions: this.state[which]\n    });\n  }\n\n  handleHidePermissionsEditor() {\n    this.setState({showPermissionEditorFor: undefined});\n  }\n\n  handlePermissionsChanged(perm) {\n    let defacs = {};\n    defacs[this.state.showPermissionEditorFor] = perm;\n    this.props.onUpdateAccountDesc('me', undefined, undefined, defacs);\n\n    let newState = {showPermissionEditorFor: undefined};\n    newState[this.state.showPermissionEditorFor] = perm;\n    this.setState(newState);\n  }\n\n  handleCheckboxClick(what, checked) {\n    this.props.onToggleIncognitoMode(checked);\n  }\n\n  handleDeleteAccount(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(messages.delete_account), // title\n      formatMessage(messages.delete_account_warning), // content\n      (_ => this.props.onDeleteAccount()), // onConfirm\n      null, // use default text \"OK\"\n      true, // Show Reject button\n      null  // use default text \"Cancel\"\n    );\n  }\n\n  render() {\n    return (\n      <>{this.state.showPermissionEditorFor ?\n        <PermissionsEditor\n          mode={this.state.editedPermissions}\n          skip=\"O\"\n          onSubmit={this.handlePermissionsChanged}\n          onCancel={this.handleHidePermissionsEditor} />\n        :\n        <div className=\"scrollable-panel\">\n          <div className=\"panel-form-column\">\n            <label className=\"small\">\n              <FormattedMessage id=\"label_password\" defaultMessage=\"Password\"\n                  description=\"Label for password editing\" />\n            </label>\n            <div>\n              <FormattedMessage id=\"password_unchanged_prompt\" defaultMessage=\"Unchanged\"\n                description=\"Message in editor while password is unchanged\">{\n                (password_unchanged) => <InPlaceEdit\n                  placeholder={password_unchanged}\n                  type=\"password\"\n                  onFinished={this.handlePasswordUpdate} />\n              }</FormattedMessage>\n            </div>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-row\">\n            <label htmlFor=\"incognito-mode\">\n              <FormattedMessage id=\"label_incognito_mode\" defaultMessage=\"Incognito mode:\"\n                description=\"Label for incognito mode toggle\" />\n            </label>\n            <CheckBox name=\"incognito\" id=\"incognito-mode\"\n              checked={this.props.incognitoMode} onChange={this.handleCheckboxClick} />\n          </div>\n          <div className=\"panel-form-row\">\n            <span className=\"small gray\">\n              <FormattedMessage id=\"incognito_mode_description\" defaultMessage=\"Hide your online status and typing indicators.\"\n                description=\"Description for incognito mode toggle\" />\n            </span>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-column\">\n            <a href=\"#\" className=\"danger flat-button\" onClick={(e) => {e.preventDefault(); this.props.onLogout();}}>\n              <i className=\"material-icons\">exit_to_app</i> &nbsp;<FormattedMessage id=\"button_logout\"\n                defaultMessage=\"Logout\" description=\"Button [Logout]\" />\n            </a>\n            <a href=\"#\" className=\"danger flat-button\" onClick={(e) => {this.handleDeleteAccount(e);}}>\n              <i className=\"material-icons\">delete</i> &nbsp;<FormattedMessage id=\"button_delete_account\"\n                defaultMessage=\"Delete account\" description=\"Button [Delete account]\" />\n            </a>\n          </div>\n          <div className=\"hr\" />\n          <div className=\"panel-form-column\">\n            <div>\n              <label className=\"small\">\n                <FormattedMessage id=\"label_default_access_mode\" defaultMessage=\"Default access mode:\"\n                  description=\"Label for default access mode\" />\n              </label>\n            </div>\n            <div className=\"quoted\">\n              <div>Auth: <tt className=\"clickable\"\n                onClick={this.handleLaunchPermissionsEditor.bind(this, 'auth')}>{this.state.auth}</tt></div>\n              <div>Anon: <tt className=\"clickable\"\n                onClick={this.handleLaunchPermissionsEditor.bind(this, 'anon')}>{this.state.anon}</tt></div>\n            </div>\n          </div>\n          {this.state.blockedCount > 0 ?\n            <>\n              <div className=\"hr\" />\n              <div className=\"panel-form-row\">\n                <i className=\"material-icons\">block</i>&nbsp;\n                <a href=\"#\" className=\"gray\" onClick={(e) => {e.preventDefault(); this.props.onShowBlocked();}}>\n                  <FormattedMessage id=\"blocked_contacts_link\" defaultMessage=\"Blocked contacts ({count})\"\n                    values={{ count: this.state.blockedCount }} description=\"Blocked contacts link\" />\n                </a>\n              </div>\n            </>\n            : null }\n        </div>\n      }</>\n    );\n  }\n};\n\nexport default injectIntl(AccSecurityView);\n"
  },
  {
    "path": "src/views/acc-support-view.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { APP_NAME, LINK_CONTACT_US, LINK_PRIVACY_POLICY, LINK_TERMS_OF_SERVICE } from '../config.js';\n\nexport default class AccSupportView extends React.PureComponent {\n  render() {\n    return (\n      <div className=\"scrollable-panel\">\n        <div className=\"panel-form-column\">\n          <a href={LINK_CONTACT_US} className=\"flat-button\" target=\"_blank\">\n            <i className=\"material-icons\">email</i> &nbsp;<FormattedMessage id=\"link_contact_us\"\n              defaultMessage=\"Contact Us\" description=\"Ancor text for contacting us by email\" />\n          </a>\n          <a href={LINK_TERMS_OF_SERVICE} className=\"flat-button\" target=\"_blank\">\n            <i className=\"material-icons\">description</i> &nbsp;<FormattedMessage id=\"link_terms_of_service\"\n              defaultMessage=\"Terms of Service\" description=\"Ancor text for terms of service link\" />\n          </a>\n          <a href={LINK_PRIVACY_POLICY} className=\"flat-button\" target=\"_blank\">\n            <i className=\"material-icons\">policy</i> &nbsp;<FormattedMessage id=\"link_privacy_policy\"\n              defaultMessage=\"Privacy Policy\" description=\"Ancor text for privacy policy link\" />\n          </a>\n        </div>\n        <div className=\"hr\" />\n        <div className=\"panel-form-column\">\n          <div className=\"panel-form-row\">\n            <label className=\"small\"><FormattedMessage id=\"label_client\" defaultMessage=\"Client:\"\n              description=\"Label for a client version\" /></label>\n            {APP_NAME}\n          </div>\n          <div className=\"panel-form-row\">\n            <label className=\"small\"><FormattedMessage id=\"label_sdk\" defaultMessage=\"SDK:\" /></label>\n            {Tinode.getLibrary()}\n          </div>\n          <div className=\"panel-form-row\">\n            <label className=\"small\"><FormattedMessage id=\"label_server\" defaultMessage=\"Server:\"\n              description=\"Label for a server version\" /></label>\n            {this.props.serverVersion}\n          </div>\n          <div className=\"panel-form-row\">\n            <label className=\"small\"><FormattedMessage id=\"label_server_address\" defaultMessage=\"Server address:\" /></label>\n            {this.props.serverAddress}\n          </div>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/account-settings-view.jsx",
    "content": "// 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';\nimport CredentialEdit from '../widgets/credential-edit.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\n\nfunction _clip(str, length) {\n  return truncateString(str, 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      alias: ((me.tags() || []).find(tag => tag.startsWith('alias:')) || '').substring(6),\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        <CredentialEdit\n          method={this.state.credEdit.meth}\n          val={this.state.credEdit.val}\n          done={this.state.credEdit.done}\n          onShowCountrySelector={this.props.onShowCountrySelector}\n          onCredAdd={this.props.onCredAdd}\n          onCredConfirm={this.props.onCredConfirm}\n          onCancel={_ => 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        <div className=\"group quoted\" key={idx}>\n          <tt className=\"clickable\" onClick={e => {e.preventDefault(); this.setState({credEdit: cred});}}>{val}</tt>\n          <span> {cred.done ? null : <i className=\"material-icons\">pending</i>}&nbsp;\n            {!cred.done || validated[cred.meth] > 1 || this.props.reqCredMethod != cred.meth ?\n              <a href=\"#\" onClick={e => {e.preventDefault(); this.props.onCredDelete(cred.meth, cred.val);}}>\n                <i className=\"material-icons\">delete</i>\n              </a>\n            :\n            null}\n          </span>\n        </div>);\n    });\n    if (credentials.length > 0) {\n      // Add title as the first element.\n      credentials.unshift(\n        <label className=\"small\" key={'title'}>\n          <FormattedMessage id=\"label_user_contacts\" defaultMessage=\"Contacts\"\n            description=\"Label for user contacts\" />\n        </label>);\n    }\n\n    return (\n      <div className=\"scrollable-panel\">\n        <div className=\"panel-form-column\">\n          <a href=\"#\" className=\"flat-button float-right\" onClick={e => {e.preventDefault(); this.props.onNavigate('general');}}>\n            <i className=\"material-icons\">edit</i>&nbsp;\n            <FormattedMessage id=\"button_edit\" defaultMessage=\"Edit\" description=\"Call to action [Edit]\" />\n          </a>\n          <center>\n            <AvatarUpload\n              tinode={this.props.tinode}\n              avatar={this.state.avatar}\n              readOnly={true}\n              uid={this.props.myUserId}\n              title={this.state.fullName} />\n          </center>\n          <div className=\"group\">\n            <label className=\"small\">\n              <FormattedMessage id=\"label_your_name\" defaultMessage=\"Your name\"\n                description=\"Label for full name editing\" />\n            </label>\n            <div className=\"large ellipsized\">{this.state.fullName}</div>\n          </div>\n          <div className=\"group\">\n            <label className=\"small\"><FormattedMessage id=\"label_user_id\" defaultMessage=\"ID:\"\n              description=\"Label for user address (ID)\" /></label>&nbsp;\n            <tt>{this.props.myUserId}</tt>\n          </div>\n          {this.state.alias ?\n          <div className=\"group\">\n            <label className=\"small\"><FormattedMessage id=\"label_alias\" defaultMessage=\"Alias:\"\n              description=\"Label for user or topic alias\" /></label>&nbsp;\n            <tt>@{this.state.alias}</tt>\n          </div> : null}\n          <div className=\"group\">\n            <BadgeList trustedBadges={this.props.trustedBadges} />\n          </div>\n          {this.state.description ?\n            <div className=\"group\">\n              <label className=\"small\">\n                <FormattedMessage id=\"label_description\" defaultMessage=\"Description\"\n                  description=\"Label for description of user or topic\" />\n              </label>\n              <div className=\"quoted\">{this.state.description}</div>\n            </div> : null}\n        </div>\n        <div className=\"hr\" />\n        <div className=\"panel-form-column\">\n          <div className=\"group\">{credentials}</div>\n        </div>\n        <div className=\"hr\" />\n        <div className=\"panel-form-column\">\n          <a href=\"#\" className=\"flat-button\" onClick={e => {e.preventDefault(); this.props.onNavigate('acc_general');}}>\n            <i className=\"material-icons\">tune</i>&nbsp;<FormattedMessage id=\"sidepanel_title_acc_general\"\n              defaultMessage=\"General\" description=\"Sidepanel title for AccGeneralView.\" />\n          </a>\n          <a href=\"#\" className=\"flat-button\" onClick={e => {e.preventDefault(); this.props.onNavigate('notif');}}>\n            <i className=\"material-icons\">notifications</i>&nbsp;<FormattedMessage id=\"sidepanel_title_acc_notifications\"\n              defaultMessage=\"Notifications\" description=\"Sidepanel title for AccNotificationsView.\" />\n          </a>\n          <a href=\"#\" className=\"flat-button\" onClick={e => {e.preventDefault(); this.props.onNavigate('security');}}>\n            <i className=\"material-icons\">security</i>&nbsp;<FormattedMessage id=\"button_security\"\n              defaultMessage=\"Security\" description=\"Navigaton button for security panel.\" />\n          </a>\n          <a href=\"#\" className=\"flat-button\" onClick={e => {e.preventDefault(); this.props.onNavigate('support');}}>\n            <i className=\"material-icons\">contact_support</i>&nbsp;<FormattedMessage id=\"sidepanel_title_acc_support\"\n              defaultMessage=\"Support\" description=\"Sidepanel title for AccSupportView.\" />\n          </a>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/contacts-view.jsx",
    "content": "/* ContactsView holds all contacts-related stuff */\nimport React from 'react';\nimport { FormattedMessage, defineMessages } from 'react-intl';\n\nimport ContactList from '../widgets/contact-list.jsx';\n\nimport { updateFavicon } from '../lib/utils.js';\n\nconst messages = defineMessages({\n  archived_contacts_title: {\n    id: \"archived_contacts\",\n    defaultMessage: \"Archived contacts ({count})\",\n    description: \"Label for archived chats\"\n  }\n});\n\nexport default class ContactsView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.handleAction = this.handleAction.bind(this);\n\n    this.state = ContactsView.deriveStateFromProps(props);\n  }\n\n  static deriveStateFromProps(props) {\n    const contacts = [];\n    let unreadThreads = 0;\n    let archivedCount = 0;\n\n    const me = props.tinode.getMeTopic();\n    props.chatList.forEach(c => {\n      const blocked = c.acs && !c.acs.isJoiner();\n      c.pinned = me.pinnedTopicRank(c.topic);\n\n      // Show only blocked contacts only when props.blocked == true.\n      if (blocked && props.blocked) {\n        contacts.push(c);\n      }\n      if (blocked || props.blocked) {\n        return;\n      }\n\n      if (c.private && c.private.arch) {\n        if (props.archive) {\n          contacts.push(c);\n        } else {\n          archivedCount ++;\n        }\n      } else if (!props.archive) {\n        contacts.push(c);\n        unreadThreads += c.unread > 0 ? 1 : 0;\n      }\n    });\n\n    contacts.sort((a, b) => {\n      const pin = b.pinned - a.pinned;\n      return pin != 0 ? pin : (b.touched || 0) - (a.touched || 0);\n    });\n\n    if (archivedCount > 0) {\n      contacts.push({\n        action: 'archive',\n        title: messages.archived_contacts_title,\n        values: {count: archivedCount}\n      });\n    }\n\n    return {\n      contactList: contacts,\n      unreadThreads: unreadThreads\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (prevProps.chatList != this.props.chatList ||\n        prevProps.archive != this.props.archive ||\n        prevProps.blocked != this.props.blocked) {\n      const newState = ContactsView.deriveStateFromProps(this.props);\n      this.setState(newState);\n      if (newState.unreadThreads != prevState.unreadThreads) {\n        updateFavicon(newState.unreadThreads);\n      }\n    }\n  }\n\n  handleAction(action_ignored) {\n    this.props.onShowArchive();\n  }\n\n  render() {\n    return (\n      <FormattedMessage id=\"contacts_not_found\"\n        defaultMessage=\"You have no chats\\n¯∖_(ツ)_/¯\"\n        description=\"HTML message shown in ContactList when no contacts are found\">{\n        (no_contacts) => <ContactList\n          tinode={this.props.tinode}\n          connected={this.props.connected}\n          contacts={this.state.contactList}\n          emptyListMessage={no_contacts}\n          topicSelected={this.props.topicSelected}\n          myUserId={this.props.myUserId}\n          showOnline={true}\n          showUnread={true}\n          onTopicSelected={this.props.onTopicSelected}\n          showContextMenu={this.props.showContextMenu}\n          onAction={this.handleAction} />\n      }</FormattedMessage>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/create-account-view.jsx",
    "content": "// 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';\nimport { truncateString } from '../lib/strformat.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    if (!img) {\n      // User cleared the image.\n      this.setState({imageUrl: null, uploadUrl: null});\n    }\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(truncateString(this.state.fn.trim(), 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({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        <AvatarCrop\n          avatar={this.state.newAvatar}\n          mime={this.state.newAvatarMime}\n          onSubmit={this.handleAvatarCropped}\n          onCancel={this.handleAvatarCropCancel}\n          onError={this.props.onError} />\n      );\n    }\n\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n\n    return (\n      <form className=\"panel-form-column\" onSubmit={this.handleSubmit}>\n        <div className=\"panel-form-row\">\n          <div className=\"umn\">\n            <FormattedMessage id=\"login_prompt\" defaultMessage=\"Login\"\n              description=\"Placeholer for username/login\">{\n              (login_prompt) => <input type=\"text\" placeholder={login_prompt} autoComplete=\"user-name\"\n                value={this.state.login} onChange={this.handleLoginChange} required autoFocus />\n            }</FormattedMessage>\n            <FormattedMessage id=\"password_prompt\" defaultMessage=\"Password\"\n              description=\"Placeholder/prompt for entering password\">{\n              (password_prompt) => <VisiblePassword placeholder={password_prompt} autoComplete=\"new-password\"\n                value={this.state.password} onFinished={this.handlePasswordChange}\n                required={true} />\n            }</FormattedMessage>\n          </div>\n          <AvatarUpload\n            tinode={this.props.tinode}\n            avatar={this.state.imageUrl}\n            onImageUpdated={this.handleImageChanged}\n            onError={this.props.onError} />\n        </div>\n        <div  className=\"panel-form-row\">\n          <FormattedMessage id=\"full_name_prompt\" defaultMessage=\"Full name, e.g. John Doe\"\n            description=\"Input placeholder for person's full name\">{\n            (full_name_prompt) => <input type=\"text\" placeholder={full_name_prompt} autoComplete=\"name\"\n              value={this.state.fn} onChange={this.handleFnChange} required/>\n          }</FormattedMessage>\n        </div>\n        {this.props.reqCredMethod == 'email' ?\n          <div className=\"panel-form-row\">\n            <FormattedMessage id=\"email_prompt\" defaultMessage=\"Email, e.g. jdoe@example.com\"\n              description=\"Input placeholder for email entry\">{\n              (email_prompt) => <input type=\"email\" placeholder={email_prompt} autoComplete=\"email\"\n                value={this.state.email} onChange={this.handleEmailChange} required/>\n            }</FormattedMessage>\n          </div>\n          : this.props.reqCredMethod == 'tel' ?\n          <><div className=\"panel-form-row\">\n            <label className=\"small gray\"><FormattedMessage id=\"mobile_phone_number\" defaultMessage=\"Mobile phone number\"\n              description=\"Prompt for entering a mobile phone number\" /></label>\n          </div>\n          <div className=\"panel-form-row\">\n            <PhoneEdit\n              autoFocus={false}\n              onShowCountrySelector={this.props.onShowCountrySelector}\n              onSubmit={this.handlePhoneChange} />\n          </div></>\n          : null\n        }\n        <div className=\"panel-form-row\">\n          <CheckBox id=\"save-token\" name=\"save-token\" checked={this.state.saveToken}\n            onChange={this.handleToggleSaveToken} />\n          <FormattedMessage id=\"stay_logged_in\" defaultMessage=\"Stay logged in\"\n            description=\"Label for a checkbox\">{\n            (stay_logged_in) => <label htmlFor=\"save-token\">&nbsp;{stay_logged_in}</label>\n          }</FormattedMessage>\n        </div>\n        <div className=\"dialog-buttons\">\n          <button className={submitClasses} type=\"submit\" disabled={this.state.buttonDisabled}>\n            <FormattedMessage id=\"button_sign_up\" defaultMessage=\"Sign up\"\n              description=\"Create account button [Sign Up]\" />\n          </button>\n        </div>\n      </form>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/info-view.jsx",
    "content": "// InfoView: panel with topic/user info.\nimport React from 'react';\nimport { FormattedMessage, FormattedNumber, defineMessages, injectIntl } from 'react-intl';\n\nimport { AccessMode, Tinode, TheCard } from 'tinode-sdk';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport ContactList from '../widgets/contact-list.jsx';\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport GroupManager from '../widgets/group-manager.jsx';\nimport MenuCancel from '../widgets/menu-cancel.jsx';\nimport PermissionsEditor from '../widgets/permissions-editor.jsx';\nimport ShowQRCode from '../widgets/show-qrcode.jsx';\nimport TopicCommonView from './topic-common-view.jsx';\nimport TopicSecurity from '../widgets/topic-security.jsx';\n\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH,\n  NO_ACCESS_MODE, TOAST_DURATION } from '../config.js';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\n\nconst messages = defineMessages({\n  info: {\n    id: 'panel_title_info',\n    description: 'Title for InfoView',\n    defaultMessage: 'Info'\n  },\n  general: {\n    id: 'panel_title_general',\n    description: 'Title for TopicCommon.',\n    defaultMessage: 'General'\n  },\n  security: {\n    id: 'panel_title_security',\n    description: 'Title for TopicSecirity and AccSecurity.',\n    defaultMessage: 'Security'\n  },\n  members: {\n    id: 'panel_title_members',\n    description: 'Title for managing group members view.',\n    defaultMessage: 'Members'\n  },\n  crop: {\n    id: 'panel_title_crop',\n    description: 'Title for AvatarCropView.',\n    defaultMessage: 'Drag to Adjust'\n  },\n  perm_want: {\n    id: 'requested_permissions',\n    defaultMessage: 'Requested',\n    description: 'Title for permissions'\n  },\n  perm_given: {\n    id: 'granted_permissions',\n    defaultMessage: 'Granted',\n    description: 'Title for permissions'\n  },\n  perm_auth: {\n    id: 'permissions_authenticated',\n    defaultMessage: 'Authenticated',\n    description: 'Title for editing default authenticated permissions'\n  },\n  perm_anon: {\n    id: 'permissions_anonymous',\n    defaultMessage: 'Anonymous',\n    description: 'Title for editing default anonymous permissions'\n  },\n  perm_user: {\n    id: 'permissions_user',\n    defaultMessage: 'User\\'s Permissions',\n    description: 'Title for editing user\\'s permissions'\n  },\n  edit_permissions: {\n    id: 'menu_item_edit_permissions',\n    defaultMessage: 'Edit permissions',\n    description: 'Menu item [Edit permissions]'\n  },\n  qrcode: {\n    id: 'scan_qr_code',\n    defaultMessage: 'Scan QR Code',\n    description: 'Title for scanning QR code'\n  },\n  text_copied: {\n    id: 'text_copied',\n    defaultMessage: 'Copied to clipboard',\n    description: 'Notification that text has been copied to clipboard'\n  },\n  self_topic_name: {\n    id: 'self_topic_name',\n    defaultMessage: 'Saved messages',\n    description: 'Name of self topic for UI',\n  },\n  self_topic_comment: {\n    id: 'self_topic_comment',\n    defaultMessage: 'Notes, messages, links, files saved for posterity',\n    description: 'Comment for self topic for UI',\n  },\n});\n\nclass InfoView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      topic: null,\n      owner: false,\n      admin: false,\n      sharer: false,\n      deleter: false,\n      muted: false,\n      address: null,\n      groupTopic: undefined,\n      isSelf: false,\n      channel: undefined,\n      fullName: undefined,\n      description: undefined,\n      avatar: null,\n      private: null,\n      selectedContact: null,\n      access: null,\n      modeGiven: null,\n      modeWant: null,\n      modeGiven2: null, // P2P topic, the other user mode given\n      modeWant2: null,  // P2P topic, the other user mode want\n      auth: null,\n      anon: null,\n      contactList: [],\n      trustedBadges: [],\n      previousMetaDesc: undefined,\n      previousSubsUpdated: undefined,\n    };\n\n    this.propsUpdated = this.propsUpdated.bind(this);\n    this.resetSubs = this.resetSubs.bind(this);\n    this.resetDesc = this.resetDesc.bind(this);\n    this.resetTags = this.resetTags.bind(this);\n    this.onMetaDesc = this.onMetaDesc.bind(this);\n    this.onSubsUpdated = this.onSubsUpdated.bind(this);\n    this.handleImageChanged = this.handleImageChanged.bind(this);\n    this.handleMuted = this.handleMuted.bind(this);\n    this.handleUnarchive = this.handleUnarchive.bind(this);\n    this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n    this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n    this.handleShowQRCode = this.handleShowQRCode.bind(this);\n    this.handleCopyToClipboard = this.handleCopyToClipboard.bind(this);\n    this.handleShare = this.handleShare.bind(this);\n    this.handleShowAddMembers = this.handleShowAddMembers.bind(this);\n    this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\n    this.handleMemberSelected = this.handleMemberSelected.bind(this);\n    this.handleContextMenu = this.handleContextMenu.bind(this);\n    this.handleBackNavigate = this.handleBackNavigate.bind(this);\n  }\n\n  propsUpdated(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n\n    if (this.onMetaDesc != topic.onMetaDesc) {\n      this.previousMetaDesc = topic.onMetaDesc;\n      topic.onMetaDesc = this.onMetaDesc;\n\n      this.previousSubsUpdated = topic.onSubsUpdated;\n      topic.onSubsUpdated = this.onSubsUpdated;\n    }\n\n    if (this.state.topic != props.topic) {\n      this.setState({topic: props.topic});\n      this.resetDesc(topic, props);\n      this.resetSubs(topic, props);\n      this.resetTags(topic);\n    }\n  }\n\n  // Must provide this for lazy loaded components.\n  componentDidMount() {\n    this.propsUpdated(this.props);\n  }\n\n  componentDidUpdate(props) {\n    this.propsUpdated(props);\n  }\n\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.setState({topic: null});\n    topic.onMetaDesc = this.previousMetaDesc;\n    topic.onSubsUpdated = this.previousSubsUpdated;\n  }\n\n  resetSubs(topic, props) {\n    const newState = {contactList: []};\n    if (topic.getType() == 'p2p') {\n      // Fetch the other party in the p2p conversation.\n      // Topic may not be ready yet, so check if user is found.\n      const user2 = topic.subscriber(props.topic);\n      if (user2) {\n        newState.modeGiven2 = user2.acs.getGiven();\n        newState.modeWant2 = user2.acs.getWant();\n      } else {\n        newState.modeGiven2 = NO_ACCESS_MODE;\n        newState.modeWant2 = NO_ACCESS_MODE;\n      }\n    } else {\n      topic.subscribers((sub) => {\n        newState.contactList.push(sub);\n      }, this);\n    }\n\n    this.setState(newState);\n  }\n\n  resetDesc(topic, props) {\n    const defacs = topic.getDefaultAccess() || {};\n    const acs = topic.getAccessMode();\n\n    const badges = [];\n    if (topic.trusted) {\n      for (const [key, val] of Object.entries(topic.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n    }\n\n    const isSelf = topic.isSelfType();\n\n    this.setState({\n      owner: acs && acs.isOwner(),\n      admin: acs && acs.isAdmin(),\n      sharer: acs && acs.isSharer(),\n      deleter: acs && acs.isDeleter(),\n      muted: acs && acs.isMuted(),\n\n      fullName: isSelf ?\n        props.intl.formatMessage(messages.self_topic_name) :\n        truncateString(topic.public && topic.public.fn, MAX_TITLE_LENGTH),\n      description: isSelf ?\n        props.intl.formatMessage(messages.self_topic_comment) :\n        truncateString(topic.public && topic.public.note, MAX_TOPIC_DESCRIPTION_LENGTH),\n      avatar: makeImageUrl(topic.public ? topic.public.photo : null),\n      trustedBadges: badges,\n      private: truncateString(topic.private && topic.private.comment, MAX_TITLE_LENGTH),\n      archived: topic.isArchived(),\n      address: topic.name,\n      groupTopic: topic.isGroupType(),\n      isSelf: isSelf,\n      channel: topic.isChannelType() || topic.chan,\n      access: acs ? acs.getMode() : undefined,\n      modeGiven: acs ? acs.getGiven() : undefined,\n      modeWant: acs ? acs.getWant() : undefined,\n      auth: defacs.auth,\n      anon: defacs.anon\n    });\n  }\n\n  resetTags(topic) {\n    if (topic.getType() != 'grp') {\n      return;\n    }\n\n    const acs = topic.getAccessMode();\n    if (acs && acs.isOwner()) {\n      // Requesting tags: owner is editing the topic.\n      topic.getMeta(topic.startMetaQuery().withTags().build());\n    }\n  }\n\n  onMetaDesc(desc) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetDesc(topic, this.props);\n\n    if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\n      this.previousMetaDesc(desc);\n    }\n  }\n\n  onSubsUpdated(subs) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetSubs(topic, this.props);\n\n    if (this.previousSubsUpdated && this.previousSubsUpdated != this.onSubsUpdated) {\n      this.previousSubsUpdated(subs);\n    }\n  }\n\n  handleImageChanged(mime, img) {\n    this.setState({avatar: img});\n    this.props.onTopicDescUpdate(this.props.topic, new TheCard(null, img || Tinode.DEL_CHAR), null);\n  }\n\n  handleMuted(ignored, checked) {\n    this.setState({muted: checked});\n    this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');\n  }\n\n  handleUnarchive(ignored, ignored2) {\n    this.props.onTopicUnArchive(this.props.topic);\n  }\n\n  handlePermissionsChanged(which, perm) {\n    switch (which) {\n      case 'auth':\n        this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {auth: perm});\n        break;\n      case 'anon':\n        this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {anon: perm});\n        break;\n      case 'mode':\n      case 'want':\n        this.props.onChangePermissions(this.props.topic, perm);\n        break;\n      case 'given':\n        this.props.onChangePermissions(this.props.topic, perm, this.props.topic);\n        break;\n      case 'user':\n        this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);\n        break;\n    }\n\n    this.handleBackNavigate();\n  }\n\n  handleLaunchPermissionsEditor(which, uid) {\n    const {formatMessage} = this.props.intl;\n    let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;\n    switch (which) {\n      case 'mode':\n        toEdit = this.state.access;\n        break;\n      case 'want':\n        toEdit = this.state.modeWant;\n        toCompare = this.state.modeGiven;\n        if (this.state.owner) {\n          // Don't allow owner to unset 'O' permission. All other permissions are OK.\n          toSkip = 'O';\n        } else {\n          // Allow accepting any of 'ASDO' permissions but don't allow asking for them.\n          toSkip = AccessMode.encode(AccessMode.diff('ASDO', this.state.modeGiven));\n          if (this.state.channel) {\n            // Channels are read-only.\n            toSkip += 'W';\n          }\n        }\n        titleEdit = formatMessage(messages.perm_want);\n        titleCompare = formatMessage(messages.perm_given);\n        break;\n      case 'given':\n        toEdit = this.state.modeGiven2;\n        toCompare = this.state.modeWant2;\n        toSkip = this.state.groupTopic ? (this.state.owner ? '' : 'O') : 'ASDO';\n        titleEdit = formatMessage(messages.perm_given);\n        titleCompare = formatMessage(messages.perm_want);\n        break;\n      case 'auth':\n        toEdit = this.state.auth;\n        toSkip = 'O';\n        break;\n      case 'anon':\n        toEdit = this.state.anon;\n        toSkip = 'O';\n        break;\n      case 'user': {\n        const topic = this.props.tinode.getTopic(this.props.topic);\n        if (!topic) {\n          return;\n        }\n        const user = topic.subscriber(uid);\n        if (!user || !user.acs) {\n          return;\n        }\n        toEdit = user.acs.getGiven();\n        toCompare = user.acs.getWant();\n        toSkip = this.state.owner ? '' : 'O';\n        titleEdit = formatMessage(messages.perm_given);\n        titleCompare = formatMessage(messages.perm_want);\n        if (user.public) {\n          userTitle = user.public.fn;\n          userAvatar = user.public.photo;\n        }\n        break;\n      }\n      default:\n        console.error(\"Unknown permission editing mode '\" + which + \"'\");\n        return;\n    }\n    this.setState({\n      userPermissionsEdited: uid,\n      userPermissionsTitle: userTitle,\n      userPermissionsAvatar: userAvatar,\n      editedPermissions: toEdit,\n      immutablePermissions: toCompare,\n      editedPermissionsTitle: titleEdit,\n      immutablePermissionsTitle: titleCompare,\n      editedPermissionsSkipped: toSkip,\n    });\n    this.props.onNavigate(`perm/${which}`);\n  }\n\n  handleShowQRCode(e) {\n    e.preventDefault();\n    this.props.onNavigate('qrcode');\n  }\n\n  handleCopyToClipboard(e, text) {\n    e.preventDefault();\n    navigator.clipboard.writeText(text).then(_ => {\n      this.setState({toast: this.props.intl.formatMessage(messages.text_copied)});\n      setTimeout(_ => { this.setState({toast: ''}); }, TOAST_DURATION);\n    });\n  }\n\n  handleShare(e) {\n    e.preventDefault();\n    const card = new TheCard(this.state.fullName, this.state.avatar, null, this.state.description);\n    TheCard.setTinodeID(card, Tinode.URI_TOPIC_ID_PREFIX + this.props.topic);\n    this.props.onShareTheCard(card);\n  }\n\n  handleShowAddMembers(e) {\n    e.preventDefault();\n    this.props.onInitFind();\n    this.props.onNavigate('members');\n  }\n\n  handleMemberUpdateRequest(members, added, removed) {\n    this.props.onMemberUpdateRequest(this.props.topic, added, removed);\n    this.props.onNavigate('info');\n  }\n\n  handleMemberSelected(uid) {\n    this.setState({selectedContact: uid});\n  }\n\n  handleBackNavigate() {\n    const args = (this.props.panel || 'info').split('/');\n    if (args[0] == 'info') {\n      this.props.onNavigate(null);\n    } else if (args[0] == 'perm') {\n      if (args[1] == 'user') {\n        this.props.onNavigate('info');\n      } else {\n        this.props.onNavigate('security');\n      }\n    } else {\n      this.props.onNavigate('info');\n    }\n  }\n\n  handleContextMenu(params) {\n    const {formatMessage} = this.props.intl;\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    const user = topic.subscriber(params.topicName);\n    if (!user || !user.acs) {\n      return;\n    }\n\n    const isMe = this.props.tinode.isMe(params.topicName);\n    const menuItems = [{\n      title: formatMessage(messages.edit_permissions),\n      handler: _ => this.handleLaunchPermissionsEditor(isMe ? 'want' : 'user', params.topicName)\n    }];\n    if (!isMe) {\n      menuItems.push('member_delete');\n    }\n    menuItems.push(user.acs.isMuted() ? 'member_unmute' : 'member_mute');\n    if (!isMe) {\n      menuItems.push(user.acs.isJoiner() ? 'member_block' : 'member_unblock');\n    }\n    this.props.showContextMenu({\n      topicName: this.props.topic,\n      x: params.x,\n      y: params.y,\n      user: params.topicName}, menuItems);\n  }\n\n  render() {\n    const args = (this.props.panel || 'info').split('/');\n    const view = args[0];\n    args.shift();\n\n    const {formatMessage} = this.props.intl;\n    const panelTitle = formatMessage((view == 'perm' ? messages['perm_' + args[0]] : messages[view])\n      || messages['info']);\n\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    const alias = topic && topic.alias();\n\n    return (\n      <div id=\"info-view\">\n        <div className={`toast${this.state.toast ? ' show' : ''}`}>{this.state.toast}</div>\n        <div className=\"caption-panel\" id=\"info-caption-panel\">\n          <div className=\"panel-title\" id=\"info-title\">{panelTitle}</div>\n          <div>\n            <MenuCancel onCancel={this.handleBackNavigate} />\n          </div>\n        </div>\n        {this.props.displayMobile ?\n          <ErrorPanel\n            level={this.props.errorLevel}\n            text={this.props.errorText}\n            onClearError={this.props.onError} /> : null}\n        {view == 'members' ?\n          <GroupManager\n            tinode={this.props.tinode}\n            members={this.state.contactList}\n            requiredMember={this.props.myUserId}\n            keepInitialMembers={!this.state.admin && !this.state.owner}\n            myUserId={this.props.myUserId}\n            contacts={this.props.searchableContacts}\n            onCancel={this.handleBackNavigate}\n            onSubmit={this.handleMemberUpdateRequest} />\n          :\n        view == 'perm' && args.length > 0 ?\n          <PermissionsEditor\n            tinode={this.props.tinode}\n            mode={this.state.editedPermissions}\n            compare={this.state.immutablePermissions}\n            skip={this.state.editedPermissionsSkipped}\n            modeTitle={this.state.editedPermissionsTitle}\n            compareTitle={this.state.immutablePermissionsTitle}\n            userTitle={this.state.userPermissionsTitle}\n            item={this.state.userPermissionsEdited}\n            userAvatar={this.state.userPermissionsAvatar}\n            onSubmit={(mode) => this.handlePermissionsChanged(args[0], mode)}\n            onCancel={this.handleBackNavigate} />\n          :\n        view == 'general' ?\n          <TopicCommonView\n            tinode={this.props.tinode}\n            topic={this.props.topic}\n            reqCredMethod={this.props.reqCredMethod}\n            onCredAdd={this.props.onCredAdd}\n            onUpdateTagsRequest={this.props.onTopicTagsUpdateRequest}\n            onCredConfirm={this.props.onCredConfirm}\n            onCredDelete={this.props.onCredDelete}\n            onUpdateTopicDesc={this.props.onTopicDescUpdateRequest}\n            onError={this.props.onError} />\n          :\n        view == 'security' ?\n          <TopicSecurity\n            topic={this.props.topic}\n            owner={this.state.owner}\n            admin={this.state.admin}\n            sharer={this.state.sharer}\n            deleter={this.state.deleter}\n            muted={this.state.muted}\n\n            groupTopic={this.state.groupTopic}\n            channel={this.state.channel}\n            access={this.state.access}\n            modeGiven={this.state.modeGiven}\n            modeWant={this.state.modeWant}\n            modeGiven2={this.state.modeGiven2}\n            modeWant2={this.state.modeWant2}\n            auth={this.state.auth}\n            anon={this.state.anon}\n\n            onShowAlert={this.props.onShowAlert}\n            onDeleteMessages={this.props.onDeleteMessages}\n            onLeaveTopic={this.props.onLeaveTopic}\n            onBlockTopic={this.props.onBlockTopic}\n            onReportTopic={this.props.onReportTopic}\n            onLaunchPermissionsEditor={this.handleLaunchPermissionsEditor}\n            onNavigate={this.props.onNavigate} />\n          :\n        view == 'qrcode' ?\n          <ShowQRCode\n            uri={Tinode.URI_TOPIC_ID_PREFIX + this.props.topic}\n            onCancel={this.handleBackNavigate} />\n          :\n          <div id=\"info-view-content\" className=\"scrollable-panel\">\n            <div className=\"panel-form-column\">\n              {!this.state.isSelf ?\n                <a href=\"#\" className=\"flat-button float-right\" onClick={e => {e.preventDefault(); this.props.onNavigate('general');}}>\n                  <i className=\"material-icons\">edit</i>&nbsp;\n                  <FormattedMessage id=\"button_edit\" defaultMessage=\"Edit\" description=\"Call to action [Edit]\" />\n                </a>\n                : null\n              }\n              <center>\n                <AvatarUpload\n                  tinode={this.props.tinode}\n                  avatar={this.state.avatar}\n                  readOnly={true}\n                  uid={this.props.topic}\n                  title={this.state.fullName} />\n              </center>\n              <div className=\"group\">\n                <div><label className=\"small\">\n                  <FormattedMessage id=\"label_topic_name\" defaultMessage=\"Name\"\n                    description=\"Label for editing topic name\" />\n                </label></div>\n                <div className=\"large ellipsized\">{this.state.fullName}&nbsp;\n                {this.state.channel ? <i className=\"material-icons\">podcasts</i> : null}</div>\n              </div>\n              {this.state.private ?\n                <div className=\"group\">\n                  <div><label className=\"small\">\n                    <FormattedMessage id=\"label_private\" defaultMessage=\"Private comment\"\n                      description=\"Label for editing 'private'\" />\n                  </label></div>\n                  <div className=\"large ellipsized\">{this.state.private}</div>\n                </div>\n                : null\n              }\n              {!this.state.isSelf ?\n                <>\n                <div className=\"panel-form-row\">\n                  <div>\n                    <label className=\"small\"><FormattedMessage id=\"label_user_id\" defaultMessage=\"ID:\"\n                      description=\"Label for user address (ID)\" /></label>&nbsp;\n                    <tt>{this.state.address}</tt>\n                  </div>\n                  <div style={{marginLeft: 'auto'}}>\n                    &nbsp;<a href=\"#\" onClick={e => {this.handleCopyToClipboard(e, this.state.address);}}>\n                      <i className=\"material-icons\">content_copy</i>\n                    </a>&nbsp;\n                    &nbsp;<a href=\"#\" onClick={this.handleShowQRCode}>\n                      <i className=\"material-icons\">qr_code</i>\n                    </a>&nbsp;\n                    &nbsp;<a href=\"#\" onClick={this.handleShare}>\n                      <i className=\"material-icons\">share</i>\n                    </a>&nbsp;\n                  </div>\n                </div>\n                {alias ?\n                  <div className=\"panel-form-row\">\n                    <div>\n                      <label className=\"small\"><FormattedMessage id=\"label_alias\" defaultMessage=\"Alias:\"\n                        description=\"Label for user or topic alias\" /></label>&nbsp;\n                      <tt>{alias}</tt>\n                    </div>\n                    <div style={{marginLeft: 'auto'}}>\n                      &nbsp;<a href=\"#\" onClick={e => {this.handleCopyToClipboard(e, alias);}}>\n                        <i className=\"material-icons\">content_copy</i>\n                      </a>&nbsp;\n                      &nbsp;<i className=\"material-icons\" style={{opacity: 0}}>qr_code</i>&nbsp;\n                    </div>\n                  </div>\n                : null}\n                </>\n                : null\n              }\n              {this.state.trustedBadges.length > 0 ?\n                <div className=\"group\">\n                  <BadgeList trustedBadges={this.state.trustedBadges} />\n                </div>\n                : null\n              }\n              {this.state.groupTopic && topic.subcnt > 0 ?\n                <div className=\"group\"><label className=\"small\">\n                  {this.state.channel ?\n                    <FormattedMessage id=\"label_subscriber_count\"\n                      defaultMessage=\"Subscribers:\"\n                      description=\"Label for the count of channel subscribers\" />\n                      :\n                    <FormattedMessage id=\"label_member_count\"\n                      defaultMessage=\"Members:\"\n                      description=\"Label for the count of group topic members\" />\n                  }\n                </label>&nbsp;<FormattedNumber value={topic.subcnt}/></div>\n                : null\n              }\n              {this.state.description ?\n                <div className=\"group\">\n                  <label className=\"small\">\n                    <FormattedMessage id=\"label_description\" defaultMessage=\"Description\"\n                      description=\"Label for description of user or topic\" />\n                  </label>\n                  <div>{this.state.description}</div>\n                </div> : null}\n            </div>\n            {!this.state.isSelf ?\n              <><div className=\"hr\" />\n              <div className=\"panel-form-row\">\n                <label>\n                  <FormattedMessage id=\"label_muting_topic\" defaultMessage=\"Muted:\"\n                    description=\"Label for Muting/unmuting the topic\" />\n                </label>\n                <CheckBox name=\"P\" checked={this.state.muted} onChange={this.handleMuted} />\n              </div></>\n              : null\n            }\n            {this.state.archived ?\n              <div className=\"panel-form-row\">\n                <label>\n                  <FormattedMessage id=\"label_unarchive_topic\" defaultMessage=\"Archived:\"\n                    description=\"Label for unarchiving the topic\" />\n                </label>\n                <CheckBox name=\"archived\" checked={true} onChange={this.handleUnarchive} />\n              </div>\n              :\n              null\n            }\n            {!this.state.isSelf ?\n              <><div className=\"hr\" />\n              <div className=\"panel-form-row\">\n                <a href=\"#\" className=\"flat-button\" onClick={(e) => {e.preventDefault(); this.props.onNavigate('security');}}>\n                  <i className=\"material-icons\">security</i>&nbsp;<FormattedMessage id=\"button_security\"\n                    defaultMessage=\"Security\" description=\"Navigaton button for security panel.\" />\n                </a>\n              </div></>\n              : null\n            }\n            {this.state.groupTopic && this.state.sharer ?\n              <>\n                <div className=\"hr\" />\n                <div className=\"panel-form-row\">\n                  <label className=\"small\">\n                    <FormattedMessage id=\"label_group_members\" defaultMessage=\"Group members:\"\n                      description=\"Section title or label\" />\n                  </label>\n                </div>\n                <div className=\"panel-form-row\">\n                  <a href=\"#\" className=\"flat-button\" onClick={this.handleShowAddMembers}>\n                    <i className=\"material-icons\">person_add</i> &nbsp;<FormattedMessage id=\"button_add_members\"\n                      defaultMessage=\"Add members\" description=\"Flat button [Add members] (to topic)\" />\n                  </a>\n                </div>\n                <FormattedMessage id=\"group_has_no_members\" defaultMessage=\"No members\"\n                  description=\"Shown in place of group members\">{\n                  (no_members) => <ContactList\n                    tinode={this.props.tinode}\n                    contacts={this.state.contactList}\n                    myUserId={this.props.myUserId}\n                    emptyListMessage={no_members}\n                    topicSelected={this.state.selectedContact}\n                    showOnline={false}\n                    showUnread={false}\n                    showMode={true}\n                    noScroll={true}\n                    onTopicSelected={this.handleMemberSelected}\n                    showContextMenu={this.state.admin ? this.handleContextMenu : false}\n                  />\n                }</FormattedMessage>\n              </>\n              :\n              null\n            }\n          </div>\n        }\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(InfoView);\n"
  },
  {
    "path": "src/views/login-view.jsx",
    "content": "// Login form.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nexport default class LoginView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      login: props.login,\n      password: '',\n      hostName: props.serverAddress,\n      saveToken: props.persist\n    };\n    this.handleLoginChange = this.handleLoginChange.bind(this);\n    this.handlePasswordChange = this.handlePasswordChange.bind(this);\n    this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  handleLoginChange(e) {\n    this.setState({login: e.target.value});\n  }\n\n  handlePasswordChange(e) {\n    this.setState({password: e.target.value});\n  }\n\n  handleToggleSaveToken() {\n    this.props.onPersistenceChange(!this.state.saveToken);\n    this.setState({saveToken: !this.state.saveToken});\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    this.props.onLogin(this.state.login.trim(), this.state.password.trim());\n  }\n\n  render() {\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n\n    return (\n      <form id=\"login-form\" onSubmit={this.handleSubmit}>\n        <FormattedMessage id=\"login_prompt\" defaultMessage=\"Login\"\n          description=\"Placeholer for username/login\">\n        {\n          (login_prompt) => <input type=\"text\" id=\"inputLogin\"\n            placeholder={login_prompt}\n            autoComplete=\"username\"\n            autoCorrect=\"off\"\n            autoCapitalize=\"none\"\n            value={this.state.login}\n            onChange={this.handleLoginChange}\n            required autoFocus />\n        }\n        </FormattedMessage>\n        <FormattedMessage id=\"password_prompt\" defaultMessage=\"Password\"\n          description=\"Placeholder/prompt for entering password\">\n        {\n          (password_prompt) => <VisiblePassword type=\"password\" id=\"inputPassword\"\n            placeholder={password_prompt}\n            autoComplete=\"current-password\"\n            value={this.state.password}\n            onChange={this.handlePasswordChange}\n            required={true} />\n        }\n        </FormattedMessage>\n        <div className=\"panel-form-row\">\n          <CheckBox id=\"save-token\" name=\"save-token\" checked={this.state.saveToken}\n            onChange={this.handleToggleSaveToken} />\n          <label htmlFor=\"save-token\">&nbsp;\n            <FormattedMessage id=\"stay_logged_in\" defaultMessage=\"Stay logged in\"\n              description=\"Label for a checkbox\" />\n          </label>\n          <a href=\"#reset\">\n            <FormattedMessage id=\"forgot_password_link\" defaultMessage=\"Forgot password?\"\n              description=\"Link to Reset password form\" />\n          </a>\n        </div>\n        <div className=\"dialog-buttons\">\n          <button className={submitClasses} type=\"submit\">\n            <FormattedMessage id=\"button_sign_in\" defaultMessage=\"Sign in\"\n              description=\"Button [Sign In]\" />\n          </button>\n        </div>\n      </form>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/logo-view.jsx",
    "content": "/* This is just a static page to display when no conversation is selected. */\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { APP_NAME } from '../config.js';\n\nexport default class LogoView extends React.PureComponent {\n  render() {\n    const version = APP_NAME + ' (' + Tinode.getLibrary() + ')';\n    return (\n      <div id=\"dummy-view\">\n        <div>\n          <a href=\"https://github.com/tinode/chat/\">\n            <img id=\"logo\" alt=\"logo\" src=\"img/logo.svg\" />\n            <h2>Tinode Web</h2>\n          </a>\n          <p><FormattedMessage id=\"label_client\" defaultMessage=\"Client:\"\n            description=\"Label for a client version\" /> {version}</p>\n          <p><FormattedMessage id=\"label_server\" defaultMessage=\"Server:\"\n            description=\"Label for a server version\" /> {this.props.serverVersion} ({this.props.serverAddress})</p>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/messages-view.jsx",
    "content": "// Panel with a chat.\n\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\nconst CallPanel = React.lazy(_ => import('../widgets/call-panel.jsx'));\nimport ChatMessage from '../widgets/chat-message.jsx';\nimport ContactBadges from '../widgets/contact-badges.jsx';\nconst DocPreview = React.lazy(_ => import('../widgets/doc-preview.jsx'));\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport GroupSubs from '../widgets/group-subs.jsx';\nconst ImagePreview = React.lazy(_ => import('../widgets/image-preview.jsx'));\nimport Invitation from '../widgets/invitation.jsx';\nimport LetterTile from '../widgets/letter-tile.jsx';\nimport LoadSpinner from '../widgets/load-spinner.jsx';\nimport LogoView from './logo-view.jsx';\nimport MetaMessage from '../widgets/meta-message.jsx';\nimport PinnedMessages from '../widgets/pinned-messages.jsx';\nimport SendMessage from '../widgets/send-message.jsx';\nconst TheCardPreview = React.lazy(_ => import('../widgets/the-card-preview.jsx'));\nconst VideoPreview = React.lazy(_ => import('../widgets/video-preview.jsx'));\n\nimport { DEFAULT_P2P_ACCESS_MODE, EDIT_PREVIEW_LENGTH, IMAGE_PREVIEW_DIM, IMMEDIATE_P2P_SUBSCRIPTION,\n  DRAFTY_FR_MIME_TYPE_LEGACY, KEYPRESS_DELAY, MESSAGES_PAGE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM,\n  MAX_INBAND_ATTACHMENT_SIZE, READ_DELAY, QUOTED_REPLY_LENGTH, VIDEO_PREVIEW_DIM } from '../config.js';\nimport { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js';\nimport { blobToBase64, fileToBase64, imageScaled, importVCard, makeImageUrl } from '../lib/blob-helpers.js';\nimport HashNavigation from '../lib/navigation.js';\nimport { bytesToHumanSize, relativeDateFormat, shortDateFormat } from '../lib/strformat.js';\n\n// Run timer with this frequency (ms) for checking notification queue.\nconst NOTIFICATION_EXEC_INTERVAL = 300;\n// Scroll distance before [go to latest message] button is shown.\nconst SHOW_GO_TO_LAST_DIST = 100;\n// Sctoll distance from the top when fetching the page of earlier messages is triggered.\nconst FETCH_PAGE_TRIGGER = 40;\n\nconst messages = defineMessages({\n  online_now: {\n    id: 'online_now',\n    defaultMessage: 'online now',\n    description: 'Indicator that the user or topic is currently online',\n  },\n  last_seen: {\n    id: 'last_seen_timestamp',\n    defaultMessage: 'Last seen: {timestamp}',\n    description: 'Label for the timestamp of when the user or topic was last online'\n  },\n  not_found: {\n    id: 'title_not_found',\n    defaultMessage: 'Not found',\n    description: 'Title shown when topic is not found'\n  },\n  channel: {\n    id: 'channel',\n    defaultMessage: 'channel',\n    description: 'Subtitle shown for channels in MessagesView instead of last seen'\n  },\n  file_attachment_too_large: {\n    id: 'file_attachment_too_large',\n    defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n    description: 'Error message when attachment is too large'\n  },\n  invalid_content: {\n    id: 'invalid_content',\n    defaultMessage: 'invalid content',\n    description: 'Shown when the message is unreadable'\n  },\n  editing_message: {\n    id: 'editing_message',\n    defaultMessage: 'Editing',\n    description: 'Title over message editing preview'\n  },\n  drag_file: {\n    id: 'drag_file',\n    defaultMessage: 'Drag file here',\n    description: 'Prompt on the file drag-n-drop overlay banner'\n  },\n  self_topic_name: {\n    id: 'self_topic_name',\n    defaultMessage: 'Saved messages',\n    description: 'Name of self topic for UI'\n  },\n  subscriber_count: {\n    id: 'subscriber_count',\n    defaultMessage: '{count, plural, ' +\n      'one {{count, number} subscriber} ' +\n      'two {{count, number} subscribers} ' +\n      'three {{count, number} subscribers} ' +\n      'few {{count, number} subscribers} ' +\n      'many {{count, number} subscribers} ' +\n      'other {{count, number} subscribers}}',\n    description: 'Count of channel subscribers'\n  },\n  member_count: {\n    id: 'member_count',\n    defaultMessage: '{count, plural, ' +\n      'one {{count, number} member} ' +\n      'two {{count, number} members} ' +\n      'three {{count, number} members} ' +\n      'few {{count, number} members} ' +\n      'many {{count, number} members} ' +\n      'other {{count, number} members}}',\n    description: 'Count of group topic members'\n  },\n  cannot_parse_vcard: {\n    id: 'cannot_parse_vcard',\n    defaultMessage: 'Cannot parse vCard file.',\n    description: 'Error message when vCard file cannot be parsed'\n  }\n});\n\n// Checks if the access permissions are granted but not yet accepted.\nfunction isUnconfirmed(acs) {\n  if (acs) {\n    const ex = acs.getExcessive() || '';\n    return acs.isJoiner('given') && (ex.includes('R') || ex.includes('W'));\n  }\n  return false;\n}\n\nfunction isPeerRestricted(acs) {\n  if (acs) {\n    const ms = acs.getMissing() || '';\n    return acs.isJoiner('want') && (ms.includes('R') || ms.includes('W'));\n  }\n  return false;\n}\n\nfunction shouldPresentCallPanel(callState) {\n  // Show call panel if either:\n  // - call is outgoing (and the client is waiting for the other side to pick up) or,\n  // - call is already in progress.\n  return callState == CALL_STATE_OUTGOING_INITATED || callState == CALL_STATE_IN_PROGRESS;\n}\n\nclass MessagesView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = MessagesView.getDerivedStateFromProps(props, {});\n\n    this.componentSetup = this.componentSetup.bind(this);\n    this.leave = this.leave.bind(this);\n    this.sendMessage = this.sendMessage.bind(this);\n    this.retrySend = this.retrySend.bind(this);\n    this.sendImageAttachment = this.sendImageAttachment.bind(this);\n    this.sendVideoAttachment = this.sendVideoAttachment.bind(this);\n    this.sendFileAttachment = this.sendFileAttachment.bind(this);\n    this.sendAudioAttachment = this.sendAudioAttachment.bind(this);\n    this.sendTheCardAttachment = this.sendTheCardAttachment.bind(this);\n    this.sendKeyPress = this.sendKeyPress.bind(this);\n    this.subscribe = this.subscribe.bind(this);\n    this.handleScrollReference = this.handleScrollReference.bind(this);\n    this.mountDnDEvents = this.mountDnDEvents.bind(this);\n    this.handleScrollEvent = this.handleScrollEvent.bind(this);\n    this.handleDescChange = this.handleDescChange.bind(this);\n    this.handleSubsUpdated = this.handleSubsUpdated.bind(this);\n    this.handleMessageUpdate = this.handleMessageUpdate.bind(this);\n    this.handleAuxUpdate = this.handleAuxUpdate.bind(this);\n    this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);\n    this.handleInfoReceipt = this.handleInfoReceipt.bind(this);\n    this.handleExpandMedia = this.handleExpandMedia.bind(this);\n    this.handleClosePreview = this.handleClosePreview.bind(this);\n    this.handleCallPanelToggle = this.handleCallPanelToggle.bind(this);\n    this.handleFormResponse = this.handleFormResponse.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n    this.handleShowMessageContextMenu = this.handleShowMessageContextMenu.bind(this);\n    this.handleNewChatAcceptance = this.handleNewChatAcceptance.bind(this);\n    this.handleEnablePeer = this.handleEnablePeer.bind(this);\n    this.handleAttachFile = this.handleAttachFile.bind(this);\n    this.handleAttachImageOrVideo = this.handleAttachImageOrVideo.bind(this);\n    this.handleCancelUpload = this.handleCancelUpload.bind(this);\n    this.postReadNotification = this.postReadNotification.bind(this);\n    this.clearNotificationQueue = this.clearNotificationQueue.bind(this);\n    this.goToLatestMessage = this.goToLatestMessage.bind(this);\n    this.handleFileDrop = this.handleFileDrop.bind(this);\n\n    this.handlePickReply = this.handlePickReply.bind(this);\n    this.handleEditMessage = this.handleEditMessage.bind(this);\n    this.handleCancelReply = this.handleCancelReply.bind(this);\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n    this.handleUnpinMessage = this.handleUnpinMessage.bind(this);\n    this.handleCallHangup = this.handleCallHangup.bind(this);\n\n    this.isDragEnabled = this.isDragEnabled.bind(this);\n    this.handleDragStart = this.handleDragStart.bind(this);\n    this.handleDragIn = this.handleDragIn.bind(this);\n    this.handleDragOut = this.handleDragOut.bind(this);\n    this.handleDrag = this.handleDrag.bind(this);\n    this.handleDrop = this.handleDrop.bind(this);\n\n    this.chatMessageRefs = [];\n    this.getOrCreateMessageRef = this.getOrCreateMessageRef.bind(this);\n    this.getVisibleMessageRange = this.getVisibleMessageRange.bind(this);\n\n    // Keeps track of the drag event.\n    // Need a counter b/c the browser's 'drag' events may fire multiple times\n    // when the user takes the mouse pointer over the container:\n    // for the component itself and for all nested/child elements.\n    this.dragCounter = 0;\n    this.dndRef = null;\n\n    this.readNotificationQueue = [];\n    this.readNotificationTimer = null;\n\n    this.keyPressTimer = null;\n  }\n\n  getOrCreateMessageRef(seqId) {\n    if (this.chatMessageRefs[seqId]) {\n      return this.chatMessageRefs[seqId];\n    }\n    const ref = React.createRef();\n    this.chatMessageRefs[seqId] = ref;\n    return ref;\n  }\n\n  getVisibleMessageRange(holderRect) {\n    let min = Number.MAX_SAFE_INTEGER, max = -1;\n    let visibilityStatus = false;\n    this.chatMessageRefs.every((ref, seq) => {\n      if (ref.current) {\n        const { top, bottom, height } = ref.current.getBoundingClientRect();\n        const visible = top <= holderRect.top ? holderRect.top - top <= height : bottom - holderRect.bottom <= height;\n        if (visible) {\n          visibilityStatus = true;\n          min = Math.min(min, seq);\n          max = Math.max(max, seq);\n        } else if (visibilityStatus) {\n          // The remaining elements are no longer visible, no need to iterate them.\n          return false;\n        }\n      }\n      return true;\n    });\n\n    return max >= min ? {min: min, max: max} : {min: 0, max: 0};\n  }\n\n  componentDidMount() {\n    if (this.messagesScroller) {\n      this.messagesScroller.addEventListener('scroll', this.handleScrollEvent);\n    }\n\n    // Drag and drop events\n    this.mountDnDEvents(this.dndRef);\n\n    this.componentSetup({}, {});\n  }\n\n  componentWillUnmount() {\n    if (this.messagesScroller) {\n      this.messagesScroller.removeEventListener('scroll', this.handleScrollEvent);\n    }\n\n    // Flush all notifications.\n    this.clearNotificationQueue();\n\n    // Drag and drop events\n    if (this.dndRef) {\n      this.dndRef.removeEventListener('dragstart', this.handleDragStart);\n      this.dndRef.removeEventListener('dragenter', this.handleDragIn);\n      this.dndRef.removeEventListener('dragleave', this.handleDragOut);\n      this.dndRef.removeEventListener('dragover', this.handleDrag);\n      this.dndRef.removeEventListener('drop', this.handleDrop);\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    // Scroll last message into view on component update e.g. on message received\n    // or vertical shrinking.\n    if (this.messagesScroller &&\n      (prevState.topic != this.state.topic || prevState.maxSeqId != this.state.maxSeqId ||\n        prevState.minSeqId != this.state.minSeqId)) {\n      // New message.\n      if (this.state.scrollPosition < SHOW_GO_TO_LAST_DIST) {\n        this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n          this.state.scrollPosition - this.messagesScroller.offsetHeight;\n      }\n    }\n\n    if (!this.props.applicationVisible) {\n      // If application is not visible, flush all unsent 'read' notifications.\n      this.clearNotificationQueue();\n    } else {\n      // Otherwise assume there are unread messages.\n      this.postReadNotification(0);\n    }\n\n    this.componentSetup(prevProps, prevState);\n  }\n\n  componentSetup(prevProps, prevState) {\n    const topic = this.props.tinode ? this.props.tinode.getTopic(this.state.topic) : undefined;\n    if (this.state.topic != prevState.topic) {\n      if (prevState.topic && !Tinode.isNewGroupTopicName(prevState.topic)) {\n        this.leave(prevState.topic);\n        if (prevState.rtcPanel) {\n          this.handleCallHangup(prevState.topic, prevProps.callSeq);\n        }\n      }\n\n      if (topic) {\n        topic.onData = this.handleMessageUpdate;\n        topic.onAllMessagesReceived = this.handleAllMessagesReceived;\n        topic.onInfo = this.handleInfoReceipt;\n        topic.onMetaDesc = this.handleDescChange;\n        topic.onSubsUpdated = this.handleSubsUpdated;\n        topic.onPres = this.handleSubsUpdated;\n        topic.onAuxUpdated = this.handleAuxUpdate;\n      }\n    }\n\n    if (topic) {\n      if ((this.state.topic != prevState.topic) || (this.props.myUserId && !prevProps.myUserId)) {\n        // Don't immediately subscribe to a new p2p topic, wait for the first message.\n        const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n        if (topic.isP2PType() && newTopic && !IMMEDIATE_P2P_SUBSCRIPTION) {\n          topic.getMeta(topic.startMetaQuery().withDesc().build());\n        } else if (this.props.myUserId) {\n          this.subscribe(topic);\n        }\n      } else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) {\n        // If reader status has changed and data became available.\n        topic.getMeta(topic.startMetaQuery().withLaterData().build());\n      } else if (!topic.isSubscribed() && this.props.ready && !prevProps.ready) {\n        // Connection restored (e.g. wake from sleep): resubscribe to the currently open topic.\n        this.subscribe(topic);\n      }\n    }\n  }\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    let nextState = {};\n    if (!nextProps.topic) {\n      // Default state: no topic.\n      nextState = {\n        minSeqId: -1,\n        maxSeqId: -1,\n        latestClearId: -1,\n        onlineSubs: [],\n        topic: null,\n        title: '',\n        avatar: null,\n        isVerified: false,\n        isStaff: false,\n        isDangerous: false,\n        deleted: false,\n        docPreview: null,\n        imagePreview: null,\n        imagePostview: null,\n        videoPreview: null,\n        videoPostview: null,\n        rtcPanel: null,\n        minimizedCallPanel: false,\n        typingIndicator: false,\n        scrollPosition: 0,\n        fetchingMessages: false,\n        peerMessagingDisabled: false,\n        channel: false,\n        reply: null,\n        contentToEdit: null,\n        showGoToLastButton: false,\n        dragging: false,\n        pins: [],\n        pinsLoaded: false,\n        selectedPin: 0,\n        subsVersion: 0\n      };\n    } else if (nextProps.topic != prevState.topic) {\n      const topic = nextProps.tinode.getTopic(nextProps.topic);\n\n      nextState = {\n        topic: nextProps.topic,\n        deleted: topic._deleted,\n        docPreview: null,\n        imagePreview: null,\n        imagePostview: null,\n        videoPreview: null,\n        videoPostview: null,\n        rtcPanel: null,\n        minimizedCallPanel: false,\n        typingIndicator: false,\n        scrollPosition: 0,\n        fetchingMessages: false,\n        showGoToLastButton: false,\n        contentToEdit: null,\n        dragging: false,\n        selectedPin: 0\n      };\n\n      if (nextProps.forwardMessage) {\n        if (nextProps.forwardMessage.content) {\n          const content = nextProps.forwardMessage.content;\n          const size = content?.length || (content?.size || 0);\n          nextState.docPreview = {\n            object: content,\n            type: nextProps.forwardMessage.type,\n            size: size\n          };\n        } else {\n          // We are forwarding a message. Show preview.\n          nextState.reply = {\n            content: nextProps.forwardMessage.preview,\n            seq: null\n          };\n        }\n      } else {\n        nextState.reply = null;\n      }\n\n      if (topic) {\n        // Topic exists.\n        const subs = [];\n\n        if (nextProps.connected) {\n          topic.subscribers((sub) => {\n            if (sub.online && sub.user != nextProps.myUserId) {\n              subs.push(sub);\n            }\n          });\n        }\n\n        Object.assign(nextState, {\n          onlineSubs: subs\n        });\n\n        if (topic.isSelfType()) {\n          Object.assign(nextState, {\n            title: nextProps.intl.formatMessage(messages.self_topic_name),\n            avatar: true\n          });\n        } else if (topic.public) {\n          Object.assign(nextState, {\n            title: topic.public.fn,\n            avatar: makeImageUrl(topic.public.photo)\n          });\n        } else {\n          Object.assign(nextState, {\n            title: '',\n            avatar: null\n          });\n        }\n\n        const peer = topic.p2pPeerDesc();\n        if (peer) {\n          Object.assign(nextState, {\n            peerMessagingDisabled: isPeerRestricted(peer.acs)\n          });\n        } else if (prevState.peerMessagingDisabled) {\n          Object.assign(nextState, {\n            peerMessagingDisabled: false\n          });\n        }\n        Object.assign(nextState, {\n          minSeqId: topic.minMsgSeq(),\n          maxSeqId: topic.maxMsgSeq(),\n          latestClearId: topic.maxClearId(),\n          channel: topic.isChannelType(),\n          pins: (topic.aux('pins') || []).slice(),\n          pinsLoaded: false\n        });\n\n        if (nextProps.callTopic == topic.name && shouldPresentCallPanel(nextProps.callState)) {\n          nextState.rtcPanel = nextProps.callTopic;\n        }\n      } else {\n        // Invalid topic.\n        Object.assign(nextState, {\n          minSeqId: -1,\n          maxSeqId: -1,\n          latestClearId: -1,\n          onlineSubs: [],\n          title: '',\n          avatar: null,\n          peerMessagingDisabled: false,\n          channel: false,\n          pins: [],\n          pinsLoaded: false\n        });\n      }\n    } else {\n      // We are still in same topic. Show the call panel if necessary.\n      if (nextProps.callTopic == prevState.topic && !prevState.rtcPanel &&\n          shouldPresentCallPanel(nextProps.callState)) {\n        nextState.rtcPanel = nextProps.callTopic;\n      }\n    }\n\n    if (nextProps.acs) {\n      if (nextProps.acs.isWriter() != prevState.isWriter) {\n        nextState.isWriter = !prevState.isWriter;\n      }\n      if (nextProps.acs.isReader() != prevState.isReader) {\n        nextState.isReader = !prevState.isReader;\n      }\n      if (nextProps.acs.isAdmin() != prevState.isAdmin) {\n        nextState.isAdmin = !prevState.isAdmin;\n      }\n      if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {\n        nextState.readingBlocked = !prevState.readingBlocked;\n      }\n      if (nextProps.acs.isSharer() != prevState.isSharer) {\n        nextState.isSharer = !prevState.isSharer;\n      }\n    } else {\n      if (prevState.isWriter) {\n        nextState.isWriter = false;\n      }\n      if (prevState.isReader) {\n        nextState.isReader = false;\n      }\n      if (prevState.isAdmin) {\n        nextState.isAdmin = false;\n      }\n      if (!prevState.readingBlocked) {\n        prevState.readingBlocked = true;\n      }\n      if (prevState.isSharer) {\n        nextState.isSharer = false;\n      }\n    }\n\n    if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {\n      nextState.unconfirmed = !prevState.unconformed;\n    }\n\n    // Clear subscribers online when there is no connection.\n    if (!nextProps.connected && prevState.onlineSubs && prevState.onlineSubs.length > 0) {\n      nextState.onlineSubs = [];\n    }\n\n    return nextState;\n  }\n\n  subscribe(topic) {\n    if (topic.isSubscribed() || !this.props.ready) {\n      return;\n    }\n\n    // Is this a new topic?\n    const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n    // Don't request the tags. They are useless unless the user\n    // is the owner and is editing the topic.\n    let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub().withAux();\n    if (this.state.isReader || newTopic) {\n      // Reading is either permitted or we don't know because it's a new topic. Ask for messages.\n      getQuery = getQuery.withLaterData(MESSAGES_PAGE);\n      if (this.state.isReader) {\n        getQuery = getQuery.withLaterDel();\n      }\n      // And show \"loading\" spinner.\n      this.setState({ fetchingMessages: true });\n    }\n\n    const setQuery = newTopic ? this.props.newTopicParams : undefined;\n    topic.subscribe(getQuery.build(), setQuery)\n      .then(ctrl => {\n        if (ctrl.code == 303) {\n          // Redirect to another topic requested.\n          HashNavigation.navigateTo(HashNavigation.setUrlTopic('', ctrl.params.topic));\n          return;\n        }\n        if (this.state.topic != ctrl.topic) {\n          this.setState({topic: ctrl.topic});\n        }\n        if (this.state.deleted) {\n          this.setState({deleted: false});\n        }\n        this.props.onNewTopicCreated(this.props.topic, ctrl.topic);\n        // If there are unsent messages (except hard-failed and video call messages),\n        // try sending them now. Hard-failed and unsent video call messages will be dropped.\n        let discard = [];\n        topic.queuedMessages(pub => {\n          if (pub._sending) {\n            return;\n          }\n          if (pub._fatal || (pub.head && pub.head.webrtc)) {\n            // Filter out unsent failed & video call messages.\n            discard.push(pub.seq);\n            return;\n          }\n          if (topic.isSubscribed()) {\n            this.retrySend(pub);\n          }\n        });\n        if (discard.length > 0) {\n          topic.delMessagesList(discard, true);\n        }\n      })\n      .catch(err => {\n        console.error(\"Failed subscription to\", this.state.topic, err);\n        this.props.onError(err.message, 'err');\n        const blankState = MessagesView.getDerivedStateFromProps({}, {});\n        blankState.title = this.props.intl.formatMessage(messages.not_found);\n        this.setState(blankState);\n      });\n  }\n\n  leave(oldTopicName) {\n    if (!oldTopicName || !this.props.tinode.isTopicCached(oldTopicName)) {\n      return;\n    }\n\n    const oldTopic = this.props.tinode.getTopic(oldTopicName);\n    if (oldTopic && oldTopic.isSubscribed()) {\n      oldTopic.leave(false)\n        .catch(_ => { /* do nothing here */ })\n        .finally(_ => {\n          // We don't care if the request succeeded or failed.\n          // The topic is dead regardless.\n          this.setState({fetchingMessages: false});\n          oldTopic.onData = undefined;\n          oldTopic.onAllMessagesReceived = undefined;\n          oldTopic.onInfo = undefined;\n          oldTopic.onMetaDesc = undefined;\n          oldTopic.onSubsUpdated = undefined;\n          oldTopic.onPres = undefined;\n          oldTopic.onAuxUpdated = undefined;\n        });\n    }\n  }\n\n  // Don't use React.createRef as the ref.current is not available in componentDidMount in this component.\n  handleScrollReference(node) {\n    if (node) {\n      node.addEventListener('scroll', this.handleScrollEvent);\n      this.messagesScroller = node;\n      this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n        this.state.scrollPosition - this.messagesScroller.offsetHeight;\n    }\n  }\n\n  // Get older messages and show/hide [go to latest message] button.\n  handleScrollEvent(event) {\n    const pos = event.target.scrollHeight - event.target.scrollTop - event.target.offsetHeight;\n    this.setState({\n      scrollPosition: pos,\n      // Show [go to latest message] if far enough from bottom and scrolling down.\n      showGoToLastButton: (pos > SHOW_GO_TO_LAST_DIST) && (pos < this.state.scrollPosition),\n    });\n\n    if (this.state.fetchingMessages || this.processingScrollEvent) {\n      return;\n    }\n\n    if (event.target.scrollTop <= FETCH_PAGE_TRIGGER) {\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      if (topic && topic.isSubscribed()) {\n        this.processingScrollEvent = true;\n        const {min, max} = this.getVisibleMessageRange(event.target.getBoundingClientRect());\n        const gaps = topic.msgHasMoreMessages(min, max, false);\n        if (gaps.length > 0) {\n          this.setState({fetchingMessages: true}, _ => {\n            topic.getMessagesPage(MESSAGES_PAGE, gaps, min, max)\n              .catch(err => this.props.onError(err.message, 'err'))\n              .finally(_ => this.setState({fetchingMessages: false}));\n            });\n        }\n      }\n    }\n    this.processingScrollEvent = false;\n  }\n\n  /* Mount drag and drop events */\n  mountDnDEvents(dnd) {\n    if (dnd) {\n      dnd.addEventListener('dragstart', this.handleDragStart);\n      dnd.addEventListener('dragenter', this.handleDragIn);\n      dnd.addEventListener('dragleave', this.handleDragOut);\n      dnd.addEventListener('dragover', this.handleDrag);\n      dnd.addEventListener('drop', this.handleDrop);\n      this.dndRef = dnd;\n    }\n  }\n\n  goToLatestMessage() {\n    this.setState({scrollPosition: 0});\n    if (this.messagesScroller) {\n      this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.messagesScroller.offsetHeight;\n    }\n  }\n\n  handleDescChange(desc) {\n    if (Tinode.isSelfTopicName(this.props.topic)) {\n      this.setState({\n        title: this.props.intl.formatMessage(messages.self_topic_name),\n        avatar: true\n      });\n    } else if (desc.public) {\n      this.setState({\n        title: desc.public.fn,\n        avatar: makeImageUrl(desc.public.photo)\n      });\n    } else {\n      this.setState({\n        title: '',\n        avatar: null\n      });\n    }\n\n    if (desc.acs) {\n      this.setState({\n        isWriter: desc.acs.isWriter(),\n        isReader: desc.acs.isReader(),\n        isAdmin: desc.acs.isAdmin(),\n        readingBlocked: !desc.acs.isReader('given'),\n        unconfirmed: isUnconfirmed(desc.acs),\n      });\n    }\n  }\n\n  postReadNotification(seq) {\n    // Ignore notifications if the app is invisible or topic is not yet available.\n    if (!this.props.applicationVisible || !this.state.topic) {\n      return;\n    }\n\n    // Set up the timer if it's not running already.\n    if (!this.readNotificationTimer) {\n      this.readNotificationTimer = setInterval(_ => {\n        if (this.readNotificationQueue.length == 0) {\n          // Shut down the timer if the queue is empty.\n          clearInterval(this.readNotificationTimer);\n          this.readNotificationTimer = null;\n          return;\n        }\n\n        let seq = -1;\n        while (this.readNotificationQueue.length > 0) {\n          const n = this.readNotificationQueue[0];\n          if (n.topicName != this.state.topic) {\n            // Topic has changed. Drop the notification.\n            this.readNotificationQueue.shift();\n            continue;\n          }\n\n          const now = new Date();\n          if (n.sendAt <= now) {\n            // Remove expired notification from queue.\n            this.readNotificationQueue.shift();\n            if (n.seq == 0 || Tinode.isServerAssignedSeq(n.seq)) {\n              seq = Math.max(seq, n.seq);\n            }\n          } else {\n            break;\n          }\n        }\n\n        // Send only one notification for the whole batch of messages.\n        if (seq >= 0) {\n          const topic = this.props.tinode.getTopic(this.state.topic);\n          if (topic) {\n            try {\n              topic.noteRead(seq);\n            } catch (err) {\n              console.error(\"Failed to send read notification\", err);\n            }\n          }\n        }\n      }, NOTIFICATION_EXEC_INTERVAL);\n    }\n\n    const now = new Date();\n    this.readNotificationQueue.push({\n      topicName: this.state.topic,\n      seq: seq,\n      sendAt: now.setMilliseconds(now.getMilliseconds() + READ_DELAY)\n    });\n  }\n\n  // Clear notification queue and timer.\n  clearNotificationQueue() {\n    this.readNotificationQueue = [];\n    if (this.readNotificationTimer) {\n      clearInterval(this.readNotificationTimer);\n      this.readNotificationTimer = null;\n    }\n  }\n\n  handleSubsUpdated() {\n    if (this.state.topic) {\n      const subs = [];\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      topic.subscribers(sub => {\n        if (sub.online && sub.user != this.props.myUserId) {\n          subs.push(sub);\n        }\n      });\n      const newState = {onlineSubs: subs, subsVersion: this.state.subsVersion + 1};\n      const peer = topic.p2pPeerDesc();\n      if (peer) {\n        Object.assign(newState, {\n          peerMessagingDisabled: isPeerRestricted(peer.acs)\n        });\n      } else if (this.state.peerMessagingDisabled) {\n        Object.assign(newState, {\n          peerMessagingDisabled: false\n        });\n      }\n      this.setState(newState);\n    }\n  }\n\n  // The 'msg' could be false-ish if some message ranges were deleted.\n  handleMessageUpdate(msg) {\n    if (!this.state.topic) {\n      return;\n    }\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    if (!msg) {\n      // msg could be null if one or more messages were deleted.\n      // Updating state to force redraw.\n      this.setState({latestClearId: topic.maxClearId()});\n      return;\n    }\n\n    clearTimeout(this.keyPressTimer)\n    this.setState({maxSeqId: topic.maxMsgSeq(), minSeqId: topic.minMsgSeq(), typingIndicator: false}, _ => {\n      // Scroll to the bottom if the message is added to the end of the message\n      // list if already at the bottom, otherwise show [go to latest] button.\n      // Implemented as a callback to be sure the scroll height has been updated.\n      if (topic.isNewMessage(msg.seq)) {\n        if (this.state.scrollPosition > SHOW_GO_TO_LAST_DIST) {\n          this.setState({showGoToLastButton: true});\n        } else {\n          this.goToLatestMessage();\n        }\n      } else {\n        if (this.messagesScroller) {\n          this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition -\n            this.messagesScroller.offsetHeight;\n        }\n      }\n    });\n\n    // Aknowledge messages except own messages. They are\n    // automatically assumed to be read and recived.\n    const status = topic.msgStatus(msg, true);\n    if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {\n      this.postReadNotification(msg.seq);\n    }\n  }\n\n  handleAllMessagesReceived(count) {\n    this.setState({fetchingMessages: false});\n    if (!count) {\n      // All messages received. Nothing left to receive.\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      if (topic) {\n        // Send read notification for the absolute last message.\n        this.postReadNotification(topic.seq);\n      }\n      return;\n    }\n\n    // Load pinned message too (if any);\n    if (!this.state.pinsLoaded) {\n      // This needs to be guarded to avoid an infinite loop.\n      // The loop may happen if some pinned messages are deleted.\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      this.setState({pinsLoaded: true}, _ => {\n        topic.getPinnedMessages();\n      });\n    } else {\n      this.setState({pinsLoaded: false});\n    }\n  }\n\n  handleAuxUpdate(aux) {\n    const pins = (aux['pins'] || []).slice();\n    let selectedPin = this.state.selectedPin;\n    if (pins.length > this.state.pins.length) {\n      // New pins added, show the latest.\n      selectedPin = 0;\n    } else if (selectedPin >= pins.length) {\n      selectedPin =  Math.max(0, pins.length - 1);\n    }\n    this.setState({pins: pins, selectedPin: selectedPin});\n  }\n\n  handleInfoReceipt(info) {\n    switch (info.what) {\n      case 'kp': {\n        clearTimeout(this.keyPressTimer);\n        this.keyPressTimer = setTimeout(_ => this.setState({typingIndicator: false}), KEYPRESS_DELAY + 1000);\n        if (!this.state.typingIndicator) {\n          this.setState({typingIndicator: true});\n        }\n        break;\n      }\n      case 'read':\n      case 'recv':\n        // Redraw due to changed recv/read status.\n        this.forceUpdate();\n        break;\n      default:\n        console.info(\"Other change in topic: \", info.what);\n    }\n  }\n\n  handleExpandMedia(content) {\n    if (!content) {\n      return;\n    }\n\n    if (content.video) {\n      this.setState({videoPostview: content});\n    } else {\n      this.setState({imagePostview: content});\n    }\n  }\n\n  handleClosePreview() {\n    if (this.state.imagePreview && this.state.imagePreview.url) {\n      URL.revokeObjectURL(this.state.imagePreview.url);\n    }\n    if (this.state.videoPreview && this.state.videoPreview.url) {\n      URL.revokeObjectURL(this.state.videoPreview.url);\n    }\n    this.setState({\n      imagePostview: null,\n      imagePreview: null,\n      docPreview: null,\n      videoPreview: null,\n      videoPostview: null,\n    });\n    this.props.onCancelForwardMessage();\n  }\n\n  handleFormResponse(action, text, data) {\n    if (action == 'pub') {\n      this.sendMessage(Drafty.attachJSON(Drafty.parse(text), data));\n    } else if (action == 'url') {\n      const url = new URL(data.ref);\n      const params = url.searchParams;\n      for (let key in data.resp) {\n        if (data.resp.hasOwnProperty(key)) {\n          params.set(key, data.resp[key]);\n        }\n      }\n      ['name', 'seq'].forEach(key => {\n        if (data[key]) {\n          params.set(key, data[key]);\n        }\n      });\n      params.set('uid', this.props.myUserId);\n      params.set('topic', this.state.topic);\n      url.search = params;\n      window.open(url, '_blank');\n    } else {\n      console.info(\"Unknown action in form\", action);\n    }\n  }\n\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.showContextMenu({ topicName: this.state.topic, y: e.pageY, x: e.pageX });\n  }\n\n  handleShowMessageContextMenu(params, messageSpecificMenuItems) {\n    if (params.userFrom == 'chan') {\n      params.userFrom = this.state.topic;\n      params.userName = this.state.title;\n    }\n    params.topicName = this.state.topic;\n    const menuItems = messageSpecificMenuItems || [];\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (topic) {\n      // Self -> (1) always hard-delete with [Delete] title.\n      // P2P -> (1) hard-delete if allowed and not too old, (2) always soft-delete.\n      // Group -> (1) hard-delete if allowed and not too old or owner, (2) always soft-delete.\n      if (topic.isSelfType()) {\n        // Hard-delete with plain [Delete] title.\n        menuItems.push('message_delete_generic');\n      } else {\n        if (!topic.isChannelType()) {\n          // P2P or normal group: always allow to soft-delete.\n          menuItems.push('message_delete');\n        }\n\n        const acs = topic.getAccessMode();\n        if (acs && acs.isDeleter()) {\n          // Owner can always hard-delete regardless of age.\n          let canDelete = acs.isOwner();\n          if (!canDelete) {\n            // Not owner: check message age if configured on the server.\n            const maxDelAge = this.props.tinode.getServerParam(Tinode.MSG_DELETE_AGE, 0) | 0;\n            // Make sure the message is not too old. This check is here just to make the UI\n            // more user-friendly. The server will enforce the limit regardless of this.\n            canDelete = maxDelAge == 0 || (maxDelAge > 0 && params.timestamp ?\n              params.timestamp.getTime() > (new Date().getTime() - maxDelAge * 1000) : false);\n          }\n          if (canDelete) {\n            // [Delete for All] title.\n            menuItems.push('message_delete_hard');\n          }\n        }\n      }\n    }\n    this.props.showContextMenu(params, menuItems);\n  }\n\n  handleNewChatAcceptance(action) {\n    this.props.onNewChat(this.state.topic, action);\n  }\n\n  handleEnablePeer(e) {\n    e.preventDefault();\n    this.props.onChangePermissions(this.state.topic, DEFAULT_P2P_ACCESS_MODE, this.state.topic);\n  }\n\n  sendKeyPress(audio) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    if (topic.isSubscribed()) {\n      if (audio) {\n        topic.noteRecording(true);\n      } else {\n        topic.noteKeyPress();\n      }\n    }\n  }\n\n  // sendMessage sends the message with an optional subscription to topic first.\n  sendMessage(msg, uploadCompletionPromise, uploader) {\n    let head;\n    if (!msg && this.props.forwardMessage) {\n      // We are forwarding a message.\n      msg = this.props.forwardMessage.msg;\n      head = this.props.forwardMessage.head;\n      this.handleCancelReply();\n    } else if (this.state.reply) {\n      if (this.state.reply.editing) {\n        if (msg == this.state.contentToEdit) {\n          // Message unchanged.\n          this.handleCancelReply();\n          return;\n        }\n        // Editing an existing message.\n        head = {replace: ':' + this.state.reply.seq};\n      } else if (this.state.reply.content) {\n        // Replying to a message in this topic.\n        // Turn it into Drafty so we can make a quoted Drafty object later.\n        head = {reply: '' + this.state.reply.seq};\n        if (typeof msg == 'string') {\n          msg = Drafty.parse(msg);\n        }\n        msg = Drafty.append(Drafty.sanitizeEntities(this.state.reply.content), msg);\n      }\n      this.handleCancelReply();\n    }\n    this.props.sendMessage(msg, uploadCompletionPromise, uploader, head);\n  }\n\n  // Retry sending a message.\n  retrySend(pub) {\n    this.props.sendMessage(pub.content, undefined, undefined, pub.head)\n      .then(_ => {\n        // All good. Remove the original message draft from the cache.\n        const topic = this.props.tinode.getTopic(this.state.topic);\n        topic.delMessagesList([pub.seq], true);\n      });\n  }\n\n  // sendFileAttachment sends the file as Drafty message:\n  // - if file is too large, upload it and send a s link.\n  // - if file is small enough, just send it in-band.\n  sendFileAttachment(file) {\n    // Server-provided limit reduced for base64 encoding and overhead.\n    const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n      MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n    if (TheCard.isFileSupported(file.type, file.name) || file.type == TheCard.contentType) {\n      // This is a vCard file, try to convert and send as TheCard.\n      if (this.sendTheCardAttachment(file, maxInbandAttachmentSize)) {\n        // Successfully sent as TheCard.\n        return;\n      }\n      // Sending as TheCard failed, fall through to sending as generic file attachment.\n    }\n\n    // If the attachment is a JSON file, then use 'application/octet-stream' instead of 'application/json'.\n    // This is a temporary workaround for the collision with the 'application/json' MIME type of form responses.\n    // Remove this code in 2026 or so.\n    const jsonMimeConverter = (fileType) => fileType === DRAFTY_FR_MIME_TYPE_LEGACY ? 'application/octet-stream' : fileType;\n\n    if (file.size > maxInbandAttachmentSize) {\n      // Too large to send inband - uploading out of band and sending as a link.\n      const uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n      const uploadCompletionPromise = uploader.upload(file);\n      const msg = Drafty.attachFile(null, {\n        mime: jsonMimeConverter(file.type),\n        filename: file.name,\n        size: file.size,\n        urlPromise: uploadCompletionPromise\n      });\n      // Pass data and the uploader to the TinodeWeb.\n      this.sendMessage(msg, uploadCompletionPromise, uploader);\n    } else {\n      // Small enough to send inband.\n      fileToBase64(file)\n        .then(b64 => this.sendMessage(Drafty.attachFile(null, {\n          mime: jsonMimeConverter(b64.mime),\n          data: b64.bits,\n          filename: b64.name,\n          size: file.size\n        })))\n        .catch(err => this.props.onError(err.message, 'err'));\n    }\n  }\n\n  // Convert attached vCard to TheCard and send.\n  sendTheCardAttachment(file, maxInbandAttachmentSize) {\n    if (file.size > maxInbandAttachmentSize) {\n      // Cannot convert to TheCard, send as a generic file attachment instead.\n      return false;\n    }\n\n    if (file.type == TheCard.contentType) {\n      // Already TheCard, no need to convert.\n      this.sendMessage(Drafty.appendTheCard(null, file.object));\n      return true;\n    }\n\n    importVCard(file)\n      .then(card => {\n        this.sendMessage(Drafty.appendTheCard(null, card));\n      })\n      .catch(err => {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_parse_vcard, {error: err.message}), 'err');\n      });\n    return true;\n  }\n\n  // handleAttachFile method is called when [Attach file] button is clicked: launch attachment preview.\n  handleAttachFile(file) {\n    const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n    if (file.size > maxExternAttachmentSize) {\n      // Too large.\n      this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large,\n        {size: bytesToHumanSize(file.size), limit: bytesToHumanSize(maxExternAttachmentSize)}), 'err');\n    } else {\n      this.setState({\n        docPreview: {\n          file: file,\n          name: file.name,\n          size: file.size,\n          type: file.type\n        }\n      });\n    }\n  }\n\n  handleCallHangup(topic, seq) {\n    this.props.onVideoCallClosed();\n    this.setState({\n      rtcPanel: null\n    });\n    this.props.onCallHangup(topic, seq);\n  }\n\n  handleCallPanelToggle() {\n    this.setState({minimizedCallPanel: !this.state.minimizedCallPanel});\n  }\n\n  // sendImageAttachment sends the image bits as Drafty message.\n  sendImageAttachment(caption, blob) {\n    const mime = this.state.imagePreview.mime;\n    const width = this.state.imagePreview.width;\n    const height = this.state.imagePreview.height;\n    const fname = this.state.imagePreview.filename;\n\n    // Server-provided limit reduced for base64 encoding and overhead.\n    const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n      MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n    if (blob.size > maxInbandAttachmentSize) {\n      // Too large to send inband - uploading out of band and sending as a link.\n      const uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n      const uploadCompletionPromise = uploader.upload(blob);\n\n      // Make small preview to show while uploading.\n      imageScaled(blob, IMAGE_PREVIEW_DIM, IMAGE_PREVIEW_DIM, -1, false)\n        // Convert tiny image into base64 for serialization and previewing.\n        .then(scaled => blobToBase64(scaled.blob))\n        .then(b64 => {\n          let msg = Drafty.insertImage(null, 0, {\n            mime: mime,\n            _tempPreview: b64.bits, // This preview will not be serialized.\n            bits: b64.bits, // Image thumbnail.\n            width: width,\n            height: height,\n            filename: fname,\n            size: blob.size,\n            urlPromise: uploadCompletionPromise\n          });\n          if (caption) {\n            msg = Drafty.appendLineBreak(msg);\n            msg = Drafty.append(msg, Drafty.parse(caption));\n          }\n          // Pass data and the uploader to the TinodeWeb.\n          this.sendMessage(msg, uploadCompletionPromise, uploader);\n        })\n        .catch(err => this.props.onError(err, 'err'));\n      return;\n    }\n\n    // Send the image inband if it's not too big. The image has been scaled already\n    // in image preview.\n    blobToBase64(blob)\n      .then(b64 => {\n        let msg = Drafty.insertImage(null, 0, {\n          mime: b64.mime,\n          bits: b64.bits,\n          width: width,\n          height: height,\n          filename: fname,\n          size: blob.size\n        });\n        if (caption) {\n          msg = Drafty.appendLineBreak(msg);\n          msg = Drafty.append(msg, Drafty.parse(caption));\n        }\n        this.sendMessage(msg);\n      });\n  }\n\n  // sendVideoAttachment sends the video bits as Drafty message.\n  sendVideoAttachment(caption, videoBlob, previewBlob, params) {\n    const width = params.width;\n    const height = params.height;\n\n    // Server-provided limit reduced for base64 encoding and overhead.\n    const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n      MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n    const uploads = [];\n    let uploader;\n    if ((videoBlob.size + previewBlob.size) > maxInbandAttachmentSize) {\n      // One or both are too large to send inband. Uploading out of band and sending as a link.\n      uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n\n      uploads[0] = videoBlob.size > maxInbandAttachmentSize * 0.675 ? uploader.upload(videoBlob) : null;\n      uploads[1] = previewBlob.size > maxInbandAttachmentSize * 0.275 ? uploader.upload(previewBlob) : null;\n    }\n\n    if (uploads.length == 0) {\n      // Both video and preview are small enough to send inband.\n      Promise.all([blobToBase64(videoBlob), blobToBase64(previewBlob)])\n        .then(b64s => {\n          const [v64, i64] = b64s;\n          let msg = Drafty.insertVideo(null, 0, {\n            mime: v64.mime,\n            bits: v64.bits,\n            preview: i64.bits,\n            premime: i64.mime,\n            width: width,\n            height: height,\n            duration: params.duration,\n            filename: params.name,\n            size: videoBlob.size\n          });\n          if (caption) {\n            msg = Drafty.appendLineBreak(msg);\n            msg = Drafty.append(msg, Drafty.parse(caption));\n          }\n          this.sendMessage(msg);\n      });\n      return;\n    }\n\n    const uploadCompletionPromise = Promise.all(uploads);\n\n    const b64conv = [];\n    // Small video converted to base64.\n    b64conv[0] = uploads[0] ? null : blobToBase64(videoBlob);\n    // Full-size preview fits inline.\n    b64conv[1] = uploads[1] ? null : imageScaled(previewBlob, MAX_IMAGE_DIM, MAX_IMAGE_DIM, -1, false)\n      .then(scaled => blobToBase64(scaled.blob));\n    // Small preview to show while uploading.\n    b64conv[2] = imageScaled(previewBlob, VIDEO_PREVIEW_DIM, VIDEO_PREVIEW_DIM, -1, false)\n      .then(scaled => blobToBase64(scaled.blob));\n    // Convert tiny image into base64 for serialization and previewing.\n    Promise.all(b64conv)\n      .then(b64s => {\n        const [video, img, preview] = b64s;\n        let msg = Drafty.insertVideo(null, 0, {\n          mime: params.mime,\n          bits: video ? video.bits : null,\n          _tempPreview: preview.bits,\n          preview: img ? img.bits : preview.bits,\n          premime: img ? img.mime : preview.mime,\n          width: width,\n          height: height,\n          duration: params.duration,\n          filename: params.name,\n          size: videoBlob.size,\n          urlPromise: uploadCompletionPromise\n        });\n\n        if (caption) {\n          msg = Drafty.appendLineBreak(msg);\n          msg = Drafty.append(msg, Drafty.parse(caption));\n        }\n        // Pass data and the uploader to the TinodeWeb.\n        this.sendMessage(msg, uploadCompletionPromise, uploader);\n      })\n      .catch(err => this.props.onError(err.message, 'err'));\n  }\n\n  // handleAttachImageOrVideo method is called when [Attach image or video] button is clicked: launch image or video preview.\n  handleAttachImageOrVideo(file) {\n    const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n    if (file.type.startsWith('video/')) {\n      this.setState({videoPreview: {\n        url: URL.createObjectURL(file),\n        blob: file,\n        filename: file.name,\n        size: file.size,\n        mime: file.type\n      }});\n      return;\n    }\n\n    // Get image dimensions and size, optionally scale it down.\n    imageScaled(file, MAX_IMAGE_DIM, MAX_IMAGE_DIM, maxExternAttachmentSize, false)\n      .then(scaled => {\n        this.setState({imagePreview: {\n          url: URL.createObjectURL(scaled.blob),\n          blob: scaled.blob,\n          filename: scaled.name,\n          width: scaled.width,\n          height: scaled.height,\n          size: scaled.blob.size,\n          mime: scaled.mime\n        }});\n      }).catch(err => {\n        this.props.onError(err.message, 'err');\n      });\n  }\n\n  // handleFileDrop is called when the user drags & drops a file upon the message view.\n  handleFileDrop(files) {\n    if (!files || files.length == 0) {\n      return;\n    }\n    const file = files[0];\n    if (file.type && file.type.startsWith('image/')) {\n      this.handleAttachImageOrVideo(file);\n    } else {\n      this.handleAttachFile(file);\n    }\n  }\n\n  // sendAudioAttachment sends audio bits inband as Drafty message (no preview).\n  sendAudioAttachment(url, preview, duration) {\n    fetch(url)\n      .then(result => result.blob())\n      .then(blob => {\n        // Server-provided limit reduced for base64 encoding and overhead.\n        const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;\n        if (blob.size > maxInbandAttachmentSize) {\n          // Too large to send inband - uploading out of band and sending as a link.\n          const uploader = this.props.tinode.getLargeFileHelper();\n          if (!uploader) {\n            this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n            return;\n          }\n          const uploadCompletionPromise = uploader.upload(blob);\n          const msg = Drafty.appendAudio(null, {\n            mime: blob.type,\n            size: blob.size,\n            duration: duration,\n            preview: preview,\n            urlPromise: uploadCompletionPromise\n          });\n          // Pass data and the uploader to the TinodeWeb.\n          this.sendMessage(msg, uploadCompletionPromise, uploader);\n        } else {\n          // Small enough to send inband.\n          blobToBase64(blob)\n            .then(b64 => {\n              this.sendMessage(Drafty.appendAudio(null, {\n                mime: b64.mime,\n                bits: b64.bits,\n                size: blob.size,\n                duration: duration,\n                preview: preview,\n              }))\n            })\n        }\n      })\n      .catch(err => {this.props.onError(err.message, 'err')});;\n  }\n\n  handleCancelUpload(seq, uploader) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    const found = topic.findMessage(seq);\n    if (found) {\n      found._cancelled = true;\n    }\n    uploader.cancel();\n  }\n\n  // seq: seq ID of the source message\n  // context: message content.\n  // senderId: UID of the sender of the source message.\n  // senderName: full name of the sender of the original message.\n  handlePickReply(seq, content, senderId, senderName) {\n    if (!seq || !content) {\n      this.setState({reply: null});\n      return;\n    }\n\n    content = typeof content == 'string' ? Drafty.init(content) : content;\n    if (Drafty.isValid(content)) {\n      content = Drafty.replyContent(content, QUOTED_REPLY_LENGTH);\n    } else {\n      // /!\\ invalid content.\n      content = Drafty.append(Drafty.init('\\u26A0 '),\n        Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n    }\n\n    this.setState({\n      reply: {\n        content: Drafty.quote(senderName, senderId, content),\n        seq: seq\n      }\n    });\n    this.props.onCancelForwardMessage();\n  }\n\n  // seq: seq ID of the message to edit.\n  // context: message content.\n  handleEditMessage(seq, content) {\n    if (!seq || !content) {\n      this.setState({reply: null});\n      return;\n    }\n\n    content = typeof content == 'string' ? Drafty.init(content) : content;\n    const editable = Drafty.toMarkdown(content);\n    if (Drafty.isValid(content)) {\n      content = Drafty.replyContent(content, EDIT_PREVIEW_LENGTH);\n    } else {\n      // /!\\ invalid content.\n      content = Drafty.append(Drafty.init('\\u26A0 '),\n        Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n    }\n\n    this.setState({\n      reply: {\n        content: Drafty.quote(this.props.intl.formatMessage(messages.editing_message), null, content),\n        seq: seq,\n        editing: true\n      },\n      contentToEdit: editable\n    });\n    this.props.onCancelForwardMessage();\n  }\n\n\n  handleCancelReply() {\n    this.setState({reply: null, contentToEdit: null});\n    this.props.onCancelForwardMessage();\n  }\n\n  handleQuoteClick(replyToSeq) {\n    const ref = this.getOrCreateMessageRef(replyToSeq);\n    if (ref && ref.current) {\n      ref.current.scrollIntoView({block: \"center\", behavior: \"smooth\"});\n      ref.current.classList.add('flash');\n      setTimeout(_ => {ref.current.classList.remove('flash')} , 1000);\n    } else {\n      console.error(\"Unresolved message ref\", replyToSeq);\n    }\n  }\n\n  handleUnpinMessage(seq) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    topic.pinMessage(seq, false);\n  }\n\n  isDragEnabled() {\n    return this.state.isWriter && !this.state.unconfirmed && !this.props.forwardMessage && !this.state.peerMessagingDisabled;\n  }\n\n  handleDragStart(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    e.dataTransfer.clearData();\n  }\n\n  handleDragIn(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.dragCounter++;\n    if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n      this.setState({dragging: true});\n    }\n  }\n\n  handleDragOut(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.dragCounter--;\n    if (this.dragCounter <= 0) {\n      this.setState({dragging: false});\n    }\n  }\n\n  handleDrag(e) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  handleDrop(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.setState({dragging: false});\n    if (this.isDragEnabled() && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n      this.handleFileDrop(e.dataTransfer.files);\n      this.dragCounter = 0;\n    }\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n\n    // P2P call is an overlay, not a separate component because it cannot be\n    // re-mounted between full screen/minimized.\n    const overlay = this.state.rtcPanel &&\n        <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n          <CallPanel\n            topic={this.state.topic}\n            seq={this.props.callSeq}\n            callState={this.props.callState}\n            callAudioOnly={this.props.callAudioOnly}\n            tinode={this.props.tinode}\n            title={this.state.title}\n            avatar={this.state.avatar || true}\n            minimized={this.state.minimizedCallPanel}\n            onError={this.props.onError}\n            onHangup={this.handleCallHangup}\n            onToggleMinimize={this.handleCallPanelToggle}\n            onInvite={this.props.onCallInvite}\n            onSendOffer={this.props.onCallSendOffer}\n            onIceCandidate={this.props.onCallIceCandidate}\n            onSendAnswer={this.props.onCallSendAnswer} />\n        </Suspense>;\n\n    let component;\n    if (!this.state.topic) {\n      component = <LogoView\n          serverVersion={this.props.serverVersion}\n          serverAddress={this.props.serverAddress} />;\n\n    } else {\n      let component2;\n      if (this.state.imagePreview) {\n        // Preview image before sending.\n        component2 = (\n          <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <ImagePreview\n              content={this.state.imagePreview}\n              tinode={this.props.tinode}\n              reply={this.state.reply}\n              onCancelReply={this.handleCancelReply}\n              onClose={this.handleClosePreview}\n              onSendMessage={this.sendImageAttachment} />\n          </Suspense>\n        );\n      } else if (this.state.videoPreview) {\n          // Preview video.\n        component2 = <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <VideoPreview\n              content={this.state.videoPreview}\n              tinode={this.props.tinode}\n              reply={this.state.reply}\n              onError={this.props.onError}\n              onCancelReply={this.handleCancelReply}\n              onClose={this.handleClosePreview}\n              onSendMessage={this.sendVideoAttachment} />\n          </Suspense>;\n\n      } else if (this.state.imagePostview) {\n        // Expand received image.\n        component2 = <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <ImagePreview\n              content={this.state.imagePostview}\n              onClose={this.handleClosePreview} />\n          </Suspense>;\n\n      } else if (this.state.videoPostview) {\n        // Play received video.\n        component2 = <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <VideoPreview\n              content={this.state.videoPostview}\n              tinode={this.props.tinode}\n              onError={this.props.onError}\n              onClose={this.handleClosePreview} />\n          </Suspense>;\n\n      } else if (this.state.docPreview) {\n        // Preview attachment before sending.\n        if (TheCard.isFileSupported(this.state.docPreview.type, this.state.docPreview.name) ||\n            this.state.docPreview.type == TheCard.contentType) {\n          component2 = <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <TheCardPreview\n              content={this.state.docPreview}\n              tinode={this.props.tinode}\n              reply={this.state.reply}\n              onCancelReply={this.handleCancelReply}\n              onClose={this.handleClosePreview}\n              onSendMessage={this.sendFileAttachment} />\n          </Suspense>;\n        } else {\n          component2 = <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n              description=\"Message shown when component is loading\"/></div>}>\n              <DocPreview\n                content={this.state.docPreview}\n                tinode={this.props.tinode}\n                reply={this.state.reply}\n                onCancelReply={this.handleCancelReply}\n                onClose={this.handleClosePreview}\n                onSendMessage={this.sendFileAttachment} />\n            </Suspense>;\n        }\n      } else {\n        const topic = this.props.tinode.getTopic(this.state.topic);\n        const isChannel = topic.isChannelType() || topic.chan;\n        const groupTopic = topic.isGroupType() && !isChannel;\n        const icon_badges = [];\n        if (topic.trusted) {\n          if (topic.trusted.verified) {\n            icon_badges.push({icon: 'verified', color: 'badge-inv'});\n          }\n          if (topic.trusted.staff) {\n            icon_badges.push({icon: 'staff', color: 'badge-inv'});\n          }\n          if (topic.trusted.danger) {\n            icon_badges.push({icon: 'dangerous', color: 'badge-inv'});\n          }\n        }\n\n        const pinnedMessages = [];\n        this.state.pins.forEach(seq => pinnedMessages.push(topic.latestMsgVersion(seq) || topic.findMessage(seq)));\n\n        const messageNodes = [];\n        let previousFrom = null;\n        let prevDate = null;\n        let chatBoxClass = null;\n        topic.messages((msg, prev, next, i) => {\n          let nextFrom = next ? (next.from || 'chan') : null;\n\n          let sequence = 'single';\n          let thisFrom = msg.from || 'chan';\n          if (thisFrom == previousFrom) {\n            if (thisFrom == nextFrom) {\n              sequence = 'middle';\n            } else {\n              sequence = 'last';\n            }\n          } else if (thisFrom == nextFrom) {\n            sequence = 'first';\n          }\n          previousFrom = thisFrom;\n\n          const isReply = !(thisFrom == this.props.myUserId);\n          const deliveryStatus = topic.msgStatus(msg, true);\n\n          let userFrom = thisFrom, userName, userAvatar;\n          const user = topic.userDesc(thisFrom);\n          if (user && user.public) {\n            userName = user.public.fn;\n            userAvatar = makeImageUrl(user.public.photo);\n          }\n          chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';\n\n          // Ref for this chat message.\n          const ref = this.getOrCreateMessageRef(msg.seq);\n          let replyToSeq = msg.head ? parseInt(msg.head.reply) : null;\n          if (!replyToSeq || isNaN(replyToSeq)) {\n            replyToSeq = null;\n          }\n\n          if (msg.hi) {\n            // Deleted message.\n            messageNodes.push(\n              <MetaMessage\n                deleted={true}\n                key={msg.seq} />\n              );\n          } else {\n            const thisDate = new Date(msg.ts);\n            // This message was sent on a different date than the previous.\n            if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {\n              messageNodes.push(\n                <MetaMessage\n                  date={relativeDateFormat(msg.ts)}\n                  locale={this.props.intl.locale}\n                  key={'date-' + msg.seq} />\n              );\n              prevDate = thisDate;\n            }\n            messageNodes.push(\n              <ChatMessage\n                tinode={this.props.tinode}\n                topic={this.state.topic}\n                content={msg.content}\n                mimeType={msg.head && msg.head.mime}\n                replyToSeq={replyToSeq}\n                edited={msg.head && !msg.head.webrtc && msg.head.replace}\n                timestamp={msg.ts}\n                response={isReply}\n                seq={msg.seq}\n                isGroup={groupTopic}\n                isChan={this.state.channel}\n                userFrom={userFrom}\n                userName={userName}\n                userAvatar={userAvatar}\n                sequence={sequence}\n                received={deliveryStatus}\n                uploader={msg._uploader}\n                userIsWriter={this.state.isWriter}\n                userIsAdmin={this.state.isAdmin}\n                pinned={this.state.pins.includes(msg.seq)}\n                viewportWidth={this.props.viewportWidth}  // Used by `formatter`.\n                showContextMenu={this.handleShowMessageContextMenu}\n                onExpandMedia={this.handleExpandMedia}\n                onFormResponse={this.handleFormResponse}\n                onCancelUpload={this.handleCancelUpload}\n                pickReply={this.handlePickReply}\n                editMessage={this.handleEditMessage}\n                onQuoteClick={this.handleQuoteClick}\n                onAcceptCall={this.props.onAcceptCall}\n                onError={this.props.onError}\n                ref={ref}\n                key={msg.seq} />\n            );\n          }\n        });\n\n        let lastSeen = null;\n        if (isChannel) {\n          if (topic.subcnt) {\n            lastSeen = formatMessage(messages.subscriber_count, {count: topic.subcnt});\n          }\n        } else {\n          const cont = this.props.tinode.getMeTopic().getContact(this.state.topic);\n          if (cont) {\n            if (Tinode.isP2PTopicName(cont.topic)) {\n              if (cont.online) {\n                lastSeen = formatMessage(messages.online_now);\n              } else if (cont.seen) {\n                lastSeen = formatMessage(messages.last_seen,\n                  {timestamp: shortDateFormat(cont.seen.when, this.props.intl.locale)});\n                // TODO: also handle user agent in c.seen.ua\n              }\n            } else if (Tinode.isGroupTopicName(cont.topic)) {\n              if (topic.subcnt) {\n                lastSeen = formatMessage(messages.member_count, {count: topic.subcnt});\n              }\n            }\n          }\n        }\n        const avatar = this.state.avatar || true;\n        const online = this.state.deleted || topic.isSelfType() ? null :\n          this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';\n\n        const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');\n        const darkModeClass = this.props.colorSchema == 'dark' ? 'dark' : '';\n\n        let messagesComponent = (\n          <>\n            <div id=\"messages-container\" className={darkModeClass}>\n              <button id=\"go-to-latest\" className={'action-button' + (this.state.showGoToLastButton ? '' : ' hidden')}\n                onClick={this.goToLatestMessage}>\n                <i className=\"material-icons\">arrow_downward</i>\n              </button>\n              <div id=\"messages-panel\" ref={this.handleScrollReference}>\n                <ul id=\"scroller\" className={chatBoxClass}>\n                  {messageNodes}\n                </ul>\n              </div>\n              {!this.state.isReader ?\n              <div id=\"write-only-background\">\n                {this.state.readingBlocked ?\n                <div id=\"write-only-note\">\n                  <FormattedMessage id=\"messages_not_readable\" defaultMessage=\"no access to messages\"\n                    description=\"Message shown in topic without the read access\" />\n                </div>\n                : null }\n              </div>\n              : null }\n            </div>\n            {this.state.peerMessagingDisabled && !this.state.unconfirmed ?\n              <div id=\"peer-messaging-disabled-note\">\n                <i className=\"material-icons secondary\">block</i> <FormattedMessage\n                  id=\"peers_messaging_disabled\" defaultMessage=\"Peer's messaging is disabled.\"\n                  description=\"Shown when the p2p peer's messaging is disabled\" /> <a href=\"#\"\n                    onClick={this.handleEnablePeer}><FormattedMessage id=\"enable_peers_messaging\"\n                    defaultMessage=\"Enable\" description=\"Call to action to enable peer's messaging\" /></a>.\n              </div> : null}\n            {this.state.unconfirmed ?\n              <Invitation onAction={this.handleNewChatAcceptance} />\n              :\n              <SendMessage\n                tinode={this.props.tinode}\n                topicName={this.state.topic}\n                noInput={!!this.props.forwardMessage}\n                disabled={!this.state.isWriter || this.state.deleted}\n                reply={this.state.reply}\n                initMessage={this.state.contentToEdit}\n                sendOnEnter={this.props.sendOnEnter}\n                onKeyPress={this.sendKeyPress}\n                onRecordingProgress={this.sendKeyPress}\n                onSendMessage={this.sendMessage}\n                onAttachFile={this.props.forwardMessage ? null : this.handleAttachFile}\n                onAttachImage={this.props.forwardMessage ? null : this.handleAttachImageOrVideo}\n                onAttachAudio={this.props.forwardMessage ? null : this.sendAudioAttachment}\n                onError={this.props.onError}\n                onQuoteClick={this.handleQuoteClick}\n                onCancelReply={this.handleCancelReply} />}\n          </>\n        );\n\n        component2 = (\n          <>\n            <div id=\"topic-caption-panel\" className=\"caption-panel\">\n              {this.props.displayMobile ?\n                <a href=\"#\" id=\"hide-message-view\" onClick={(e) => {e.preventDefault(); this.leave(this.state.topic); this.props.onHideMessagesView();}}>\n                  <i className=\"material-icons\">arrow_back</i>\n                </a>\n                :\n                null}\n              <div className=\"avatar-box\">\n                <LetterTile\n                  authorizeURL={this.props.tinode.authorizeURL}\n                  avatar={avatar}\n                  topic={this.state.topic}\n                  title={this.state.title}\n                  deleted={this.state.deleted} />\n                {!isChannel ? <span className={online} /> : null}\n              </div>\n              <div id=\"topic-title-group\">\n                <div id=\"topic-title\" className={titleClass}>{\n                  this.state.title ||\n                  <i><FormattedMessage id=\"unnamed_topic\" defaultMessage=\"Unnamed\"\n                    description=\"Title shown when the topic has no name\" /></i>\n                }<ContactBadges badges={icon_badges} /></div>\n                <div id=\"topic-last-seen\">{lastSeen}</div>\n              </div>\n              <div style={{marginLeft: 'auto'}}/>\n              {!this.props.displayMobile && this.state.pins.length > 0 ?\n                <PinnedMessages\n                  tinode={this.props.tinode}\n                  pins={this.state.pins}\n                  messages={pinnedMessages}\n                  selected={this.state.selectedPin}\n                  isAdmin={this.state.isAdmin}\n                  setSelected={index => this.setState({selectedPin: index})}\n                  onSelected={this.handleQuoteClick}\n                  onCancel={this.handleUnpinMessage} />\n                : null}\n              {groupTopic ?\n                <GroupSubs\n                  tinode={this.props.tinode}\n                  subscribers={this.state.onlineSubs} /> :\n                null\n              }\n              <div>\n                <a href=\"#\" onClick={this.handleContextClick}>\n                  <i className=\"material-icons\">more_vert</i>\n                </a>\n              </div>\n            </div>\n            {this.props.displayMobile ?\n              <>\n                {this.state.pins.length > 0 ?\n                  <PinnedMessages\n                    tinode={this.props.tinode}\n                    pins={this.state.pins}\n                    messages={pinnedMessages}\n                    selected={this.state.selectedPin}\n                    isAdmin={this.state.isAdmin}\n                    setSelected={index => this.setState({selectedPin: index})}\n                    onSelected={this.handleQuoteClick}\n                    onCancel={this.handleUnpinMessage} />\n                    : null\n                }\n                <ErrorPanel\n                  level={this.props.errorLevel}\n                  text={this.props.errorText}\n                  onClearError={this.props.onError} />\n              </>\n              : null}\n            <LoadSpinner show={this.state.fetchingMessages} />\n            {messagesComponent}\n            {this.state.dragging && this.isDragEnabled() ?\n              <div className=\"drag-n-drop\">{formatMessage(messages.drag_file)}</div>\n            : null}\n          </>\n        );\n      }\n      component = <div id=\"topic-view\" ref={this.mountDnDEvents}>{component2}{overlay}</div>\n    }\n    return component;\n  }\n};\n\nexport default injectIntl(MessagesView);\n"
  },
  {
    "path": "src/views/new-topic-view.jsx",
    "content": "// Create new topic and invite users or send an invite.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport ContactList from '../widgets/contact-list.jsx';\nimport NewTopicById from '../widgets/new-topic-by-id.jsx';\nimport NewTopicGroup from '../widgets/new-topic-group.jsx';\nimport SearchContacts from '../widgets/search-contacts.jsx';\n\nimport HashNavigation from '../lib/navigation.js';\nimport { asEmail, asPhone, theCard } from '../lib/utils.js';\n\nconst messages = defineMessages({\n  search_for_contacts: {\n    id: \"search_for_contacts\",\n    defaultMessage: \"Use search to find contacts\",\n    description: \"Text shown in contacts view when user entered no search query.\"\n  },\n  search_no_results: {\n    id: \"search_no_results\",\n    defaultMessage: \"Search returned no results\",\n    description: \"Text shown in contacts view when query returned no results.\"\n  },\n  search_placeholder: {\n    id: \"search_placeholder\",\n    defaultMessage: \"List like alice@example.com, +17025550003...\",\n    description: \"Placeholder in contacts search field\"\n  },\n});\n\nclass NewTopicView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const urlParams = HashNavigation.parseUrlHash(window.location.hash).params;\n    const initialTab = urlParams['tab'] || 'find';\n    const initialQuery = initialTab == 'find' ? (urlParams['q'] || null) : null;\n\n    this.state = {\n      tabSelected: initialTab,\n      searchQuery: initialQuery\n    };\n\n    this.handleTabClick = this.handleTabClick.bind(this);\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleSearchResultSelected = this.handleSearchResultSelected.bind(this);\n    this.handleNewGroupSubmit = this.handleNewGroupSubmit.bind(this);\n    this.handleGroupByID = this.handleGroupByID.bind(this);\n  }\n\n  componentDidMount() {\n    this.props.onInitFind();\n  }\n\n  handleTabClick(e) {\n    e.preventDefault();\n    HashNavigation.navigateTo(HashNavigation.addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));\n    this.setState({tabSelected: e.currentTarget.dataset.id});\n  }\n\n  handleSearchContacts(query) {\n    query = query.trim() || Tinode.DEL_CHAR;\n    if (!/[\\s,:]/.test(query) && query != Tinode.DEL_CHAR) {\n      // No colons, spaces or commas, not DEL char. Try as email, phone, or alias.\n      const email = asEmail(query);\n      if (email) {\n        query = `${Tinode.TAG_EMAIL}${email}`;\n      } else {\n        const tel = asPhone(query);\n        if (tel) {\n          query = `${Tinode.TAG_PHONE}${tel}`;\n        } else {\n          if (query[0] == '@') {\n            // Strip the leading '@' sign if present.\n            query = query.substring(1);\n          }\n          // 'alice' -> 'alias:alice,alice'\n          query = `${Tinode.TAG_ALIAS}${query},${query}`;\n        }\n      }\n    }\n    this.props.onSearchContacts(query);\n    this.setState({searchQuery: Tinode.isNullValue(query) ? null : query});\n  }\n\n  handleSearchResultSelected(topicName) {\n    if (this.state.tabSelected == 'find') {\n      HashNavigation.navigateTo(HashNavigation.removeUrlParams(window.location.hash, ['tab', 'q']));\n      this.props.onCreateTopic(topicName);\n    }\n  }\n\n  handleNewGroupSubmit(name, description, dataUrl, priv, tags, isChannel) {\n    HashNavigation.navigateTo(HashNavigation.removeUrlParams(window.location.hash, ['tab', 'q']));\n    this.props.onCreateTopic(undefined,\n      {public: theCard(name, dataUrl, null, description), private: priv, tags: tags}, isChannel);\n  }\n\n  handleGroupByID(topicName) {\n    HashNavigation.navigateTo(HashNavigation.removeUrlParams(window.location.hash, ['tab', 'q']));\n    this.props.onCreateTopic(topicName);\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    const no_contacts_placeholder = formatMessage(this.state.searchQuery ?\n      messages.search_no_results : messages.search_for_contacts);\n    const search_placeholder = formatMessage(messages.search_placeholder);\n    return (\n      <div className=\"flex-column\">\n        <ul className=\"tabbar\">\n          <li className={this.state.tabSelected === 'find' ? 'active' : null}>\n            <a href=\"#\" data-id=\"find\" onClick={this.handleTabClick}>\n              <FormattedMessage id=\"tabtitle_find_user\" defaultMessage=\"find\"\n                description=\"Tab title Find\" />\n            </a>\n          </li>\n          <li className={this.state.tabSelected === 'grp' ? 'active' : null}>\n            <a href=\"#\" data-id=\"grp\" onClick={this.handleTabClick}>\n              <FormattedMessage id=\"tabtitle_new_group\" defaultMessage=\"new group\"\n                description=\"Tab title New Group\" />\n            </a>\n          </li>\n          <li className={this.state.tabSelected === 'byid' ? 'active' : null}>\n            <a href=\"#\" data-id=\"byid\" onClick={this.handleTabClick}>\n              <FormattedMessage id=\"tabtitle_group_by_id\" defaultMessage=\"by id\"\n                description=\"Tab title Find topic by ID\" />\n            </a>\n          </li>\n        </ul>\n        {this.state.tabSelected === 'grp' ?\n          <NewTopicGroup\n            tinode={this.props.tinode}\n            onSubmit={this.handleNewGroupSubmit}\n            onError={this.props.onError} /> :\n\n        this.state.tabSelected === 'byid' ?\n          <NewTopicById\n            myURI={Tinode.URI_TOPIC_ID_PREFIX + this.props.tinode.getCurrentUserID()}\n            onSubmit={this.handleGroupByID}\n            onError={this.props.onError} /> :\n\n          <div className=\"flex-column\">\n            <SearchContacts\n              placeholder={search_placeholder}\n              initialQuery={this.state.searchQuery || ''}\n              onSearchContacts={this.handleSearchContacts} />\n            <ContactList\n              tinode={this.props.tinode}\n              contacts={this.props.searchResults}\n              myUserId={this.props.myUserId}\n              emptyListMessage={no_contacts_placeholder}\n              showSelfTopic={!this.state.searchQuery}\n              showOnline={false}\n              showUnread={false}\n              showContextMenu={false}\n              onTopicSelected={this.handleSearchResultSelected} />\n          </div>}\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(NewTopicView);\n"
  },
  {
    "path": "src/views/password-reset-view.jsx",
    "content": "// 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 <code>:<cred_method>:<cred_value>, \"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        <label className=\"small gray\" htmlFor=\"new-password\">\n          <FormattedMessage id=\"label_new_password\"\n            defaultMessage=\"New password\"\n            description=\"Label for entering a new password\" />\n        </label>\n        <FormattedMessage id=\"new_password_placeholder\" defaultMessage=\"Enter new password\"\n          description=\"Placeholder for entering new password\">{\n          (placeholder) => <VisiblePassword\n            id=\"new-password\"\n            placeholder={placeholder}\n            autoComplete=\"new-password\"\n            value={this.state.password}\n            required={true} autoFocus={true}\n            onChange={this.handlePasswordChange} />\n        }</FormattedMessage>\n      </>);\n\n    const emailInput = (<>\n        {this.state.haveCode ?\n          null :\n          <label htmlFor=\"inputEmail\">\n            <FormattedMessage id=\"label_reset_password\"\n              defaultMessage=\"Send a password reset email\"\n              description=\"Label for password reset field\" />\n          </label>\n        }\n        <FormattedMessage id=\"credential_email_prompt\" defaultMessage=\"Your registration email\"\n          description=\"Placeholder for entering email\">{\n          (placeholder) => <input type=\"email\" id=\"inputEmail\"\n            placeholder={placeholder}\n            autoComplete=\"email\"\n            value={this.state.email}\n            onChange={this.handleEmailChange}\n            required autoFocus />\n        }</FormattedMessage>\n      </>);\n\n    const phoneInput = (<>\n        {this.state.haveCode ?\n          null :\n          <div><label>\n            <FormattedMessage id=\"label_reset_password_tel\"\n              defaultMessage=\"Send SMS to reset password\"\n              description=\"Label for password reset field by phone\" />\n          </label></div>\n        }\n        <div>\n          <label className=\"small gray\">\n            <FormattedMessage id=\"mobile_phone_number\" defaultMessage=\"Mobile phone number\"\n              description=\"Prompt for entering a mobile phone number\" />\n          </label>\n        </div>\n        <div className=\"panel-form-row\">\n          <PhoneEdit\n            autoFocus={true}\n            onShowCountrySelector={this.props.onShowCountrySelector}\n            onSubmit={number => this.setState({tel: number})} />\n        </div>\n      </>);\n\n    const codeInput = (<>\n        <div>\n          <label className=\"small gray\" htmlFor=\"enter-confirmation-code\">\n            <FormattedMessage id=\"enter_confirmation_code_prompt\"\n              defaultMessage=\"Confirmation code\"\n              description=\"Request to enter confirmation code\" />\n          </label>\n        </div>\n        <div>\n          <FormattedMessage id=\"numeric_confirmation_code_prompt\"\n            defaultMessage=\"Numbers only\" description=\"Prompt for numeric conformation code\">{\n            (numbers_only) => <input type=\"text\" id=\"enter-confirmation-code\"\n              placeholder={numbers_only} maxLength={10}\n              value={this.state.code} onChange={this.handleCodeChange} required />\n          }</FormattedMessage>\n        </div>\n      </>);\n\n    const credentialInput = this.props.reqCredMethod == 'email' ?\n      emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n\n    return (\n      <form id=\"password-reset-form\" onSubmit={this.handleSubmit}>\n        {!this.state.sent && showCredentialInput ? credentialInput : null}\n        {this.state.haveCode || this.state.sent ? codeInput : null}\n        {showPasswordInput ? passwordInput : null}\n        <div className=\"dialog-buttons\">\n          {this.state.haveCode || this.state.sent || this.state.token || this.state.code ? null :\n            <a href=\"#\" onClick={this.handleShowCodeField} style={{marginRight: 'auto'}}>\n              <FormattedMessage id=\"password_i_have_code\" defaultMessage=\"I have code\"\n                description=\"Call to open field to enter password reset code\" />\n            </a>\n          }\n          <button className=\"primary\" type=\"submit\">{\n            showPasswordInput ?\n              <FormattedMessage id=\"button_reset\" defaultMessage=\"Reset\" description=\"Button [Reset]\" />\n            :\n              <FormattedMessage id=\"button_send_request\" defaultMessage=\"Send request\"\n                description=\"Button [Send request]\" />\n          }</button>\n        </div>\n      </form>\n    );\n  }\n}\n\nexport default injectIntl(PasswordResetView);\n"
  },
  {
    "path": "src/views/settings-view.jsx",
    "content": "// Tinode config panel.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\n\nimport HostSelector from '../widgets/host-selector.jsx';\n\nexport default class SettingsView extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      transport: props.transport || 'def',\n      serverAddress: props.serverAddress,\n      secureConnection: props.secureConnection,\n    };\n\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleTransportSelected = this.handleTransportSelected.bind(this);\n    this.handleServerAddressChange = this.handleServerAddressChange.bind(this);\n    this.handleToggleSecure = this.handleToggleSecure.bind(this);\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    this.props.onUpdate({\n      transport: this.state.transport,\n      serverAddress: this.state.serverAddress,\n      secureConnection: this.state.secureConnection,\n    });\n  }\n\n  handleTransportSelected(e) {\n    this.setState({transport: e.currentTarget.value});\n  }\n\n  handleServerAddressChange(name) {\n    this.setState({serverAddress: name});\n  }\n\n  handleToggleSecure(e) {\n    this.setState({secureConnection: !this.state.secureConnection});\n  }\n\n  render() {\n    const names = {def: \"default\", ws: \"websocket\", lp: \"long polling\"};\n    const transportOptions = [];\n    ['def', 'ws', 'lp'].forEach(item => {\n      const id = 'transport-' + item;\n      const name = names[item];\n      transportOptions.push(\n        <li key={item}>\n          <input type=\"radio\" id={id} name=\"transport-select\" value={item}\n            checked={this.state.transport === item}\n            onChange={this.handleTransportSelected} />\n          <label htmlFor={id}>{name}</label>\n        </li>\n      );\n    });\n\n    return (\n      <form id=\"settings-form\" className=\"panel-form\" onSubmit={this.handleSubmit}>\n        <div className=\"panel-form-row\">\n          <label className=\"small\">\n            <FormattedMessage id=\"label_server_to_use\" defaultMessage=\"Server to use:\"\n              description=\"Label for server selector in SettingsView\" />\n          </label>\n        </div>\n        <HostSelector serverAddress={this.state.serverAddress} onServerAddressChange={this.handleServerAddressChange} />\n        <div className=\"panel-form-row\">\n          <CheckBox id=\"secure-connection\" name=\"secure-connection\" checked={this.state.secureConnection}\n            className=\"quoted\" onChange={this.handleToggleSecure} /><label htmlFor=\"secure-connection\">\n            <FormattedMessage id=\"label_use_secure_connection\" defaultMessage=\"Use secure connection\"\n              description=\"Label for WS/WSS connection type in SettingsView\" />\n          </label>\n        </div>\n        <div className=\"panel-form-row\">\n          <label className=\"small\">\n            <FormattedMessage id=\"label_wire_transport\" defaultMessage=\"Wire transport:\"\n              description=\"Label for wire transport selection in SettingsView\" />\n          </label>\n        </div>\n        <div className=\"panel-form-row\">\n          <ul className=\"quoted\">\n            {transportOptions}\n          </ul>\n        </div>\n        <div className=\"dialog-buttons\">\n          <button type=\"submit\" className=\"primary\">\n            <FormattedMessage id=\"button_update\" defaultMessage=\"Update\"\n              description=\"Button [Update]\" />\n          </button>\n        </div>\n      </form>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/sidepanel-view.jsx",
    "content": "import React, { Suspense } from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\n\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport LoadSpinner from '../widgets/load-spinner.jsx';\nimport SideNavbar from '../widgets/side-navbar.jsx';\nimport TopicCommonView from './topic-common-view.jsx';\n\nconst AccountSettingsView = React.lazy(_ => import('./account-settings-view.jsx'));\nimport ContactsView from './contacts-view.jsx';\nconst CreateAccountView = React.lazy(_ => import('./create-account-view.jsx'));\nimport AccGeneralView from './acc-general-view.jsx';\nimport AccNotificationsView from './acc-notifications-view.jsx';\nconst AccSecurityView = React.lazy(_ => import('./acc-security-view.jsx'));\nimport AccSupportView from './acc-support-view.jsx';\nimport LoginView from './login-view.jsx';\nimport NewTopicView from './new-topic-view.jsx';\nconst PasswordResetView = React.lazy(_ => import('./password-reset-view.jsx'));\nimport SettingsView from './settings-view.jsx';\nimport ValidationView from './validation-view.jsx';\nconst WallpapersView = React.lazy(_ => import('./wallpapers.jsx'));\n\n// Panel titles for translation.\nconst messages = defineMessages({\n  login: {\n    id: 'sidepanel_title_login',\n    description: 'Sidepanel title for LoginView.',\n    defaultMessage: 'Sign In'\n  },\n  register: {\n    id: 'sidepanel_title_register',\n    description: 'Sidepanel title for CreateAccountView.',\n    defaultMessage: 'Create Account'\n  },\n  settings: {\n    id: 'sidepanel_title_settings',\n    description: 'Sidepanel title for SettingsView.',\n    defaultMessage: 'Settings'\n  },\n  edit: {\n    id: 'sidepanel_title_account_settings',\n    description: 'Sidepanel title for AccountSettingsView.',\n    defaultMessage: 'Account Settings'\n  },\n  general: {\n    id: 'panel_title_general',\n    description: 'Title for TopicCommon.',\n    defaultMessage: 'General'\n  },\n  security: {\n    id: 'panel_title_security',\n    description: 'Title for TopicSecirity and AccSecurity.',\n    defaultMessage: 'Security'\n  },\n  crop: {\n    id: 'panel_title_crop',\n    description: 'Title for AvatarCropView.',\n    defaultMessage: 'Drag to Adjust'\n  },\n  notif: {\n    id: 'sidepanel_title_acc_notifications',\n    description: 'Sidepanel title for AccNotificationsView.',\n    defaultMessage: 'Notifications'\n  },\n  acc_general: {\n    id: 'sidepanel_title_acc_general',\n    description: 'Sidepanel title for AccGeneralView.',\n    defaultMessage: 'General'\n  },\n  support: {\n    id: 'sidepanel_title_acc_support',\n    description: 'Sidepanel title for AccSupportView.',\n    defaultMessage: 'Support'\n  },\n  newtpk: {\n    id: 'sidepanel_title_newtpk',\n    description: 'Sidepanel title for NewTopicView.',\n    defaultMessage: 'Start New Chat'\n  },\n  cred: {\n    id: 'sidepanel_title_cred',\n    description: 'Sidepanel title for ValidationView.',\n    defaultMessage: 'Confirm Credentials'\n  },\n  reset: {\n    id: 'sidepanel_title_reset',\n    description: 'Sidepanel title for PasswordResetView.',\n    defaultMessage: 'Reset Password'\n  },\n  archive: {\n    id: 'sidepanel_title_archive',\n    description: 'Sidepanel title for ContactsView-Archive.',\n    defaultMessage: 'Archived Chats'\n  },\n  blocked: {\n    id: 'sidepanel_title_blocked',\n    description: 'Sidepanel title for ContactsView-Blocked.',\n    defaultMessage: 'Blocked Chats'\n  },\n  wallpapers: {\n    id: 'wallpapers',\n    description: 'Link or title for working with wallpapers.',\n    defaultMessage: 'Wallpapers'\n  }\n});\n\nclass SidepanelView extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleNewTopic = this.handleNewTopic.bind(this);\n  }\n\n  handleNewTopic() {\n    this.props.onNavigate('newtpk');\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    const view = this.props.state || (this.props.myUserId ? 'contacts' : 'login');\n\n    let title, avatar, badges;\n    if (view == 'contacts') {\n      title = this.props.title;\n      avatar = this.props.avatar ? this.props.avatar : true;\n      badges = this.props.trustedBadges;\n    } else {\n      title = formatMessage(messages[view]);\n      avatar = false;\n      badges = null;\n    }\n\n    let onCancel;\n    if (['login', 'contacts'].indexOf(view) == -1) {\n      onCancel = this.props.onCancel;\n    }\n\n    return (\n      <div id=\"sidepanel\">\n        <SideNavbar\n          state={view}\n          title={title}\n          avatar={avatar}\n          tinode={this.props.tinode}\n          trustedBadges={badges}\n          myUserId={this.props.myUserId}\n          onSignUp={this.props.onSignUp}\n          onSettings={this.props.onSettings}\n          onNewTopic={this.handleNewTopic}\n          onCancel={onCancel} />\n\n        <ErrorPanel\n          level={this.props.errorLevel}\n          text={this.props.errorText}\n          action={this.props.errorAction}\n          actionText={this.props.errorActionText}\n          onClearError={this.props.onError} />\n\n        <LoadSpinner show={this.props.loadSpinnerVisible} />\n\n        {view === 'login' ?\n          <LoginView\n            login={this.props.login}\n            disabled={this.props.loginDisabled}\n            persist={this.props.persist}\n            onLogin={this.props.onLoginRequest}\n            onPersistenceChange={this.props.onPersistenceChange} /> :\n\n          view === 'register' ?\n          <Suspense fallback={<div className=\"panel-form-row\"><FormattedMessage id=\"loading_note\"\n            defaultMessage=\"Loading...\" description=\"Message shown when component is loading\"/></div>}>\n            <CreateAccountView\n              tinode={this.props.tinode}\n              reqCredMethod={this.props.reqCredMethod}\n              onShowCountrySelector={this.props.onShowCountrySelector}\n              onCreateAccount={this.props.onCreateAccount}\n              onCancel={this.props.onCancel}\n              onError={this.props.onError} />\n          </Suspense> :\n\n          view === 'settings' ?\n          <SettingsView\n            transport={this.props.transport}\n            serverAddress={this.props.serverAddress}\n            secureConnection={this.props.secureConnection}\n            onCancel={this.props.onCancel}\n            onUpdate={this.props.onGlobalSettings} /> :\n\n          view === 'edit' ?\n          <Suspense fallback={<div className=\"panel-form-row\"><FormattedMessage id=\"loading_note\"\n            defaultMessage=\"Loading...\" description=\"Message shown when component is loading\"/></div>}>\n            <AccountSettingsView\n              tinode={this.props.tinode}\n              myUserId={this.props.myUserId}\n              trustedBadges={this.props.trustedBadges}\n              reqCredMethod={this.props.reqCredMethod}\n              onShowCountrySelector={this.props.onShowCountrySelector}\n              onNavigate={this.props.onNavigate}\n              onCredAdd={this.props.onCredAdd}\n              onCredDelete={this.props.onCredDelete}\n              onCredConfirm={this.props.onCredConfirm}\n              onError={this.props.onError} />\n          </Suspense> :\n\n          (view === 'general' || view === 'crop') ?\n          <TopicCommonView\n            topic=\"me\"\n            tinode={this.props.tinode}\n            myUserId={this.props.myUserId}\n            reqCredMethod={this.props.reqCredMethod}\n            onUpdateTopicDesc={this.props.onUpdateAccountDesc}\n            onUpdateTagsRequest={this.props.onUpdateAccountTags}\n            onError={this.props.onError} /> :\n\n          view === 'acc_general' ?\n          <AccGeneralView\n            colorSchema={this.props.colorSchema}\n            onSelectWallpapers={this.props.onSelectWallpapers}\n            textSize={this.props.textSize}\n            sendOnEnter={this.props.sendOnEnter}\n            onChangeColorSchema={this.props.onChangeColorSchema}\n            onTextSizeChanged={this.props.onTextSizeChanged}\n            onSendOnEnterChanged={this.props.onSendOnEnterChanged} /> :\n\n          view === 'notif' ?\n          <AccNotificationsView\n            messageSounds={this.props.messageSounds}\n            desktopAlerts={this.props.desktopAlerts}\n            desktopAlertsEnabled={this.props.desktopAlertsEnabled}\n            onTogglePushNotifications={this.props.onTogglePushNotifications}\n            onToggleMessageSounds={this.props.onToggleMessageSounds} /> :\n\n          view === 'security' ?\n            <Suspense fallback={<div className=\"panel-form-row\"><FormattedMessage id=\"loading_note\"\n              defaultMessage=\"Loading...\" description=\"Message shown when component is loading\"/></div>}>\n              <AccSecurityView\n                tinode={this.props.tinode}\n                incognitoMode={this.props.incognitoMode}\n                onUpdateAccountDesc={this.props.onUpdateAccountDesc}\n                onUpdatePassword={this.props.onUpdatePassword}\n                onLogout={this.props.onLogout}\n                onDeleteAccount={this.props.onDeleteAccount}\n                onShowAlert={this.props.onShowAlert}\n                onShowBlocked={this.props.onShowBlocked}\n                onToggleIncognitoMode={this.props.onToggleIncognitoMode} />\n            </Suspense> :\n\n          view === 'support' ?\n          <AccSupportView\n            serverAddress={this.props.serverAddress}\n            serverVersion={this.props.serverVersion} /> :\n\n          view === 'wallpapers' ?\n          <Suspense fallback={<div className=\"panel-form-row\"><FormattedMessage id=\"loading_note\"\n            defaultMessage=\"Loading...\" description=\"Message shown when component is loading\"/></div>}>\n            <WallpapersView\n              wallpaper={this.props.wallpaper}\n              wallpaperSize={this.props.wallpaperSize}\n              wallpaperBlur={this.props.wallpaperBlur}\n              colorSchema={this.props.colorSchema !== 'auto' ? this.props.colorSchema : this.props.systemColorSchema}\n              onWallpaperSelected={this.props.onWallpaperSelected}\n            />\n          </Suspense> :\n\n          (view === 'contacts' || view == 'archive' || view == 'blocked') ?\n          <ContactsView\n            tinode={this.props.tinode}\n            myUserId={this.props.myUserId}\n            connected={this.props.connected}\n            topicSelected={this.props.topicSelected}\n            archive={view == 'archive'}\n            blocked={view == 'blocked'}\n            chatList={this.props.chatList}\n            showContextMenu={this.props.showContextMenu}\n            onTopicSelected={this.props.onTopicSelected}\n            onShowArchive={this.props.onShowArchive} /> :\n\n          view === 'newtpk' ?\n          <NewTopicView\n            tinode={this.props.tinode}\n            searchResults={this.props.searchResults}\n            onInitFind={this.props.onInitFind}\n            onSearchContacts={this.props.onSearchContacts}\n            onCreateTopic={this.props.onCreateTopic}\n            onError={this.props.onError} /> :\n\n          view === 'cred' ?\n          <ValidationView\n            credCode={this.props.credCode}\n            credMethod={this.props.credMethod}\n            credToken={this.props.credToken}\n            onSubmit={this.props.onValidateCredentials}\n            onCancel={this.props.onCancel} /> :\n\n          view === 'reset' ?\n          <Suspense fallback={<div className=\"panel-form-row\"><FormattedMessage id=\"loading_note\"\n            defaultMessage=\"Loading...\" description=\"Message shown when component is loading\"/></div>}>\n            <PasswordResetView\n              tinode={this.props.tinode}\n              reqCredMethod={this.props.reqCredMethod}\n              onShowCountrySelector={this.props.onShowCountrySelector}\n              onRequest={this.props.onPasswordResetRequest}\n              onReset={this.props.onResetPassword}\n              onCancel={this.props.onCancel}\n              onError={this.props.onError} />\n          </Suspense> :\n          null}\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(SidepanelView);\n"
  },
  {
    "path": "src/views/tinode-web.jsx",
    "content": "// The top-level class to hold all functionality together.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { initializeApp as firebaseInitApp } from 'firebase/app';\nimport { getMessaging as firebaseGetMessaging, getToken as firebaseGetToken,\n  deleteToken as firebaseDelToken, onMessage as firebaseOnMessage } from 'firebase/messaging';\n\nimport { Drafty, Tinode } from 'tinode-sdk';\n\nimport Alert from '../widgets/alert.jsx';\nimport ContextMenu from '../widgets/context-menu.jsx';\nimport ForwardDialog from '../widgets/forward-dialog.jsx';\nimport CallIncoming from '../widgets/call-incoming.jsx';\nconst PhoneCountrySelector = React.lazy(_ => import('../widgets/phone-country-selector.jsx'));\n\nconst InfoView = React.lazy(_ => import('./info-view.jsx'));\nconst MessagesView = React.lazy(_ => import('./messages-view.jsx'));\nimport SidepanelView from './sidepanel-view.jsx';\n\nimport { API_KEY, APP_NAME, DEFAULT_COLOR_SCHEME, DEFAULT_P2P_ACCESS_MODE, DEFAULT_TEXT_SIZE, FORWARDED_PREVIEW_LENGTH,\n  LOGGING_ENABLED, MEDIA_BREAKPOINT, WAKE_UP_TICK, WAKE_UP_TIMEOUT } from '../config.js';\nimport { CALL_STATE_NONE, CALL_STATE_OUTGOING_INITATED,\n         CALL_STATE_INCOMING_RECEIVED, CALL_STATE_IN_PROGRESS,\n         CALL_HEAD_STARTED }  from '../constants.js';\nimport { PACKAGE_VERSION } from '../version.js';\nimport { base64ReEncode, makeImageUrl } from '../lib/blob-helpers.js';\nimport { detectServerAddress, isLocalHost, isSecureConnection } from '../lib/host-name.js';\nimport LocalStorageUtil from '../lib/local-storage.js';\nimport HashNavigation from '../lib/navigation.js';\nimport { secondsToTime } from '../lib/strformat.js'\nimport { defaultWallpaper, updateFavicon } from '../lib/utils.js';\n\n// Sound to play on message received.\nconst POP_SOUND = new Audio('audio/msg.m4a');\n\nconst messages = defineMessages({\n  reconnect_countdown: {\n    id: 'reconnect_countdown',\n    defaultMessage: 'Disconnected. Reconnecting in {seconds}…',\n    description: 'Message shown when an app update is available.'\n  },\n  reconnect_now: {\n    id: 'reconnect_now',\n    defaultMessage: 'Try now',\n    description: 'Prompt for reconnecting now'\n  },\n  push_init_failed: {\n    id: 'push_init_failed',\n    defaultMessage: 'Failed to initialize push notifications',\n    description: 'Error message when push notifications have failed to initialize.'\n  },\n  invalid_security_token: {\n    id: 'invalid_security_token',\n    defaultMessage: 'Invalid security token',\n    description: 'Error message when resetting password.'\n  },\n  no_connection: {\n    id: 'no_connection',\n    defaultMessage: 'No connection',\n    description: 'Warning that the user is offline.'\n  },\n  code_doesnot_match: {\n    id: 'code_doesnot_match',\n    defaultMessage: 'Code does not match',\n    description: 'Error message when the credential validation code is incorrect.'\n  },\n  menu_item_info: {\n    id: 'menu_item_info',\n    defaultMessage: 'Info',\n    description: 'Show extended topic information'\n  },\n  menu_item_audio_call: {\n    id: 'menu_item_audio_call',\n    defaultMessage: 'Call',\n    description: 'Start audio call'\n  },\n  menu_item_video_call: {\n    id: 'menu_item_video_call',\n    defaultMessage: 'Video call',\n    description: 'Start video call'\n  },\n  cred_confirmed_successfully: {\n    id: 'cred_confirmed_successfully',\n    defaultMessage: 'Confirmed successfully',\n    description: 'Notification message that the credential was successfully validated.'\n  },\n  password_reset_success: {\n    id: 'password_reset_success',\n    defaultMessage: 'Password reset successfully',\n    description: 'Notification message that the password was successfully reset.'\n  },\n  select_country: {\n    id: 'select_country',\n    defaultMessage: 'Select country',\n    description: 'Placeholder for the country selector'\n  }\n});\n\nclass TinodeWeb extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.selfRef = React.createRef();\n\n    this.state = this.getBlankState();\n\n    this.handleResize = this.handleResize.bind(this);\n    this.handleHashRoute = this.handleHashRoute.bind(this);\n    this.handleOnline = this.handleOnline.bind(this);\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleColorSchemeChange = this.handleColorSchemeChange.bind(this);\n    this.checkForAppUpdate = this.checkForAppUpdate.bind(this);\n    this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.handleLoginRequest = this.handleLoginRequest.bind(this);\n    this.handlePersistenceChange = this.handlePersistenceChange.bind(this);\n    this.handleConnected = this.handleConnected.bind(this);\n    this.handleAutoreconnectIteration = this.handleAutoreconnectIteration.bind(this);\n    this.doLogin = this.doLogin.bind(this);\n    this.handleLoginSuccessful = this.handleLoginSuccessful.bind(this);\n    this.handleDisconnect = this.handleDisconnect.bind(this);\n    this.tnMeMetaDesc = this.tnMeMetaDesc.bind(this);\n    this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);\n    this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);\n    this.resetContactList = this.resetContactList.bind(this);\n    this.tnInitFind = this.tnInitFind.bind(this);\n    this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleTopicSelected = this.handleTopicSelected.bind(this);\n    this.handleHideMessagesView = this.handleHideMessagesView.bind(this);\n    this.handleSendMessage = this.handleSendMessage.bind(this);\n    this.handleNewChatInvitation = this.handleNewChatInvitation.bind(this);\n    this.handleNewAccount = this.handleNewAccount.bind(this);\n    this.handleNewAccountRequest = this.handleNewAccountRequest.bind(this);\n    this.handleUpdatePasswordRequest = this.handleUpdatePasswordRequest.bind(this);\n    this.handleUpdateAccountTagsRequest = this.handleUpdateAccountTagsRequest.bind(this);\n    this.handleToggleIncognitoMode = this.handleToggleIncognitoMode.bind(this);\n    this.handleChangeColorSchema = this.handleChangeColorSchema.bind(this);\n    this.handleChangeTextSize = this.handleChangeTextSize.bind(this);\n    this.handleSendOnEnter = this.handleSendOnEnter.bind(this);\n    this.handleSelectWallpapers = this.handleSelectWallpapers.bind(this);\n    this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);\n    this.handleSettings = this.handleSettings.bind(this);\n    this.handleGlobalSettings = this.handleGlobalSettings.bind(this);\n    this.handleShowArchive = this.handleShowArchive.bind(this);\n    this.handleShowBlocked = this.handleShowBlocked.bind(this);\n    this.handleToggleMessageSounds = this.handleToggleMessageSounds.bind(this);\n    this.handleCredAdd = this.handleCredAdd.bind(this);\n    this.handleCredDelete = this.handleCredDelete.bind(this);\n    this.handleCredConfirm = this.handleCredConfirm.bind(this);\n    this.initFCMessaging = this.initFCMessaging.bind(this);\n    this.toggleFCMToken = this.toggleFCMToken.bind(this);\n    this.handlePushMessage = this.handlePushMessage.bind(this);\n    this.handleSidepanelCancel = this.handleSidepanelCancel.bind(this);\n    this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);\n    this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);\n    this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);\n    this.handleUnarchive = this.handleUnarchive.bind(this);\n    this.handleChangePermissions = this.handleChangePermissions.bind(this);\n    this.handleTagsUpdateRequest = this.handleTagsUpdateRequest.bind(this);\n    this.handleLogout = this.handleLogout.bind(this);\n    this.handleDeleteAccount = this.handleDeleteAccount.bind(this);\n    this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);\n    this.handleDeleteMessagesRequest = this.handleDeleteMessagesRequest.bind(this);\n    this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this);\n    this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this);\n    this.handleReportTopic = this.handleReportTopic.bind(this);\n    this.handleShareTheCard = this.handleShareTheCard.bind(this);\n    this.handleShowContextMenu = this.handleShowContextMenu.bind(this);\n    this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this);\n    this.handleHideContextMenu = this.handleHideContextMenu.bind(this);\n    this.handleShowAlert = this.handleShowAlert.bind(this);\n    this.handleShowInfoView = this.handleShowInfoView.bind(this);\n    this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\n    this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);\n    this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);\n    this.handleResetPassword = this.handleResetPassword.bind(this);\n    this.handleContextMenuAction = this.handleContextMenuAction.bind(this);\n    this.handleShowCountrySelector =  this.handleShowCountrySelector.bind(this);\n\n    this.handleShowForwardDialog = this.handleShowForwardDialog.bind(this);\n    this.handleHideForwardDialog = this.handleHideForwardDialog.bind(this);\n\n    this.handleStartVideoCall = this.handleStartVideoCall.bind(this);\n    this.handleStartAudioCall = this.handleStartAudioCall.bind(this);\n    this.handleInfoMessage = this.handleInfoMessage.bind(this);\n    this.handleDataMessage = this.handleDataMessage.bind(this);\n    this.handleCallClose = this.handleCallClose.bind(this);\n\n    this.handleCallInvite = this.handleCallInvite.bind(this);\n    this.handleCallRinging = this.handleCallRinging.bind(this);\n    this.handleCallHangup = this.handleCallHangup.bind(this);\n    this.handleCallSendOffer = this.handleCallSendOffer.bind(this);\n    this.handleCallIceCandidate = this.handleCallIceCandidate.bind(this);\n    this.handleCallSendAnswer = this.handleCallSendAnswer.bind(this);\n\n    this.handleCallAccept = this.handleCallAccept.bind(this);\n\n    this.sendMessageToTopic = this.sendMessageToTopic.bind(this);\n\n    // FIXME: this is unused.\n    this.callTimeoutTimer = null;\n  }\n\n  getBlankState() {\n    const settings = LocalStorageUtil.getObject('settings') || {};\n    const persist = !!LocalStorageUtil.getObject('keep-logged-in');\n    if (!settings.wallpaper) {\n      const wallpaper = defaultWallpaper();\n      settings.wallpaper = wallpaper.name || '';\n      settings.wallpaperSize = wallpaper.size || 0;\n      settings.wallpaperBlur = 0;\n    }\n    return {\n      connected: false,\n      // Connected and subscribed to 'me'\n      ready: false,\n      // Try to re-login on new connection.\n      autoLogin: false,\n      transport: settings.transport || null,\n      serverAddress: settings.serverAddress || detectServerAddress(),\n      secureConnection: settings.secureConnection === undefined ?\n        isSecureConnection() : settings.secureConnection,\n      serverVersion: \"no connection\",\n      // \"On\" is the default, so saving the \"off\" state.\n      messageSounds: !settings.messageSoundsOff,\n      incognitoMode: false,\n      // Manually selected color scheme. Default: 'system default' ('auto').\n      colorSchema: settings.colorSchema || DEFAULT_COLOR_SCHEME,\n      systemColorSchema: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',\n      // Wallpaper settings.\n      wallpaper: settings.wallpaper,\n      wallpaperSize: settings.wallpaperSize,\n      wallpaperBlur: 0,\n      // Text size in points. Default size: 10pt\n      textSize: settings.textSize || DEFAULT_TEXT_SIZE,\n      // Default: 'plain' (just Enter)\n      sendOnEnter: settings.sendOnEnter || 'plain',\n      // Persistent request to enable alerts.\n      desktopAlerts: persist && !!settings.desktopAlerts,\n      // Enable / disable checkbox.\n      desktopAlertsEnabled: (isSecureConnection() || isLocalHost()) &&\n        (typeof firebaseInitApp != 'undefined') && (typeof navigator != 'undefined') &&\n        (typeof FIREBASE_INIT != 'undefined'),\n      firebaseToken: persist ? LocalStorageUtil.getObject('firebase-token') : null,\n\n      applicationVisible: !document.hidden,\n\n      errorText: '',\n      errorLevel: null,\n      errorAction: undefined,\n      errorActionText: null,\n\n      sidePanelSelected: 'login',\n      sidePanelTitle: null,\n      sidePanelAvatar: null,\n      myTrustedBadges: [],\n      loadSpinnerVisible: false,\n\n      login: '',\n      password: '',\n      persist: persist,\n      myUserId: null,\n      liveConnection: navigator.onLine,\n      topicSelected: '',\n      topicSelectedOnline: false,\n      topicSelectedAcs: null,\n      newTopicParams: null,\n      loginDisabled: false,\n      displayMobile: (window.innerWidth <= MEDIA_BREAKPOINT),\n      infoPanel: undefined,\n      mobilePanel: 'sidepanel',\n\n      // Video calls.\n      callTopic: undefined,\n      callState: CALL_STATE_NONE,\n      callAudioOnly: undefined,\n      // If true, call state should be transitioned to CALL_STATE_IN_PROGRESS upon\n      // switching to the call topic.\n      callShouldStart: false,\n\n      contextMenuVisible: false,\n      contextMenuBounds: null,\n      contextMenuClickAt: null,\n      contextMenuParams: null,\n      contextMenuItems: [],\n\n      forwardDialogVisible: false,\n      forwardMessage: null,\n\n      // Modal alert dialog.\n      alertVisible: false,\n      alertParams: {},\n\n      // Chats as shown in the ContactsView\n      chatList: [],\n      // Contacts returned by a search query.\n      searchResults: [],\n      // Merged results of a search query and p2p chats.\n      searchableContacts: [],\n      // Credential validation.\n      reqCredMethod: undefined,\n      credMethod: undefined,\n      credCode: undefined,\n      credToken: undefined,\n      // Topic to go to after login.\n      requestedTopic: undefined\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener('resize', this.handleResize);\n    this.handleOnlineOn = _ => { this.handleOnline(true); }\n    window.addEventListener('online', this.handleOnlineOn);\n    this.handleOnlineOff = _ => { this.handleOnline(false); }\n    window.addEventListener('offline', this.handleOnlineOff);\n    window.addEventListener('hashchange', this.handleHashRoute);\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.handleColorSchemeChange);\n\n    // Window/tab visible or invisible for pausing timers.\n    document.addEventListener('visibilitychange', this.handleVisibilityEvent);\n\n    // Listen for Escape key to clear selections.\n    document.addEventListener('keydown', this.handleEscapeKey);\n\n    document.documentElement.style.colorScheme = this.state.colorSchema == 'auto' ? 'light dark' : this.state.colorSchema;\n    document.documentElement.style.setProperty('--message-text-size', `${this.state.textSize}pt`);\n\n    this.applyWallpaperSettings(this.state.wallpaper, this.state.wallpaperSize, this.state.wallpaperBlur,\n      this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);\n\n    // Process background notifications from the service worker.\n    if (typeof BroadcastChannel == 'function') {\n      const serviceWorkerChannel = new BroadcastChannel('tinode-sw');\n      serviceWorkerChannel.addEventListener('message', this.handlePushMessage);\n    } else {\n      // Safari is broken by design.\n      console.warn(\"Your browser does not support BroadcastChannel. Some features will not be available\");\n    }\n\n    // Detect if computer just woke up from sleep. Checks how much time has passed since the last tick.\n    // If too much time has passed then the computer was asleep.\n    this.lastWakeUpCheck = new Date().getTime();\n    this.wakeUpTicker = setInterval(_ => {\n      const now = new Date().getTime();\n      if (now - this.lastWakeUpCheck > WAKE_UP_TIMEOUT) {\n        // Trigger reconnect.\n        this.handleOnlineOn();\n      }\n      this.lastWakeUpCheck = now;\n    }, WAKE_UP_TICK);\n\n    this.setState({\n      viewportWidth: document.documentElement.clientWidth,\n      viewportHeight: document.documentElement.clientHeight\n    });\n\n    new Promise((resolve, reject) => {\n      this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, isSecureConnection(), this.state.transport,\n        this.props.intl.locale, this.state.persist, resolve);\n      this.tinode.onConnect = this.handleConnected;\n      this.tinode.onDisconnect = this.handleDisconnect;\n      this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n      this.tinode.onInfoMessage = this.handleInfoMessage;\n      this.tinode.onDataMessage = this.handleDataMessage;\n    }).then(_ => {\n      // Initialize desktop alerts.\n      if (this.state.desktopAlertsEnabled) {\n        this.initFCMessaging().catch(_ => {\n          // do nothing: handled earlier.\n          // catch needed to pervent unnecessary logging of error.\n        });\n      }\n\n      // Read contacts from cache.\n      this.resetContactList();\n\n      const token = this.state.persist ? LocalStorageUtil.getObject('auth-token') : undefined;\n      if (token) {\n        this.setState({autoLogin: true});\n\n        // When reading from storage, date is returned as string.\n        token.expires = new Date(token.expires);\n        this.tinode.setAuthToken(token);\n        this.tinode.connect().catch(err => {\n          // Socket error\n          this.handleError(err.message, 'err');\n        });\n      }\n\n      // Parse the hash navigation params.\n      const parsedNav = HashNavigation.parseUrlHash(window.location.hash);\n      // Maybe navigate to home screen.\n      if (!['cred', 'reset', 'register'].includes(parsedNav.path[0])) {\n        // Save possible topic name.\n        this.setState({requestedTopic: parsedNav.path[1]});\n        const path = parsedNav.params && parsedNav.params.cred_done ?\n          HashNavigation.addUrlParam('', 'cred_done', parsedNav.params.cred_done):\n          '';\n        HashNavigation.navigateTo(path);\n      } else {\n        this.handleHashRoute();\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('hashchange', this.handleHashRoute);\n    window.removeEventListener('online', this.handleOnlineOn);\n    window.removeEventListener('offline', this.handleOnlineOff);\n    window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.handleColorSchemeChange);\n    document.removeEventListener('visibilitychange', this.handleVisibilityEvent);\n    document.removeEventListener('keydown', this.handleEscapeKey);\n\n    clearInterval(this.wakeUpTicker);\n  }\n\n  // Setup transport (usually websocket) and server address. This will terminate connection with the server.\n  static tnSetup(serverAddress, secureConnection, transport, locale, persistentCache, onSetupCompleted) {\n    const tinode = new Tinode({appName: APP_NAME, host: serverAddress, apiKey: API_KEY, transport: transport,\n      secure: secureConnection, persist: persistentCache}, onSetupCompleted);\n    tinode.setHumanLanguage(locale);\n    tinode.enableLogging(LOGGING_ENABLED, true);\n    return tinode;\n  }\n\n  // Tinode received a push notification from the server.\n  handlePushMessage(payload) {\n    this.tinode.oobNotification(payload.data || {});\n  }\n\n  initFCMessaging() {\n    const {formatMessage, locale} = this.props.intl;\n    const onError = (msg, err) => {\n      console.error(msg, err);\n      this.handleError(formatMessage(messages.push_init_failed), 'err');\n      this.setState({firebaseToken: null});\n      LocalStorageUtil.updateObject('settings', {desktopAlerts: false});\n    }\n\n    try {\n      this.fcm = firebaseGetMessaging(firebaseInitApp(FIREBASE_INIT, APP_NAME));\n      return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {\n        return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {\n          this.checkForAppUpdate(reg);\n          return reg;\n        });\n      }).then(reg => {\n        // Pass locale and version config to the service worker.\n        (reg.active || reg.installing).postMessage(JSON.stringify({locale: locale, version: PACKAGE_VERSION}));\n        // Request token.\n        return TinodeWeb.requestFCMToken(this.fcm, reg);\n      }).then(token => {\n        const persist = LocalStorageUtil.getObject('keep-logged-in');\n        if (token != this.state.firebaseToken) {\n          this.tinode.setDeviceToken(token);\n          if (persist) {\n            LocalStorageUtil.setObject('firebase-token', token);\n          }\n        }\n        this.setState({firebaseToken: token, desktopAlerts: true});\n        if (persist) {\n          LocalStorageUtil.updateObject('settings', {desktopAlerts: true});\n        }\n\n        // Handhe FCM pushes\n        // (a) for channels always,\n        // (b) pushes when the app is in foreground but has no focus.\n        firebaseOnMessage(this.fcm, payload => { this.handlePushMessage(payload); });\n      }).catch(err => {\n        // SW registration or FCM has failed :(\n        onError(err);\n        throw err;\n      });\n    } catch (err) {\n      onError(err);\n      return Promise.reject(err);\n    }\n  }\n\n  // Google's FCM API is idiotic.\n  static requestFCMToken(fcm, sw) {\n    return firebaseGetToken(fcm, {\n      serviceWorkerRegistration: sw,\n      vapidKey: FIREBASE_INIT.messagingVapidKey\n    }).then(token => {\n      if (token) {\n        return token;\n      } else if (typeof Notification != 'undefined') {\n        // Try to request permissions.\n        return Notification.requestPermission().then(permission => {\n          if (permission === 'granted') {\n            return firebaseGetToken(fcm, {\n              serviceWorkerRegistration: reg,\n              vapidKey: FIREBASE_INIT.messagingVapidKey\n            }).then(token => {\n              if (token) {\n                return token;\n              } else {\n                throw new Error(\"Failed to initialize notifications\");\n              }\n            });\n          } else {\n            throw new Error(\"No permission to send notifications: \" + permission);\n          }\n        });\n      }\n      throw new Error(\"Notifications are not supported\");\n    });\n  }\n\n  handleResize() {\n    const mobile = document.documentElement.clientWidth <= MEDIA_BREAKPOINT;\n    this.setState({\n      viewportWidth: document.documentElement.clientWidth,\n      viewportHeight: document.documentElement.clientHeight\n    });\n    if (this.state.displayMobile != mobile) {\n      this.setState({displayMobile: mobile});\n    }\n  }\n\n  handleEscapeKey(e) {\n    if (e.key === 'Escape' || e.keyCode === 27) {\n      // Clear selections and navigate to base state\n      this.setState({\n        topicSelected: null,\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'sidepanel',\n        topicSelectedOnline: false,\n        topicSelectedAcs: null,\n        infoPanel: undefined,\n        forwardMessage: null,\n        contextMenuVisible: false,\n        forwardDialogVisible: false,\n        alertVisible: false\n      });\n      // Navigate to contacts or login view\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic('', null));\n    }\n  }\n\n  // Check if a newer version of TinodeWeb app is available at the server.\n  checkForAppUpdate(reg) {\n    reg.onupdatefound = _ => {\n      const installingWorker = reg.installing;\n      installingWorker.onstatechange = _ => {\n        if (installingWorker.state == 'installed' && navigator.serviceWorker.controller) {\n          const msg = <>\n            <FormattedMessage id=\"update_available\"\n              defaultMessage=\"Update available.\"\n              description=\"Message shown when an app update is available.\" /> <a href=\"\">\n              <FormattedMessage id=\"reload_update\"\n                defaultMessage=\"Reload\"\n                description=\"Call to action to reload application when update is available.\" />\n            </a>.</>;\n          this.handleError(msg, 'info');\n        }\n      }\n    }\n  }\n\n  // Handle for hash navigation (hashchange) event: update state.\n  handleHashRoute() {\n    const hash = HashNavigation.parseUrlHash(window.location.hash);\n    // Start with panel parameters.\n    const newState = {\n      infoPanel: hash.params.info,\n      newTopicTabSelected: hash.params.tab\n    };\n\n    if (hash.path && hash.path.length > 0) {\n      // Left-side panel selector.\n      if (['acc_general','archive','blocked','contacts','cred','crop','edit','general',\n          'newtpk','notif','register','reset','security','settings','support','wallpapers',\n          ''].includes(hash.path[0])) {\n        newState.sidePanelSelected = hash.path[0];\n      } else {\n        console.warn(\"Unknown sidepanel view\", hash.path[0]);\n      }\n\n      // Topic for MessagesView selector.\n      let topicName = hash.path[1] || null;\n      if (topicName != this.state.topicSelected) {\n        if (!Tinode.topicType(topicName)) {\n          // Clear invalid topic name and hide messages view on mobile.\n          topicName = null;\n          newState.mobilePanel = 'sidepanel';\n        } else {\n          // Topic valid: show messages view on mobile.\n          newState.mobilePanel = 'topic-view';\n        }\n        Object.assign(newState, {\n          topicSelected: topicName,\n          topicSelectedAcs: this.tinode.getTopicAccessMode(topicName)\n        });\n      }\n    } else {\n      // Empty hashpath\n      Object.assign(newState, {sidePanelSelected: '', topicSelected: null});\n    }\n\n    // Save credential validation parameters, if available.\n    if (hash.params.method) {\n      newState.credMethod = hash.params.method;\n    }\n    if (hash.params.code) {\n      newState.credCode = hash.params.code;\n    }\n    if (hash.params.token) {\n      newState.credToken = hash.params.token;\n    }\n\n    // Show a message if validation was successful.\n    if (hash.params.cred_done) {\n      Object.assign(newState,\n        TinodeWeb.stateForError(this.props.intl.formatMessage(messages.cred_confirmed_successfully), 'info'));\n    }\n\n    this.setState(newState);\n  }\n\n  handleOnline(online) {\n    if (online) {\n      this.handleError();\n      clearInterval(this.reconnectCountdown);\n      this.tinode.reconnect();\n    } else {\n      this.handleError(this.props.intl.formatMessage(messages.no_connection), 'warn');\n    }\n    this.setState({liveConnection: online});\n  }\n\n  handleVisibilityEvent() {\n    this.setState({applicationVisible: !document.hidden});\n  }\n\n  static stateForError(err, level, action, actionText) {\n    return {\n      errorText: err,\n      errorLevel: level,\n      errorAction: action,\n      errorActionText: actionText,\n      callShouldStart: false,\n    };\n  }\n\n  handleError(err, level, action, actionText) {\n    this.setState(TinodeWeb.stateForError(err, level, action, actionText));\n  }\n\n  // User clicked Login button in the side panel.\n  handleLoginRequest(login, password) {\n    this.setState({\n      loginDisabled: true,\n      login: login,\n      password: password,\n      loadSpinnerVisible: true,\n      autoLogin: true\n    });\n    this.handleError('', null);\n\n    if (this.tinode.isConnected()) {\n      this.doLogin(login, password, null, {meth: this.state.credMethod, resp: this.state.credCode});\n    } else {\n      this.tinode.connect().catch(err => {\n        // Socket error\n        this.setState({loginDisabled: false, autoLogin: false, loadSpinnerVisible: false});\n        this.handleError(err.message, 'err');\n      });\n    }\n\n    if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {\n      // Firefox and Safari: \"The Notification permission may only be requested from inside a\n      // short running user-generated event handler\".\n      this.initFCMessaging();\n    }\n  }\n\n  // Enable or disable saving the password and IndexedDB.\n  handlePersistenceChange(persist) {\n    if (persist) {\n      this.tinode.initStorage().then(_ => {\n        LocalStorageUtil.setObject('keep-logged-in', true);\n        this.setState({persist: true});\n      });\n    } else {\n      this.tinode.clearStorage().then(_ => {\n        LocalStorageUtil.setObject('keep-logged-in', false);\n        this.setState({persist: false});\n      });\n    }\n  }\n\n  // Connection succeeded.\n  handleConnected() {\n    // Just to be sure.\n    clearInterval(this.reconnectCountdown);\n    this.handleError();\n\n    const params = this.tinode.getServerInfo();\n    this.setState({\n      serverVersion: params.ver + ' ' + (params.build ? params.build : 'none'),\n      // \"reqCred\":{\"auth\":[\"email\"]}\n      reqCredMethod: ((params.reqCred || {}).auth || [])[0] || 'email'\n    });\n\n    if (this.state.autoLogin) {\n      this.doLogin(this.state.login, this.state.password, null,\n        {meth: this.state.credMethod, resp: this.state.credCode});\n    }\n  }\n\n  // Called for each auto-reconnect iteration.\n  handleAutoreconnectIteration(sec, prom) {\n    clearInterval(this.reconnectCountdown);\n\n    if (sec < 0) {\n      // Clear error\n      this.handleError();\n      return;\n    }\n\n    if (prom) {\n      // Reconnecting now\n      prom.then(_ => {\n        // Reconnected: clear error\n        this.handleError();\n      }).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n      return;\n    }\n\n    const {formatMessage} = this.props.intl;\n    let count = sec / 1000;\n    count = count | count;\n    this.reconnectCountdown = setInterval(_ => {\n      if (count < -10) {\n        // Count could go to negative if computer woke up from sleep.\n        clearInterval(this.reconnectCountdown);\n        this.tinode.reconnect();\n        return;\n      }\n\n      const fmtTime = (count > 99) ? secondsToTime(count) : count;\n      this.handleError(\n        formatMessage(messages.reconnect_countdown, {seconds: fmtTime}),\n        'warn',\n        _ => {\n          clearInterval(this.reconnectCountdown);\n          this.tinode.reconnect();\n        },\n        formatMessage(messages.reconnect_now)\n      );\n      count -= 1;\n    }, 1000);\n  }\n\n  // Connection lost\n  handleDisconnect(err) {\n    this.setState({\n      connected: false,\n      ready: false,\n      topicSelectedOnline: false,\n      errorText: err && err.message ? err.message : \"Disconnected\",\n      errorLevel: err && err.message ? 'err' : 'warn',\n      loginDisabled: false,\n      contextMenuVisible: false,\n      forwardDialogVisible: false,\n      serverVersion: \"no connection\"\n    });\n  }\n\n  doLogin(login, password, tmpToken, cred) {\n    if (this.tinode.isAuthenticated()) {\n      // Already logged in. Go to default screen.\n      HashNavigation.navigateTo('');\n      return;\n    }\n\n    let token = tmpToken || (this.tinode.getAuthToken() || {}).token;\n    if (!(login && password) && !token) {\n      // No login credentials provided.\n      // Make sure we are on the login page.\n      HashNavigation.navigateTo('');\n      this.setState({loginDisabled: false});\n      return;\n    }\n\n    // Sanitize and package credentail.\n    cred = Tinode.credential(cred);\n    // May be disconnected.\n    let connectionPromise = this.tinode.isConnected() ? Promise.resolve() : this.tinode.connect();\n    // Try to login with login/password. If they are not available, try token; if no token, ask for login/password.\n    let loginPromise;\n    if (login && password) {\n      token = null;\n      this.setState({password: null});\n      loginPromise = connectionPromise.then(_ => this.tinode.loginBasic(login, password, cred));\n    } else {\n      loginPromise = connectionPromise.then(_ => this.tinode.loginToken(token, cred));\n    }\n\n    loginPromise.then(ctrl => {\n      if (ctrl.code >= 300 && ctrl.text === 'validate credentials') {\n        this.setState({loadSpinnerVisible: false});\n        if (cred) {\n          this.handleError(this.props.intl.formatMessage(messages.code_doesnot_match), 'warn');\n        }\n        TinodeWeb.navigateToCredentialsView(ctrl.params);\n      } else {\n        this.handleLoginSuccessful();\n      }\n    }).catch(err => {\n      const autoLogin = err.code >= 500;\n      // Connection or login failed, report error.\n      this.setState({\n        loginDisabled: false,\n        credMethod: undefined,\n        credCode: undefined,\n        loadSpinnerVisible: false,\n        autoLogin: autoLogin\n      });\n      this.handleError(err.message, 'err');\n      console.warn(\"Login failed\", err);\n      if (!autoLogin) {\n        if (token) {\n          this.handleLogout();\n        }\n        HashNavigation.navigateTo('');\n      }\n    });\n  }\n\n  static navigateToCredentialsView(params) {\n    const parsed = HashNavigation.parseUrlHash(window.location.hash);\n    parsed.path[0] = 'cred';\n    parsed.params['method'] = params.cred[0];\n    parsed.params['token'] = params.token;\n    parsed.params['code'] = params.code;\n    HashNavigation.navigateTo(HashNavigation.composeUrlHash(parsed.path, parsed.params));\n  }\n\n  handleLoginSuccessful() {\n    this.handleError();\n\n    // Refresh authentication token.\n    if (LocalStorageUtil.getObject('keep-logged-in')) {\n      LocalStorageUtil.setObject('auth-token', this.tinode.getAuthToken());\n    }\n\n    // On reconnect, requestedTopic is undefined but topicSelected may still be set.\n    // Preserve the open topic so it gets restored after re-login.\n    const goToTopic = this.state.requestedTopic || this.state.topicSelected;\n    // Logged in fine, subscribe to 'me' attaching callbacks from the contacts view.\n    const me = this.tinode.getMeTopic();\n    me.onMetaDesc = this.tnMeMetaDesc;\n    me.onContactUpdate = this.tnMeContactUpdate;\n    me.onSubsUpdated = this.tnMeSubsUpdated;\n    this.setState({\n      connected: true,\n      credMethod: undefined,\n      credCode: undefined,\n      credToken: undefined,\n      myUserId: this.tinode.getCurrentUserID(),\n      autoLogin: true,\n      requestedTopic: undefined,\n    });\n    // Subscribe, fetch topic desc, the list of subscriptions. Messages are not fetched.\n    me.subscribe(\n      me.startMetaQuery().\n        withLaterSub().\n        withDesc().\n        withTags().\n        withCred().\n        build()\n      ).catch(err => {\n        this.tinode.disconnect();\n        localStorage.removeItem('auth-token');\n        this.handleError(err.message, 'err');\n        HashNavigation.navigateTo('');\n      }).finally(_ => {\n        this.setState({loadSpinnerVisible: false});\n      });\n    let urlHash = HashNavigation.setUrlSidePanel(window.location.hash, 'contacts');\n    if (goToTopic) {\n      urlHash = HashNavigation.setUrlTopic(urlHash, goToTopic);\n    }\n    HashNavigation.navigateTo(urlHash);\n  }\n\n  tnMeMetaDesc(desc) {\n    if (!desc) {\n      return;\n    }\n\n    if (desc.public) {\n      this.setState({\n        sidePanelTitle: desc.public.fn,\n        sidePanelAvatar: makeImageUrl(desc.public.photo)\n      });\n    }\n\n    if (desc.trusted) {\n      const badges = [];\n      for (const [key, val] of Object.entries(desc.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n      this.setState({\n        myTrustedBadges: badges,\n      });\n    }\n\n    if (desc.acs) {\n      this.setState({\n        incognitoMode: !desc.acs.isPresencer()\n      });\n    }\n\n    if (TinodeWeb.checkIfPinsUpdated(desc, this.state.chatList)) {\n      this.resetContactList();\n    }\n  }\n\n  // Reactions to updates to the contact list.\n  tnMeContactUpdate(what, cont) {\n    if (what == 'on' || what == 'off') {\n      this.resetContactList();\n      if (this.state.topicSelected == cont.topic) {\n        this.setState({topicSelectedOnline: (what == 'on')});\n      }\n    } else if (what == 'read') {\n      this.resetContactList();\n    } else if (what == 'msg' && cont) {\n      // Check if the topic is archived. If so, don't play a sound.\n      const topic = this.tinode.getTopic(cont.topic);\n      const archived = topic && topic.isArchived();\n\n      // New message received. Maybe the message is from the current user, then unread is 0.\n      if (cont.unread > 0 && this.state.messageSounds && !archived) {\n        // Skip update if the topic is currently open, otherwise the badge will annoyingly flash.\n        if (document.hidden || this.state.topicSelected != cont.topic) {\n          POP_SOUND.play().catch(_ => {\n            // play() throws if the user did not click the app first: https://goo.gl/xX8pDD.\n          });\n        }\n      }\n      // Reorder contact list to use possibly updated 'touched'.\n      this.resetContactList();\n    } else if (what == 'recv') {\n      // Explicitly ignoring \"recv\" -- it causes no visible updates to contact list.\n    } else if (what == 'gone' || what == 'unsub') {\n      // Topic deleted or user unsubscribed. Remove topic from view.\n      // If the currently selected topic is gone, clear the selection.\n      if (this.state.topicSelected == cont.topic) {\n        this.handleTopicSelected(null);\n      }\n      // Redraw without the deleted topic.\n      this.resetContactList();\n    } else if (what == 'acs') {\n      // Permissions changed. If it's for the currently selected topic,\n      // update the views.\n      if (this.state.topicSelected == cont.topic) {\n        this.setState({topicSelectedAcs: cont.acs});\n      }\n    } else if (what == 'del') {\n      // TODO: messages deleted (hard or soft) -- update pill counter.\n    } else if (what == 'upd' || what == 'call') {\n      // upd, call - handled by the SDK. Explicitly ignoring here.\n    } else {\n      // TODO(gene): handle other types of notifications:\n      // * ua -- user agent changes (maybe display a pictogram for mobile/desktop).\n      console.info(\"Unsupported (yet) presence update:\", what, \"in\", (cont || {}).topic);\n    }\n  }\n\n  tnMeSubsUpdated(unused) {\n    this.resetContactList();\n  }\n\n  // Merge search results and contact list to create a single flat\n  // list of known contacts for GroupManager to use.\n  static prepareSearchableContacts(chatList, foundContacts) {\n    const merged = {};\n\n    // For chatList topics merge only p2p topics and convert them to the\n    // same format as foundContacts.\n    for (const c of chatList) {\n      if (Tinode.isP2PTopicName(c.topic)) {\n          merged[c.topic] = {\n            user: c.topic,\n            updated: c.updated,\n            public: c.public,\n            private: c.private,\n            acs: c.acs\n          };\n      }\n    }\n\n    // Add all foundCountacts if they have not been added already.\n    for (const c of foundContacts) {\n      if (!merged[c.user]) {\n        merged[c.user] = c;\n      }\n    }\n\n    return Object.values(merged);\n  }\n\n  resetContactList() {\n    const newState = {\n      chatList: []\n    };\n\n    if (!this.state.ready) {\n      newState.ready = true;\n    }\n\n    const me = this.tinode.getMeTopic();\n    me.contacts(c => {\n      if (!c.topic && !c.user) {\n        // Contacts expect c.topic to be set.\n        c.topic = c.name;\n      }\n\n      newState.chatList.push(c);\n      if (this.state.topicSelected == c.topic) {\n        newState.topicSelectedOnline = c.online;\n        newState.topicSelectedAcs = c.acs;\n      }\n    });\n\n    const past = new Date(0);\n    newState.chatList.sort((a, b) => {\n      // Pinned topics take precedence.\n      const pins = me.pinnedTopicRank(b.topic) - me.pinnedTopicRank(a.topic);\n      // Then sort by last touched time.\n      return pins != 0 ? pins : (b.touched || past).getTime() - (a.touched || past).getTime();\n    });\n\n    // Merge search results and chat list.\n    newState.searchableContacts = TinodeWeb.prepareSearchableContacts(newState.chatList, this.state.searchResults);\n    this.setState(newState);\n  }\n\n  static checkIfPinsUpdated(me, chatList) {\n    for (let i = 0; i < chatList.length; i++) {\n      const c = chatList[i];\n      if (!!me.pinnedTopicRank(c.topic) != c.pinned) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /* Fnd topic: find contacts by tokens */\n  tnInitFind() {\n    const fnd = this.tinode.getFndTopic();\n    fnd.onSubsUpdated = this.tnFndSubsUpdated;\n    if (fnd.isSubscribed()) {\n      this.tnFndSubsUpdated();\n    } else {\n      fnd.subscribe(fnd.startMetaQuery().withSub().build()).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n    }\n  }\n\n  tnFndSubsUpdated() {\n    const foundContacts = [];\n    // Don't attempt to create P2P topics which already exist. Server will reject the duplicates.\n    this.tinode.getFndTopic().contacts((s) => {\n      foundContacts.push(s);\n    });\n    this.setState({\n      searchResults: foundContacts,\n      searchableContacts: TinodeWeb.prepareSearchableContacts(this.state.chatList, foundContacts)\n    });\n  }\n\n  /** Called when the user enters a contact into the contact search field in the NewAccount panel\n    @param query {Array} is an array of contacts to search for\n   */\n  handleSearchContacts(query) {\n    const fnd = this.tinode.getFndTopic();\n    fnd.setMeta({desc: {public: query}})\n      .then(_ => fnd.getMeta(fnd.startMetaQuery().withSub().build()))\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  // User clicked on a topic in the side panel or deleted a topic.\n  handleTopicSelected(topicName) {\n    // Clear newTopicParams after use.\n    if (this.state.newTopicParams && this.state.newTopicParams._topicName != topicName) {\n      this.setState({\n        newTopicParams: null\n      });\n    }\n\n    if (topicName) {\n      this.setState({\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'topic-view',\n        infoPanel: undefined\n      });\n      // Different topic selected.\n      if (this.state.topicSelected != topicName) {\n        this.setState({\n          topicSelectedOnline: this.tinode.isTopicOnline(topicName),\n          topicSelectedAcs: this.tinode.getTopicAccessMode(topicName),\n          forwardMessage: null\n        });\n        HashNavigation.navigateTo(HashNavigation.setUrlTopic('', topicName));\n      }\n    } else {\n      // Currently selected contact deleted\n      this.setState({\n        topicSelected: null,\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'sidepanel',\n        topicSelectedOnline: false,\n        topicSelectedAcs: null,\n        infoPanel: undefined,\n        forwardMessage: null\n      });\n\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic('', null));\n    }\n  }\n\n  // In mobile view user requested to show sidepanel\n  handleHideMessagesView() {\n    this.setState({\n      mobilePanel: 'sidepanel'\n    });\n    HashNavigation.navigateTo(HashNavigation.setUrlTopic(window.location.hash, null));\n  }\n\n  // User is sending a message, either plain text or a drafty object, possibly\n  // with attachments.\n  //  - msg - Drafty message with content\n  //  - promise - Promise to be resolved when the upload is completed\n  //  - uploadCompletionPromise - for tracking progress\n  //  - head - head dictionary to be attached to the message\n  handleSendMessage(msg, uploadCompletionPromise, uploader, head) {\n    const topic = this.tinode.getTopic(this.state.topicSelected);\n    return this.sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head);\n  }\n\n  sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head) {\n    msg = topic.createMessage(msg, false);\n    // The uploader is used to show progress.\n    msg._uploader = uploader;\n\n    if (head) {\n      msg.head = Object.assign(msg.head || {}, head);\n    }\n\n    const completion = [];\n    if (uploadCompletionPromise) {\n      completion.push(uploadCompletionPromise);\n    }\n\n    if (!topic.isSubscribed()) {\n      // Topic is not subscribed yet. Subscribe.\n      const subscribePromise =\n        topic.subscribe()\n          .then(_ => {\n            // If there are unsent messages (except video call messages),\n            // try sending them now. Unsent video call messages will be dropped.\n            let calls = [];\n            topic.queuedMessages(pub => {\n              if (pub._sending || pub.seq == msg.seq) {\n                return;\n              }\n              if (pub.head && pub.head.webrtc) {\n                // Filter out unsent video call messages.\n                calls.push(pub.seq);\n                return;\n              }\n              if (topic.isSubscribed()) {\n                topic.publishMessage(pub);\n              }\n            });\n            if (calls.length > 0) {\n              topic.delMessagesList(calls, true);\n            }\n          });\n      completion.push(subscribePromise);\n    }\n\n    // TODO: check if return is required.\n    return topic.publishDraft(msg, Promise.all(completion))\n      .then(ctrl => {\n        if (topic.isArchived()) {\n          topic.archive(false);\n        }\n        return ctrl;\n      })\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleNewChatInvitation(topicName, action) {\n    const topic = this.tinode.getTopic(topicName);\n    let response = null;\n    switch (action) {\n      case 'accept':\n        // Accept given permissions.\n        const mode = topic.getAccessMode().getGiven();\n        response = topic.setMeta({sub: {mode: mode}});\n        if (topic.isP2PType()) {\n          // For P2P topics change 'given' permission of the peer too.\n          // In p2p topics the other user has the same name as the topic.\n          response = response.then(_ => topic.setMeta({sub: {user: topicName, mode: mode}}));\n        }\n        break;\n      case 'delete':\n        // Ignore invitation by deleting it.\n        response = topic.delTopic(true);\n        break;\n      case 'block':\n        // Ban the topic making futher invites impossible.\n        // Just self-ban.\n        const am = topic.getAccessMode().updateWant('-JP').getWant();\n        response = topic.setMeta({sub: {mode: am}}).then(_ => this.handleTopicSelected(null));\n        break;\n      default:\n        console.warn(\"Unknown invitation action\", '\"' + action + '\"\"');\n    }\n\n    if (response != null) {\n      response.catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  // User chose a Sign Up menu item.\n  handleNewAccount() {\n    this.handleError();\n\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash, 'register'));\n  }\n\n  // Actual registration of a new account.\n  handleNewAccountRequest(login_, password_, public_, cred_, tags_) {\n    // Clear old error, if any.\n    this.handleError();\n\n    this.tinode.connect(this.state.serverAddress)\n      .then(_ => {\n        let attachments;\n        if (public_ && public_.photo && public_.photo.ref) {\n          attachments = [public_.photo.ref];\n        }\n        return this.tinode.createAccountBasic(login_, password_,\n          {public: public_, tags: tags_, cred: Tinode.credential(cred_), attachments: attachments});\n      }).then(ctrl => {\n        if (ctrl.code >= 300 && ctrl.text == 'validate credentials') {\n          TinodeWeb.navigateToCredentialsView(ctrl.params);\n        } else {\n          this.handleLoginSuccessful(this);\n        }\n      }).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n  }\n\n  handleToggleIncognitoMode(on) {\n    // Make state undefined.\n    this.setState({incognitoMode: null});\n\n    const me = this.tinode.getMeTopic();\n    const am = me.getAccessMode().updateWant(on ? '-P' : '+P').getWant();\n    me.setMeta({sub: {mode: am}}).catch(err => {\n      // Request failed, keep existing state.\n      this.setState({incognitoMode: !on});\n      this.handleError(err.message, 'err');\n    });\n  }\n\n  // Manual change of color scheme: 'dark', 'light', 'auto'.\n  handleChangeColorSchema(schema) {\n    this.setState({colorSchema: schema});\n    LocalStorageUtil.updateObject('settings', {colorSchema: schema});\n    document.documentElement.style.colorScheme = schema == 'auto' ? 'light dark' : schema;\n    this.applyColorSchema(schema, this.state.systemColorSchema, this.state.wallpaperSize);\n  }\n\n  // System color scheme has changed.\n  handleColorSchemeChange(event) {\n    const systemSchema = event.matches ? 'dark' : 'light';\n    this.setState({systemColorSchema: systemSchema});\n    this.applyColorSchema(this.state.colorSchema, systemSchema, this.state.wallpaperSize);\n  }\n\n  applyColorSchema(schema, systemSchema, size) {\n    const effectiveSchema = schema == 'auto' ? systemSchema : schema;\n    document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');\n    document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');\n  }\n\n  handleSelectWallpapers() {\n    this.handleError();\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash, 'wallpapers'));\n  }\n\n  applyWallpaperSettings(wallpaper, size, blur, effectiveSchema) {\n    document.documentElement.style.setProperty('--wallpaper-url', `url('${wallpaper}')`);\n    document.documentElement.style.setProperty('--wallpaper-repeat', size ? 'repeat' : 'no-repeat');\n    document.documentElement.style.setProperty('--wallpaper-blur', size ? '0px' : `${blur}px`);\n    document.documentElement.style.setProperty('--wallpaper-size', size ? `${size}px` : 'cover');\n    document.documentElement.style.setProperty('--wallpaper-position', size ? 'unset' : 'center');\n    document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');\n    document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');\n  }\n\n  handleWallpaperSelected(wallpaper, size, blur) {\n    this.handleError();\n    LocalStorageUtil.updateObject('settings', {wallpaper: wallpaper, wallpaperSize: size, wallpaperBlur: blur});\n    this.setState({wallpaper: wallpaper, wallpaperSize: size, wallpaperBlur: blur});\n    this.applyWallpaperSettings(wallpaper, size, blur,\n      this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);\n  }\n\n  handleChangeTextSize(size) {\n    this.setState({textSize: size | 0});\n    LocalStorageUtil.updateObject('settings', {textSize: size});\n    document.documentElement.style.setProperty('--message-text-size', `${size}pt`);\n  }\n\n  handleSendOnEnter(option) {\n    this.setState({sendOnEnter: option});\n    LocalStorageUtil.updateObject('settings', {sendOnEnter: option});\n  }\n\n  handleUpdateAccountTagsRequest(_, tags) {\n    this.tinode.getMeTopic().setMeta({tags: tags})\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  // User chose Settings menu item.\n  handleSettings() {\n    this.handleError();\n\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash,\n      this.state.myUserId ? 'edit' : 'settings'));\n  }\n\n  // User updated global parameters.\n  handleGlobalSettings(settings) {\n    const serverAddress = settings.serverAddress || this.state.serverAddress;\n    const transport = settings.transport || this.state.transport;\n    const secureConnection = settings.secureConnection === undefined ?\n      this.state.secureConnection : settings.secureConnection;\n    if (this.tinode) {\n      this.tinode.clearStorage();\n      this.tinode.onDisconnect = undefined;\n      this.tinode.disconnect();\n    }\n    this.tinode = TinodeWeb.tnSetup(serverAddress, secureConnection, transport,\n      this.props.intl.locale, LocalStorageUtil.getObject('keep-logged-in'));\n    this.tinode.onConnect = this.handleConnected;\n    this.tinode.onDisconnect = this.handleDisconnect;\n    this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n    this.tinode.onInfoMessage = this.handleInfoMessage;\n    this.tinode.onDataMessage = this.handleDataMessage;\n\n    this.setState({\n      serverAddress: serverAddress,\n      transport: transport,\n      secureConnection: secureConnection,\n    });\n    LocalStorageUtil.setObject('settings', {\n      serverAddress: serverAddress,\n      transport: transport,\n      secureConnection: secureConnection,\n    });\n\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash, ''));\n  }\n\n  // User chose 'Archived chats'.\n  handleShowArchive() {\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash,\n      this.state.myUserId ? 'archive' : ''));\n  }\n\n  // User viewes 'Blocked chats'.\n  handleShowBlocked() {\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash,\n      this.state.myUserId ? 'blocked' : ''));\n  }\n\n  toggleFCMToken(enabled) {\n    if (enabled) {\n      this.setState({desktopAlerts: null});\n      if (!this.state.firebaseToken) {\n        this.initFCMessaging();\n      } else {\n        this.setState({desktopAlerts: true});\n        if (LocalStorageUtil.getObject('keep-logged-in')) {\n          LocalStorageUtil.updateObject('settings', {desktopAlerts: true});\n        }\n      }\n    } else if (this.state.firebaseToken && this.fcm) {\n      firebaseDelToken(this.fcm).catch(err => {\n        console.error(\"Unable to delete token.\", err);\n      }).finally(_ => {\n        LocalStorageUtil.updateObject('settings', {desktopAlerts: false});\n        localStorage.removeItem('firebase-token');\n        this.setState({desktopAlerts: false, firebaseToken: null});\n        // Inform the server that the token was deleted.\n        this.tinode.setDeviceToken(null);\n      });\n    } else {\n      this.setState({desktopAlerts: false, firebaseToken: null});\n      LocalStorageUtil.updateObject('settings', {desktopAlerts: false});\n    }\n  }\n\n  handleToggleMessageSounds(enabled) {\n    this.setState({messageSounds: enabled});\n    LocalStorageUtil.updateObject('settings', {\n      messageSoundsOff: !enabled\n    });\n  }\n\n  handleCredAdd(method, value) {\n    const me = this.tinode.getMeTopic();\n    me.setMeta({cred: {meth: method, val: value}})\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleCredDelete(method, value) {\n    const me = this.tinode.getMeTopic();\n    me.delCredential(method, value)\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleCredConfirm(method, response) {\n    TinodeWeb.navigateToCredentialsView({cred: [method], code: response});\n  }\n\n  // User clicked Cancel button in Setting or Sign Up panel.\n  handleSidepanelCancel() {\n    const parsed = HashNavigation.parseUrlHash(window.location.hash);\n    let path = '';\n    if (['security','support','general','notif','acc_general'].includes(parsed.path[0])) {\n      path = 'edit';\n    } else if ('crop' == parsed.path[0]) {\n      path = 'general';\n    } else if ('blocked' == parsed.path[0]) {\n      path = 'security';\n    } else if ('wallpapers' == parsed.path[0]) {\n      path = 'acc_general';\n    } else if (this.state.myUserId) {\n      path = 'contacts';\n    }\n    parsed.path[0] = path;\n    if (parsed.params) {\n      delete parsed.params.code;\n      delete parsed.params.method;\n      delete parsed.params.tab;\n      delete parsed.params.scheme;\n      delete parsed.params.token;\n    }\n    HashNavigation.navigateTo(HashNavigation.composeUrlHash(parsed.path, parsed.params));\n    this.setState({errorText: '', errorLevel: null});\n  }\n\n  // Sidepanel navigator. No need to bind to 'this'.\n  basicNavigator(hash) {\n    HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash, hash));\n  }\n\n  // Topic info navigator. No need to bind to 'this'.\n  infoNavigator(hash) {\n    HashNavigation.navigateTo(HashNavigation.setUrlInfoPanel(window.location.hash, hash));\n  }\n\n  // Request to start a topic, new or selected from search results, or \"by ID\".\n  handleStartTopicRequest(topicName, newTopicParams, isChannel) {\n    // Check if topic is indeed new. If not, launch it.\n    if (topicName && this.tinode.isTopicCached(topicName)) {\n      this.handleTopicSelected(topicName);\n      return;\n    }\n\n    const params = {};\n    if (Tinode.isP2PTopicName(topicName)) {\n      // Because we are initiating the subscription, set 'want' to all permissions.\n      params.sub = {mode: DEFAULT_P2P_ACCESS_MODE};\n      // Give the other user all permissions too.\n      params.desc = {defacs: {auth: DEFAULT_P2P_ACCESS_MODE}};\n    } else {\n      topicName = topicName || this.tinode.newGroupTopicName(isChannel);\n      if (newTopicParams) {\n        params.desc = {public: newTopicParams.public, private: {comment: newTopicParams.private}};\n        params.tags = newTopicParams.tags;\n      }\n    }\n    params._topicName = topicName;\n    this.setState({newTopicParams: params}, _ => {this.handleTopicSelected(topicName)});\n  }\n\n  // New topic was created, here is the new topic name.\n  handleNewTopicCreated(oldName, newName) {\n    let nextState = {};\n    if (this.state.callShouldStart) {\n      nextState = {callState: CALL_STATE_IN_PROGRESS, callShouldStart: false};\n    }\n    if (this.state.topicSelected == oldName && oldName != newName) {\n      // If the current URl contains the old topic name, replace it with new.\n      // Update the name of the selected topic first so the navigator doen't clear\n      // the state.\n      nextState.topicSelected = newName;\n    }\n    this.setState(nextState, _ => {\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic('', newName));\n    });\n  }\n\n  handleTopicUpdateRequest(topicName, pub, priv, defacs) {\n    this.handleError();\n\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      const params = {};\n      let attachments;\n      if (pub) {\n        if (pub.photo) {\n          if (pub.photo.ref && pub.photo.ref != Tinode.DEL_CHAR) {\n            attachments = [pub.photo.ref];\n          } else if (!pub.photo.data || pub.photo.data == Tinode.DEL_CHAR) {\n            pub.photo = Tinode.DEL_CHAR;\n          }\n        }\n        params.public = pub;\n      }\n\n      if (typeof priv == 'string') {\n        params.private = (priv === Tinode.DEL_CHAR) ?\n          Tinode.DEL_CHAR : {comment: priv};\n      }\n      if (defacs) {\n        params.defacs = defacs;\n      }\n      topic.setMeta({desc: params, attachments: attachments})\n        .catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  handleUnarchive(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      topic.archive(false).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  handleUpdatePasswordRequest(password)  {\n    this.handleError();\n\n    if (password) {\n      this.tinode.updateAccountBasic(null, this.tinode.getCurrentLogin(), password)\n        .catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  handleChangePermissions(topicName, mode, uid) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      const am = topic.getAccessMode();\n      if (uid) {\n        am.updateGiven(mode);\n        mode = am.getGiven();\n      } else {\n        am.updateWant(mode);\n        mode = am.getWant();\n      }\n      topic.setMeta({sub: {user: uid, mode: mode}})\n        .catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  handleTagsUpdateRequest(topicName, tags) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      topic.setMeta({tags: tags})\n        .catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n\n  handleLogout() {\n    updateFavicon(0);\n\n    // Remove stored data.\n    localStorage.removeItem('auth-token');\n    localStorage.removeItem('firebase-token');\n    localStorage.removeItem('settings');\n    if (this.state.firebaseToken) {\n      firebaseDelToken(this.fcm);\n    }\n\n    // Reset color scheme.\n    document.documentElement.style.colorScheme = DEFAULT_COLOR_SCHEME == 'auto' ? 'light dark' : DEFAULT_COLOR_SCHEME;\n    document.documentElement.style.setProperty('--message-text-size', `${DEFAULT_TEXT_SIZE}pt`);\n\n    clearInterval(this.reconnectCountdown);\n\n    let cleared;\n    if (this.tinode) {\n      cleared = this.tinode.clearStorage();\n      this.tinode.onDisconnect = undefined;\n      this.tinode.disconnect();\n    } else {\n      cleared = Promose.resolve();\n    }\n    this.setState(this.getBlankState());\n\n    cleared.then(_ => {\n      this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, isSecureConnection(),\n        this.state.transport, this.props.intl.locale, LocalStorageUtil.getObject('keep-logged-in'), _ => {\n          this.tinode.onConnect = this.handleConnected;\n          this.tinode.onDisconnect = this.handleDisconnect;\n          this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n          this.tinode.onInfoMessage = this.handleInfoMessage;\n          this.tinode.onDataMessage = this.handleDataMessage;\n          HashNavigation.navigateTo('');\n        })\n    });\n  }\n\n  handleDeleteAccount() {\n    this.tinode.delCurrentUser(true).then(_ => {\n      this.handleLogout();\n    });\n  }\n\n  handleDeleteTopicRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    // Request to hard-delete topic.\n    topic.delTopic(true).then(_ => {\n      // Hide MessagesView and InfoView panels.\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic(window.location.hash, ''));\n    }).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n\n  handleDeleteMessagesRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    // Request hard-delete all messages.\n    topic.delMessagesAll(true)\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleLeaveUnsubRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    topic.leave(true).then(_ => {\n      // Hide MessagesView and InfoView panels.\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic(window.location.hash, ''));\n    }).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n\n  handleBlockTopicRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    topic.updateMode(null, '-JP')\n      .then(_ => {\n        // Hide MessagesView and InfoView panels.\n        HashNavigation.navigateTo(HashNavigation.setUrlTopic(window.location.hash, ''));\n      })\n      .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleReportTopic(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    // Publish spam report.\n    this.tinode.report('report', topicName);\n\n    // Remove J and P permissions.\n    topic.updateMode(null, '-JP')\n    .then(_ => {\n      // Hide MessagesView and InfoView panels.\n      HashNavigation.navigateTo(HashNavigation.setUrlTopic(window.location.hash, ''));\n    })\n    .catch(err => this.handleError(err.message, 'err'));\n  }\n\n  handleShowContextMenu(params, menuItems) {\n    this.setState({\n      contextMenuVisible: true,\n      contextMenuClickAt: {x: params.x, y: params.y},\n      contextMenuParams: params,\n      contextMenuItems: menuItems || this.defaultTopicContextMenu(params.topicName),\n      contextMenuBounds: this.selfRef.current.getBoundingClientRect()\n    });\n  }\n\n  //\n  handleShowForwardDialog(params) {\n    if (this.state.sidePanelSelected == 'newtpk') {\n      // If the Find panel is active, close it.\n      this.handleSidepanelCancel();\n    }\n    const header = params.userName ? '➦ ' + params.userName : '';\n    const content = typeof params.content == 'string' ? Drafty.init(params.content) : Drafty.forwardedContent(params.content);\n    const preview = Drafty.preview(content, FORWARDED_PREVIEW_LENGTH, true);\n    const msg = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, params.userFrom)), content);\n    const msgPreview = Drafty.quote(header, params.userFrom, preview);\n\n    const head = {\n      forwarded: params.topicName + ':' + params.seq\n    };\n    this.setState({\n      forwardDialogVisible: true,\n      forwardMessage: { head: head, msg: msg, preview: msgPreview }\n    });\n  }\n\n  handleShareTheCard(card) {\n    this.setState({\n      forwardDialogVisible: true,\n      forwardMessage: {\n        content: card,\n        type: card.contentType,\n      }\n    });\n  }\n\n  defaultTopicContextMenu(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n\n    if (topic._deleted) {\n      return [\n        'topic_delete'\n      ];\n    }\n\n    const me = this.tinode.getMeTopic();\n    let muted = false, blocked = false, self_blocked = false, subscribed = false, deleter = false,\n      archived = false, pinned = false, webrtc = false, writer = false, p2p = false, self = false;\n    if (topic) {\n      subscribed = topic.isSubscribed();\n      archived = topic.isArchived();\n      pinned = me.pinnedTopicRank(topicName) > 0;\n\n      const acs = topic.getAccessMode();\n      if (acs) {\n        muted = acs.isMuted();\n        blocked = !acs.isJoiner();\n        self_blocked = !acs.isJoiner('want');\n        deleter = acs.isDeleter();\n        writer = acs.isWriter();\n      }\n    }\n\n    webrtc = writer && !!this.tinode.getServerParam('iceServers');\n    p2p = Tinode.isP2PTopicName(topicName);\n    self = Tinode.isSelfTopicName(topicName);\n\n    return [\n      subscribed ? {\n        title: this.props.intl.formatMessage(messages.menu_item_info),\n        handler: this.handleShowInfoView\n      } : null,\n      subscribed && p2p && webrtc ? {\n        title: this.props.intl.formatMessage(messages.menu_item_audio_call),\n        handler: this.handleStartAudioCall\n      } : null,\n      subscribed && p2p && webrtc ? {\n        title: this.props.intl.formatMessage(messages.menu_item_video_call),\n        handler: this.handleStartVideoCall\n      } : null,\n      subscribed ? 'messages_clear' : null,\n      subscribed && deleter && !self ? 'messages_clear_hard' : null,\n      self ? null : (muted ? (blocked ? null : 'topic_unmute') : 'topic_mute'),\n      self ? null : (self_blocked ? 'topic_unblock' : 'topic_block'),\n      pinned ? 'topic_unpin' : 'topic_pin',\n      archived ? 'topic_restore' : 'topic_archive',\n      'topic_delete'\n    ];\n  }\n\n  handleHideContextMenu() {\n    this.setState({\n      contextMenuVisible: false,\n      contextMenuClickAt: null,\n      contextMenuParams: null,\n      contextMenuBounds: null\n    });\n  }\n\n  handleHideForwardDialog(keepForwardedMessage) {\n    this.setState({\n      forwardDialogVisible: false,\n      forwardMessage: keepForwardedMessage ? this.state.forwardMessage : null\n    });\n  }\n\n  handleContextMenuAction(action, promise, params) {\n    if (action == 'topic_archive') {\n      if (promise && params.topicName && params.topicName == this.state.topicSelected) {\n        promise.then(_ => {\n          this.handleTopicSelected(null);\n        });\n      }\n    } else if (action == 'menu_item_forward') {\n      this.handleShowForwardDialog(params);\n    }\n  }\n\n  handleShowAlert(title, content, onConfirm, confirmText, onReject, rejectText) {\n    this.setState({\n      alertVisible: true,\n      alertParams: {\n        title: title,\n        content: content,\n        onConfirm: onConfirm,\n        confirm: confirmText,\n        onReject: onReject,\n        reject: rejectText\n      }\n    });\n  }\n\n  handleShowInfoView() {\n    HashNavigation.navigateTo(HashNavigation.addUrlParam(window.location.hash, 'info', 'info'));\n    this.setState({infoPanel: 'info'});\n  }\n\n  handleMemberUpdateRequest(topicName, added, removed) {\n    if (!topicName) {\n      return;\n    }\n\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n\n    if (added && added.length > 0) {\n      added.forEach(uid => {\n        topic.invite(uid, null)\n          .catch(err => this.handleError(err.message, 'err'));\n      });\n    }\n\n    if (removed && removed.length > 0) {\n      removed.forEach(uid => {\n        topic.delSubscription(uid)\n          .catch(err => this.handleError(err.message, 'err'));\n      });\n    }\n  }\n\n  handleValidateCredentialsRequest(cred, code, token) {\n    if (this.tinode.isAuthenticated()) {\n      // Adding new email or phone number in account setting.\n      this.tinode.getMeTopic().setMeta({cred: {meth: cred, resp: code}})\n        .then(_ => HashNavigation.navigateTo(HashNavigation.setUrlSidePanel(window.location.hash, 'contacts')))\n        .catch(err => this.handleError(err.message, 'err'));\n    } else {\n      // Credential validation on signup.\n      this.setState({credMethod: cred, credCode: code, credToken: token});\n      this.doLogin(null, null, token, {meth: cred, resp: code});\n    }\n  }\n\n  handlePasswordResetRequest(method, value) {\n    // If already connected, connnect() will return a resolved promise.\n    return this.tinode.connect()\n      .then(_ => this.tinode.requestResetAuthSecret('basic', method, value))\n      .catch(err => {\n        // Socket error\n        this.handleError(err.message, 'err');\n      });\n  }\n\n  handleResetPassword(newPassword, tempAuth) {\n    const secret = base64ReEncode(tempAuth.secret);\n    if (!secret || !tempAuth.scheme) {\n      this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');\n    } else {\n      this.tinode.connect()\n        .then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {scheme: tempAuth.scheme, secret: secret}))\n        .then(_ => {\n          this.handleError(this.props.intl.formatMessage(messages.password_reset_success), 'info');\n          HashNavigation.navigateTo('');\n        })\n        .catch(err => {\n          this.handleError(err.message, 'err');\n        });\n    }\n  }\n\n  handleShowCountrySelector(code, dial, selectedCallback) {\n    this.handleShowAlert(this.props.intl.formatMessage(messages.select_country),\n      <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n        description=\"Message shown when component is loading\"/></div>}>\n        <PhoneCountrySelector\n          selected={code}\n          onSubmit={(c, d) => {\n            this.setState({alertVisible: false});\n            selectedCallback(c, d);\n          }} />\n      </Suspense>,\n      null, null, _ => {}, null);\n  }\n\n  handleStartVideoCall() {\n    this.setState({\n      callTopic: this.state.topicSelected,\n      callState: CALL_STATE_OUTGOING_INITATED,\n      callAudioOnly: false\n    });\n  }\n\n  handleStartAudioCall() {\n    this.setState({\n      callTopic: this.state.topicSelected,\n      callState: CALL_STATE_OUTGOING_INITATED,\n      callAudioOnly: true\n    });\n  }\n\n  handleCallInvite(callTopic, callSeq, callState, audioOnly) {\n    switch (callState) {\n      case CALL_STATE_OUTGOING_INITATED:\n        const head = { webrtc: CALL_HEAD_STARTED, aonly: !!audioOnly };\n        return this.handleSendMessage(Drafty.videoCall(audioOnly), undefined, undefined, head)\n          .then(ctrl => {\n            if (ctrl.code < 200 || ctrl.code >= 300 || !ctrl.params || !ctrl.params.seq) {\n              this.handleCallClose();\n              return ctrl;\n            }\n            this.setState({callSeq: ctrl.params['seq']});\n            return ctrl\n          });\n      case CALL_STATE_IN_PROGRESS:\n        const topic = this.tinode.getTopic(callTopic);\n        if (!topic) {\n          return;\n        }\n        // We've accepted the call. Let the other side know.\n        topic.videoCall('accept', callSeq);\n        break;\n    }\n  }\n\n  handleCallRinging(callTopic, callSeq) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n\n    topic.videoCall('ringing', callSeq);\n  }\n\n  handleCallHangup(callTopic, callSeq) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n\n    topic.videoCall('hang-up', callSeq);\n  }\n\n  handleCallSendOffer(callTopic, callSeq, sdp) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n\n    topic.videoCall('offer', callSeq, sdp);\n  }\n\n  handleCallIceCandidate(callTopic, callSeq, candidate) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n\n    topic.videoCall('ice-candidate', callSeq, candidate);\n  }\n  handleCallSendAnswer(callTopic, callSeq, sdp) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n\n    topic.videoCall('answer', callSeq, sdp);\n  }\n\n  handleCallClose() {\n    if (this.callTimeoutTimer) {\n      clearTimeout(this.callTimeoutTimer);\n    }\n    this.setState({\n      callTopic: undefined,\n      callState: CALL_STATE_NONE,\n      callAudioOnly: undefined\n    });\n  }\n\n  handleCallAccept(topicName, setCallTopic, callSeq) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    if (topic.isSubscribed()) {\n      this.handleTopicSelected(setCallTopic ? topicName : this.state.callTopic);\n      const upd = {\n        callState: CALL_STATE_IN_PROGRESS\n      };\n      if (setCallTopic) {\n        upd.callTopic = topicName;\n        upd.callSeq = callSeq;\n      }\n      this.setState(upd);\n    } else {\n      // We need to switch and subscribe to callTopic first.\n      this.setState({\n        callShouldStart: true,\n      }, _ => this.handleTopicSelected(this.state.callTopic));\n    }\n  }\n\n  handleInfoMessage(info) {\n    if (info.what != 'call') {\n      return;\n    }\n    switch (info.event) {\n      case 'accept':\n        // If another my session has accepted the call.\n        if (Tinode.isMeTopicName(info.topic) && this.tinode.isMe(info.from)) {\n          this.setState({\n            callTopic: null,\n            callState: CALL_STATE_NONE,\n            callSeq: null,\n            callAudioOnly: undefined\n          });\n          return;\n        }\n        if (info.topic == this.state.callTopic) {\n          // Update state.\n          this.setState({callState: CALL_STATE_IN_PROGRESS});\n        }\n        break;\n      case 'hang-up':\n        // Remote hangup.\n        this.handleCallClose();\n        break;\n    }\n  }\n\n  handleDataMessage(data) {\n    if (data.head && data.head.webrtc && data.head.webrtc == CALL_HEAD_STARTED && Tinode.isP2PTopicName(data.topic)) {\n      // If it's a video call invite message.\n      // See if we need to display incoming call UI.\n      const topic = this.tinode.getTopic(data.topic);\n      if (topic) {\n        // Check if a later version of the message exists (which means the call\n        // has been either accepted or finished already).\n        const msg = topic.latestMsgVersion(data.seq) || data;\n        if (msg.head && msg.head.webrtc && msg.head.webrtc == CALL_HEAD_STARTED) {\n          // This is a legit new call.\n          if (data.from != this.state.myUserId) {\n            if (this.state.callState == CALL_STATE_NONE) {\n              // Incoming call.\n              this.setState({\n                callTopic: data.topic,\n                callState: CALL_STATE_INCOMING_RECEIVED,\n                callSeq: data.seq,\n                callAudioOnly: !!msg.head.aonly\n              });\n            } else {\n              // Another call is either in progress or being established.\n              // Reject the incoming call.\n              this.handleCallHangup(data.topic, data.seq);\n            }\n          }\n        }\n      } else {\n        console.warn(\"Received vc data message from unknown topic\", data.topic);\n      }\n    }\n  }\n\n  render() {\n    const colorSchema = this.state.colorSchema !== 'auto' ? this.state.colorSchema : this.state.systemColorSchema;\n    return (\n      <div id=\"app-container\" ref={this.selfRef}>\n        {this.state.contextMenuVisible ?\n          <ContextMenu\n            tinode={this.tinode}\n            bounds={this.state.contextMenuBounds}\n            clickAt={this.state.contextMenuClickAt}\n            params={this.state.contextMenuParams}\n            items={this.state.contextMenuItems}\n            hide={this.handleHideContextMenu}\n            onShowAlert={this.handleShowAlert}\n            onAction={this.handleContextMenuAction}\n            onTopicRemoved={(topicName) => {\n              if (topicName == this.state.topicSelected) {\n                this.handleTopicSelected(null);\n              }\n            }}\n            onError={this.handleError} />\n          :\n          null\n        }\n        {this.state.forwardDialogVisible ?\n          <ForwardDialog\n            tinode={this.tinode}\n            contacts={this.state.chatList}\n            topicSelected={this.state.topicSelected}\n            myUserId={this.state.myUserId}\n\n            hide={this.handleHideForwardDialog}\n            onInitFind={this.tnInitFind}\n            searchResults={this.state.searchResults}\n            onSearchContacts={this.handleSearchContacts}\n            onTopicSelected={this.handleStartTopicRequest}\n          />\n          :\n          null\n        }\n        {this.state.callTopic && this.state.callState == CALL_STATE_INCOMING_RECEIVED ?\n          <CallIncoming\n            tinode={this.tinode}\n            topic={this.state.callTopic}\n            seq={this.state.callSeq}\n            callState={this.state.callState}\n            audioOnly={this.state.callAudioOnly}\n            onClose={this.handleCallClose}\n            onRinging={this.handleCallRinging}\n            onAcceptCall={this.handleCallAccept}\n            onReject={this.handleCallHangup}\n            />\n          :\n          null\n        }\n        {this.state.alertVisible ?\n          <Alert\n            title={this.state.alertParams.title}\n            content={this.state.alertParams.content}\n            onReject={this.state.alertParams.onReject ? (_ => this.setState({alertVisible: false})) : null}\n            reject={this.state.alertParams.reject}\n            onConfirm={this.state.alertParams.onConfirm ?\n              (_ => {this.setState({alertVisible: false}); this.state.alertParams.onConfirm();}) : null}\n            confirm={this.state.alertParams.confirm}\n            /> : null}\n\n        {!this.state.displayMobile || this.state.mobilePanel == 'sidepanel' ?\n          <SidepanelView\n            tinode={this.tinode}\n            connected={this.state.connected}\n            displayMobile={this.state.displayMobile}\n            state={this.state.sidePanelSelected}\n            title={this.state.sidePanelTitle}\n            avatar={this.state.sidePanelAvatar}\n            trustedBadges={this.state.myTrustedBadges}\n            login={this.state.login}\n            persist={this.state.persist}\n            myUserId={this.state.myUserId}\n            loginDisabled={this.state.loginDisabled}\n            loadSpinnerVisible={this.state.loadSpinnerVisible}\n\n            errorText={this.state.errorText}\n            errorLevel={this.state.errorLevel}\n            errorAction={this.state.errorAction}\n            errorActionText={this.state.errorActionText}\n\n            topicSelected={this.state.topicSelected}\n            chatList={this.state.chatList}\n            credMethod={this.state.credMethod}\n            credCode={this.state.credCode}\n            credToken={this.state.credToken}\n\n            transport={this.state.transport}\n            messageSounds={this.state.messageSounds}\n            desktopAlerts={this.state.desktopAlerts}\n            desktopAlertsEnabled={this.state.desktopAlertsEnabled}\n            incognitoMode={this.state.incognitoMode}\n            serverAddress={this.state.serverAddress}\n            secureConnection={this.state.secureConnection}\n            serverVersion={this.state.serverVersion}\n            reqCredMethod={this.state.reqCredMethod}\n            textSize={this.state.textSize}\n            colorSchema={this.state.colorSchema}\n            wallpaper={this.state.wallpaper}\n            wallpaperSize={this.state.wallpaperSize}\n            wallpaperBlur={this.state.wallpaperBlur}\n            systemColorSchema={this.state.systemColorSchema}\n            sendOnEnter={this.state.sendOnEnter}\n\n            onGlobalSettings={this.handleGlobalSettings}\n            onSignUp={this.handleNewAccount}\n            onSettings={this.handleSettings}\n            onNavigate={this.basicNavigator}\n            onLoginRequest={this.handleLoginRequest}\n            onPersistenceChange={this.handlePersistenceChange}\n            onCreateAccount={this.handleNewAccountRequest}\n            onUpdateAccountDesc={this.handleTopicUpdateRequest}\n            onUpdatePassword={this.handleUpdatePasswordRequest}\n            onUpdateAccountTags={this.handleUpdateAccountTagsRequest}\n            onTogglePushNotifications={this.toggleFCMToken}\n            onToggleMessageSounds={this.handleToggleMessageSounds}\n            onToggleIncognitoMode={this.handleToggleIncognitoMode}\n            onChangeColorSchema={this.handleChangeColorSchema}\n            onTextSizeChanged={this.handleChangeTextSize}\n            onSendOnEnterChanged={this.handleSendOnEnter}\n            onSelectWallpapers={this.handleSelectWallpapers}\n            onWallpaperSelected={this.handleWallpaperSelected}\n            onCredAdd={this.handleCredAdd}\n            onCredDelete={this.handleCredDelete}\n            onCredConfirm={this.handleCredConfirm}\n            onTopicSelected={this.handleTopicSelected}\n            onCreateTopic={this.handleStartTopicRequest}\n            onLogout={this.handleLogout}\n            onDeleteAccount={this.handleDeleteAccount}\n            onShowAlert={this.handleShowAlert}\n            onCancel={this.handleSidepanelCancel}\n            onError={this.handleError}\n            onValidateCredentials={this.handleValidateCredentialsRequest}\n            onPasswordResetRequest={this.handlePasswordResetRequest}\n            onResetPassword={this.handleResetPassword}\n            onShowArchive={this.handleShowArchive}\n            onShowBlocked={this.handleShowBlocked}\n            onShowCountrySelector={this.handleShowCountrySelector}\n\n            onInitFind={this.tnInitFind}\n            searchResults={this.state.searchResults}\n            onSearchContacts={this.handleSearchContacts}\n\n            showContextMenu={this.handleShowContextMenu} />\n          : null}\n\n        {!this.state.displayMobile || (this.state.mobilePanel == 'topic-view' && !this.state.infoPanel) ?\n          <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n        description=\"Message shown when component is loading\"/></div>}>\n            <MessagesView\n              tinode={this.tinode}\n              connected={this.state.connected}\n              ready={this.state.ready}\n              online={this.state.topicSelectedOnline}\n              acs={this.state.topicSelectedAcs}\n              displayMobile={this.state.displayMobile}\n              viewportWidth={this.state.viewportWidth}\n              viewportHeight={this.state.viewportHeight}\n              topic={this.state.topicSelected}\n              myUserId={this.state.myUserId}\n              // User public.fn.\n              myUserName={this.state.sidePanelTitle}\n              serverVersion={this.state.serverVersion}\n              serverAddress={this.state.serverAddress}\n              applicationVisible={this.state.applicationVisible}\n              colorSchema={colorSchema}\n              sendOnEnter={this.state.sendOnEnter}\n              wallpaper={this.state.wallpaper}\n\n              forwardMessage={this.state.forwardMessage}\n              onCancelForwardMessage={this.handleHideForwardDialog}\n\n              callTopic={this.state.callTopic}\n              callSeq={this.state.callSeq}\n              callState={this.state.callState}\n              callAudioOnly={this.state.callAudioOnly}\n              onCallHangup={this.handleCallHangup}\n              onAcceptCall={this.handleCallAccept}\n\n              onCallInvite={this.handleCallInvite}\n              onCallSendOffer={this.handleCallSendOffer}\n              onCallIceCandidate={this.handleCallIceCandidate}\n              onCallSendAnswer={this.handleCallSendAnswer}\n\n              errorText={this.state.errorText}\n              errorLevel={this.state.errorLevel}\n              errorAction={this.state.errorAction}\n              errorActionText={this.state.errorActionText}\n\n              newTopicParams={this.state.newTopicParams}\n\n              onHideMessagesView={this.handleHideMessagesView}\n              onError={this.handleError}\n              onNewTopicCreated={this.handleNewTopicCreated}\n              showContextMenu={this.handleShowContextMenu}\n              onChangePermissions={this.handleChangePermissions}\n              onNewChat={this.handleNewChatInvitation}\n              sendMessage={this.handleSendMessage}\n              onVideoCallClosed={this.handleCallClose} />\n            </Suspense>\n          : null}\n\n        {this.state.infoPanel ?\n          <Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n            description=\"Message shown when component is loading\"/></div>}>\n            <InfoView\n              tinode={this.tinode}\n              connected={this.state.connected}\n              displayMobile={this.state.displayMobile}\n              topic={this.state.topicSelected}\n              searchableContacts={this.state.searchableContacts}\n              myUserId={this.state.myUserId}\n              panel={this.state.infoPanel}\n\n              errorText={this.state.errorText}\n              errorLevel={this.state.errorLevel}\n              errorAction={this.state.errorAction}\n              errorActionText={this.state.errorActionText}\n\n              onNavigate={this.infoNavigator}\n              onTopicDescUpdateRequest={this.handleTopicUpdateRequest}\n              onShowAlert={this.handleShowAlert}\n              onChangePermissions={this.handleChangePermissions}\n              onMemberUpdateRequest={this.handleMemberUpdateRequest}\n              onDeleteTopic={this.handleDeleteTopicRequest}\n              onDeleteMessages={this.handleDeleteMessagesRequest}\n              onLeaveTopic={this.handleLeaveUnsubRequest}\n              onBlockTopic={this.handleBlockTopicRequest}\n              onReportTopic={this.handleReportTopic}\n              onShareTheCard={this.handleShareTheCard}\n              onTopicTagsUpdateRequest={this.handleTagsUpdateRequest}\n              onTopicUnArchive={this.handleUnarchive}\n              onInitFind={this.tnInitFind}\n              onError={this.handleError}\n\n              showContextMenu={this.handleShowContextMenu}\n              />\n          </Suspense>\n          :\n          null\n        }\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(TinodeWeb);\n"
  },
  {
    "path": "src/views/topic-common-view.jsx",
    "content": "// View for editing topic parameters (including 'me' topic).\n\nimport React from 'react';\n\nimport TopicDescEdit from '../widgets/topic-desc-edit.jsx';\n\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TopicCommonView extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    const acs = topic.getAccessMode();\n    this.state = {\n      tags: []\n    };\n\n    this.previousTagsUpdated = undefined;\n\n    this.onTagsUpdated = this.onTagsUpdated.bind(this);\n    this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n  }\n\n  // No need to separately handle component mount.\n  componentDidUpdate(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n\n    if (topic.onTagsUpdated != this.onTagsUpdated) {\n      if (topic.getType() == 'grp') {\n        this.previousTagsUpdated = topic.onTagsUpdated;\n        topic.onTagsUpdated = this.onTagsUpdated;\n      } else {\n        this.previousTagsUpdated = undefined;\n      }\n    }\n\n    if (this.state.topic != props.topic) {\n      this.setState({topic: props.topic});\n    }\n  }\n\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onTagsUpdated = this.previousTagsUpdated;\n  }\n\n  // Server informs that the tags have been updated.\n  onTagsUpdated(tags) {\n    this.setState({tags: tags});\n\n    if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {\n      this.previousTagsUpdated(tags);\n    }\n  }\n\n  // Request server to change tags.\n  handleTagsUpdated(tags) {\n    if (!arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\n      this.props.onUpdateTagsRequest(this.props.topic, tags);\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"scrollable-panel\">\n        <TopicDescEdit\n          tinode={this.props.tinode}\n          topic={this.props.topic}\n          onUpdateTopicDesc={this.props.onUpdateTopicDesc}\n          onUpdateTags={this.handleTagsUpdated}\n          onError={this.props.onError} />\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/views/validation-view.jsx",
    "content": "// ValidationView: panel for confirming credentials, like email or phone.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n  phone: {\n    id: 'phone_dative',\n    defaultMessage: 'phone',\n    description: \"Dative case of 'phone', i.e. 'phone' in 'by phone'\",\n  },\n  email: {\n    id: 'email_dative',\n    defaultMessage: 'email',\n    description: \"Dative case of 'email', i.e. 'email' in 'by email'\",\n  }\n});\n\nclass ValidationView extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      code: props.credCode || '',\n      codeReceived: props.credCode\n    };\n\n    this.handleCodeChange = this.handleCodeChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.credCode != prevState.codeReceived) {\n      return {\n        code: nextProps.credCode || '',\n        codeReceived: nextProps.credCode\n      };\n    }\n\n    return prevState;\n  }\n\n  componentDidMount() {\n    // Submit code automatically if it's received from the parent.\n    if (this.props.credCode) {\n      this.props.onSubmit(this.props.credMethod, this.props.credCode, this.props.credToken);\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    // Submit code automatically if it's received from the parent.\n    if (this.state.codeReceived && this.state.code && this.state.code != prevState.code) {\n      this.props.onSubmit(this.props.credMethod, this.state.code, this.props.credToken);\n    }\n  }\n\n\n  handleCodeChange(e) {\n    this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n  }\n\n  handleKeyPress(e) {\n    if (e.key === 'Enter') {\n      this.handleSubmit(e);\n    } else if (e.key == 'Escape') {\n      this.handleCancel(e);\n    }\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.code && this.state.code.trim()) {\n      this.props.onSubmit(this.props.credMethod, this.state.code.trim(), this.props.credToken);\n    }\n  }\n\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel();\n  }\n\n  render() {\n    const { formatMessage } = this.props.intl;\n    const methods = {'email': formatMessage(messages.email), 'tel': formatMessage(messages.phone)};\n    const method = methods[this.props.credMethod] || this.props.credMethod;\n    return (\n      <div className=\"panel-form\">\n        <div className=\"panel-form-row\">\n          <label className=\"small gray\" htmlFor=\"enter-confirmation-code\">\n            <FormattedMessage id=\"enter_confirmation_code_prompt\"\n              defaultMessage=\"Confirmation code\"\n              description=\"Request to enter confirmation code\"\n              values={{method: method}} />\n          </label>\n        </div>\n        <div className=\"panel-form-row\">\n          <FormattedMessage id=\"numeric_confirmation_code_prompt\"\n            defaultMessage=\"Numbers only\" description=\"Prompt for numeric conformation code\">{\n            (numbers_only) => <input type=\"text\" id=\"enter-confirmation-code\"\n              placeholder={numbers_only}\n              value={this.state.code} onChange={this.handleCodeChange}\n              onKeyDown={this.handleKeyPress} required />\n          }</FormattedMessage>\n        </div>\n        <div className=\"dialog-buttons\">\n          <button className=\"secondary\" onClick={this.handleCancel}>\n            <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n          </button>\n          <button className=\"primary\" onClick={this.handleSubmit}>\n            <FormattedMessage id=\"button_confirm\" defaultMessage=\"Confirm\" description=\"Button [Confirm]\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(ValidationView);\n"
  },
  {
    "path": "src/views/wallpapers.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport HashNavigation from '../lib/navigation.js';\nimport { WALLPAPER_DEFAULTS } from '../config.js';\nimport { wallpaperNameFromUrl, wallpaperTypeFromUrl } from '../lib/utils.js';\nimport imageIndex from '../../img/bkg/index.json';\n\nexport default class WallpapersView extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    const type = wallpaperTypeFromUrl(this.props.wallpaper);\n    const name = wallpaperNameFromUrl(this.props.wallpaper);\n    this.state = {\n      tab: type || WALLPAPER_DEFAULTS.type, // currently selected tab: 'patt' | 'img'\n      selectedType: type || WALLPAPER_DEFAULTS.type, // type of the selected wallpaper.\n      wallpaper: name || imageIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index].name,\n      blur: this.props.wallpaperBlur | 0,\n    };\n\n    this.blurValues = [0, 1, 2, 4, 8, 16];\n\n    this.handleTabClick = this.handleTabClick.bind(this);\n    this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);\n    this.handleBlurChanged = this.handleBlurChanged.bind(this);\n    this.hasChanged = this.hasChanged.bind(this);\n  }\n\n  handleTabClick(e) {\n    e.preventDefault();\n    HashNavigation.navigateTo(HashNavigation.addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));\n    this.setState({tab: e.currentTarget.dataset.id});\n  }\n\n  handleWallpaperSelected(e) {\n    let index, type, blur\n    if (!e) {\n      if (!this.hasChanged()) {\n        return;\n      }\n\n      // Restore default.\n      type = WALLPAPER_DEFAULTS.type;\n      index = WALLPAPER_DEFAULTS.index;\n      blur = 0;\n    } else {\n      e.preventDefault();\n      type = this.state.tab;\n      index = e.currentTarget.dataset.id;\n      blur = type == 'patt' ? 0 : this.state.blur;\n    }\n    const fname = imageIndex[type][index].name;\n    const size = type == 'patt' ? imageIndex[type][index].size : 0;\n    this.setState({tab: type, wallpaper: fname, selectedType: type, blur: blur});\n    this.props.onWallpaperSelected(`../${WALLPAPER_DEFAULTS.path}${fname}`, size, this.blurValues[blur]);\n  }\n\n  handleBlurChanged(e) {\n    e.preventDefault();\n    const blur = e.currentTarget.value;\n    this.setState({blur: blur});\n    if (this.state.selectedType == 'img') {\n      // Apply blur to patterns only. Path relative to CSS file.\n      this.props.onWallpaperSelected(`../${WALLPAPER_DEFAULTS.path}${this.state.wallpaper}`, 0, this.blurValues[blur]);\n    }\n  }\n\n  hasChanged() {\n    return this.state.selectedType != WALLPAPER_DEFAULTS.type ||\n      this.state.wallpaper != imageIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index].name ||\n      this.state.blur != 0;\n  }\n\n  render() {\n    return (\n      <div className=\"flex-column\">\n        <div className={`panel-form-row${this.hasChanged() ? ' clean-clickable' : ''}`}>\n          <a className={`flat-button${this.hasChanged() ? '' : ' disabled'}`}\n            onClick={() => this.handleWallpaperSelected(null)}>\n            <i className=\"material-icons\">undo</i>&nbsp;\n            <FormattedMessage id=\"button_restore\" defaultMessage=\"Restore default\" description=\"Reset setting to default\"/>\n          </a>\n        </div>\n        <ul className=\"tabbar\">\n          <li className={this.state.tab === 'patt' ? 'active' : null}>\n            <a href=\"#\" data-id=\"patt\" onClick={this.handleTabClick}>\n              <FormattedMessage id=\"tabtitle_pattern\" defaultMessage=\"pattern\"\n                description=\"Tab title Pattern\" />\n            </a>\n          </li>\n          <li className={this.state.tab === 'img' ? 'active' : null}>\n            <a href=\"#\" data-id=\"img\" onClick={this.handleTabClick}>\n              <FormattedMessage id=\"tabtitle_image\" defaultMessage=\"image\"\n                description=\"Tab title Image\" />\n            </a>\n          </li>\n        </ul>\n        <div id=\"settings-form\" className=\"scrollable-panel\">\n        {this.state.tab === 'patt' ?\n          <div className=\"image-grid\">\n            {imageIndex.patt.map((img, idx) => {\n              const selected = this.state.wallpaper === img.name ? ' selected' : '';\n              const dark = this.props.colorSchema == 'dark' ? 'inverted' : null;\n              return <div key={idx} data-id={idx} className={`image-grid-cell${selected}`}\n                onClick={this.handleWallpaperSelected}>\n                <img src={WALLPAPER_DEFAULTS.path + img.name} alt={img.name} className={dark}\n                  style={{ width: `${img.size}px`, height: `${img.size}px` }}/>\n              </div>\n            })}\n          </div> :\n          <>\n            <div className=\"panel-form-column\">\n              <div className=\"panel-form-row\">\n                <label className=\"small\">\n                  <FormattedMessage id=\"label_blur_wallpaper\" defaultMessage=\"Blur:\"\n                    description=\"Label adjusting blur amount\" />\n                </label>\n              </div>\n              <div className=\"panel-form-row\">\n                <input type=\"range\" id=\"blur\" name=\"blur\" min=\"0\" max=\"5\" step=\"1\"\n                  value={this.state.blur} onChange={this.handleBlurChanged} />\n              </div>\n            </div>\n            <div className=\"image-grid\">\n              {imageIndex.img.map((img, idx) => {\n                const selected = this.state.wallpaper === img.name ? ' selected' : '';\n                return <div key={idx} data-id={idx} className={`image-grid-cell${selected}`}\n                  onClick={this.handleWallpaperSelected}>\n                  <img src={WALLPAPER_DEFAULTS.path + img.pr} alt={img.name} style={{ width: '100%', height: '100%' }}/>\n                </div>\n              })}\n            </div>\n          </>\n        }</div>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/alert.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Alert extends React.PureComponent {\n  render() {\n    return (<div className=\"alert-container\">\n      <div className=\"alert\">\n        <div className=\"title\">{this.props.title}</div>\n        <div className=\"content\">{this.props.content}</div>\n        <div className=\"dialog-buttons\">\n          {this.props.onReject ?\n            <button className=\"outline\" onClick={this.props.onReject}>\n              {this.props.reject || <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />}\n            </button>\n            :\n            null\n          }\n          {this.props.onConfirm ?\n            <button className=\"primary\" onClick={this.props.onConfirm}>\n              {this.props.confirm || <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\"  />}\n            </button>\n            :\n            null\n          }\n        </div>\n      </div>\n    </div>);\n  }\n};\n"
  },
  {
    "path": "src/widgets/attachment.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport FileProgress from './file-progress.jsx';\nimport { bytesToHumanSize } from '../lib/strformat.js';\nimport { isUrlRelative, sanitizeUrl } from '../lib/utils.js';\n\nexport default class Attachment extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      downloader: null,\n      progress: 0\n    };\n\n    this.downloadFile = this.downloadFile.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  downloadFile(url, filename, mimetype) {\n    if (!url) {\n      this.props.onError(\"Invalid download URL '\" + url + \"'\");\n      return;\n    }\n\n    const downloader = this.props.tinode.getLargeFileHelper();\n    this.setState({downloader: downloader});\n    downloader.download(url, filename, mimetype,\n      loaded => this.setState({progress: loaded / this.props.size}),\n      err => this.props.onError(err, 'err')\n    )\n    .then(_ => this.setState({downloader: null, progress: 0}))\n    .catch(err => {\n      if (err) {\n        this.props.onError(\"Error downloading file: \" + err.message, 'err');\n      }\n      this.setState({downloader: null, progress: 0});\n    });\n  }\n\n  handleCancel() {\n    if (this.props.uploading) {\n      this.props.onCancelUpload();\n    } else if (this.state.downloader) {\n      this.state.downloader.cancel();\n    }\n  }\n\n  render() {\n    let filename = this.props.filename || 'file_attachment';\n    if (filename.length > 36) {\n      filename = filename.substr(0, 16) + '...' + filename.substr(-16);\n    }\n    let size = this.props.size > 0 ?\n      <span className=\"small gray\">({bytesToHumanSize(this.props.size)})</span> :\n      null;\n\n    // Detect if the download URL is relative or absolute.\n    // If the URL is relative use LargeFileHelper to attach authentication\n    // credentials to the request.\n    let url, helperFunc;\n    if (!this.props.uploading && !this.state.downloader && isUrlRelative(this.props.downloadUrl)) {\n      // Relative URL. Use download helper.\n      url = '#';\n      helperFunc = (e) => {\n        e.preventDefault();\n        this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);\n      };\n    } else {\n      url = sanitizeUrl(this.props.downloadUrl);\n      helperFunc = null;\n    }\n    const downloadWidget = <><i className=\"material-icons\">file_download</i> <FormattedMessage id=\"save_attachment\"\n      defaultMessage=\"save\" description=\"Call to save an attachment\" /></>;\n    return (\n      <div className=\"attachment\">\n        <div><i className=\"material-icons big gray\">insert_drive_file</i></div>\n        <div className=\"flex-column\">\n          <div>{filename} {size}</div>\n          {this.props.uploading || this.state.downloader ?\n            <FileProgress progress={this.props.uploading ? this.props.progress : this.state.progress}\n              onCancel={this.handleCancel} />\n            :\n            <div>{url ?\n              <a href={url} download={this.props.filename} onClick={helperFunc}>{downloadWidget}</a>\n              :\n              <span className=\"light-gray\">{downloadWidget}</span>\n            }</div>\n          }\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/audio-player.jsx",
    "content": "// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat';\nimport { base64ToIntArray } from '../lib/blob-helpers';\n\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Color of histogram bars.\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#1781d7'; // average between dark and light accent colors.\n// Minimum number of amplitude bars to draw.\nconst MIN_PREVIEW_LENGTH = 16;\n\nconst messages = defineMessages({\n  icon_title_play: {\n    id: 'icon_title_play',\n    defaultMessage: 'Play recording',\n    description: 'Icon tool tip for starting audio playback'\n  }\n});\n\nclass AudioPlayer extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    let preview = base64ToIntArray(this.props.preview);\n    if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n      preview = null;\n    }\n\n    this.state = {\n      canPlay: false,\n      playing: false,\n      currentTime: '0:00',\n      duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\n      longMin: this.props.duration >= 600000,\n      preview: preview\n    };\n\n    this.initAudio = this.initAudio.bind(this);\n    this.initCanvas = this.initCanvas.bind(this);\n    this.resampleBars = this.resampleBars.bind(this);\n    this.visualize = this.visualize.bind(this);\n\n    this.handlePlay = this.handlePlay.bind(this);\n    this.handleSeek = this.handleSeek.bind(this);\n    this.handleError = this.handleError.bind(this);\n\n    this.audioPlayer = null;\n\n    this.viewBuffer = [];\n    this.canvasRef = React.createRef();\n  }\n\n  componentDidMount() {\n    if (this.props.src) {\n      this.initAudio();\n    }\n\n    this.initCanvas();\n  }\n\n  componentWillUnmount() {\n    if (this.audioPlayer) {\n      this.audioPlayer.onloadedmetadata = null;\n      this.audioPlayer.ontimeupdate = null;\n      this.audioPlayer.onended = null;\n      this.audioPlayer.pause();\n      this.audioPlayer = null;\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.src != prevProps.src) {\n      this.initAudio();\n    }\n\n    if (this.props.preview != prevProps.preview) {\n      let preview = base64ToIntArray(this.props.preview);\n      if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n        preview = null;\n      }\n      this.setState({preview: preview}, this.initCanvas);\n    }\n  }\n\n  initAudio() {\n    this.audioPlayer = new Audio(this.props.src);\n    this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\n    this.audioPlayer.ontimeupdate = _ => this.setState({\n      currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\n    });\n    this.audioPlayer.onended = _ => {\n      this.audioPlayer.currentTime = 0;\n      this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\n    }\n  }\n\n  initCanvas() {\n    // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\n    this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n    this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n    this.canvasContext = this.canvasRef.current.getContext('2d');\n    this.canvasContext.lineCap = 'round';\n\n    this.viewBuffer = this.resampleBars(this.state.preview);\n    this.visualize();\n  }\n\n  // Draw amplitude of sound.\n  visualize() {\n    if (!this.canvasRef.current) {\n      return;\n    }\n\n    const width = this.effectiveWidth;\n    const height = this.canvasRef.current.height;\n\n    this.canvasContext.lineWidth = LINE_WIDTH;\n\n    const drawFrame = _ => {\n      if (!this.canvasRef.current || !this.audioPlayer) {\n        // The component is unmounted.\n        return;\n      }\n\n      this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n\n      if (this.viewBuffer) {\n        if (this.state.playing) {\n          window.requestAnimationFrame(drawFrame);\n        }\n\n        // Current playback position.\n        const thumbAt = this.props.duration ?\n          Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n\n        // Draw amplitude bars.\n        this.canvasContext.beginPath();\n        this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n        for (let i = 0; i < this.viewBuffer.length; i++) {\n          let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n          let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n\n          const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n          if (this.canvasContext.strokeStyle != color) {\n            this.canvasContext.stroke();\n            this.canvasContext.beginPath();\n            this.canvasContext.strokeStyle = color;\n          }\n\n          this.canvasContext.moveTo(x, (height - y) * 0.5);\n          this.canvasContext.lineTo(x, (height + y) * 0.5);\n        }\n        // Actually draw the bars on canvas.\n        this.canvasContext.stroke();\n\n        // Draw thumb.\n        if (this.props.duration) {\n          this.canvasContext.beginPath();\n          this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n          this.canvasContext.fillStyle = THUMB_COLOR;\n          this.canvasContext.fill();\n        }\n      }\n    }\n\n    drawFrame();\n  }\n\n  // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\n  resampleBars(original) {\n    const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\n    // Remove extra padding on the right due to fractional bar which is not drawn.\n    this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n\n    if (!Array.isArray(original) || original.length == 0) {\n      return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n    }\n\n    const factor = original.length / dstCount;\n    let amps = [];\n    let maxAmp = -1;\n    for (let i=0; i<dstCount; i++) {\n      let lo = (i * factor) | 0; // low bound;\n      let hi = ((i + 1) * factor) | 0; // high bound;\n      if (hi == lo) {\n        amps[i] = original[lo];\n      } else {\n        let amp = 0.0;\n        for (let j=lo; j<hi; j++) {\n          amp += original[j]\n        }\n        amps[i] = Math.max(0, amp / (hi - lo));\n      }\n      maxAmp = Math.max(amps[i], maxAmp);\n    }\n\n    if (maxAmp > 0) {\n      return amps.map(a => a / maxAmp);\n    }\n    return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n  }\n\n  handlePlay(e) {\n    e.preventDefault();\n    if (!this.state.canPlay) {\n      return;\n    }\n\n    if (this.state.playing) {\n      this.audioPlayer.pause();\n      this.setState({playing: false});\n    } else if (this.audioPlayer.readyState >= 2) {\n      this.audioPlayer.play();\n      this.setState({playing: true}, this.visualize);\n    }\n  }\n\n  handleError(err) {\n    console.error(err);\n  }\n\n  handleSeek(e) {\n    e.preventDefault();\n    if (e.target && this.props.duration) {\n      const rect = e.target.getBoundingClientRect();\n      const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;\n      this.audioPlayer.currentTime = this.props.duration * offset / 1000;\n      this.setState({currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)});\n      if (!this.state.playing) {\n        this.visualize();\n      }\n    }\n  }\n\n  render() {\n    const playClass = 'material-icons' +\n      (this.props.short ? '' : ' large') +\n      (this.state.canPlay ? '' : ' disabled');\n    const play = (<a href=\"#\" onClick={this.handlePlay} title={this.props.intl.formatMessage(messages.icon_title_play)}>\n        <i className={playClass}>{this.state.playing ? 'pause_circle' :\n          (this.state.canPlay ? 'play_circle' : 'not_interested')}</i>\n      </a>);\n    return (<div className=\"audio-player\">{this.props.short ?\n      <>\n        <canvas className=\"playback\" ref={this.canvasRef} onClick={this.handleSeek} />\n        {play}\n      </>\n    :\n      <>\n        {play}\n        <div>\n          <canvas className=\"playback\" ref={this.canvasRef} onClick={this.handleSeek} />\n          <div className=\"timer\">{this.state.currentTime}/{this.state.duration}</div>\n        </div>\n      </>\n    }\n    </div>);\n  }\n}\n\nexport default injectIntl(AudioPlayer);\n"
  },
  {
    "path": "src/widgets/audio-recorder.jsx",
    "content": "// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport AudioPlayer from './audio-player.jsx';\n// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=642012\n// It adds duration and SeekHead to the webm record.\nimport fixWebmDuration from 'webm-duration-fix';\n\nimport { intArrayToBase64 } from '../lib/blob-helpers.js'\nimport { secondsToTime } from '../lib/strformat';\nimport { KEYPRESS_DELAY, MAX_DURATION, MIN_DURATION } from '../config.js';\n\n// FFT resolution.\nconst BUFFER_SIZE = 256;\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Duration represented by one visualization bar.\nconst MILLIS_PER_BAR = 100;\n// Color of histogram bars\nconst BAR_COLOR = '#BBBD';\n// Vertical scaling for visualization bars.\nconst BAR_SCALE = 64.0;\n// Number of bars in preview.\nconst VISUALIZATION_BARS = 96;\n// Maximum number of samples per bar.\nconst MAX_SAMPLES_PER_BAR = 10;\n\n// Default recording format (FF, Chrome except on iOS).\nconst DEFAULT_AUDIO_MIME_TYPE = 'audio/webm';\n// Safari supports only mp4 as audio recording format.\nconst SAFARI_AUDIO_MIME_TYPE = 'audio/mp4';\nconst AUDIO_MIME_TYPES = [DEFAULT_AUDIO_MIME_TYPE, SAFARI_AUDIO_MIME_TYPE, ''];\n\nconst messages = defineMessages({\n  icon_title_delete: {\n    id: 'icon_title_delete',\n    defaultMessage: 'Delete recording',\n    description: 'Icon tool tip for deleting recorded audio'\n  },\n  icon_title_pause: {\n    id: 'icon_title_pause',\n    defaultMessage: 'Pause playback',\n    description: 'Icon tool tip for pausing audio playback'\n  },\n  icon_title_resume: {\n    id: 'icon_title_resume',\n    defaultMessage: 'Resume playback',\n    description: 'Icon tool tip for resuming audio playback'\n  },\n  icon_title_send: {\n    id: 'icon_title_send',\n    defaultMessage: 'Send message',\n    description: 'Icon tool tip for sending a message'\n  },\n  failed_to_init_audio: {\n    id: 'failed_to_init_audio',\n    defaultMessage: 'Failed to initialize audio recording',\n    description: 'Error message when audio is not available'\n  }\n});\n\nclass AudioRecorder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      enabled: true,\n      audioRecord: null,\n      recording: true,\n      paused: false,\n      duration: '0:00',\n      blobUrl: null,\n      preview: null\n    };\n\n    this.visualize = this.visualize.bind(this);\n    this.initMediaRecording = this.initMediaRecording.bind(this);\n    this.initCanvas = this.initCanvas.bind(this);\n    this.getRecording = this.getRecording.bind(this);\n    this.cleanUp = this.cleanUp.bind(this);\n\n    this.handleResume = this.handleResume.bind(this);\n    this.handlePause = this.handlePause.bind(this);\n    this.handleDelete = this.handleDelete.bind(this);\n    this.handleDone = this.handleDone.bind(this);\n\n    this.durationMillis = 0;\n    this.startedOn = null;\n    this.viewBuffer = [];\n    this.canvasRef = React.createRef();\n\n    // Timestamp for sending \"recording\" notifications.\n    this.recordingTimestamp = 0;\n  }\n\n  componentDidMount() {\n    this.stream = null;\n    this.mediaRecorder = null;\n    this.audioContext = null;\n    this.audioInput = null;\n    this.analyser = null;\n\n    this.audioChunks = [];\n\n    // Start recorder right away.\n    try {\n      navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(this.initMediaRecording, this.props.onError);\n    } catch (err) {\n      this.props.onError(err);\n    }\n  }\n\n  componentWillUnmount() {\n    this.startedOn = null;\n    if (this.stream) {\n      this.cleanUp();\n    }\n  }\n\n  // Draw amplitude of sound.\n  visualize() {\n    this.initCanvas();\n\n    const pcmData = new Uint8Array(this.analyser.frequencyBinCount);\n    const width = this.canvasWidth;\n    const height = this.canvasHeight;\n    // Number of bars.\n    const viewLength = (width / (LINE_WIDTH + SPACING)) | 0;\n    // Duration of audio which fits onto the screen.\n    const viewDuration = MILLIS_PER_BAR * viewLength;\n\n    this.canvasContext.lineWidth = LINE_WIDTH;\n    this.canvasContext.strokeStyle = BAR_COLOR;\n\n    let prevBarCount = 0;\n    let volume = 0.0;\n    let countPerBar = 0;\n    const drawFrame = _ => {\n      if (!this.startedOn) {\n        return;\n      }\n      window.requestAnimationFrame(drawFrame);\n\n      const duration = this.durationMillis + (Date.now() - this.startedOn);\n      // Update record length timer.\n      this.setState({duration: secondsToTime(duration / 1000)});\n\n      // Check if record is too long.\n      if (duration > MAX_DURATION) {\n        this.startedOn = null;\n        this.mediaRecorder.pause();\n        this.durationMillis += Date.now() - this.startedOn;\n        this.setState({enabled: false, recording: false, duration: secondsToTime(this.durationMillis / 1000)});\n      }\n\n      // Draw histogram.\n\n      // Get current waveform and calculate its amplitude.\n      this.analyser.getByteTimeDomainData(pcmData);\n      let amp = 0.0;\n      for (const amplitude of pcmData) {\n        amp += (amplitude - 127) ** 2;\n      }\n\n      // Sum the amplitude.\n      volume += Math.sqrt(amp/pcmData.length);\n      countPerBar ++;\n\n      let barCount = (duration / MILLIS_PER_BAR) | 0;\n      // Shift of the histogram along x-axis to make scrolling smooth. No need to shift if recording is too short.\n      const dx = viewDuration > duration ? 0 :\n        (duration - MILLIS_PER_BAR * barCount) / MILLIS_PER_BAR * (LINE_WIDTH + SPACING);\n\n      if (prevBarCount != barCount) {\n        prevBarCount = barCount;\n        // Add new amplitude visualization bar.\n        this.viewBuffer.push(volume/countPerBar);\n        volume = 0.0;\n        countPerBar = 0;\n        if (this.viewBuffer.length > viewLength) {\n          // Keep at most 'viewLength' amplitude bars.\n          this.viewBuffer.shift();\n        }\n      }\n\n      // Clear canvas.\n      this.canvasContext.clearRect(0, 0, width, height);\n\n      // Draw amplitude bars.\n      this.canvasContext.beginPath();\n      for (let i = 0; i < this.viewBuffer.length; i++) {\n        let x = i * (LINE_WIDTH + SPACING) - dx;\n        let y = Math.max(Math.min(this.viewBuffer[i] / BAR_SCALE, 0.9) * height, 1);\n\n        this.canvasContext.moveTo(x, (height - y) * 0.5);\n        this.canvasContext.lineTo(x, (height + y) * 0.5);\n      }\n      // Actually draw the bars on canvas.\n      this.canvasContext.stroke();\n\n      // Send notification, if needed.\n      const now = new Date().getTime();\n      if (now - this.recordingTimestamp > KEYPRESS_DELAY) {\n        this.props.onRecordingProgress();\n        this.recordingTimestamp = now;\n      }\n    }\n\n    drawFrame();\n  }\n\n  handlePause(e) {\n    e.preventDefault();\n    this.mediaRecorder.pause();\n    this.mediaRecorder.requestData();\n    this.durationMillis += Date.now() - this.startedOn;\n    this.startedOn = null;\n    this.setState({recording: false});\n  }\n\n  handleResume(e) {\n    e.preventDefault();\n    if (this.state.enabled) {\n      this.startedOn = Date.now();\n      this.mediaRecorder.resume();\n      this.setState({recording: true}, this.visualize);\n    }\n  }\n\n  handleDelete(e) {\n    e.preventDefault();\n    this.durationMillis = 0;\n    this.startedOn = null;\n    this.mediaRecorder.stop();\n    this.cleanUp();\n    this.setState({recording: false});\n  }\n\n  handleDone(e) {\n    e.preventDefault();\n    this.setState({recording: false});\n    if (this.startedOn) {\n      this.durationMillis += Date.now() - this.startedOn;\n      this.startedOn = null;\n    }\n    // Stop recording and return data.\n    if (this.mediaRecorder) {\n      this.mediaRecorder.stop();\n    }\n  }\n\n  initCanvas() {\n    this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n    this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n    this.canvasContext = this.canvasRef.current.getContext('2d');\n    this.canvasContext.lineCap = 'round';\n    // To reduce line blurring.\n    this.canvasContext.translate(0.5, 0.5);\n    this.canvasWidth = this.canvasRef.current.width;\n    this.canvasHeight = this.canvasRef.current.height;\n  }\n\n  initMediaRecording(stream) {\n    this.stream = stream;\n    AUDIO_MIME_TYPES.some(mimeType => {\n      if (MediaRecorder.isTypeSupported(mimeType)) {\n        this.mediaRecorder = new MediaRecorder(stream, {mimeType: mimeType, audioBitsPerSecond: 24_000});\n        return true;\n      }\n      return false;\n    });\n\n    if (!this.mediaRecorder) {\n      console.warn('MediaRecorder failed to initialize: no supported audio formats');\n      this.props.onError(this.props.intl.formatMessage(messages.failed_to_init_audio));\n      return;\n    }\n\n    // The following code is needed for visualization.\n    this.audioContext = new AudioContext();\n    this.audioInput = this.audioContext.createMediaStreamSource(stream);\n    if (!this.audioInput) {\n      console.warn('createMediaStreamSource returned null: audio input unavailable');\n      this.props.onError(this.props.intl.formatMessage(messages.failed_to_init_audio));\n      return;\n    }\n\n    this.analyser = this.audioContext.createAnalyser();\n    this.analyser.fftSize = BUFFER_SIZE;\n    this.audioInput.connect(this.analyser);\n\n    this.mediaRecorder.onstop = _ => {\n      if (this.durationMillis > MIN_DURATION) {\n        this.getRecording(this.mediaRecorder.mimeType)\n          .then(result => this.props.onFinished(result.url, result.preview, this.durationMillis));\n      } else {\n        this.props.onDeleted();\n      }\n      this.cleanUp();\n    }\n\n    this.mediaRecorder.ondataavailable = (e) => {\n      if (e.data.size > 0) {\n        this.audioChunks.push(e.data);\n      }\n\n      if (this.mediaRecorder.state != 'inactive') {\n        this.getRecording(this.mediaRecorder.mimeType).then(result => {\n          this.setState({\n            blobUrl: result.url,\n            preview: result.preview\n          });\n        });\n      }\n    }\n\n    this.durationMillis = 0;\n    this.startedOn = Date.now();\n    this.mediaRecorder.start();\n    this.visualize();\n\n    this.props.onRecordingProgress();\n    this.recordingTimestamp = this.startedOn;\n  }\n\n  // Obtain data in a form sutable for sending or playing back.\n  getRecording(mimeType) {\n    mimeType = mimeType || DEFAULT_AUDIO_MIME_TYPE;\n    let blob = new Blob(this.audioChunks, {type: mimeType});\n    // If duration is valid, apply fix for Chrome's WebM duration bug.\n    const result = mimeType == DEFAULT_AUDIO_MIME_TYPE ?\n      fixWebmDuration(blob, mimeType) :\n      Promise.resolve(blob);\n    return result\n      .then(fixedBlob => { blob = fixedBlob; return fixedBlob.arrayBuffer(); })\n      .then(arrayBuff => this.audioContext.decodeAudioData(arrayBuff))\n      .then(decoded => this.createPreview(decoded))\n      .then(preview => ({url: window.URL.createObjectURL(blob), preview: intArrayToBase64(preview)}));\n  }\n\n  // Preview must be calculated at the source: Chrome does not allow background AudioContext.\n  createPreview(audio) {\n    const data = audio.getChannelData(0);\n    // Number of amplitude bars in preview.\n    const viewLength = Math.min(data.length, VISUALIZATION_BARS);\n    // The number of samples in each bar.\n    const totalSPB = (data.length / viewLength) | 0;\n    // Distance between samples: we are going to take just a fracton of samples.\n    const samplingRate = Math.max(1, (totalSPB / MAX_SAMPLES_PER_BAR) | 0);\n\n    let buffer = [];\n    let max = -1;\n    for (let i = 0; i < viewLength; i++) {\n      let amplitude = 0;\n      let count = 0;\n      for (let j = 0; j < totalSPB; j += samplingRate) {\n        amplitude += data[totalSPB * i + j] ** 2;\n        count ++;\n      }\n      const val = Math.sqrt(amplitude / count);\n      buffer.push(val);\n      max = Math.max(max, val);\n    }\n    // Normalize amplitude to 0..100.\n    if (max > 0) {\n      buffer = buffer.map(a => (100 * a / max) | 0);\n    }\n    return buffer;\n  }\n\n  cleanUp() {\n    if (this.audioInput) {\n      this.audioInput.disconnect();\n    }\n    this.stream.getTracks().forEach(track => track.stop());\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    const resumeClass = 'material-icons ' + (this.state.enabled ? 'red' : 'gray');\n    return (\n      <div className=\"audio\">\n        <a href=\"#\" onClick={this.handleDelete} title={formatMessage(messages.icon_title_delete)}>\n          <i className=\"material-icons gray\">delete_outline</i>\n        </a>\n        {this.state.recording ?\n          <canvas ref={this.canvasRef} />\n          :\n          <AudioPlayer\n            src={this.state.blobUrl}\n            preview={this.state.preview}\n            duration={this.durationMillis}\n            short={true} />\n        }\n        <div className=\"duration\">{this.state.duration}</div>\n        {this.state.recording ?\n          <a href=\"#\" onClick={this.handlePause} title={formatMessage(messages.icon_title_pause)}>\n            <i className=\"material-icons\">pause_circle_outline</i>\n          </a> :\n          <a href=\"#\" onClick={this.handleResume} title={formatMessage(messages.icon_title_resume)}>\n            <i className={resumeClass}>radio_button_checked</i>\n          </a>\n        }\n        <a href=\"#\" onClick={this.handleDone} title={formatMessage(messages.icon_title_send)}>\n          <i className=\"material-icons\">send</i>\n        </a>\n      </div>\n    );\n  }\n}\n\nexport default injectIntl(AudioRecorder);\n"
  },
  {
    "path": "src/widgets/avatar-crop.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Cropper from './cropper.jsx';\nimport { imageCrop } from '../lib/blob-helpers.js';\n\nexport default class AvatarCrop extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      top: 0,\n      left: 0,\n      width: 0,\n      height: 0,\n      scale: 1\n    };\n\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n  }\n\n  // Cut out in image coordinates and desired scale factor.\n  handleChange(left, top, width, height, scale) {\n    this.setState({\n      left: left,\n      top: top,\n      width: width,\n      height: height,\n      scale: scale\n    });\n  }\n\n  handleSubmit() {\n    imageCrop(this.props.mime, this.props.avatar,\n      this.state.left, this.state.top, this.state.width, this.state.height,\n      this.state.scale)\n      .then(img => {\n        this.props.onSubmit(img.mime, img.blob, img.width, img.height);\n      })\n      .catch(err => {\n        this.props.onError(err);\n      });\n  }\n\n  render() {\n    return (\n      <div className=\"panel-form\">\n        <div className=\"panel-form-row\">\n          <Cropper\n            source={this.props.avatar}\n            onChange={this.handleChange} />\n        </div>\n        <div className=\"dialog-buttons\">\n          {this.props.onCancel ?\n            <button className=\"secondary\" onClick={this.props.onCancel}>\n              <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n            </button>\n            : null}\n          <button className=\"primary\" onClick={this.handleSubmit}>\n            <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/avatar-upload.jsx",
    "content": "import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\nimport LoadSpinner from './load-spinner.jsx';\n\nimport { sanitizeUrlForMime } from '../lib/utils.js';\n\nimport { AVATAR_SIZE } from '../config.js';\n\nexport default class AvatarUpload extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      source: props.avatar\n    };\n\n    this.handleFileReceived = this.handleFileReceived.bind(this);\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.avatar != prevProps.avatar) {\n      this.setState({source: this.props.avatar});\n    }\n  }\n\n  handleFileReceived(e) {\n    const image = e.target.files[0];\n    this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);\n    // Clear the value so the same file can be uploaded again.\n    e.target.value = '';\n  }\n\n  render() {\n    // Randomize id value in case more than one AvatarUpload is shown\n    // at the same time.\n    const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);\n    const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n    return (\n      <div className={className}>\n        {this.props.readOnly || !this.state.source ?\n          null :\n          <a href=\"#\" className=\"clear-avatar\" onClick={(e) => {e.preventDefault(); this.props.onImageUpdated();}}>\n            <i className=\"material-icons\">clear</i>\n          </a>}\n        {this.state.source ?\n          <img src={this.props.tinode.authorizeURL(sanitizeUrlForMime(this.state.source, 'image'))} className=\"preview\" /> :\n          this.props.readOnly && this.props.uid ?\n            <div className=\"avatar-box\">\n              <LetterTile\n                authorizeURL={this.props.tinode.authorizeURL}\n                avatar={true}\n                topic={this.props.uid}\n                title={this.props.title} />\n            </div>\n            :\n            <div className=\"blank\">{AVATAR_SIZE}&times;{AVATAR_SIZE}</div>}\n        {this.props.readOnly ? null :\n          <input type=\"file\" id={randId} className=\"inputfile hidden\"\n            accept=\"image/*\" onChange={this.handleFileReceived} />}\n        {this.props.readOnly ? null :\n        <label htmlFor={randId} className=\"round\">\n          <i className=\"material-icons\">file_upload</i>\n        </label>}\n        <LoadSpinner show={this.props.uploading} large={true} clear={true} centered={true} />\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/badge-list.jsx",
    "content": "import React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst icon_mapping = {'staff': 'verified_user'};\n\nconst messages = defineMessages({\n  badge_verified: {\n    id: 'badge_verified',\n    defaultMessage: 'Verified/official',\n    description: 'Explanation of a verified account or topic badge'\n  },\n  badge_staff: {\n    id: 'badge_staff',\n    defaultMessage: 'Staff-managed',\n    description: 'Explanation of a staff-managed account or topic badge'\n  },\n  badge_danger: {\n    id: 'badge_danger',\n    defaultMessage: 'Untrustworthy',\n    description: 'Suspicious or untrustworthy account or topic badge'\n  },\n});\n\n\n/* Trusted badges with labels: verified, staff, danger */\nclass BadgeList extends React.PureComponent {\n  render() {\n    const {formatMessage} = this.props.intl;\n    let badges = null;\n    if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {\n      badges = [];\n      this.props.trustedBadges.forEach(b => {\n        const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);\n        const style = 'material-icons ' + b + '-color';\n        badges.push(<div className=\"trusted-badge\" key={b}><i className={style}>{icon_mapping[b] || b}</i> {comment}</div>);\n      });\n      return <>{badges}</>;\n    }\n    return null;\n  }\n};\n\nexport default injectIntl(BadgeList);\n"
  },
  {
    "path": "src/widgets/button-back.jsx",
    "content": "// The <- button to be displayed in title bars.\nimport React from 'react';\n\nexport default class ButtonBack extends React.PureComponent {\n  render() {\n    return (\n      <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onBack();}}>\n        <i className=\"material-icons\">arrow_back</i>\n      </a>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/call-incoming.jsx",
    "content": "// IncomingCall: displays Accept & Reject buttons for incoming calls.\nimport React from 'react';\n\nimport BadgeList from './badge-list.jsx';\nimport LetterTile from './letter-tile.jsx';\n\nimport { MAX_TITLE_LENGTH, MAX_PEER_TITLE_LENGTH } from '../config.js';\nimport { CALL_STATE_INCOMING_RECEIVED } from '../constants.js';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\n\nconst RING_SOUND = new Audio('audio/call-in.m4a');\n\nexport default class CallIncoming extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      topic: null,\n      fullName: undefined,\n      avatar: null,\n      trustedBadges: [],\n      previousMetaDesc: undefined,\n    };\n\n    this.resetDesc = this.resetDesc.bind(this);\n    this.onMetaDesc = this.onMetaDesc.bind(this);\n    this.handleRejectCall = this.handleRejectCall.bind(this);\n    this.handleAcceptCall = this.handleAcceptCall.bind(this);\n    this.ringTimer = null;\n  }\n\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n\n    this.resetDesc(topic);\n    if (this.props.callState == CALL_STATE_INCOMING_RECEIVED) {\n      // play() throws if the user did not click the app first: https://goo.gl/xX8pDD.\n      RING_SOUND.play().catch(_ => {});\n      this.ringTimer = setInterval(_ => {RING_SOUND.play().catch(_ => {})}, 2000);\n      this.props.onRinging(this.props.topic, this.props.seq);\n    }\n  }\n\n  // No need to separately handle component mount.\n  componentDidUpdate(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n\n    if (this.onMetaDesc != topic.onMetaDesc) {\n      this.previousMetaDesc = topic.onMetaDesc;\n      topic.onMetaDesc = this.onMetaDesc;\n    }\n\n    if (this.state.topic != props.topic) {\n      this.setState({topic: props.topic});\n      this.resetDesc(topic, props);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.ringTimer != null) {\n      clearInterval(this.ringTimer);\n      RING_SOUND.pause();\n    }\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.setState({topic: null});\n    topic.onMetaDesc = this.previousMetaDesc;\n  }\n\n  resetDesc(topic) {\n    const badges = [];\n    if (topic.trusted) {\n      for (const [key, val] of Object.entries(topic.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n    }\n\n    this.setState({\n      fullName: truncateString(topic.public ? topic.public.fn : undefined, MAX_TITLE_LENGTH),\n      avatar: makeImageUrl(topic.public ? topic.public.photo : null),\n      trustedBadges: badges,\n    });\n  }\n\n  onMetaDesc(desc) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetDesc(topic);\n\n    if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\n      this.previousMetaDesc(desc);\n    }\n  }\n\n  handleAcceptCall() {\n    this.props.onAcceptCall(this.props.topic);\n  }\n\n  handleRejectCall() {\n    this.props.onReject(this.props.topic, this.props.seq);\n    this.props.onClose();\n  }\n\n  render() {\n    return (\n      <div className=\"alert-container\">\n        <div className=\"incoming-call\">\n          <div className=\"caller-card incoming pulse\">\n            <div className=\"avatar-box\">\n              <LetterTile\n                authorizeURL={this.props.tinode.authorizeURL}\n                avatar={this.state.avatar || true}\n                topic={this.props.topic}\n                title={this.state.fullName} />\n            </div>\n            <div className=\"caller-name\">{truncateString(this.state.fullName, MAX_PEER_TITLE_LENGTH)}\n              <BadgeList short={true} trustedBadges={this.state.trustedBadges} /></div>\n          </div>\n          <div id=\"controls\">\n            {this.props.callState == CALL_STATE_INCOMING_RECEIVED ?\n              <>\n                <button className=\"danger\" onClick={this.handleRejectCall}>\n                  <i className=\"material-icons\">call_end</i>\n                </button>\n                <button className=\"positive\" onClick={this.handleAcceptCall}>\n                  <i className=\"material-icons\">call</i>\n                </button>\n              </>\n              :\n              null\n            }\n          </div>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/call-message.jsx",
    "content": "// Chat message describing a video or voice call.\n\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\nexport default class CallMessage extends React.PureComponent {\n  render() {\n    const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n    const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n    const callIcon = this.props.incoming ?\n      (isCallDropped ? 'call_missed' : 'call_received') :\n      (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n    const title = this.props.incoming ?\n          <FormattedMessage id=\"calls_incoming\" defaultMessage=\"Incoming call\" description=\"Incoming call label\" /> :\n          <FormattedMessage id=\"calls_outgoing\" defaultMessage=\"Outgoing call\" description=\"Outgoing call label\" />;\n    let duration;\n    if (isCallDropped) {\n      switch (this.props.callState) {\n        case 'busy':\n          duration = <FormattedMessage id=\"call_busy\" defaultMessage=\"busy\" description=\"Label for busy call line\" />;\n          break;\n        case 'declined':\n          duration = <FormattedMessage id=\"call_declined\" defaultMessage=\"declined\" description=\"Label for declined call\" />;\n          break;\n        case 'missed':\n          duration = this.props.incoming ?\n            <FormattedMessage id=\"call_missed\" defaultMessage=\"missed\" description=\"Label for missed incoming call\" /> :\n            <FormattedMessage id=\"call_cancelled\" defaultMessage=\"cancelled\" description=\"Label for cancelled outgoing call\" />;\n          break;\n        default:\n          duration = <FormattedMessage id=\"call_disconnected\" defaultMessage=\"disconnected\" description=\"Label for disconnected call\" />;\n          break;\n      }\n    } else {\n      duration = <span>{secondsToTime(this.props.duration / 1000)}</span>;\n    }\n    return <div className=\"call-message\">\n      <div><i className=\"material-icons big gray\">call</i></div>\n      <div className=\"flex-column narrow\">\n        <div>{title}</div>\n        <div className=\"duration\"><i className={successClass}>{callIcon}</i> {duration}</div>\n      </div>\n    </div>;\n  }\n}\n"
  },
  {
    "path": "src/widgets/call-panel.jsx",
    "content": "// CallPanel displays call in progress: local and remote viewports and controls.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport LetterTile from './letter-tile.jsx';\n\nimport { MAX_PEER_TITLE_LENGTH } from '../config.js';\nimport { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js';\nimport { truncateString } from '../lib/strformat.js';\n\nconst RING_SOUND = new Audio('audio/call-out.m4a');\nRING_SOUND.loop = true;\nconst CALL_ENDED_SOUND = new Audio('audio/call-end.m4a');\nCALL_ENDED_SOUND.loop = true;\nconst DIALING_SOUND = new Audio('audio/dialing.m4a');\n\nconst VIDEO_MUTED_EVENT = 'video:muted';\nconst VIDEO_UNMUTED_EVENT = 'video:unmuted';\n\nconst messages = defineMessages({\n  already_in_call: {\n    id: 'already_in_call',\n    defaultMessage: 'You already in an ongoing call!',\n    description: 'Error message when the user tried to accept a new call without finishing pervious one',\n  }\n});\n\nclass CallPanel extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      localStream: undefined,\n      remoteStream: undefined,\n      pc: undefined,\n      dataChannel: undefined,\n\n      previousOnInfo: undefined,\n      waitingForPeer: false,\n      // If true, the client has received a remote SDP from the peer and has sent a local SDP to the peer.\n      callInitialSetupComplete: false,\n      audioOnly: props.callAudioOnly,\n      // Video mute/unmute in progress.\n      videoToggleInProgress: false,\n      // Indicates if the remote peer has informed us that their camera is on.\n      remoteVideoLive: false,\n    };\n\n    this.localStreamConstraints = {\n      audio: true,\n      video: !props.callAudioOnly\n    };\n    this.isOutgoingCall = props.callState == CALL_STATE_OUTGOING_INITATED;\n\n    this.containerRef = React.createRef();\n    this.localRef = React.createRef();\n    this.remoteRef = React.createRef();\n\n    // Cache for remote ice candidates until initial setup gets completed.\n    this.remoteIceCandidatesCache = [];\n\n    this.onInfo = this.onInfo.bind(this);\n    this.start = this.start.bind(this);\n    this.stop = this.stop.bind(this);\n\n    this.createPeerConnection = this.createPeerConnection.bind(this);\n    this.canSendOffer = this.canSendOffer.bind(this);\n    this.drainRemoteIceCandidatesCache = this.drainRemoteIceCandidatesCache.bind(this);\n\n    this.handleNegotiationNeededEvent = this.handleNegotiationNeededEvent.bind(this);\n    this.handleICECandidateEvent = this.handleICECandidateEvent.bind(this);\n    this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\n    this.handleICEConnectionStateChangeEvent = this.handleICEConnectionStateChangeEvent.bind(this);\n    this.handleSignalingStateChangeEvent = this.handleSignalingStateChangeEvent.bind(this);\n    this.handleICEGatheringStateChangeEvent = this.handleICEGatheringStateChangeEvent.bind(this);\n    this.handleIceCandidateErrorEvent = this.handleIceCandidateErrorEvent.bind(this);\n    this.handleTrackEvent = this.handleTrackEvent.bind(this);\n\n    this.handleVideoOfferMsg = this.handleVideoOfferMsg.bind(this);\n    this.handleVideoAnswerMsg = this.handleVideoAnswerMsg.bind(this);\n    this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\n\n    this.reportError = this.reportError.bind(this);\n    this.handleGetUserMediaError = this.handleGetUserMediaError.bind(this);\n\n    this.stopTracks = this.stopTracks.bind(this);\n    this.disconnectMedia = this.disconnectMedia.bind(this);\n\n    this.handleCloseClick = this.handleCloseClick.bind(this);\n    this.handleToggleCameraClick = this.handleToggleCameraClick.bind(this);\n    this.handleToggleMicClick = this.handleToggleMicClick.bind(this);\n\n    this.handleRemoteHangup = this.handleRemoteHangup.bind(this);\n    this.handleVideoCallAccepted = this.handleVideoCallAccepted.bind(this);\n\n    this.muteVideo = this.muteVideo.bind(this);\n    this.unmuteVideo = this.unmuteVideo.bind(this);\n    this.emptyVideoTrack = this.emptyVideoTrack.bind(this);\n\n    this.handleDataChannelEvent = this.handleDataChannelEvent.bind(this);\n    this.handleDataChannelError = this.handleDataChannelError.bind(this);\n    this.handleDataChannelMessage = this.handleDataChannelMessage.bind(this);\n    this.handleDataChannelOpen = this.handleDataChannelOpen.bind(this);\n    this.handleDataChannelClose = this.handleDataChannelClose.bind(this);\n\n    this.bounds = {};\n\n    this.dragStart = (event) => {\n      if (!event.target.classList.contains('draggable')) {\n        // Prevent dragging when clicking on buttons or other non-draggable elements.\n        return;\n      }\n      if (window.matchMedia('(width<=640px)')) {\n        // No dragging on small screens.\n        return;\n      }\n      if (this.props.minimized && this.containerRef) {\n        event.stopPropagation();\n        this.containerRef.current.setPointerCapture(event.pointerId);\n        this.containerRef.current.style.cursor = 'grabbing';\n        this.bounds.left = this.containerRef.current.offsetLeft;\n        this.bounds.top = this.containerRef.current.offsetTop;\n        this.bounds.width = this.containerRef.current.offsetWidth;\n        this.bounds.height = this.containerRef.current.offsetHeight;\n\n        const parent = this.containerRef.current.offsetParent;\n        this.bounds.maxX = parent.offsetWidth;\n        this.bounds.maxY = parent.offsetHeight;\n      }\n    };\n    this.drag = (event) => {\n      event.stopPropagation();\n      const el = this.containerRef.current;\n      if (this.props.minimized && this.containerRef && el.hasPointerCapture(event.pointerId)) {\n        // Calculate new position. Restrict to the visible area of the parent element.\n        this.bounds.left = Math.min(Math.max(this.bounds.left + event.movementX, 0),\n          this.bounds.maxX - this.bounds.width);\n        this.bounds.top = Math.min(Math.max(this.bounds.top + event.movementY, 0),\n          this.bounds.maxY - this.bounds.height);\n\n        el.style.left = `${this.bounds.left}px`;\n        el.style.top = `${this.bounds.top}px`;\n      }\n    };\n    this.dragEnd = (event) => {\n      event.stopPropagation();\n      if (this.props.minimized && this.containerRef) {\n        this.containerRef.current.releasePointerCapture(event.pointerId);\n        this.containerRef.current.style.cursor = 'grab';\n      }\n    };\n  }\n\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    this.previousOnInfo = topic.onInfo;\n    topic.onInfo = this.onInfo;\n    if ((this.props.callState == CALL_STATE_OUTGOING_INITATED ||\n         this.props.callState == CALL_STATE_IN_PROGRESS) && this.localRef.current) {\n      this.start();\n    }\n\n    if (this.containerRef) {\n      this.containerRef.current.addEventListener('pointerdown', this.dragStart);\n      this.containerRef.current.addEventListener('pointermove', this.drag);\n      this.containerRef.current.addEventListener('pointerup', this.dragEnd);\n    }\n  }\n\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onInfo = this.previousOnInfo;\n    this.stop();\n\n    if (this.containerRef) {\n      this.containerRef.current.removeEventListener('pointerdown', this.dragStart);\n      this.containerRef.current.removeEventListener('pointermove', this.drag);\n      this.containerRef.current.removeEventListener('pointerup', this.dragEnd);\n    }\n  }\n\n  handleVideoCallAccepted(info) {\n    RING_SOUND.pause();\n    // Create peer connection with a data channel.\n    const pc = this.createPeerConnection(true);\n    const stream = this.state.localStream;\n    stream.getTracks().forEach(track => {\n      pc.addTrack(track, stream);\n\n      if (track.kind == 'video' && this.state.audioOnly) {\n        // This is an audio-only call.\n        // Remove dummy video track (placeholder remains).\n        track.enabled = false;\n        track.stop();\n        stream.removeTrack(track);\n      }\n    });\n  }\n\n  onInfo(info) {\n    if (info.what != 'call') {\n      return;\n    }\n    switch (info.event) {\n      case 'accept':\n        this.handleVideoCallAccepted(info);\n        break;\n      case 'answer':\n        this.handleVideoAnswerMsg(info);\n        break;\n      case 'ice-candidate':\n        this.handleNewICECandidateMsg(info);\n        break;\n      case 'hang-up':\n        this.handleRemoteHangup(info);\n        break;\n      case 'offer':\n        this.handleVideoOfferMsg(info);\n        break;\n      case 'ringing':\n        // play() throws if the user did not click the app first: https://goo.gl/xX8pDD.\n        RING_SOUND.play().catch(_ => {});\n        break;\n      default:\n        console.warn(\"Unknown call event\", info.event);\n        break;\n    }\n  }\n\n  // Creates an empty video track placeholder.\n  emptyVideoTrack() {\n    const width = 640;\n    const height = 480;\n    const canvas = Object.assign(document.createElement(\"canvas\"), {width, height});\n    canvas.getContext('2d').fillRect(0, 0, width, height);\n    const stream = canvas.captureStream(0);\n    return Object.assign(stream.getVideoTracks()[0], {enabled: false});\n  }\n\n  start() {\n    if (this.state.localStream) {\n      this.props.onError(this.props.intl.formatMessage(messages.already_in_call), 'info');\n      return;\n    }\n\n    if (this.props.callState == CALL_STATE_IN_PROGRESS) {\n      // We apparently just accepted the call.\n      this.props.onInvite(this.props.topic, this.props.seq, CALL_STATE_IN_PROGRESS, this.props.callAudioOnly);\n      return;\n    }\n\n    // This is an outgoing call waiting for the other side to pick up.\n    // Start local video.\n    navigator.mediaDevices.getUserMedia(this.localStreamConstraints)\n      .then(stream => {\n        if (!this.localStreamConstraints.video) {\n          // Starting an audio-only call. Create a dummy video track\n          // (so video can be enabled during the call if the user desires).\n          stream.addTrack(this.emptyVideoTrack());\n        }\n        this.setState({localStream: stream, waitingForPeer: true});\n        this.localRef.current.srcObject = stream;\n\n        DIALING_SOUND.play();\n\n        // Send call invitation.\n        this.props.onInvite(this.props.topic, this.props.seq, this.props.callState, this.props.callAudioOnly);\n      })\n      .catch(this.handleGetUserMediaError);\n  }\n\n  stop() {\n    CALL_ENDED_SOUND.pause();\n    CALL_ENDED_SOUND.currentTime = 0;\n    RING_SOUND.pause();\n    RING_SOUND.currentTime = 0;\n\n    this.stopTracks(this.state.localStream);\n    this.stopTracks(this.state.remoteStream);\n    this.disconnectMedia(this.localRef.current);\n    this.disconnectMedia(this.remoteRef.current);\n    if (this.state.pc) {\n      this.state.pc.ontrack = null;\n      this.state.pc.onremovetrack = null;\n      this.state.pc.onremovestream = null;\n      this.state.pc.onicecandidate = null;\n      this.state.pc.oniceconnectionstatechange = null;\n      this.state.pc.onsignalingstatechange = null;\n      this.state.pc.onicegatheringstatechange = null;\n      this.state.pc.onnegotiationneeded = null;\n      this.state.pc.onicecandidateerror = null;\n      this.state.pc.ondatachannel = null;\n\n      if (this.state.dataChannel && (this.state.dataChannel.readyState == 'open' || this.state.dataChannel.readyState == 'connecting')) {\n        this.state.dataChannel.close();\n      }\n      this.state.pc.close();\n    }\n    this.setState({pc: null, waitingForPeer: false});\n  }\n\n  disconnectMedia(el) {\n    if (!el) {\n      return;\n    }\n\n    el.srcObject = null;\n    el.src = '';\n  }\n\n  stopTracks(stream) {\n    if (!stream) {\n      return;\n    }\n\n    let tracks = stream.getTracks();\n    if (tracks) {\n      tracks.forEach(track => {\n        track.stop();\n        track.enabled = false;\n      });\n    }\n  }\n\n  handleDataChannelError(error) {\n    console.error('data channel error', error);\n  }\n\n  handleDataChannelMessage(event) {\n    switch (event.data) {\n    case VIDEO_MUTED_EVENT:\n      this.setState({remoteVideoLive: false}, _ => { this.remoteRef.current.srcObject = this.state.remoteStream; });\n      break;\n    case VIDEO_UNMUTED_EVENT:\n      this.setState({remoteVideoLive: true}, _ => { this.remoteRef.current.srcObject = this.state.remoteStream; });\n      break;\n    default:\n      break;\n    }\n  }\n\n  handleDataChannelOpen(event) {\n    if (!this.state.audioOnly) {\n      event.target.send(VIDEO_UNMUTED_EVENT);\n    }\n  }\n\n  handleDataChannelClose(event) {\n    console.info('close data channel:', event);\n  }\n\n  handleDataChannelEvent(event) {\n    console.info('data channel event:', event);\n    const channel = event.channel;\n    channel.onerror = this.handleDataChannelError;\n    channel.onmessage = this.handleDataChannelMessage;\n    channel.onopen = this.handleDataChannelOpen;\n    channel.onclose = this.handleDataChannelClose;\n    this.setState({dataChannel: channel});\n  }\n\n  createPeerConnection(withDataChannel) {\n    const iceServers = this.props.tinode.getServerParam('iceServers', null);\n    const pc = iceServers ? new RTCPeerConnection({iceServers: iceServers}) : new RTCPeerConnection();\n\n    pc.onicecandidate = this.handleICECandidateEvent;\n    pc.oniceconnectionstatechange = this.handleICEConnectionStateChangeEvent;\n    pc.onicegatheringstatechange = this.handleICEGatheringStateChangeEvent;\n    pc.onsignalingstatechange = this.handleSignalingStateChangeEvent;\n    pc.onnegotiationneeded = this.handleNegotiationNeededEvent;\n    pc.onicecandidateerror = this.handleIceCandidateErrorEvent;\n    pc.ontrack = this.handleTrackEvent;\n    pc.ondatachannel = this.handleDataChannelEvent;\n\n    let stateUpdate = {pc: pc, waitingForPeer: false};\n    if (withDataChannel) {\n      // Create data channel for exchanging events.\n      const channel = pc.createDataChannel(\"events\", {ordered: true});\n      channel.onerror = this.handleDataChannelError;\n      channel.onmessage = this.handleDataChannelMessage;\n      channel.onopen = this.handleDataChannelOpen;\n      channel.onclose = this.handleDataChannelClose;\n      stateUpdate.dataChannel = channel;\n    }\n    this.setState(stateUpdate);\n    return pc;\n  }\n\n  handleVideoAnswerMsg(info) {\n    // Configure the remote description, which is the SDP payload\n    // in 'info' message.\n    const desc = new RTCSessionDescription(info.payload);\n    this.state.pc.setRemoteDescription(desc)\n      .then(_ => {\n        this.setState({ callInitialSetupComplete: true }, _ => this.drainRemoteIceCandidatesCache());\n      })\n      .catch(err => this.reportError(err));\n  }\n\n  reportError(err) {\n    this.props.onError(err.message, 'err');\n  }\n\n  canSendOffer() {\n    return this.isOutgoingCall || this.state.callInitialSetupComplete;\n  }\n\n  handleNegotiationNeededEvent(event) {\n    const pc = event.target;\n    if (!this.canSendOffer()) {\n      return;\n    }\n    pc.createOffer().then(offer => {\n      return pc.setLocalDescription(offer);\n    })\n    .then(_ => {\n      this.props.onSendOffer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\n    })\n    .catch(err => this.reportError(err));\n  }\n\n  handleIceCandidateErrorEvent(event) {\n    console.warn(\"ICE candidate error:\", event);\n  }\n\n  handleICECandidateEvent(event) {\n    if (event.candidate) {\n      this.props.onIceCandidate(this.props.topic, this.props.seq, event.candidate.toJSON());\n    }\n  }\n\n  handleNewICECandidateMsg(info) {\n    const candidate = new RTCIceCandidate(info.payload);\n    if (this.state.callInitialSetupComplete) {\n      this.state.pc.addIceCandidate(candidate)\n        .catch(err => {\n          if (candidate.candidate) {\n            this.reportError(err);\n          }\n          console.warn(\"Error adding new ice candidate\", candidate, err);\n        });\n    } else {\n      this.remoteIceCandidatesCache.push(candidate);\n    }\n  }\n\n  drainRemoteIceCandidatesCache() {\n    this.remoteIceCandidatesCache.forEach(candidate => {\n      this.state.pc.addIceCandidate(candidate)\n        .catch(err => {\n          if (candidate.candidate) {\n            this.reportError(err);\n          }\n          console.warn(\"Error adding cached ice candidate\", candidate, err);\n        });\n    });\n    this.remoteIceCandidatesCache = [];\n  }\n\n  handleICEConnectionStateChangeEvent(event) {\n    switch (event.target.iceConnectionState) {\n      case 'closed':\n      case 'failed':\n        this.handleCloseClick();\n        break;\n    }\n  }\n\n  handleSignalingStateChangeEvent(event) {\n    if (event.target.signalingState == 'closed') {\n      this.handleCloseClick();\n    }\n  }\n\n  handleICEGatheringStateChangeEvent(event) {\n    // ICE gathering change state\n  }\n\n  handleTrackEvent(event) {\n    // Remote video becomes available.\n    this.remoteRef.current.srcObject = event.streams[0];\n    this.setState({remoteStream: event.streams[0]});\n  }\n\n  handleGetUserMediaError(e) {\n    console.error(\"Error opening camera and/or microphone\", e);\n    switch(e.name) {\n      case 'NotFoundError':\n        // Cannot start the call b/c no camera and/or microphone found.\n        this.reportError(e);\n        break;\n      case 'SecurityError':\n      case 'PermissionDeniedError':\n        // Do nothing; this is the same as the user canceling the call.\n        break;\n      default:\n        this.reportError(e);\n        break;\n    }\n\n    // Make sure we shut down our end of the RTCPeerConnection so we're\n    // ready to try again.\n    this.handleCloseClick();\n  }\n\n  handleVideoOfferMsg(info) {\n    let localStream = null;\n    // If needed, create peer connection.\n    // Not creating data channel since it should be created by the peer.\n    const pc = this.state.pc ? this.state.pc : this.createPeerConnection(false);\n    const desc = new RTCSessionDescription(info.payload);\n\n    pc.setRemoteDescription(desc).then(_ => {\n      return navigator.mediaDevices.getUserMedia(this.localStreamConstraints);\n    })\n    .then(stream => {\n      let dummyVideo;\n      if (!this.localStreamConstraints.video) {\n        // Starting an audio-only call. Create an empty video track so\n        // so the user can enable the video during the call.\n        dummyVideo = this.emptyVideoTrack();\n        stream.addTrack(dummyVideo);\n      }\n      localStream = stream;\n      this.localRef.current.srcObject = stream;\n      this.setState({localStream: stream});\n\n      localStream.getTracks().forEach(track => {\n        pc.addTrack(track, localStream);\n      });\n\n      if (dummyVideo) {\n        dummyVideo.enabled = false;\n        dummyVideo.stop();\n        stream.removeTrack(dummyVideo);\n      }\n    })\n    .then(_ => {\n      return pc.createAnswer();\n    })\n    .then(answer => {\n      return pc.setLocalDescription(answer);\n    })\n    .then(_ => {\n      this.props.onSendAnswer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\n      this.setState({ callInitialSetupComplete: true }, _ => this.drainRemoteIceCandidatesCache());\n    })\n    .catch(this.handleGetUserMediaError);\n  }\n\n  // Call disconnected by remote.\n  handleRemoteHangup() {\n    if (!this.state.waitingForPeer) {\n      // This is live call, just hang up.\n      this.handleCloseClick();\n    } else {\n      // This is a call which is not yet connected.\n      // Stop pulse animation.\n      this.setState({waitingForPeer: false});\n      // Change sound and wait a bit before ending it.\n      RING_SOUND.pause();\n      RING_SOUND.currentTime = 0;\n      CALL_ENDED_SOUND.loop = true;\n      CALL_ENDED_SOUND.play().catch(_ => {});\n      setTimeout(_ => {\n        this.handleCloseClick();\n      }, 2000);\n    }\n  }\n\n  handleCloseClick() {\n    this.stop();\n    this.props.onHangup(this.props.topic, this.props.seq);\n  }\n\n  // Ends video track and turns off the camera.\n  muteVideo() {\n    if (!this.state.pc || !this.state.dataChannel) {\n      return;\n    }\n\n    const stream = this.state.localStream;\n    const t = stream.getVideoTracks()[0];\n    t.enabled = false;\n    t.stop();\n\n    stream.removeTrack(t);\n    this.state.dataChannel.send(VIDEO_MUTED_EVENT);\n    this.setState({videoToggleInProgress: false});\n  }\n\n  unmuteVideo() {\n    if (!this.state.pc || !this.state.dataChannel) {\n      return;\n    }\n    navigator.mediaDevices.getUserMedia({ video: true })\n      .then(stream => {\n        // Will extract video track from stream and throw stream away,\n        // and replace video track in the media sender.\n        this.localRef.current.srcObject = null;\n        const sender = this.state.pc.getSenders().find(s => s.track.kind == 'video');\n        const track = stream.getVideoTracks()[0];\n        // Remote track from new stream.\n        stream.removeTrack(track);\n        // Add this track to the existing local stream.\n        this.state.localStream.addTrack(track);\n        return sender.replaceTrack(track);\n      })\n      .then(_ => {\n        this.localRef.current.srcObject = this.state.localStream;\n        this.state.dataChannel.send(VIDEO_UNMUTED_EVENT);\n      })\n      .catch(err => this.handleGetUserMediaError(err))\n      .finally(_ => { this.setState({videoToggleInProgress: false}); }); // Make sure we redraw the mute/unmute icons (e.g. camera -> camera_off).\n  }\n\n  handleToggleCameraClick() {\n    if (this.state.videoToggleInProgress) {\n      // Toggle currently in progress.\n      return;\n    }\n    const tracks = this.state.localStream.getVideoTracks();\n    this.setState({videoToggleInProgress: true}, _ => {\n      if (tracks && tracks.length > 0 && tracks[0].enabled && tracks[0].readyState == 'live') {\n        this.muteVideo();\n      } else {\n        this.unmuteVideo();\n      }\n      this.setState({audioOnly: !this.state.audioOnly});\n    });\n  }\n\n  handleToggleMicClick() {\n    const stream = this.state.localStream;\n    const t = stream.getAudioTracks()[0];\n    t.enabled = !t.enabled;\n    // Make sure we redraw the mute/unmute icons (e.g. mic -> mic_off).\n    this.forceUpdate();\n  }\n\n  render() {\n    const audioTracks = this.state.localStream && this.state.localStream.getAudioTracks();\n    const videoTracks = !this.state.audioOnly && this.state.localStream && this.state.localStream.getVideoTracks();\n    const disabled = !this.state.pc || !this.state.dataChannel || !(audioTracks && audioTracks[0]);\n    const audioIcon = audioTracks && audioTracks[0] && audioTracks[0].enabled ? 'mic' : 'mic_off';\n    const videoIcon = videoTracks && videoTracks[0] && videoTracks[0].enabled && videoTracks[0].readyState == 'live' ? 'videocam' : 'videocam_off';\n    const peerTitle = truncateString(this.props.title, MAX_PEER_TITLE_LENGTH);\n    const pulseAnimation = this.state.waitingForPeer ? ' pulse' : '';\n\n    let remoteActive = false;\n    if (this.remoteRef.current && this.remoteRef.current.srcObject && this.state.remoteVideoLive) {\n      const rstream = this.remoteRef.current.srcObject;\n      if (rstream.getVideoTracks().length > 0) {\n        const t = rstream.getVideoTracks()[0];\n        remoteActive = t.enabled && t.readyState == 'live';\n      }\n    }\n\n    const minimizedClass = this.props.minimized ? 'minimized' : null;\n    const fullScreen = this.props.minimized ? 'fullscreen' : 'fullscreen_exit';\n\n    return (\n      <div id=\"video-container\" className={minimizedClass} ref={this.containerRef}>\n        <div id=\"video-container-panel\">\n          <div className=\"call-party self\" disabled={this.state.audioOnly || this.props.minimized}>\n            <video ref={this.localRef} autoPlay muted playsInline />\n            <div className=\"caller-name inactive\">\n              <FormattedMessage id=\"calls_you_label\"\n                defaultMessage=\"You\" description=\"Shown over the local video screen\" />\n            </div>\n          </div>\n          <div className=\"call-party peer\" disabled={!remoteActive}>\n            {remoteActive ?\n              <>\n                <video ref={this.remoteRef} autoPlay playsInline />\n                <div className=\"caller-name inactive\">{peerTitle}</div>\n              </> :\n              <>\n                <audio ref={this.remoteRef} autoPlay />\n                <div className={`caller-card${pulseAnimation} draggable`}>\n                  <div className=\"avatar-box\">\n                    <LetterTile\n                      authorizeURL={this.props.tinode.authorizeURL}\n                      avatar={this.props.avatar}\n                      topic={this.props.topic}\n                      title={this.props.title} />\n                  </div>\n                  <div className=\"caller-name\">{peerTitle}</div>\n                </div>\n              </>\n            }\n          </div>\n        </div>\n        <button className=\"full-screen\" onClick={this.props.onToggleMinimize}>\n          <i className=\"material-icons\">{fullScreen}</i>\n        </button>\n        <div id=\"controls\" className={minimizedClass}>\n          <button className=\"danger\" onClick={this.handleCloseClick}>\n            <i className=\"material-icons\">call_end</i>\n          </button>\n          <button className=\"secondary\" onClick={this.handleToggleCameraClick} disabled={disabled}>\n            <i className=\"material-icons\">{videoIcon}</i>\n          </button>\n          <button className=\"secondary\" onClick={this.handleToggleMicClick} disabled={disabled}>\n            <i className=\"material-icons\">{audioIcon}</i>\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(CallPanel);\n"
  },
  {
    "path": "src/widgets/call-status.jsx",
    "content": "// The counter of unread messages in the topic.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\n// Props:\n//  incoming: true | false.\n//  callState: 'busy' | 'declined' | 'disconnected' | 'missed'.\n//  duration: <number> (call duration in milliseconds).\nexport default class CallStatus extends React.PureComponent {\n  render() {\n    const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n    const icon2 = this.props.incoming ?\n      (isCallDropped ? 'call_missed' : 'call_received') :\n      (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n    let duration;\n    if (isCallDropped) {\n      switch (this.props.callState) {\n        case 'busy':\n          duration = <FormattedMessage id=\"call_busy\" defaultMessage=\"busy\" description=\"Label for busy call line\" />;\n          break;\n        case 'declined':\n          duration = <FormattedMessage id=\"call_declined\" defaultMessage=\"declined\" description=\"Label for declined call\" />;\n          break;\n        case 'missed':\n          duration = this.props.incoming ?\n            <FormattedMessage id=\"call_missed\" defaultMessage=\"missed\" description=\"Label for missed incoming call\" /> :\n            <FormattedMessage id=\"call_cancelled\" defaultMessage=\"cancelled\" description=\"Label for cancelled outgoing call\" />;\n          break;\n        default:\n          duration = <FormattedMessage id=\"call_disconnected\" defaultMessage=\"disconnected\" description=\"Label for disconnected call\" />;\n          break;\n      }\n    } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {\n      duration = <FormattedMessage id=\"call_in_progress\" defaultMessage=\"in progress\" description=\"Label for call in progress\" />\n    } else {\n      duration = <span>{secondsToTime(this.props.duration / 1000)}</span>;\n    }\n    return (\n      <>\n        <div className=\"composed-material\">\n          <i className=\"material-icons\">call</i><i className=\"material-icons second\">{icon2}</i>\n        </div> {duration}\n      </>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/chat-message.jsx",
    "content": "// Single chat message bubble, sent or received.\n\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\nimport Attachment from './attachment.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport ReceivedMarker from './received-marker.jsx'\n\nimport { fullFormatter } from '../lib/formatters.js';\nimport { sanitizeUrl } from '../lib/utils.js';\nimport HashNavigation from '../lib/navigation.js';\n\nclass BaseChatMessage extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      progress: 0\n    };\n\n    if (props.uploader) {\n      props.uploader.onProgress = this.handleProgress.bind(this);\n    }\n\n    this.handleExpandImage = this.handleExpandImage.bind(this);\n    this.handlePlayVideo = this.handlePlayVideo.bind(this);\n    this.handleFormButtonClick = this.handleFormButtonClick.bind(this);\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n    this.handleCancelUpload = this.handleCancelUpload.bind(this);\n    this.handleDraftyClick = this.handleDraftyClick.bind(this);\n\n    this.formatterContext = {\n      formatMessage: props.intl.formatMessage.bind(props.intl),\n      viewportWidth: props.viewportWidth,\n      authorizeURL: props.tinode.authorizeURL.bind(props.tinode),\n\n      onHandleClick: this.handleDraftyClick\n    };\n  }\n\n  handleDraftyClick = (e, action) => {\n    switch (action) {\n      case 'image':\n        this.handleExpandImage(e);\n        break;\n      case 'video':\n        this.handlePlayVideo(e);\n        break;\n      case 'form_button':\n        this.handleFormButtonClick(e);\n        break;\n      case 'quote':\n        this.handleQuoteClick(e);\n        break;\n      case 'contact_chat':\n        e.preventDefault();\n        try {\n          // tinode:topic/usr123abc -> usr123abc\n          const pathname = new URL(e.target.dataset.val)?.pathname;\n          const parts = pathname.split('/').filter(Boolean);\n          HashNavigation.navigateTo(HashNavigation.setUrlTopic('', parts.pop() || ''));\n        } catch (error) {\n          console.error(\"Invalid URL:\", error);\n        }\n        break;\n      case 'contact_find':\n        e.preventDefault();\n        let hashUrl = HashNavigation.setUrlSidePanel(window.location.hash, 'newtpk');\n        hashUrl = HashNavigation.addUrlParam(hashUrl, 'q', e.target.dataset.val);\n        hashUrl = HashNavigation.addUrlParam(hashUrl, 'tab', 'find');\n        HashNavigation.navigateTo(hashUrl);\n        break;\n      default:\n        // No special handling; let the browser deal with it.\n        console.info('Unhandled drafty action.', action, e.target.dataset);\n        break;\n    }\n  }\n\n  handleExpandImage(e) {\n    e.preventDefault();\n    this.props.onExpandMedia({\n      url: e.target.src,\n      filename: e.target.dataset.name,\n      width: e.target.dataset.width,\n      height: e.target.dataset.height,\n      size: e.target.dataset.size,\n      type: e.target.dataset.mime\n    });\n  }\n\n  handlePlayVideo(e) {\n    e.preventDefault();\n    this.props.onExpandMedia({\n      video: true,\n      url: e.target.dataset.src,\n      preview: e.target.src,\n      filename: e.target.dataset.name,\n      width: e.target.dataset.width,\n      height: e.target.dataset.height,\n      duration: e.target.dataset.duration,\n      size: e.target.dataset.size,\n      type: e.target.dataset.mime\n    });\n  }\n\n  handleFormButtonClick(e) {\n    e.preventDefault();\n    const data = {\n      seq: this.props.seq\n    };\n    data.resp = {};\n    if (e.target.dataset.name) {\n      data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val :\n        e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;\n    }\n    if (e.target.dataset.act == 'url') {\n      data.ref = sanitizeUrl(e.target.dataset.ref) || 'about:blank';\n    }\n    const text = e.target.dataset.title || 'unknown';\n    this.props.onFormResponse(e.target.dataset.act, text, data);\n  }\n\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    const menuItems = [];\n    if (this.props.received == Tinode.MESSAGE_STATUS_FAILED) {\n      menuItems.push('menu_item_send_retry');\n    }\n    if (this.props.received > Tinode.MESSAGE_STATUS_FATAL) {\n      if (this.props.userIsWriter) {\n        menuItems.push('menu_item_reply');\n        if (!this.props.response) {\n          let immutable = false;\n          Drafty.entities(this.props.content, (_0, _1, tp) => {\n            immutable = ['AU', 'EX', 'FM', 'IM', 'TC', 'VC', 'VD'].includes(tp);\n            return immutable;\n          });\n          if (!immutable) {\n            Drafty.styles(this.props.content, tp => {\n              immutable = ['QQ'].includes(tp);\n              return immutable;\n            });\n          }\n          if (!immutable) {\n            menuItems.push('menu_item_edit');\n          }\n        }\n      }\n      if (this.props.userIsAdmin) {\n        menuItems.push(this.props.pinned ? 'menu_item_unpin' : 'menu_item_pin');\n      }\n    }\n    menuItems.push('menu_item_forward');\n\n    this.props.showContextMenu({\n      seq: this.props.seq,\n      replace: this.props.edited ? parseInt(this.props.edited.split(':')[1]) : 0,\n      content: this.props.content,\n      userFrom: this.props.userFrom,\n      userName: this.props.userName,\n      y: e.pageY,\n      x: e.pageX,\n      pickReply: this.props.pickReply,\n      editMessage: this.props.editMessage,\n      timestamp: this.props.timestamp,\n    }, menuItems);\n  }\n\n  handleProgress(ratio) {\n    this.setState({progress: ratio});\n  }\n\n  handleCancelUpload() {\n    this.props.onCancelUpload(this.props.seq, this.props.uploader);\n  }\n\n  handleQuoteClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    const replyToSeq = this.props.replyToSeq;\n    if (replyToSeq) {\n      this.props.onQuoteClick(replyToSeq);\n    }\n  }\n\n  render() {\n    const sideClass = this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');\n    const bubbleClass = (this.props.sequence == 'single' || this.props.sequence == 'last') ? 'bubble tip' : 'bubble';\n    const avatar = this.props.userAvatar || true;\n    let textSizeClass = 'message-content';\n    const fullDisplay = (this.props.isGroup && this.props.response &&\n      (this.props.sequence == 'single' || this.props.sequence == 'last'));\n\n    let content = this.props.content;\n    const attachments = [];\n    if (this.props.mimeType == Drafty.getContentType() && Drafty.isValid(content)) {\n      Drafty.attachments(content, (att, i) => {\n        if (Drafty.isFormResponseType(att.mime)) {\n          // Don't show json drafty form response objects as attachments.\n          // They are not meant for users.\n          return;\n        }\n        attachments.push(<Attachment\n          tinode={this.props.tinode}\n          downloadUrl={Drafty.getDownloadUrl(att)}\n          filename={att.name}\n          uploading={Drafty.isProcessing(att)}\n          mimetype={att.mime}\n          size={Drafty.getEntitySize(att)}\n          progress={this.state.progress}\n          onCancelUpload={this.handleCancelUpload}\n          onError={this.props.onError}\n          key={i} />);\n      }, this);\n      const tree = Drafty.format(content, fullFormatter, this.formatterContext);\n      content = React.createElement(React.Fragment, null, tree);\n    } else if (typeof content == 'string') {\n      // Make font bigger for emoji-only messages.\n      // Must use 'new RegExp(...)' because React does not like /{1-5}/.\n      if (new RegExp('^\\\\p{RGI_Emoji}{1,5}$', 'v').test(content || '')) {\n        // Content consists of 1-5 emoji characters. Count how many and use it to increase the font size.\n        textSizeClass += ' emoji-' + (content || '').match(/\\p{RGI_Emoji}/vg).length;\n      }\n    } else {\n      content = <><i className=\"material-icons gray\">warning_amber</i> <i className=\"gray\">\n        <FormattedMessage id=\"invalid_content\"\n          defaultMessage=\"invalid content\" description=\"Shown when the message is unreadable\" /></i></>\n    }\n\n    return (\n      <li ref={this.props.innerRef} className={sideClass}>\n        {this.props.isGroup && this.props.response ?\n          <div className=\"avatar-box\">\n            {fullDisplay ?\n              <LetterTile\n                authorizeURL={this.props.tinode.authorizeURL}\n                topic={this.props.userFrom}\n                title={this.props.userName}\n                avatar={avatar} /> :\n              null}\n          </div> :\n          null}\n        <div>\n          <div className={bubbleClass}>\n            <div className=\"content-meta\">\n              <div className={textSizeClass}>\n                {content}\n                {attachments}\n              </div>\n              {this.props.timestamp ?\n                <ReceivedMarker\n                  edited={this.props.edited}\n                  timestamp={this.props.timestamp}\n                  received={this.props.received} />\n                : null}\n            </div>\n            {this.props.showContextMenu ?\n              <span className=\"menuTrigger\">\n                <a href=\"#\" onClick={this.handleContextClick}>\n                  <i className=\"material-icons\">expand_more</i>\n                </a>\n              </span> : null\n            }\n          </div>\n          {fullDisplay ?\n            <div className=\"author\">\n              {this.props.userName ||\n                <i><FormattedMessage id=\"user_not_found\" defaultMessage=\"Not found\"\n                description=\"In place of a user's full name when the user is not found.\" /></i>\n              }\n            </div>\n            : null\n          }\n        </div>\n      </li>\n    );\n  }\n};\n\nconst IntlChatMessage = injectIntl(BaseChatMessage);\nconst ChatMessage = React.forwardRef((props, ref) => <IntlChatMessage innerRef = {ref} {...props} />);\n\nexport default ChatMessage;\n"
  },
  {
    "path": "src/widgets/checkbox.jsx",
    "content": "import React from 'react';\n\n/* CheckBox: styled three-state checkbox, either clickable or static */\nexport default class CheckBox extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleChange = this.handleChange.bind(this);\n  }\n\n  handleChange() {\n    this.props.onChange(this.props.name, !this.props.checked);\n  }\n\n  render() {\n    let classList = ['material-icons'];\n    let iconName;\n    if (Array.isArray(this.props.className)) {\n      classList.push(...this.props.className);\n    } else if (this.props.className) {\n      classList.push(this.props.className);\n    }\n    if (this.props.onChange) {\n      if (this.props.checked) {\n        classList.push('blue', 'clickable');\n        iconName = 'check_box';\n      } else if (this.props.checked === false) {\n        classList.push('blue', 'clickable');\n        iconName = 'check_box_outline_blank';\n      } else {\n        classList.push('lt-blue');\n        iconName = 'indeterminate_check_box';\n      }\n    } else {\n        if (this.props.checked) {\n          iconName = 'check_box';\n        } else {\n          iconName = 'check_box_outline_blank';\n        }\n    }\n    let attrs = {\n      className: classList.join(' '),\n      id: this.props.id,\n    };\n    if (this.props.onChange) {\n      attrs.onClick = this.handleChange;\n    }\n    return React.createElement('i', attrs, iconName);\n  }\n}\n"
  },
  {
    "path": "src/widgets/chip-input.jsx",
    "content": "import React from 'react';\n\nimport Chip from './chip.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n/* BEGIN ChipInput: group membership widget */\nexport default class ChipInput extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = ChipInput.deriveStateFromProps(props);\n    this.state.input = '';\n    this.state.focused = false;\n\n    this.handleTextInput = this.handleTextInput.bind(this);\n    this.removeChipAt = this.removeChipAt.bind(this);\n    this.handleChipCancel = this.handleChipCancel.bind(this);\n    this.handleFocusGained = this.handleFocusGained.bind(this);\n    this.handleFocusLost = this.handleFocusLost.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  static deriveStateFromProps(props) {\n    return {\n      sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),\n      chipIndex: ChipInput.indexChips(props.chips)\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (prevProps.chips != this.props.chips ||\n      prevProps.staticMembers != this.props.staticMembers ||\n      prevProps.prompt != this.props.prompt) {\n      this.setState(ChipInput.deriveStateFromProps(this.props));\n    }\n    if (!prevState || this.props.chips.length > prevState.sortedChips.length) {\n      this.setState({input: ''});\n    }\n  }\n\n  // Map chip index to user name\n  static indexChips(chips) {\n    const index = {};\n    let count = 0;\n    chips.forEach(item => {\n      index[item.user] = count;\n      count ++;\n    });\n    return index;\n  }\n\n  // Have non-removable chips appear before all other chips.\n  static sortChips(chips, keep) {\n    const required = [];\n    const normal = [];\n    chips.forEach(item => {\n      if (keep && keep.includes(item.user)) {\n        required.push(item);\n      } else {\n        normal.push(item);\n      }\n    });\n    return required.concat(normal);\n  }\n\n  handleTextInput(e) {\n    this.setState({input: e.target.value});\n    if (this.props.filterFunc) {\n      this.props.filterFunc(e.target.value);\n    }\n  }\n\n  removeChipAt(idx) {\n    const removed = this.state.sortedChips[idx];\n    this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);\n  }\n\n  handleChipCancel(item, idx) {\n    this.removeChipAt(idx);\n  }\n\n  handleFocusGained() {\n    this.setState({focused: true});\n  }\n\n  handleFocusLost() {\n    this.setState({focused: false});\n    if (this.props.onFocusLost) {\n      this.props.onFocusLost(this.state.input);\n    }\n  }\n\n  handleKeyDown(e) {\n    if (e.key === 'Backspace') {\n      if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {\n        const at = this.state.sortedChips.length - 1;\n        if (this.state.sortedChips[at].user !== this.props.staticMembers) {\n          this.removeChipAt(at);\n        }\n      }\n    } else if (e.key === 'Enter') {\n      if (this.props.onEnter) {\n        this.props.onEnter(this.state.input);\n      }\n    } else if (e.key === 'Escape') {\n      if (this.props.onCancel) {\n        this.props.onCancel();\n      }\n    }\n  }\n\n  render() {\n    const chips = [];\n    let count = 0;\n    const staticMembers = this.props.staticMembers || [];\n    this.state.sortedChips.forEach(item => {\n      chips.push(\n        <Chip\n          tinode={this.props.tinode}\n          onCancel={this.handleChipCancel}\n          avatar={makeImageUrl(item.public ? item.public.photo : null)}\n          title={item.public ? item.public.fn : undefined}\n          noAvatar={this.props.avatarDisabled}\n          topic={item.user}\n          required={staticMembers.includes(item.user)}\n          invalid={item.invalid}\n          index={count}\n          key={item.user} />\n      );\n      count++;\n    });\n    const className = \"chip-input\" + (this.state.focused ? ' focused' : '');\n    const autoFocus = !(this.props.tabIndex > 0);\n    return (\n      <div className={className}>\n        {chips}\n        <input type=\"text\"\n          placeholder={this.props.prompt}\n          onChange={this.handleTextInput}\n          onFocus={this.handleFocusGained}\n          onBlur={this.handleFocusLost}\n          onKeyDown={this.handleKeyDown}\n          value={this.state.input}\n          tabIndex={this.props.tabIndex}\n          autoFocus={autoFocus} />\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/chip.jsx",
    "content": "import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\n\nexport default class Chip extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel(this.props.topic, this.props.index);\n  }\n\n  render() {\n    const title = this.props.title || this.props.topic;\n    const className = this.props.invalid ? 'chip invalid' : 'chip';\n    return (\n      <div className={className}>\n        {this.props.noAvatar ?\n          <span className=\"spacer\" /> :\n          <div className=\"avatar-box\">\n            <LetterTile\n              authorizeURL={this.props.tinode.authorizeURL}\n              avatar={this.props.avatar || true}\n              topic={this.props.topic}\n              title={this.props.title} />\n          </div>\n        }\n        <span>{title}</span>\n        {this.props.onCancel && !this.props.required ?\n          <a href=\"#\" onClick={this.handleCancel} >&times;</a>\n          : <span className=\"spacer\" />}\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/contact-action.jsx",
    "content": "// A panel included into a list of contacts with an action text.\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nclass ContactAction extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.onAction(this.props.action);\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    return (\n      <li onClick={this.handleClick} className=\"action\">\n        <div className=\"action-text\">{formatMessage(this.props.title, this.props.values)}</div>\n      </li>\n    );\n  }\n};\n\nexport default injectIntl(ContactAction);\n"
  },
  {
    "path": "src/widgets/contact-badges.jsx",
    "content": "import React from 'react';\n\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\n\n/* Contact's labels: [you], or icons [muted], [blocked] */\nexport default class ContactBadges extends React.PureComponent {\n  render() {\n    let badges = null;\n    if (this.props.badges && this.props.badges.length > 0) {\n      badges = [];\n      this.props.badges.forEach(b => {\n        const color = (b.color ? ' ' + b.color : '');\n        if (b.icon) {\n          badges.push(<i className={'material-icons as-badge' + color} key={b.key || b.icon}>{icon_mapping[b.icon] || b.icon}</i>);\n        } else {\n          badges.push(<span className={'badge' + color} key={b.key || b.name}>{b.name}</span>);\n        }\n      });\n      return <>{badges}</>;\n    }\n    return null;\n  }\n};\n"
  },
  {
    "path": "src/widgets/contact-list.jsx",
    "content": "// ContactList: component for showing a list of contacts,\n// such as a list of group members in a group chat.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode } from 'tinode-sdk';\n\nimport Contact from './contact.jsx';\nimport ContactAction from './contact-action.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nimport { MESSAGE_PREVIEW_LENGTH } from '../config.js';\n\nconst messages = defineMessages({\n  badge_you: {\n    id: 'badge_you',\n    defaultMessage: 'you',\n    description: 'Badge for indicating the current user'\n  },\n  badge_owner: {\n    id: 'badge_owner',\n    defaultMessage: 'owner',\n    description: 'Badge for indicating the owner'\n  }\n});\n\nclass ContactList extends React.PureComponent {\n  render() {\n    const { formatMessage } = this.props.intl;\n    const showCheckmark = Array.isArray(this.props.topicSelected);\n    const contactNodes = [];\n\n    // Count of contacts, excluding action items.\n    let contactsCount = 0;\n    if (this.props.showSelfTopic) {\n      const selected = showCheckmark ?\n        (this.props.topicSelected.indexOf('slf') > -1) :\n        (this.props.topicSelected === 'slf');\n      contactNodes.push(\n        <Contact\n          tinode={this.props.tinode}\n          avatar={true}\n          showMode={this.props.showMode}\n          selected={selected}\n          showCheckmark={showCheckmark}\n          onSelected={this.props.onTopicSelected}\n          showContextMenu={this.props.showContextMenu}\n          index={contactNodes.length}\n          item='slf'\n          key='slf' />\n      );\n      contactsCount ++;\n    }\n    if (this.props.contacts && this.props.contacts.length > 0) {\n      // Used keys to prevent duplicates when the user comes both from the 'fnd' and the list of contacts.\n      const usedKeys = {};\n      this.props.contacts.forEach(c => {\n        if (c.action) {\n          // Action item\n          contactNodes.push(\n            <ContactAction\n              title={c.title} action={c.action} values={c.values}\n              key={c.action}\n              onAction={this.props.onAction}\n              />);\n        } else {\n          // Normal contact\n          const key = this.props.showMode ? c.user : (c.topic || c.user);\n          if (usedKeys[key]) {\n            return;\n          }\n          usedKeys[key] = true;\n          // If filter function is provided, filter out the items\n          // which don't satisfy the condition.\n          if (this.props.filterFunc && this.props.filter) {\n            const filterOn = [key];\n            if (c.private && c.private.comment) {\n              filterOn.push(('' + c.private.comment).toLowerCase());\n            }\n            if (c.public && c.public.fn) {\n              filterOn.push(('' + c.public.fn).toLowerCase());\n            }\n            if (!this.props.filterFunc(this.props.filter, filterOn)) {\n              return;\n            }\n          }\n\n          const isChannel = Tinode.isChannelTopicName(key);\n          const isGroup = !isChannel && Tinode.isGroupTopicName(key);\n          const selected = showCheckmark ?\n            (this.props.topicSelected.indexOf(key) > -1) :\n            (this.props.topicSelected === key);\n          const badges = [];\n          if (this.props.showMode) {\n            if (key == this.props.myUserId) {\n              badges.push({name: formatMessage(messages.badge_you), color: 'green'});\n            }\n            if (c.acs && c.acs.isOwner()) {\n              badges.push({name: formatMessage(messages.badge_owner), color: 'blue'});\n            }\n          }\n\n          const comment = Array.isArray(c.private) ?\n            c.private.join(',') : (c.private ? c.private.comment : null);\n          let preview;\n          let forwarded;\n          let previewIsResponse;\n          let deliveryStatus;\n          if (!this.props.showMode && c.latestMessage) {\n            const msg = c.latestMessage();\n            if (msg) {\n              forwarded = msg.head ? msg.head.forwarded : null;\n              deliveryStatus = msg._status || c.msgStatus(msg, true);\n              previewIsResponse = msg.from != this.props.myUserId;\n              if (msg.content) {\n                preview = typeof msg.content == 'string' ?\n                  msg.content.substr(0, MESSAGE_PREVIEW_LENGTH) :\n                  Drafty.preview(msg.content, MESSAGE_PREVIEW_LENGTH);\n              }\n            }\n          }\n\n          contactNodes.push(\n            <Contact\n              tinode={this.props.tinode}\n              title={c.public ? c.public.fn : null}\n              avatar={makeImageUrl(c.public ? c.public.photo : null)}\n              comment={comment}\n              preview={preview}\n              previewIsResponse={previewIsResponse}\n              forwarded={forwarded}\n              received={deliveryStatus}\n              unread={this.props.showUnread ? c.unread : 0}\n              now={c.online && this.props.connected}\n              acs={c.acs}\n              showMode={this.props.showMode}\n              badges={badges}\n              showCheckmark={showCheckmark}\n              selected={selected}\n              pinned={c.pinned}\n              showOnline={this.props.showOnline && !isChannel}\n              isChannel={isChannel}\n              isGroup={isGroup}\n              showContextMenu={this.props.showContextMenu}\n              isVerified={c.trusted && c.trusted.verified}\n              isStaff={c.trusted && c.trusted.staff}\n              isDangerous={c.trusted && c.trusted.danger}\n              deleted={c._deleted}\n              onSelected={this.props.onTopicSelected}\n              item={key}\n              index={contactNodes.length}\n              key={key} />\n          );\n          contactsCount ++;\n        }\n      }, this);\n    }\n\n    return (\n      <div className={this.props.noScroll ? null : \"scrollable-panel\"}>\n        {contactsCount == 0 ?\n          <div className=\"center-medium-text\" style={{whiteSpace: 'pre-line'}}>\n            {this.props.emptyListMessage}\n          </div>\n          :\n          null\n        }\n        {contactNodes.length > 0 ?\n          <ul className=\"contact-box\">\n            {contactNodes}\n          </ul>\n          :\n          null\n        }\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(ContactList);\n"
  },
  {
    "path": "src/widgets/contact.jsx",
    "content": "// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport ContactBadges from './contact-badges.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport UnreadBadge from './unread-badge.jsx';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { deliveryMarker } from '../lib/utils.js';\nimport { truncateString } from '../lib/strformat.js';\n\nconst messages = defineMessages({\n  self_topic_name: {\n    id: 'self_topic_name',\n    defaultMessage: 'Saved messages',\n    description: 'Name of self topic for UI'\n  },\n  self_topic_comment: {\n    id: 'self_topic_comment',\n    defaultMessage: 'Notes, messages, links, files saved for posterity',\n    description: 'Comment for self topic for UI'\n  }\n});\n\nclass Contact extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.handleClick = this.handleClick.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n  }\n\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.props.onSelected) {\n      // Index this.props.index is used by GroupManager.\n      this.props.onSelected(this.props.item, this.props.index);\n    }\n  }\n\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.showContextMenu({\n      topicName: this.props.item,\n      topicTitle: this.props.title,\n      y: e.pageY,\n      x: e.pageX\n    });\n  }\n\n  render() {\n    let title = this.props.title;\n    const self = Tinode.isSelfTopicName(this.props.item);\n    if (!title) {\n      if (self) {\n        title = this.props.intl.formatMessage(messages.self_topic_name);\n      } else {\n        title = <i><FormattedMessage id=\"unnamed_topic\" defaultMessage=\"Unnamed\"\n          description=\"Title shown when the topic has no name\" /></i>;\n      }\n    } else if (title.length > 30) {\n      // Have to support RTL languages too.\n      title = truncateString(title, 30);\n    }\n    const online = this.props.now ? 'online' : 'offline';\n    const avatar = this.props.avatar ? this.props.avatar : true;\n    const badges = this.props.badges ? this.props.badges.slice() : [];\n    const icon_badges = [];\n    if (this.props.isVerified) {\n      icon_badges.push({icon: 'verified', color: 'verified-color'});\n    }\n    if (this.props.isStaff) {\n      icon_badges.push({icon: 'staff', color: 'staff-color'});\n    }\n    if (this.props.isDangerous) {\n      icon_badges.push({icon: 'dangerous', color: 'danger-color'});\n    }\n    if (this.props.acs) {\n      if (this.props.showMode) {\n        badges.push({name: this.props.acs.getMode(), key: 'mode'});\n      }\n      if (this.props.acs.isMuted()) {\n        icon_badges.push({icon: 'muted'});\n      }\n      if (!this.props.acs.isJoiner()) {\n        icon_badges.push({icon: 'banned'});\n      }\n    }\n\n    // The this.props.preview contains alreay shortened Drafty or string.\n    let preview;\n    if (typeof this.props.preview == 'string') {\n      preview = this.props.preview;\n    } else if (Drafty.isValid(this.props.preview)) {\n      preview = React.createElement(React.Fragment, null, Drafty.format(this.props.preview, previewFormatter,\n        {formatMessage: this.props.intl.formatMessage, previewIsResponse: this.props.previewIsResponse}));\n    } else if (this.props.preview) {\n      preview =\n        <><i className=\"material-icons gray\">warning_amber</i> <i className=\"gray\">\n          <FormattedMessage id=\"invalid_content\"\n            defaultMessage=\"invalid content\" description=\"Shown when the message is unreadable\" /></i>\n        </>;\n    }\n\n    const icon = deliveryMarker(this.props.received);\n    const marker = icon ? <i className={'material-icons small space-right' +\n      (icon.color ? ' ' + icon.color : '')}>{icon.name}</i> : null;\n    const titleClass = 'contact-title' + (this.props.deleted ? ' deleted' : '');\n\n    const comment = preview || this.props.comment ||\n      (self ? this.props.intl.formatMessage(messages.self_topic_comment) : '\\u00A0');\n    const bgColor = this.props.showCheckmark ? null :\n      (this.props.selected ? 'selected' : (this.props.pinned ? 'tpinned' : null));\n    return (\n      <li className={bgColor} onClick={this.handleClick}>\n        <div className=\"avatar-box\">\n          <LetterTile\n            authorizeURL={this.props.tinode.authorizeURL}\n            avatar={avatar}\n            title={this.props.title}\n            topic={this.props.item}\n            deleted={this.props.deleted} />\n          {this.props.deleted ? <i className=\"deleted material-icons\">cancel</i> :\n            (!self && this.props.showOnline) ? <span className={online} /> :\n            (this.props.showCheckmark && this.props.selected) ?\n            <i className=\"checkmark material-icons\">check_circle</i>\n            : null}\n        </div>\n        <div className=\"text-box\">\n          <div><span className={titleClass}>{title}</span>\n            {this.props.isGroup ? <i className=\"material-icons as-badge\">group</i> : null}\n            {this.props.isChannel ? <i className=\"material-icons as-badge\">podcasts</i> : null}\n            {!self ? <ContactBadges badges={icon_badges} /> : null}\n            {!this.props.deleted ? <UnreadBadge count={this.props.unread} /> : null}\n          </div>\n          {this.props.showMode ?\n            <span><ContactBadges badges={badges} /></span> :\n            this.props.small ? null : <div className=\"contact-comment\">{marker}<span>{comment}</span></div>}\n        </div>\n        {this.props.showContextMenu ?\n          <span className=\"menuTrigger\">\n            <a href=\"#\" onClick={this.handleContextClick}>\n              <i className=\"material-icons\">expand_more</i>\n            </a>\n          </span> : null}\n      </li>\n    );\n  }\n};\n\nexport default injectIntl(Contact);\n"
  },
  {
    "path": "src/widgets/context-menu.jsx",
    "content": "// Context Menu: popup/dropdown menu.\nimport React from 'react';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nimport { REM_SIZE } from '../config.js';\n\nconst messages = defineMessages({\n  info: {\n    id: 'menu_item_info',\n    defaultMessage: 'Info',\n    description: 'Show extended topic information'\n  },\n  clear_messages: {\n    id: 'menu_item_clear_messages',\n    defaultMessage: 'Clear messages',\n    description: 'Delete all messages'\n  },\n  clear_for_all: {\n    id: 'menu_item_clear_messages_for_all',\n    defaultMessage: 'Clear for All',\n    description: 'Delete all message(s) for all members'\n  },\n  delete: {\n    id: 'menu_item_delete',\n    defaultMessage: 'Delete',\n    description: 'Delete selected messages'\n  },\n  delete_for_all: {\n    id: 'menu_item_delete_for_all',\n    defaultMessage: 'Delete for All',\n    description: 'Delete selected message(s) for all members'\n  },\n  send_retry: {\n    id: 'menu_item_send_retry',\n    defaultMessage: 'Retry',\n    description: 'Retry sending message'\n  },\n  mute: {\n    id: 'menu_item_mute',\n    defaultMessage: 'Mute',\n    description: 'Turn off notifications'\n  },\n  unmute: {\n    id: 'menu_item_unmute',\n    defaultMessage: 'Unmute',\n    description: 'Turn notifications on'\n  },\n  reply: {\n    id: 'menu_item_reply',\n    defaultMessage: 'Reply',\n    description: 'Reply to message'\n  },\n  forward: {\n    id: 'menu_item_forward',\n    defaultMessage: 'Forward',\n    description: 'Forward message'\n  },\n  edit: {\n    id: 'menu_item_edit',\n    defaultMessage: 'Edit',\n    description: 'Edit message'\n  },\n  topic_delete: {\n    id: 'menu_item_delete_topic',\n    defaultMessage: 'Delete',\n    description: 'Delete entire topic'\n  },\n  topic_delete_warning: {\n    id: 'topic_delete_warning',\n    defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',\n    description: 'Alert warning when deleting entire topic'\n  },\n  delete_messages_warning: {\n    id: 'delete_messages_warning',\n    defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',\n    description: 'Alert dialog warning when hard-deleting all messages.'\n  },\n  unblock: {\n    id: 'menu_item_unblock',\n    defaultMessage: 'Unblock',\n    description: 'Unblock topic or user'\n  },\n  // Generic string suitable for either topic or user.\n  block: {\n    id: 'menu_item_block',\n    defaultMessage: 'Block',\n    description: 'Block topic or user'\n  },\n  topic_block_warning: {\n    id: 'topic_block_warning',\n    defaultMessage: 'Are you sure you want to block this conversation?',\n    description: 'Alert warning when blocking a topic.'\n  },\n  member_delete: {\n    id: 'menu_item_member_delete',\n    defaultMessage: 'Remove',\n    description: 'Remove user from topic'\n  },\n  archive: {\n    id: 'menu_item_archive_topic',\n    defaultMessage: 'Archive',\n    description: 'Move topic from the list of active chats to archive'\n  },\n  unarchive: {\n    id: 'menu_item_restore_topic',\n    defaultMessage: 'Restore',\n    description: 'Restore topic from archive'\n  },\n  edit_permissions: {\n    id: 'menu_item_edit_permissions',\n    defaultMessage: 'Edit permissions',\n    description: 'Menu item [Edit permissions]'\n  },\n  clear_messages_warning: {\n    id: 'clear_messages_warning',\n    defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',\n    description: 'Alert dialog warning when deleting all messages.'\n  },\n  pin_message: {\n    id: 'pin_message',\n    defaultMessage: 'Pin',\n    description: 'Menu item [Pin] for pinning message to the top.'\n  },\n  unpin_message: {\n    id: 'unpin_message',\n    defaultMessage: 'Unpin',\n    description: 'Menu item [Unpin] for un-pinning the message.'\n  },\n  pin_chat: {\n    id: 'pin_chat',\n    defaultMessage: 'Pin',\n    description: 'Menu item [Pin] for pinning chat to the top.'\n  },\n  unpin_chat: {\n    id: 'unpin_chat',\n    defaultMessage: 'Unpin',\n    description: 'Menu item [Unpin] for un-pinning the chat.'\n  },\n});\n\nclass ContextMenu extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.selfRef = React.createRef();\n\n    const {formatMessage} = props.intl;\n\n    this.handlePageClick = this.handlePageClick.bind(this);\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n\n    // Preconfigured menu items.\n    this.MenuItems = {\n      'topic_info': {\n        id: 'topic_info',\n        title: formatMessage(messages.info),\n        handler: null\n      },\n      'messages_clear': {\n        id: 'messages_clear',\n        title: formatMessage(messages.clear_messages),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(\n            params.topicTitle || formatMessage(messages.clear_messages), // title\n            formatMessage(messages.clear_messages_warning), // content\n            (_ => { this.deleteMessages(true, false, params, errorHandler); }), // onConfirm\n            null, // \"OK\"\n            true, // Show Reject button\n            null  // \"Cancel\"\n          );\n        }\n      },\n      'messages_clear_hard': {\n        id: 'messages_clear_hard',\n        title: formatMessage(messages.clear_for_all),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(\n            params.topicTitle || formatMessage(messages.clear_for_all), // title\n            formatMessage(messages.delete_messages_warning), // content\n            (_ => { return this.deleteMessages(true, true, params, errorHandler); }),\n            null, // \"OK\"\n            true, // Show Reject button\n            null  // \"Cancel\"\n          );\n        }\n      },\n      'message_delete': {\n        id: 'message_delete',\n        title: formatMessage(messages.delete),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, false, params, errorHandler);\n        }\n      },\n      'message_delete_hard': {\n        id: 'message_delete_hard',\n        title: formatMessage(messages.delete_for_all),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, true, params, errorHandler);\n        }\n      },\n      // Hard-delete but with just 'Delete' title.\n      'message_delete_generic': {\n        id: 'message_delete_generic',\n        title: formatMessage(messages.delete),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, true, params, errorHandler);\n        }\n      },\n      'menu_item_send_retry': {\n        id: 'menu_item_send_retry',\n        title: formatMessage(messages.send_retry),\n        handler: (params, errorHandler) => {\n          return this.retryMessage(params, errorHandler);\n        }\n      },\n      'menu_item_reply': {\n        id: 'menu_item_reply',\n        title: formatMessage(messages.reply),\n        handler: (params, errorHandler) => {\n          return this.replyToMessage(params, errorHandler);\n        }\n      },\n      'menu_item_forward': {\n        id: 'menu_item_forward',\n        title: formatMessage(messages.forward),\n        handler: _ => {} /* the action is taken directly in tinode-web */\n      },\n      'menu_item_edit': {\n        id: 'menu_item_edit',\n        title: formatMessage(messages.edit),\n        handler: (params, errorHandler) => {\n          return this.editMessage(params, errorHandler);\n        }\n      },\n      'menu_item_pin': {\n        id: 'menu_item_pin',\n        title: formatMessage(messages.pin_message),\n        handler: (params, errorHandler) => {\n          return this.pinMessage(true, params, errorHandler);\n        }\n      },\n      'menu_item_unpin': {\n        id: 'menu_item_unpin',\n        title: formatMessage(messages.unpin_message),\n        handler: (params, errorHandler) => {\n          return this.pinMessage(false, params, errorHandler);\n        }\n      },\n      'topic_unmute': {\n        id: 'topic_unmute',\n        title: formatMessage(messages.unmute),\n        handler: this.topicPermissionSetter.bind(this, '+P')\n      },\n      'topic_mute': {\n        id: 'topic_mute',\n        title: formatMessage(messages.mute),\n        handler: this.topicPermissionSetter.bind(this, '-P')\n      },\n      'topic_unblock': {\n        id: 'topic_unblock',\n        title: formatMessage(messages.unblock),\n        handler: this.topicPermissionSetter.bind(this, '+JP')\n      },\n      'topic_block': {\n        id: 'topic_block',\n        title: formatMessage(messages.block),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(\n            params.topicTitle || formatMessage(messages.block), // title\n            formatMessage(messages.topic_block_warning), // content\n            (_ => this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {\n              this.props.onTopicRemoved(params.topicName);\n              return ctrl;\n            })),\n            null, // \"OK\"\n            true, // Show Reject button\n            null  // \"Cancel\"\n          );\n        }\n      },\n      'topic_delete': {\n        id: 'topic_delete',\n        title: formatMessage(messages.topic_delete),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(\n            params.topicTitle || formatMessage(messages.topic_delete), // title\n            formatMessage(messages.topic_delete_warning), // content\n            (_ => {\n              const topic = this.props.tinode.getTopic(params.topicName);\n              if (!topic) {\n                console.warn(\"Topic not found: \", params.topicName);\n                return;\n              }\n              return topic.delTopic(true).catch(err => {\n                if (errorHandler) {\n                  errorHandler(err.message, 'err');\n                }\n              });\n            }),\n            null, // \"OK\"\n            true, // Show Reject button\n            null  // \"Cancel\"\n          );\n        }\n      },\n      'topic_archive': {\n        id: 'topic_archive',\n        title: formatMessage(messages.archive),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic) {\n            console.warn(\"Topic not found: \", params.topicName);\n            return;\n          }\n          return topic.archive(true).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_restore': {\n        id: 'topic_restore',\n        title: formatMessage(messages.unarchive),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic) {\n            console.warn(\"Topic not found: \", params.topicName);\n            return;\n          }\n          return topic.archive(false).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_pin': {\n        id: 'topic_pin',\n        title: formatMessage(messages.pin_chat),\n        handler: (params, errorHandler) => {\n          const me = this.props.tinode.getMeTopic();\n          if (!me) {\n            console.warn(\"'me' topic not found\");\n            return;\n          }\n          return me.pinTopic(params.topicName, true).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_unpin': {\n        id: 'topic_unpin',\n        title: formatMessage(messages.unpin_chat),\n        handler: (params, errorHandler) => {\n          const me = this.props.tinode.getMeTopic();\n          if (!me) {\n            console.warn(\"'me' topic not found\");\n            return;\n          }\n          return me.pinTopic(params.topicName, false).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      // menu_item_edit_permissions is defined elsewhere.\n      'permissions': {\n        id: 'permissions',\n        title: formatMessage(messages.edit_permissions),\n        handler: null\n      },\n      'member_delete': {\n        id: 'member_delete',\n        title: formatMessage(messages.member_delete),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic || !params.user) {\n            console.warn(\"Topic or user not found: '\" + params.topicName + \"', '\" + params.user + \"'\");\n            return;\n          }\n          return topic.delSubscription(params.user).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'member_mute': {\n        id: 'member_mute',\n        title: formatMessage(messages.mute),\n        handler: this.topicPermissionSetter.bind(this, '-P')\n      },\n      'member_unmute': {\n        id: 'member_unmute',\n        title: formatMessage(messages.unmute),\n        handler: this.topicPermissionSetter.bind(this, '+P')\n      },\n      'member_block': {\n        id: 'member_block',\n        title: formatMessage(messages.block),\n        handler: this.topicPermissionSetter.bind(this, '-JP')\n      },\n      'member_unblock': {\n        id: 'member_unblock',\n        title: formatMessage(messages.unblock),\n        handler: this.topicPermissionSetter.bind(this, '+JP')\n      },\n    };\n  }\n\n  componentDidMount() {\n    document.addEventListener('mousedown', this.handlePageClick, false);\n    document.addEventListener('keyup', this.handleEscapeKey, false);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('mousedown', this.handlePageClick, false);\n    document.removeEventListener('keyup', this.handleEscapeKey, false);\n  }\n\n  handlePageClick(e) {\n    if (this.selfRef.current.contains(e.target)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.hide();\n  }\n\n  handleEscapeKey(e) {\n    if (e.keyCode === 27) {\n      this.props.hide();\n    }\n  }\n\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.hide();\n    let item = this.props.items[e.currentTarget.dataset.id];\n    if (typeof item == 'string') {\n      item = this.MenuItems[item];\n    }\n\n    if (!item) {\n      console.error(\"Invalid menu item ID\", e.currentTarget.dataset.id);\n    } else {\n      this.props.onAction(\n        item.id,\n        item.handler(this.props.params, this.props.onError),\n        this.props.params);\n    }\n  }\n\n  // Menu Actions\n\n  deleteMessages(all, hard, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      console.warn(\"Topic not found: \", params.topicName);\n      return;\n    }\n\n    // We don't know if the message is still pending (e.g. attachment is being uploaded),\n    // so try cancelling first. No harm if we can't cancel.\n    // The message can be cancelled if transmission to the server has not\n    // started yet or if the message send has failed.\n    if (!all && topic.cancelSend(params.seq)) {\n      return;\n    }\n\n    const promise = all ?\n      topic.delMessagesAll(hard) :\n      params.replace > 0 ?\n        topic.delMessagesEdits(params.replace, hard) :\n        topic.delMessagesList([params.seq], hard);\n\n    return promise.catch(err => {\n      if (errorHandler) {\n        errorHandler(err.message, 'err');\n      }\n    });\n  }\n\n  // Retries sending failed message.\n  retryMessage(params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    // Remove the existing message entry.\n    if (!topic || !topic.flushMessage(params.seq)) {\n      return;\n    }\n    const msg = topic.createMessage(params.content, false);\n    return topic.publishDraft(msg).catch(err => {\n      if (errorHandler) {\n        errorHandler(err.message, 'err');\n      }\n    });\n  }\n\n  // Pin or unpin the message.\n  pinMessage(pin, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      return;\n    }\n    topic.pinMessage(params.seq, pin)\n      .catch(err => errorHandler ? errorHandler(err.message, 'err') : null);\n  }\n\n  // Function is used by context menu to set permissions.\n  topicPermissionSetter(mode, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      console.warn(\"Topic not found\", params.topicName);\n      return;\n    }\n\n    let result = topic.updateMode(params.user, mode);\n    if (errorHandler) {\n      result = result.catch(err => errorHandler(err.message, 'err'));\n    }\n    return result;\n  }\n\n  replyToMessage(params, errorHandler) {\n    params.pickReply(params.seq, params.content, params.userFrom, params.userName, errorHandler);\n  }\n\n  editMessage(params, errorHandler) {\n    params.editMessage(params.replace || params.seq, params.content, errorHandler);\n  }\n\n  render() {\n    const menu = [];\n    let count = 0;\n    this.props.items.forEach(item => {\n      if (typeof item == 'string') {\n        item = this.MenuItems[item];\n      }\n      if (item && item.title) {\n        const className = item.disabled ? 'disabled' : undefined;\n        menu.push(\n          item.title == '-' ?\n            <li className=\"separator\" key={count} />\n            :\n            <li className={className} onClick={this.handleClick} data-id={count} key={count}>{item.title}</li>\n        );\n      }\n      count++;\n    });\n\n    // Ensure that menu is inside the app-container.\n    const hSize = 12 * REM_SIZE;\n    const vSize = REM_SIZE * (0.7 + menu.length * 2.5);\n    const left = (this.props.bounds.right - this.props.clickAt.x < hSize) ?\n        (this.props.clickAt.x - this.props.bounds.left - hSize) :\n        (this.props.clickAt.x - this.props.bounds.left);\n    const top = (this.props.bounds.bottom - this.props.clickAt.y < vSize) ?\n        (this.props.clickAt.y - this.props.bounds.top - vSize) :\n        (this.props.clickAt.y - this.props.bounds.top);\n\n    const position = {\n      left: left + 'px',\n      top: top + 'px'\n    };\n\n    return (\n      <ul className=\"menu\" style={position} ref={this.selfRef}>\n        {menu}\n      </ul>\n    );\n  }\n}\n\nexport default injectIntl(ContextMenu);\n"
  },
  {
    "path": "src/widgets/credential-edit.jsx",
    "content": "// 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      <><div className=\"panel-form-row\">\n        <label className=\"large\"><FormattedMessage id=\"change_email\" defaultMessage=\"Change email\"\n          description=\"Prompt to change current email\" /></label>\n      </div>\n      <div className=\"group\">\n        <label className=\"small gray\">\n          <FormattedMessage id=\"current_email\" defaultMessage=\"Current email\" description=\"Label for old email\" />\n        </label>\n      </div></>);\n\n    const changePhone = (\n      <><div className=\"panel-form-row\">\n      <label className=\"large\"><FormattedMessage id=\"change_phone\" defaultMessage=\"Change phone number\"\n        description=\"Prompt to change current phone number\"/></label>\n      </div>\n      <div className=\"group\">\n        <label className=\"small gray\">\n          <FormattedMessage id=\"current_phone\" defaultMessage=\"Current phone number\" description=\"Label for old phone\" />\n        </label>\n      </div></>\n    );\n\n    const newEmailLabel = (<label className=\"small gray\">\n        <FormattedMessage id=\"new_email\" defaultMessage=\"New email\"\n          description=\"Prompt for entering a new email\" />\n      </label>);\n\n    const newEmailInput = (\n      <><div className=\"group\">{newEmailLabel}</div>\n      <div className=\"group\">\n        <FormattedMessage id=\"email_prompt\" defaultMessage=\"Email, e.g. jdoe@example.com\"\n          description=\"Input placeholder for email entry\">{\n          (email_prompt) => <input type=\"email\" placeholder={email_prompt} autoComplete=\"email\"\n            value={this.state.email} onChange={this.handleEmailChange} required/>\n        }</FormattedMessage>\n      </div></>\n    );\n\n    const newPhoneLabel = (<label className=\"small gray\">\n        <FormattedMessage id=\"new_phone_number\" defaultMessage=\"New phone number\"\n        description=\"Prompt for entering a new telephone number\" />\n      </label>);\n\n    const newPhoneInput = (\n      <><div className=\"group\">{newPhoneLabel}</div>\n      <div className=\"panel-form-row\">\n        <PhoneEdit\n          autoFocus={true}\n          onShowCountrySelector={this.props.onShowCountrySelector}\n          onSubmit={this.handlePhoneChange} />\n      </div></>\n    );\n\n    const codeInput = (\n      <><div className=\"group\">\n        <label className=\"small gray\"><FormattedMessage id=\"enter_confirmation_code_prompt\" defaultMessage=\"Confirmation code\"\n            description=\"Request to enter confirmation code\" /></label>\n      </div>\n      <div className=\"group\">\n        <FormattedMessage id=\"numeric_confirmation_code_prompt\" defaultMessage=\"Numbers only\"\n          description=\"Prompt for numeric conformation code\">{\n          (numbers_only) => <input type=\"text\" placeholder={numbers_only} maxLength={10}\n          value={this.state.code} onChange={this.handleCodeChange} required/>\n        }</FormattedMessage>\n      </div></>\n    );\n\n    return (<form className=\"panel-form-column\" onSubmit={this.handleSubmit}>\n      {readyForCode ?\n        (this.props.method == 'email' ? newEmailLabel : this.props.method == 'tel' ? newPhoneLabel : null)\n        :\n        (this.props.method == 'email' ? changeEmail : this.props.method == 'tel' ? changePhone : null)\n      }\n      <div className=\"panel-form-row\">\n        <tt className=\"quoted\">{formattedValue}</tt>\n      </div>\n      {readyForCode ?\n        null\n        :\n        (this.props.method == 'email' ? newEmailInput : this.props.method == 'tel' ? newPhoneInput : null)\n      }\n      {readyForCode ? codeInput : null}\n      <div className=\"dialog-buttons\">\n        <button className=\"secondary\" onClick={this.props.onCancel}>\n          <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n        </button>\n        <button className=\"primary\" type=\"submit\" >\n          <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n        </button>\n      </div>\n    </form>);\n  }\n}\n\nexport default injectIntl(CredentialEdit);\n"
  },
  {
    "path": "src/widgets/cropper.jsx",
    "content": "// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 8;\n\nexport default class Cropper extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      // Coordinates of the top left corner of the image in bounding box (container) coordinates.\n      panX: 0,\n      panY: 0,\n      // Origin of the zoom in image coordinates.\n      originX: 0,\n      originY: 0,\n      // Zoom scale.\n      zoom: 1,\n      // Zoom min and max.\n      minZoom: 0.001,\n      maxZoom: DEFAULT_MAX_ZOOM,\n    };\n\n    // References to DOM elements for hooking up events and getting screen dimensions.\n    // The transparent element which captures mouse moves (moves with the image).\n    this.overlay = React.createRef();\n    // The image cutout window or view port (static).\n    this.cutout = React.createRef();\n    // Scaled and translated image preview.\n    this.preview = React.createRef();\n    // The main container (static).\n    this.boundingBox = React.createRef();\n\n    // The original image width and height before any scaling (does not change).\n    this.imageWidth = 0;\n    this.imageHeight = 0;\n\n    // Mouse position when dragging.\n    this.mouseX = 0\n    this.mouseY = 0;\n    // Length of the previous mouse move when dragging.\n    this.prevDistance = 0;\n\n    // Bounding rectangles of static elements (does not change).\n    this.cutoutRect = {};\n    this.bBoxRect = {};\n    // Center of the bounding box (does not change).\n    this.originX = 0;\n    this.originY = 0;\n\n    this.initScaling = this.initScaling.bind(this);\n    this.onZoom = this.onZoom.bind(this);\n    this.handleZoom = this.handleZoom.bind(this);\n    this.mouseDown = this.mouseDown.bind(this);\n    this.mouseUp = this.mouseUp.bind(this);\n    this.mouseMove = this.mouseMove.bind(this);\n    this.mouseTouch = this.mouseTouch.bind(this);\n    this.positionAll = this.positionAll.bind(this);\n    this.translate = this.translate.bind(this);\n  }\n\n  componentDidMount() {\n    this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n    this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n    // The rectangle position is in viewport coordinates.\n    this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n    // Center of the bounding box in container coordinates.\n    this.originX = this.bBoxRect.width / 2;\n    this.originY = this.bBoxRect.height / 2;\n\n    // The cutout circle bounds in viewport coordinates.\n    this.cutoutRect = this.cutout.current.getBoundingClientRect();\n  }\n\n  componentWillUnmount() {\n    if (this.overlay.current) {\n      this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n      this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n    }\n  }\n\n  // Position all elements.\n  positionAll(panX, panY, zoom) {\n    // Zoom origin in image preview coordinates.\n    this.setState({\n      panX: panX,\n      panY: panY,\n      zoom: zoom,\n      originX: this.originX - panX,\n      originY: this.originY - panY,\n    });\n\n    // Pass cut out coordinates to caller.\n    const left = (this.originX - panX) * zoom - this.originX;\n    const top = (this.originY - panY) * zoom - this.originY;\n    this.props.onChange(\n      (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n      (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n      this.cutoutRect.width / zoom,\n      this.cutoutRect.height / zoom,\n      zoom);\n  }\n\n  // Check if new location is within the limits.\n  static checkBound(currPan, img, cutout, delta) {\n    let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n    if (nextDiff == 0) {\n      // Cutout is completely within the image.\n      currPan += delta;\n    } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n      // Cutout is outside of the range but closer to the bound.\n      currPan += delta;\n    }\n    return currPan;\n  }\n\n  initScaling() {\n    // Initialize components.\n    const imgRect = this.preview.current.getBoundingClientRect();\n\n    this.imageWidth = imgRect.width;\n    this.imageHeight = imgRect.height;\n\n    // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n    const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n    this.setState({\n      minZoom: minZoom,\n      maxZoom: minZoom * DEFAULT_MAX_ZOOM\n    });\n\n    // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n    const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n    // Converting from viewport coordinates to container, then panning.\n    const panX = this.cutoutRect.left - this.bBoxRect.left -\n      (imgRect.width - this.cutoutRect.width) / 2;\n    const panY = this.cutoutRect.top - this.bBoxRect.top -\n      (imgRect.height - this.cutoutRect.height) / 2;\n\n    this.positionAll(panX, panY, zoom);\n  }\n\n  onZoom(e) {\n    this.handleZoom(e.target.value);\n  }\n\n  handleZoom(zoom) {\n    let panX = this.state.panX;\n    let panY = this.state.panY;\n\n    // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n\n    // Calculate image coordinates at the new zoom.\n    const imgLeft = this.originX - (this.originX - panX) * zoom;\n    const imgRight = imgLeft + this.imageWidth * zoom;\n    const imgTop = this.originY - (this.originY - panY) * zoom;\n    const imgBottom = imgTop + this.imageHeight * zoom;\n\n    // Cutout in the same coordinates as the image.\n    const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n    const coRight = coLeft + this.cutoutRect.width;\n    const coTop = this.cutoutRect.top - this.bBoxRect.top;\n    const coBottom = coTop + this.cutoutRect.height;\n\n    if (coLeft < imgLeft) {\n      panX -= (imgLeft - coLeft) / zoom;\n    } else if (coRight > imgRight) {\n      panX += (coRight - imgRight) / zoom;\n    }\n\n    if (coTop < imgTop) {\n      panY -= (imgTop - coTop) / zoom;\n    } else if (coBottom > imgBottom) {\n      panY += (coBottom - imgBottom) /zoom;\n    }\n\n    this.positionAll(panX, panY, zoom);\n  }\n\n  mouseDown(e) {\n    if (e.touches) {\n      this.mouseX = e.touches[0].pageX;\n      this.mouseY = e.touches[0].pageY;\n    } else {\n      this.mouseX = e.pageX;\n      this.mouseY = e.pageY;\n    }\n\n    window.addEventListener('mousemove', this.mouseMove, { passive: false });\n    window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n    window.addEventListener('mouseup', this.mouseUp, { passive: true });\n    window.addEventListener('touchend', this.mouseUp, { passive: true });\n    // Disable text selection in the entire document.\n    document.body.style['userSelect'] = 'none';\n  }\n\n  // Perform image panning.\n  translate(pageX, pageY) {\n    const dX = (pageX - this.mouseX) / this.state.zoom;\n    const dY = (pageY - this.mouseY) / this.state.zoom;\n\n    this.mouseX = pageX;\n    this.mouseY = pageY;\n\n    // Make sure the image is within the cutout window.\n    const imgRect = this.preview.current.getBoundingClientRect();\n\n    // Check if the new position is within the boundaries, and if not if it's closer to them.\n    const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n      [this.cutoutRect.left, this.cutoutRect.right], dX);\n    const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n      [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n    this.positionAll(panX, panY, this.state.zoom);\n  }\n\n  // Image panning.\n  mouseMove(e) {\n    e.preventDefault();\n    this.translate(e.pageX, e.pageY);\n  }\n\n  mouseTouch(e) {\n    e.preventDefault();\n\n    if (e.touches.length == 1) {\n      this.translate(e.touches[0].pageX, e.touches[0].pageY);\n      return;\n    }\n\n    // Image zooming by pinching.\n    const [touch0, touch1] = e.touches;\n    const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n      (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n    if (!this.prevDistance) {\n        this.prevDistance = distance / this.state.zoom;\n    }\n\n    let scale = (distance / this.prevDistance);\n    this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n  }\n\n  mouseUp(e) {\n    window.removeEventListener('mousemove', this.mouseMove);\n    window.removeEventListener('touchmove', this.mouseTouch);\n    window.removeEventListener('mouseup', this.mouseUp);\n    window.removeEventListener('touchend', this.mouseUp);\n    // Re-enable text selection.\n    document.body.style['userSelect'] = '';\n\n    this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n  }\n\n  render() {\n    // transform3d: position and scale.\n    const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n    // transformOrigin: zoom origin.\n    const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n    // Overlay position and size are exactly equal to the position and size of the transformed image\n    // except it uses different coordinates.\n    const overlay = {\n      top: `${this.originY - this.state.originY * this.state.zoom}px`,\n      left: `${this.originX - this.state.originX * this.state.zoom}px`,\n      width: `${this.imageWidth * this.state.zoom}px`,\n      height: `${this.imageHeight * this.state.zoom}px`\n    };\n    return (\n      <div className=\"cropper\">\n        <div className=\"bounding-box\" ref={this.boundingBox}>\n          <img src={this.props.source} className=\"preview\" alt=\"\"\n            style={{transform: t3d, transformOrigin: orig}} ref={this.preview} onLoad={this.initScaling} />\n          <div className=\"cutout circle\" ref={this.cutout} />\n          <div className=\"overlay\" style={overlay} ref={this.overlay} />\n        </div>\n        <div className=\"zoom-wrapper\">\n          <input type=\"range\" className=\"zoomer\"\n            step=\"0.001\" min={this.state.minZoom} max={this.state.maxZoom} value={this.state.zoom} onChange={this.onZoom} />\n        </div>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/doc-preview.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport SendMessage from '../widgets/send-message.jsx';\n\nimport { bytesToHumanSize, shortenFileName } from '../lib/strformat.js';\n\n// Get material icon name from mime type.\nfunction iconFromMime(mime) {\n  // If more icons become available in material icons, add them to this mime-to-icon mapping.\n  const mimeToIcon = {default: 'insert_drive_file', image: 'image', text: 'description', video: 'theaters'};\n\n  return mimeToIcon[mime] || mimeToIcon[(mime || '').split('/')[0]] || mimeToIcon['default'];\n}\n\nexport default class DocPreview extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleSendDoc = this.handleSendDoc.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  handleKeyDown(e) {\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n\n  handleSendDoc(caption) {\n    this.props.onClose();\n    this.props.onSendMessage(this.props.content.file);\n  }\n\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n    return (\n      <div id=\"image-preview\">\n        <div id=\"preview-caption-panel\">\n          <span>{this.props.content.name}</span>\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onClose();}}><i className=\"material-icons gray\">close</i></a>\n        </div>\n        <div id=\"image-preview-container\">\n          <div className=\"doc-card\">\n            <i className=\"material-icons gray\">{iconFromMime(this.props.content.type)}</i>\n            <div><b><FormattedMessage id=\"label_file_name\" defaultMessage=\"File name:\"\n              description=\"Label for a file name\" /></b> {shortenFileName(this.props.content.name, 24) || '-'}</div>\n            <div><b><FormattedMessage id=\"label_content_type\" defaultMessage=\"Content type:\"\n              description=\"Label for file content type (mime)\" /></b> {this.props.content.type || 'application/octet-stream'}</div>\n            <div><b><FormattedMessage id=\"label_size\" defaultMessage=\"Size:\"\n              description=\"Label for file size\" /></b> {bytesToHumanSize(this.props.content.size)}</div>\n          </div>\n        </div>\n        <SendMessage\n          noInput={true}\n          tinode={this.props.tinode}\n          reply={this.props.reply}\n          onCancelReply={this.props.onCancelReply}\n          onSendMessage={this.handleSendDoc}\n          onError={this.props.onError} />\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/error-panel.jsx",
    "content": "import React from 'react';\n\nimport MenuCancel from './menu-cancel.jsx';\n\nexport default class ErrorPanel extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      show: false,\n    };\n\n    this.hide = this.hide.bind(this);\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.level !== this.props.level) {\n      this.setState({\n        show: !(!this.props.level)\n      });\n    }\n  }\n\n  hide() {\n    this.setState({show: false});\n    if (this.props.onClearError) {\n      this.props.onClearError();\n    }\n  }\n\n  render() {\n    const icons = {err: 'error', warn: 'warning', info: 'info'}\n    const level = icons[this.props.level] || '';\n    const className = 'info-box ' + level;\n    return (\n      <div className={className}>\n        <div className=\"icon\"><i className=\"material-icons\">{level}</i></div>\n        <span>\n          {this.props.text}\n          {this.props.action ?\n            <>\n              &nbsp;&#32;<a href=\"#\"\n                style={{ whiteSpace: 'nowrap' }}\n                onClick={(e) => {e.preventDefault(); this.props.action();}}>\n                {this.props.actionText}\n              </a>\n            </>\n          : null}\n        </span>\n        <div className=\"cancel\"><MenuCancel onCancel={this.hide} /></div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/file-progress.jsx",
    "content": "// File uload/download progress indicator with a cancel inside.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class FileProgress extends React.PureComponent {\n  render() {\n    return (\n      <div className=\"uploader\">\n        <div><span style={{width: (this.props.progress * 100) + \"%\"}}></span></div>\n        {this.props.progress < 0.999 ?\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onCancel();}}>\n            <i className=\"material-icons\">close</i> <FormattedMessage id=\"action_cancel\"\n              defaultMessage=\"cancel\" description=\"Call to action [cancel]\" />\n          </a>\n          :\n          <FormattedMessage id=\"upload_finishing\" defaultMessage=\"finishing...\"\n            description=\"Notification that upload is finishing\" />\n        }\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/forward-dialog.jsx",
    "content": "// Forward Menu: message forwarding popup/dropdown menu.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport ContactList from './contact-list.jsx';\nimport SearchContacts from './search-contacts.jsx';\n\nexport default class ForwardDialog extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      query: null\n    };\n\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleContactSelected = this.handleContactSelected.bind(this);\n  }\n\n  componentDidMount() {\n    this.props.onInitFind();\n  }\n\n  handleEscapeKey(e) {\n    if (e.keyCode === 27) {\n      // Not forwarding the message.\n      this.props.hide(false);\n    }\n  }\n\n  handleClose(e) {\n    e.preventDefault();\n    this.props.hide(false);\n  }\n\n  handleSearchContacts(query) {\n    this.setState({ query: Tinode.isNullValue(query) ? null : query });\n    this.props.onSearchContacts(query);\n  }\n\n  handleContactSelected(uid) {\n    this.props.onTopicSelected(uid);\n    this.props.hide(true);\n  }\n\n  render() {\n    let contacts = this.state.query != null ? this.props.searchResults : this.props.contacts;\n    // Filter out contacts without a 'W' or 'J' permissions as well as the current topic.\n    contacts = contacts.filter((c) => {\n      return (c.name != this.props.topicSelected) && c.acs.isJoiner() && c.acs.isWriter();\n    });\n\n    return (\n      <div className=\"alert-container\">\n        <div className=\"forward-dialog\">\n          <div className=\"title with-control\">\n            <div><FormattedMessage id=\"forward_to\" defaultMessage=\"Forward to\"\n              desription=\"Title of the contact selector dialog when forwarding a message\" /></div>\n            <div><a href=\"#\" onClick={this.handleClose}><i className=\"material-icons\">close</i></a></div>\n          </div>\n          <FormattedMessage id=\"forward_to_search_placeholder\" defaultMessage=\"Search contacts\"\n            description=\"Contact search prompt when forwarding a message.\">{\n            (search_placeholder) => <SearchContacts\n              placeholder={search_placeholder}\n              onSearchContacts={this.handleSearchContacts} />\n          }</FormattedMessage>\n          <FormattedMessage id=\"search_no_results\" defaultMessage=\"Search returned no results\"\n              description=\"Text shown in contacts view when query returned no results.\">{\n            (not_found_placeholder) => <ContactList\n              tinode={this.props.tinode}\n              contacts={contacts}\n              myUserId={this.props.myUserId}\n              emptyListMessage={not_found_placeholder}\n              showOnline={false}\n              showUnread={false}\n              showContextMenu={false}\n              onTopicSelected={this.handleContactSelected} />\n          }</FormattedMessage>\n        </div>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/group-manager.jsx",
    "content": "// GroupMembers: control for managing a list of group members.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\nimport ContactList from './contact-list.jsx';\n\nconst messages = defineMessages({\n  no_contacts: {\n    id: 'no_contacts',\n    defaultMessage: 'You have no contacts :-(',\n    description: 'Shown in ContactsView when the user has no contacts'\n  },\n  contacts_not_found_short: {\n    id: 'contacts_not_found_short',\n    defaultMessage: \"No contacts match ''{query}''\",\n    description: 'Shown in ContactsView when search returned no results'\n  },\n  add_members_prompt: {\n    id: 'add_members_prompt',\n    defaultMessage: 'add members',\n    description: 'Placeholder in group members input field'\n  }\n});\n\nclass GroupManager extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      // Array of topic members\n      members: props.members,\n      index: GroupManager.indexMembers(props.members),\n      staticMembers: GroupManager.staticMembers(props.members, props.keepInitialMembers, props.requiredMember),\n      contactFilter: '',\n      noContactsMessage: props.intl.formatMessage(messages.no_contacts),\n      selectedContacts: GroupManager.selectedContacts(props.members)\n    };\n\n    this.handleContactSelected = this.handleContactSelected.bind(this);\n    this.handleMemberRemoved = this.handleMemberRemoved.bind(this);\n    this.handleContactFilter = this.handleContactFilter.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  static indexMembers(members) {\n    let index = {};\n    members.forEach(m => {\n      index[m.user] = {delta: 0, present: true}; // Delta: 0 unchanged, +1 added, -1 removed\n    });\n    return index;\n  }\n\n  static staticMembers(members, keepInitial, requiredMember) {\n    let stat = [];\n    members.forEach(m => {\n      if (keepInitial || m.user == requiredMember) {\n        stat.push(m.user);\n      }\n    });\n    return stat;\n  }\n\n  static selectedContacts(members) {\n    let sel = [];\n    members.forEach(m => {\n      sel.push(m.user);\n    });\n    return sel;\n  }\n\n  handleContactSelected(userId, index) {\n    let status = this.state.index[userId];\n    if (status) {\n      if (status.present) {\n        // Prevent duplicate members\n        return;\n      }\n      status.delta += 1;\n      status.present = true;\n    } else {\n      status = {delta: 1, present: true};\n    }\n\n    let m = this.state.members.slice();\n    m.push(this.props.contacts[index]);\n\n    const sel = GroupManager.selectedContacts(m);\n\n    const i = this.state.index;\n    i[userId] = status;\n\n    this.setState({members: m, index: i, selectedContacts: sel});\n  }\n\n  handleMemberRemoved(userId, index) {\n    const status = this.state.index[userId];\n    if (!status || !status.present) {\n      return;\n    }\n    status.present = false;\n    status.delta -= 1;\n\n    let m = this.state.members.slice();\n    m.splice(index, 1);\n\n    const sel = GroupManager.selectedContacts(m);\n\n    const i = this.state.index;\n    i[userId] = status;\n\n    this.setState({members: m, index: i, selectedContacts: sel});\n  }\n\n  handleContactFilter(val) {\n    const {formatMessage} = this.props.intl;\n    const msg = !val ?\n      formatMessage(messages.no_contacts) :\n      formatMessage(messages.contacts_not_found_short, {query: val});\n\n    this.setState({contactFilter: val, noContactsMessage: msg});\n  }\n\n  static doContactFiltering(filter, values) {\n    if (filter) {\n      for (let i=0; i<values.length; i++) {\n        if (values[i].indexOf(filter) >= 0) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n\n  handleSubmit() {\n    const members = [];\n    const added = [];\n    const removed = [];\n\n    const keys = Object.keys(this.state.index);\n    keys.forEach(k => {\n      if (this.state.index[k].present) {\n        members.push(k);\n      }\n\n      if (this.state.index[k].delta > 0) {\n        added.push(k);\n      } else if (this.state.index[k].delta < 0) {\n        removed.push(k);\n      }\n    });\n    this.props.onSubmit(members, added, removed);\n  }\n\n  handleCancel() {\n    this.props.onCancel();\n  }\n\n  render() {\n    return (\n      <div id=\"group-manager\">\n        <div className=\"panel-form-row\">\n          <label className=\"small\">\n            <FormattedMessage id=\"title_group_members\" defaultMessage=\"Group Members\" description=\"Section title\" />\n          </label>\n        </div>\n        <div className=\"panel-form-row\">\n          <ChipInput\n            tinode={this.props.tinode}\n            chips={this.state.members}\n            staticMembers={this.state.staticMembers}\n            prompt={this.props.intl.formatMessage(messages.add_members_prompt)}\n            filterFunc={this.handleContactFilter}\n            onChipRemoved={this.handleMemberRemoved} />\n        </div>\n        <div className=\"panel-form-row\">\n          <label className=\"small\">\n            <FormattedMessage id=\"title_all_contacts\" defaultMessage=\"All Contacts\"\n              description=\"Section title [All Contacts]\" />\n          </label>\n        </div>\n        <ContactList\n          tinode={this.props.tinode}\n          contacts={this.props.contacts}\n          myUserId={this.props.myUserId}\n          topicSelected={this.state.selectedContacts}\n          filter={this.state.contactFilter}\n          filterFunc={GroupManager.doContactFiltering}\n          emptyListMessage={this.state.noContactsMessage}\n          showOnline={false}\n          showUnread={false}\n          onTopicSelected={this.handleContactSelected} />\n        <div id=\"group-manager-buttons\" className=\"panel-form-row\">\n          <button className=\"secondary\" onClick={this.handleCancel}>\n            <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n          </button>\n          <button className=\"primary\" onClick={this.handleSubmit}>\n            <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(GroupManager);\n"
  },
  {
    "path": "src/widgets/group-subs.jsx",
    "content": "// GroupSubs: a list of group subscribers currently online.\n// Show in the topic title bar\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { MAX_ONLINE_IN_TOPIC } from '../config.js'\n\nimport LetterTile from './letter-tile.jsx';\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nexport default class GroupSubs extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    const usersOnline = [];\n    const totalCount = (this.props.subscribers || []).length;\n    const countToShow = Math.min(MAX_ONLINE_IN_TOPIC, totalCount);\n\n    (this.props.subscribers || []).some((sub) => {\n      usersOnline.push(\n        <div className=\"avatar-box\" key={sub.user}>\n          <LetterTile\n            authorizeURL={this.props.tinode.authorizeURL}\n            topic={sub.user}\n            avatar={makeImageUrl(sub.public ? sub.public.photo : null) || true}\n            title={sub.public ? sub.public.fn : null} />\n        </div>\n      );\n      return usersOnline.length == countToShow;\n    });\n    if (usersOnline.length == 0) {\n      return null;\n    }\n    return (\n      <div id=\"topic-users\">{usersOnline} {totalCount > countToShow ?\n        <span>\n          <FormattedMessage id=\"more_online_members\" defaultMessage=\"+{overflow} more\"\n              description=\"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC\"\n              values={{ overflow: (totalCount - countToShow) }} />\n        </span> : null}\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/host-selector.jsx",
    "content": "import React from 'react';\n\nimport { KNOWN_HOSTS } from '../config.js';\n\n/* Combobox for selecting host name */\n\nexport default class HostSelector extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      hostName: props.serverAddress,\n      changed: false\n    };\n\n    this.handleHostNameChange = this.handleHostNameChange.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  handleHostNameChange(e) {\n    this.setState({hostName: e.target.value, changed: true});\n  }\n\n  handleEditingFinished() {\n    if (this.state.changed) {\n      this.setState({changed: false});\n      this.props.onServerAddressChange(this.state.hostName.trim());\n    }\n  }\n\n  handleKeyDown(e) {\n    if (e.key == 'Enter') {\n      this.handleEditingFinished();\n    }\n  }\n\n  render() {\n    const hostOptions = [];\n    for (let key in KNOWN_HOSTS) {\n      let item = KNOWN_HOSTS[key];\n      hostOptions.push(\n        <option key={item} value={item} />\n      );\n    }\n    return (\n      <div className=\"panel-form-row\">\n        <input type=\"search\" id=\"host-name\" placeholder={this.props.hostName} list=\"known-hosts\"\n          className=\"quoted\" value={this.state.hostName} onChange={this.handleHostNameChange}\n          onBlur={this.handleEditingFinished}\n          onKeyDown={this.handleKeyDown} required />\n        <datalist id=\"known-hosts\">\n          {hostOptions}\n        </datalist>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/image-preview.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport SendMessage from './send-message.jsx';\n\nimport { REM_SIZE } from '../config.js';\nimport { fitImageSize } from '../lib/blob-helpers.js';\nimport { bytesToHumanSize, shortenFileName } from '../lib/strformat.js';\nimport { urlAsAttachment } from '../lib/utils.js';\n\nexport default class ImagePreview extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      width: 0,\n      height: 0\n    };\n\n    this.handleSendImage = this.handleSendImage.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  handleKeyDown(e) {\n    if (this.props.onSendMessage) {\n      return;\n    }\n\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n\n  assignWidth(node) {\n    if (node && !this.state.width) {\n      const bounds = node.getBoundingClientRect();\n      this.setState({\n        width: bounds.width | 0,\n        height: bounds.height | 0\n      });\n    }\n  }\n\n  handleSendImage(caption) {\n    this.props.onClose();\n    this.props.onSendMessage(caption, this.props.content.blob);\n  }\n\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n\n    const dim = fitImageSize(this.props.content.width, this.props.content.height,\n      this.state.width, this.state.height, false);\n    const size = dim ? { width: dim.dstWidth + 'px', height: dim.dstHeight + 'px' } :\n      ((this.props.content.width > this.props.content.height) ? {width: '100%'} : {height: '100%'});\n    size.maxWidth = '100%';\n    size.maxHeight = '100%';\n\n    // Average font aspect ratio is ~0.5; File name takes 1/3 of the viewport width.\n    const maxlength = Math.max(((this.state.width / REM_SIZE / 1.5) | 0) - 2, 12);\n    const fname = shortenFileName(this.props.content.filename, maxlength) || '-';\n\n    const width = this.props.content.width || '-';\n    const height = this.props.content.height || '-';\n\n    const download_url = urlAsAttachment(this.props.content.url);\n\n    return (\n      <div id=\"image-preview\">\n        <div id=\"preview-caption-panel\">\n          {this.props.onSendMessage ?\n            <span>{fname}</span>\n            :\n            <a href={download_url} download={this.props.content.filename}>\n              <i className=\"material-icons\">file_download</i> <FormattedMessage\n                id=\"download_action\" defaultMessage=\"download\" description=\"Call to action [download]\" />\n            </a>\n          }\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onClose();}}><i className=\"material-icons gray\">close</i></a>\n        </div>\n        <div id=\"image-preview-container\" ref={node => this.assignWidth(node)}>\n          <img src={this.props.content.url} style={size} className=\"image-preview\" alt={this.props.content.filename} />\n        </div>\n        {this.props.onSendMessage ?\n          <SendMessage\n            messagePrompt=\"add_image_caption\"\n            acceptBlank={true}\n            tinode={this.props.tinode}\n            reply={this.props.reply}\n            onCancelReply={this.props.onCancelReply}\n            onSendMessage={this.handleSendImage}\n            onError={this.props.onError} />\n          :\n          <div id=\"image-preview-footer\">\n            <div>\n              <div><b><FormattedMessage id=\"label_file_name\" defaultMessage=\"File name:\"\n                description=\"Label for a file name\" /></b></div>\n              <div><span title={this.props.content.filename}>{fname}</span></div>\n            </div>\n            <div>\n              <div><b><FormattedMessage id=\"label_content_type\" defaultMessage=\"Content type:\"\n                description=\"Label for file content type (mime)\" /></b></div>\n              <div>{this.props.content.type}</div>\n            </div>\n            <div>\n              <div><b><FormattedMessage id=\"label_size\" defaultMessage=\"Size:\"\n                description=\"Label for file size\" /></b></div>\n              <div>{width} &times; {height} px; {bytesToHumanSize(this.props.content.size)}</div>\n            </div>\n          </div>}\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/in-place-edit.jsx",
    "content": "// In-place text editor. Shows text with an icon which toggles it into an input field.\nimport React from 'react';\n\nimport VisiblePassword from './visible-password.jsx';\n\nexport default class InPlaceEdit extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.selfRef = React.createRef();\n\n    this.state = {\n      active: props.active,\n      initialValue: props.value || '',\n      value: props.value || '',\n      valid: true\n    };\n\n    this.handeTextChange = this.handeTextChange.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n    this.handleStartEditing = this.handleStartEditing.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n    this.handlePasswordFinished = this.handlePasswordFinished.bind(this);\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    // If text has changed while in read mode, update text and discard changes.\n    // Ignore update if in edit mode.\n    const newValue = this.props.value || '';\n    if (prevState.initialValue != newValue && !prevState.active) {\n      this.setState({\n        initialValue: newValue,\n        value: newValue\n      });\n    }\n  }\n\n  handeTextChange(e) {\n    this.setState({value: e.target.value || ''});\n    if (this.props.validator) {\n      Promise.resolve(this.props.validator(e.target.value))\n        .then(valid => {\n          this.setState({valid: valid});\n        })\n        .catch(err => {\n          // If it's interrupted, then the err is undefined. Ignore it.\n          if (err) {\n            this.setState({valid: false});\n          }\n        });\n    }\n  }\n\n  handleKeyDown(e) {\n    if (e.keyCode === 27) {\n      // Escape pressed\n      this.setState({value: this.props.value, active: false});\n    } else if (e.keyCode === 13) {\n      // Enter pressed\n      this.handleEditingFinished(e);\n    }\n  }\n\n   handleStartEditing() {\n    if (!this.props.readOnly) {\n      this.setState({active: true}, _ => {\n        if (this.selfRef.current) {\n          this.selfRef.current.focus();\n        }\n      });\n    }\n  }\n\n  handleEditingFinished(event) {\n    const value = this.state.value.trim();\n    if (this.props.required && (!event.target.checkValidity() || !value)) {\n      // Empty input\n      this.setState({value: this.props.value, active: false});\n      return;\n    }\n    this.setState({active: false});\n    if ((value || this.props.value) && (value !== this.props.value) && this.state.valid) {\n      this.props.onFinished(value);\n    }\n  }\n\n  handlePasswordFinished(value) {\n    this.setState({active: false});\n    if (value && (value !== this.props.value)) {\n      this.props.onFinished(value);\n    }\n  }\n\n  render() {\n    if (!this.state.active) {\n      let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;\n      let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');\n      if (!spanText) {\n        spanText = this.props.placeholder;\n        spanClass += ' placeholder';\n      }\n      if (!this.props.multiline || this.props.multiline == 1) {\n        spanClass += ' short';\n      }\n\n      return (<span className={spanClass} onClick={this.handleStartEditing}>\n        {this.props.iconLeft && <i className=\"material-icons light-gray\">{this.props.iconLeft}</i>}\n        <span>{spanText}</span>\n        {this.props.iconRight && <i className=\"material-icons light-gray\">{this.props.iconRight}</i>}\n      </span>);\n    }\n\n    let element;\n    const attr = {};\n    if (this.props.type == 'password') {\n      element = VisiblePassword;\n      attr.onFinished = this.handlePasswordFinished;\n    } else {\n      if (this.props.multiline > 1) {\n        element = 'textarea';\n        attr.rows = this.props.multiline;\n        attr.className = 'in-place-edit';\n      } else {\n        element = 'input';\n        attr.type = this.props.type || 'text';\n        attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left'\n          : this.props.iconRight ?  ' with-icon-right' : '');\n        if (this.props.maxLength) {\n          attr.maxLength=this.props.maxLength;\n        }\n      }\n      attr.value = this.state.value;\n      attr.className += this.state.valid ? '' : ' invalid';\n      attr.ref = this.selfRef;\n      attr.onChange = this.handeTextChange;\n      attr.onKeyDown = this.handleKeyDown;\n      attr.onBlur = this.handleEditingFinished;\n    }\n    attr.placeholder = this.props.placeholder;\n    attr.required = this.props.required ? 'required' : '';\n    attr.autoComplete = this.props.autoComplete;\n    attr.autoFocus = true;\n    if (this.props.spellCheck !== undefined) {\n      attr.spellCheck = this.props.spellCheck ? 'true' : 'false';\n    }\n\n    if (this.props.iconLeft || this.props.iconRight) {\n      return (\n        <>\n          {this.props.iconLeft && <i className=\"material-icons light-gray\">{this.props.iconLeft}</i>}\n          {React.createElement(element, attr, null)}\n          {this.props.iconRight && <i className=\"material-icons light-gray\">{this.props.iconRight}</i>}\n        </>\n      );\n    }\n    return React.createElement(element, attr, null);\n  }\n};\n"
  },
  {
    "path": "src/widgets/inline-video.jsx",
    "content": "// Element which shows static video preview:\n// an image with duration and a play button in the middle.\n\nimport React from 'react';\n\nimport { secondsToTime } from '../lib/strformat.js'\n\nexport default class InlineVideo extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.videoRef = React.createRef();\n\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  handleClick(e) {\n    if (this.props.onClick) {\n      // the click target has to be the image element.\n      this.props.onClick(e);\n    }\n  }\n\n  render() {\n    const duration = secondsToTime(this.props['data-duration'] / 1000);\n    const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');\n    return (\n      <div className={className}>\n        {React.createElement('img', this.props)}\n        <div className=\"play-control\">\n        {this.props.onClick ?\n          <i className=\"material-icons white x-big\">play_arrow</i>\n          :\n          <img src=\"img/broken_video.png\" style={{filter: 'invert(100%)'}} width=\"36\" height=\"36\" />}\n        </div>\n        {duration ? <div className=\"duration\">{duration}</div> : null}\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/invitation.jsx",
    "content": "// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Invitation extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleButtonAction = this.handleButtonAction.bind(this);\n  }\n\n  handleButtonAction(evt, data) {\n    evt.preventDefault();\n    this.props.onAction(data);\n  }\n\n  render() {\n    return (\n      <div className=\"accept-invite-panel\">\n        <div className=\"title\">\n          <FormattedMessage id=\"chat_invitation\"\n            defaultMessage=\"You are invited to start a new chat. What would you like to do?\"\n            description=\"New chat invitation message: [Accept] [Ignore] [Block].\" />\n        </div>\n        <div className=\"footer\">\n          <button className=\"primary\" onClick={event => { this.handleButtonAction(event, \"accept\"); }}>\n            <FormattedMessage id=\"chat_invitation_accept\"\n              defaultMessage=\"Accept\" description=\"Action [Accept] for chat invitation.\" />\n          </button>\n          <button className=\"secondary\" onClick={event => { this.handleButtonAction(event, \"delete\"); }}>\n            <FormattedMessage id=\"chat_invitation_ignore\"\n              defaultMessage=\"Ignore\" description=\"Action [Ignore] for chat invitation.\" />\n          </button>\n          <button className=\"secondary\" onClick={event => { this.handleButtonAction(event, \"block\"); }}>\n            <FormattedMessage id=\"chat_invitation_block\"\n              defaultMessage=\"Block\" description=\"Action [Block] for chat invitation.\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/lazy-image.jsx",
    "content": "// Image with a placeholder which is replaced when the promise is resolved.\nimport React from 'react';\n\nexport default class LazyImage extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\n      style: Object.assign({padding: '4px'}, this.props.style),\n      className: this.props.className,\n      alt: this.props.alt,\n      onClick: this.props.onClick,\n    };\n  }\n\n  componentDidMount() {\n    // whenDone is a wrapper around an actual promise to be able to cancel it.\n    this.props.whenDone\n      .promise\n      .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n      .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n  }\n\n  componentWillUnmount() {\n    this.props.whenDone.cancel();\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.whenDone != this.props.whenDone) {\n      this.setState({src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png', style: {...this.state.style, padding: '4px'}});\n      this.props.whenDone\n        .promise\n        .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n        .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n    }\n  }\n\n  render() {\n    return React.createElement('img', this.state);\n  }\n};\n"
  },
  {
    "path": "src/widgets/letter-tile.jsx",
    "content": "import React from 'react';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { idToColorClass } from '../lib/strformat.js';\nimport { sanitizeUrlForMime } from '../lib/utils.js';\n\nimport { SELF_AVATAR_URI } from '../config.js';\n\nexport default class LetterTile extends React.PureComponent {\n  render() {\n    let avatar;\n    if (this.props.avatar === true) {\n      if (Tinode.isSelfTopicName(this.props.topic)) {\n        avatar = <img className=\"avatar self\" alt=\"avatar\" src={SELF_AVATAR_URI} />\n      } else {\n        const isGroup = Tinode.isGroupTopicName(this.props.topic);\n        const iconColor = idToColorClass(this.props.topic, isGroup);\n\n        if (this.props.topic && this.props.title && this.props.title.trim()) {\n          const letter = this.props.title.trim().charAt(0);\n          const className = 'lettertile ' + iconColor + (this.props.deleted ? ' disabled' : '');\n          avatar = (<div className={className}><div>{letter}</div></div>)\n        } else {\n          const className = 'material-icons ' + iconColor + (this.props.deleted ? ' disabled' : '');\n          avatar = isGroup ? <i className={className}>group</i> : <i className={className}>person</i>;\n        }\n      }\n    } else if (this.props.avatar) {\n      const url = this.props.authorizeURL(sanitizeUrlForMime(this.props.avatar, 'image'));\n      // If avatar image is invalid, show a placeholder.\n      const className = 'avatar' + (this.props.deleted ? ' deleted' : '');\n      avatar = <img className={className} alt=\"avatar\" src={url}\n        onError={e=>{e.target.onerror = null; e.target.src=\"img/broken_image.png\"}} />;\n    } else {\n      avatar = null;\n    }\n    return avatar;\n  }\n}\n"
  },
  {
    "path": "src/widgets/load-spinner.jsx",
    "content": "import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n  render() {\n    const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\n      + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n    return (this.props.show ?\n      <div className={className}><div className=\"loader-spinner\"></div></div> : null);\n  }\n}\n"
  },
  {
    "path": "src/widgets/menu-cancel.jsx",
    "content": "// The X menu to be displayed in title bars.\nimport React from 'react';\n\nexport default class MenuCancel extends React.PureComponent {\n  render() {\n    return (\n      <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onCancel();}}>\n        <i className=\"material-icons\">close</i>\n      </a>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/menu-contacts.jsx",
    "content": "import React from 'react';\n\nexport default class MenuContacts extends React.PureComponent {\n  render() {\n    return (\n      <div>\n        <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onNewTopic();}}><i className=\"material-icons\">chat</i></a>\n        &nbsp;\n        <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onSettings();}}><i className=\"material-icons\">settings</i></a>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/menu-start.jsx",
    "content": "import React from 'react';\n\nexport default class MenuStart extends React.PureComponent {\n  render() {\n    return (\n        <div>\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onSignUp();}}><i className=\"material-icons\">person_add</i></a>\n          &nbsp;\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onSettings();}}><i className=\"material-icons\">settings</i></a>\n        </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/meta-message.jsx",
    "content": "// Message bubble with non-payload content, such as an indicator of deleted content or a date stamp.\n\nimport React from 'react';\n\nexport default class MetaMessage extends React.PureComponent {\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    let content = null;\n    let bubbleClass = 'bubble';\n    if (this.props.date) {\n      // A date badge.\n      content = <>{this.props.date}</>\n      bubbleClass += ' date';\n    }\n\n    if (!content) {\n      return <>{null}</>\n    }\n\n    return (\n      <li className=\"meta\">\n        <div className={bubbleClass}>\n          <div className=\"message-content\">\n            {content}\n          </div>\n        </div>\n      </li>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/new-topic-by-id.jsx",
    "content": "import QRCode from 'qrcodejs';\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { QRCODE_SIZE } from '../config';\n\nconst messages = defineMessages({\n  invalid_id: {\n    id: 'error_invalid_id',\n    defaultMessage: 'Invalid ID',\n    description: 'Error message'\n  }\n});\n\nclass NewTopicById extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.qrCodeRef = React.createRef();\n\n    this.state = {\n      groupId: '',\n    };\n\n    this.handleChange = this.handleChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  componentDidMount() {\n    new QRCode(this.qrCodeRef.current, {\n      text: this.props.myURI,\n      width: QRCODE_SIZE,\n      height: QRCODE_SIZE,\n    });\n  }\n\n  handleChange(e) {\n    this.setState({groupId: e.target.value});\n  }\n\n  handleKeyPress(e) {\n    if (e.key === 'Enter') {\n      this.handleSubmit(e);\n    }\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.groupId) {\n      const name = this.state.groupId.trim();\n      const prefix = name.substring(0, 3);\n      if (name.length > 3 && ['usr', 'grp', 'chn'].includes(prefix)) {\n        this.props.onSubmit(name);\n      } else {\n        this.props.onError(this.props.intl.formatMessage(messages.invalid_id), 'err');\n      }\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel-form\">\n        <div className=\"panel-form-row\">\n        <FormattedMessage id=\"group_user_id_prompt\" defaultMessage=\"Group or User ID\"\n          description=\"Prompt for entering user or group ID\">{\n          (prompt) => <input type=\"text\" placeholder={prompt}\n            value={this.state.groupId} onChange={this.handleChange}\n            onKeyDown={this.handleKeyPress} required autoFocus />\n        }</FormattedMessage>\n        </div>\n        <div className=\"dialog-buttons\">\n          <button className=\"primary\" onClick={this.handleSubmit}>\n            <FormattedMessage id=\"button_subscribe\" defaultMessage=\"Subscribe\"\n              description=\"Button [Subscribe]\" />\n          </button>\n        </div>\n        <br />\n        <div className=\"panel-form-column\">\n          <label className=\"small\"><FormattedMessage id=\"label_scan_id\"\n            defaultMessage=\"Scan my ID:\" description=\"Label [Scan my ID:]\" />\n          </label>\n          <div className=\"qr-code\" ref={this.qrCodeRef} />\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(NewTopicById);\n"
  },
  {
    "path": "src/widgets/new-topic-group.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport AvatarCrop from './avatar-crop.jsx';\nimport AvatarUpload from './avatar-upload.jsx';\nimport CheckBox from './checkbox.jsx';\nimport TagManager from './tag-manager.jsx';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE, MAX_TITLE_LENGTH,\n  MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\n\nexport default class NewTopicGroup extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.fullName = React.createRef();\n\n    this.state = {\n      fullName: '', // full/formatted name\n      private: '',\n      description: '',\n      imageUrl: null,\n      tags: [],\n      isChannel: false,\n      newAvatar: null,\n      newAvatarMime: null\n    };\n\n    this.handleFieldEdit = this.handleFieldEdit.bind(this);\n    this.handleImageChanged = this.handleImageChanged.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.handleTagsChanged = this.handleTagsChanged.bind(this);\n    this.handleChannelToggle = this.handleChannelToggle.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  componentDidMount() {\n    // this.fullName.current.focus();\n  }\n\n  handleFieldEdit(name, e) {\n    this.setState({[name]: e.target.value || ''});\n  }\n\n  handleImageChanged(mime, img) {\n    this.setState({newAvatar: img, newAvatarMime: mime});\n  }\n\n  handleAvatarCropped(mime, blob, width, height) {\n    const url = blob ? URL.createObjectURL(blob) : null;\n    this.setState({imageUrl: 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      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)\n          .then(url => this.setState({imageUrl: url}))\n          .catch(err => this.props.onError(err.message, 'err'));\n      } else {\n        // Convert blob to base64-encoded bits.\n        blobToBase64(blob)\n          .then(b64 => this.setState({imageUrl: makeImageUrl({data: b64.bits, type: mime})}));\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  handleTagsChanged(tags) {\n    this.setState({tags: tags});\n  }\n\n  handleChannelToggle() {\n    this.setState({isChannel: !this.state.isChannel});\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n\n    const fn = truncateString(this.state.fullName.trim(), MAX_TITLE_LENGTH);\n    const comment = truncateString(this.state.private.trim(), MAX_TITLE_LENGTH);\n    const description = truncateString(this.state.description.trim(), MAX_TOPIC_DESCRIPTION_LENGTH);\n    if (fn) {\n      this.props.onSubmit(fn, description, this.state.imageUrl, comment, this.state.tags, this.state.isChannel);\n    }\n  }\n\n  render() {\n    if (this.state.newAvatar) {\n      return (\n        <AvatarCrop\n          avatar={this.state.newAvatar}\n          mime={this.state.newAvatarMime}\n          onSubmit={this.handleAvatarCropped}\n          onCancel={this.handleAvatarCropCancel}\n          onError={this.props.onError} />\n      );\n    }\n\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n    return (\n      <form className=\"panel-form\" onSubmit={this.handleSubmit}>\n        <div className=\"panel-form-column\">\n          <center>\n            <AvatarUpload\n              tinode={this.props.tinode}\n              avatar={this.state.imageUrl}\n              onError={this.props.onError}\n              onImageUpdated={this.handleImageChanged} />\n          </center>\n          <div className=\"group\">\n            <label className=\"small\" htmlFor=\"new-topic-fn\">\n              <FormattedMessage id=\"label_topic_name\" defaultMessage=\"Name\"\n                description=\"Label for editing topic name\" />\n            </label>\n            <FormattedMessage id=\"topic_name_editing_placeholder\" defaultMessage=\"Freeform name of the group\"\n              description=\"Prompt for entering topic name\">{\n              (placeholder) => <input type=\"text\" id=\"new-topic-fn\" placeholder={placeholder}\n                ref={this.fullName} value={this.state.fullName} onChange={this.handleFieldEdit.bind(this, 'fullName')}\n                autoFocus required tabIndex={0} />\n            }</FormattedMessage>\n          </div>\n          <div className=\"group\">\n            <label className=\"small\" htmlFor=\"new-topic-priv\">\n              <FormattedMessage id=\"label_private\" defaultMessage=\"Private comment\"\n                description=\"Label for editing 'private'\" />\n            </label>\n            <FormattedMessage id=\"private_editing_placeholder\" defaultMessage=\"Visible to you only\"\n              description=\"Placeholder for editing 'private'\">{\n              (placeholder) => <input type=\"text\" id=\"new-topic-priv\" placeholder={placeholder}\n                value={this.state.private} onChange={this.handleFieldEdit.bind(this, 'private')} tabIndex={1} />\n            }</FormattedMessage>\n          </div>\n          <div className=\"group\">\n            <label className=\"small\" htmlFor=\"new-topic-desc\">\n              <FormattedMessage id=\"label_description\" defaultMessage=\"Description\"\n                description=\"Label for description of user or topic\" />\n            </label>\n            <FormattedMessage id=\"description_editing_placeholder\" defaultMessage=\"Description (optional)\"\n              description=\"Placeholder for editing topic description\">{\n              (placeholder) => <input type=\"text\" id=\"new-topic-desc\" placeholder={placeholder}\n                value={this.state.description} onChange={this.handleFieldEdit.bind(this, 'description')} tabIndex={2} />\n            }</FormattedMessage>\n          </div>\n        </div>\n        <div className=\"panel-form-row\">\n          <CheckBox checked={this.state.isChannel} tabIndex={3} onChange={this.handleChannelToggle} />&nbsp;\n          <label onClick={this.handleChannelToggle}><FormattedMessage id=\"channel_prompt\"\n            defaultMessage=\"This is a channel\"\n            description=\"Checkbox label when creating a channel\" /></label>\n        </div>\n        <FormattedMessage id=\"title_tag_manager\" defaultMessage=\"Tags (search & discovery)\"\n          description=\"Section title for TagManager\">{\n          (title) => <TagManager\n            tinode={this.props.tinode}\n            tags={this.state.tags}\n            activated={true}\n            onTagsChanged={this.handleTagsChanged}\n            tabIndex={4}\n            title={title} />\n        }</FormattedMessage>\n        <div className=\"dialog-buttons\">\n          <button className={submitClasses}>\n            <FormattedMessage id=\"button_create\" defaultMessage=\"Create\"\n              description=\"Button [Create]\" />\n          </button>\n        </div>\n      </form>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/permissions-editor.jsx",
    "content": "// PermissionsEditor: Component for editing permissions\n// <PermissionsEditor mode=\"JWROD\" skip=\"O\" onChange={this.handleCheckboxTest} />\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport CheckBox from './checkbox.jsx';\nimport Contact from './contact.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n// Translatable permission names.\nconst messages = defineMessages({\n  joiner: {\n    id: 'permission_join',\n    defaultMessage: \"Join ({val})\",\n    description: 'Name of J permission'\n  },\n  reader: {\n    id: 'permission_read',\n    defaultMessage: \"Read ({val})\",\n    description: 'Name of R permission'\n  },\n  writer: {\n    id: 'permission_write',\n    defaultMessage: \"Write ({val})\",\n    description: 'Name of W permission'\n  },\n  preser: {\n    id: 'permission_pres',\n    defaultMessage: \"Get notified ({val})\",\n    description: 'Name of P permission'\n  },\n  approver: {\n    id: 'permission_admin',\n    defaultMessage: \"Approve ({val})\",\n    description: 'Name of A permission'\n  },\n  sharer: {\n    id: 'permission_share',\n    defaultMessage: \"Share ({val})\",\n    description: 'Name of S permission'\n  },\n  deleter: {\n    id: 'permission_delete',\n    defaultMessage: \"Delete ({val})\",\n    description: 'Name of D permission'\n  },\n  owner: {\n    id: 'permission_owner',\n    defaultMessage: \"Owner ({val})\",\n    description: 'Name of O permission'\n  }\n});\n\nclass PermissionsEditor extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      mode: (props.mode || '').replace('N', '')\n    };\n\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  handleChange(val) {\n    let mode = this.state.mode;\n    const idx = mode.indexOf(val);\n    if (idx == -1) {\n      mode += val;\n    } else {\n      mode = mode.replace(val, '');\n    }\n    this.setState({mode: mode});\n  }\n\n  handleSubmit() {\n    // Normalize string, otherwise cannot check if mode has changed.\n    const mode = (this.state.mode || 'N').split('').sort().join('');\n    const before = (this.props.mode || 'N').split('').sort().join('')\n    if (mode !== before) {\n      this.props.onSubmit(mode);\n    } else {\n      this.props.onCancel();\n    }\n  }\n\n  handleCancel() {\n    this.props.onCancel();\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    const all = 'JRWPASDO';\n    const names = {\n      'J': formatMessage(messages.joiner, {val: 'J'}),\n      'R': formatMessage(messages.reader, {val: 'R'}),\n      'W': formatMessage(messages.writer, {val: 'W'}),\n      'P': formatMessage(messages.preser, {val: 'P'}),\n      'A': formatMessage(messages.approver, {val: 'A'}),\n      'S': formatMessage(messages.sharer, {val: 'S'}),\n      'D': formatMessage(messages.deleter, {val: 'D'}),\n      'O': formatMessage(messages.owner, {val: 'O'})\n    };\n\n    let skip = this.props.skip || '';\n    let mode = this.state.mode;\n    let compare = (this.props.compare || '').replace('N', '');\n    let items = [];\n    for (let i=0; i<all.length; i++) {\n      let c = all.charAt(i);\n      if (skip.indexOf(c) >= 0 && mode.indexOf(c) < 0) {\n        // Permission is marked as inactive: hide unchecked permissions, disable checked permissions\n        continue;\n      }\n      items.push(\n        <tr key={c}>\n          <td>{names[c]}</td>\n          <td className=\"checkbox\">{skip.indexOf(c) < 0 ?\n            <CheckBox name={c} checked={(mode.indexOf(c) >= 0)} onChange={this.handleChange}/>\n            :\n            <CheckBox name={c} checked={(mode.indexOf(c) >= 0)} />\n          }</td>{this.props.compare ? <td className=\"checkbox\">\n            <CheckBox name={c} checked={(compare.indexOf(c) >= 0)}/>\n          </td> : null}\n        </tr>\n      );\n    }\n\n    return (\n      <div className=\"panel-form-column\">\n        {this.props.userTitle ?\n          <ul className=\"contact-box small\"><Contact\n            tinode={this.props.tinode}\n            item={this.props.item}\n            title={this.props.userTitle}\n            small={true}\n            avatar={makeImageUrl(this.props.userAvatar ? this.props.userAvatar : null)} /></ul> : null}\n        <label className=\"small\"><FormattedMessage id=\"title_permissions\"\n          defaultMessage=\"Permissions\" description=\"Section title\"/></label>\n        <table className=\"permission-editor\">\n        {this.props.compare ?\n          <thead><tr>\n            <th></th><th>{this.props.modeTitle}</th>\n            <th>{this.props.compareTitle}</th>\n          </tr></thead> :\n          null}\n        <tbody>\n          {items}\n        </tbody></table>\n        <br />\n        <div className=\"dialog-buttons\">\n          <button className=\"outline\" onClick={this.handleCancel}>\n            <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n          </button>\n          <button className=\"primary\" onClick={this.handleSubmit}>\n            <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(PermissionsEditor);\n"
  },
  {
    "path": "src/widgets/phone-country-selector.jsx",
    "content": "// 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(<li className={style} key={idx}\n        ref={ref => {if (c.code == selected) {this.selectedRef = ref}}}\n        onClick={_ => this.props.onSubmit(c.code, c.dial)}>\n        <span className=\"country-flag\">{c.flag}</span>\n        <span className=\"country\">&nbsp;{c.name}</span>\n        <span className=\"dial-code\">&nbsp;+{c.dial}</span>\n      </li>);\n    });\n\n    return (\n      <div className=\"scrollable-panel\" style={{height: '30rem'}}>\n        <ul className=\"phone-country-selector\">\n          {countries}\n        </ul>\n      </div>\n    );\n  }\n}\n\nexport default injectIntl(PhoneCountrySelector);\n"
  },
  {
    "path": "src/widgets/phone-edit.jsx",
    "content": "// 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        <span className=\"dial-code\" onClick={this.showCountrySelector}>\n          <span className=\"country-flag\">{flagEmoji(this.state.countryCode)}&nbsp;</span>\n          +{this.state.dialCode}&nbsp;</span>\n        <input type=\"tel\" ref={ref => {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"
  },
  {
    "path": "src/widgets/pinned-messages.jsx",
    "content": "// Send message form.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { MIN_SWIPE_DISTANCE } from '../config.js';\n\nconst messages = defineMessages({\n  message_not_found: {\n    id: 'message_not_found',\n    defaultMessage: 'message not found',\n    description: 'Pinned message is not found'\n  },\n  message_deleted: {\n    id: 'message_deleted',\n    defaultMessage: 'message deleted',\n    description: 'Pinned message is deleted'\n  }\n});\n\nclass PinnedMessages extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    // Starting location of the touch gesture.\n    this.touchX = null;\n    this.touchY = null;\n\n    this.touchSurface = React.createRef();\n\n    this.getSelectedIndex = this.getSelectedIndex.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n    this.handleSelected = this.handleSelected.bind(this);\n    this.handleMoveNext = this.handleMoveNext.bind(this);\n    this.handleMovePrev = this.handleMovePrev.bind(this);\n    this.handleTouchEventStart = this.handleTouchEventStart.bind(this);\n    this.handleTouchEventEnd = this.handleTouchEventEnd.bind(this);\n    this.handleTouchCancel = this.handleTouchCancel.bind(this);\n  }\n\n  componentDidMount() {\n    this.touchSurface.current.addEventListener('touchstart', this.handleTouchEventStart, {passive: true});\n    this.touchSurface.current.addEventListener('touchend', this.handleTouchEventEnd, {passive: true});\n    this.touchSurface.current.addEventListener('touchcancel', this.handleTouchCancel, {passive: true});\n  }\n\n  componentWillUnmount() {\n    this.touchSurface.current.removeEventListener('touchstart', this.handleTouchEventStart);\n    this.touchSurface.current.removeEventListener('touchend', this.handleTouchEventEnd);\n    this.touchSurface.current.removeEventListener('touchcancel', this.handleTouchCancel);\n  }\n  getSelectedIndex() {\n    const list = (this.props.pins || []);\n    return list.length - this.props.selected - 1;\n  }\n\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel(this.props.pins[this.getSelectedIndex()]);\n  }\n\n  handleSelected(e) {\n    e.preventDefault();\n    this.props.onSelected(this.props.pins[this.getSelectedIndex()]);\n  }\n\n  handleMoveNext(e, isTouch) {\n    // Don't call preventDefault for touch events.\n    isTouch || e.preventDefault();\n    e.stopPropagation();\n    const idx = Math.max(this.props.selected - 1, 0);\n    if (idx != this.props.selected) {\n      this.props.setSelected(idx);\n    }\n  }\n\n  handleMovePrev(e, isTouch) {\n    // Don't call preventDefault for touch events.\n    isTouch || e.preventDefault();\n    e.stopPropagation();\n    const idx = Math.min(this.props.selected + 1, (this.props.pins || []).length - 1);\n    if (idx != this.props.selected) {\n      this.props.setSelected(idx);\n    }\n  }\n\n  handleTouchEventStart(e) {\n    if (e.touches.length == 1) {\n      this.touchX = e.touches[0].clientX;\n      this.touchY = e.touches[0].clientY;\n    }\n  }\n\n  handleTouchEventEnd(e) {\n    if (this.touchX === null || e.changedTouches.length != 1) {\n      this.touchX = null;\n      return;\n    }\n\n    const dX = this.touchX - e.changedTouches[0].clientX;\n    const dY = this.touchY - e.changedTouches[0].clientY;\n    this.touchX = null;\n\n    if (Math.abs(dX) > Math.abs(dY) || Math.abs(dY) < MIN_SWIPE_DISTANCE) {\n      // Horizontal swipe or too short vertical swipe.\n      return;\n    }\n\n    if (dY > 0) {\n      this.handleMovePrev(e, true);\n    } else {\n      this.handleMoveNext(e, true);\n    }\n  }\n\n  handleTouchCancel() {\n    this.touchX = null;\n  }\n\n  render() {\n    const selected = this.getSelectedIndex();\n    let messageShown = (this.props.messages || [])[selected];\n    messageShown = messageShown ?\n        messageShown._deleted ?\n        <i className=\"gray\">{this.props.intl.formatMessage(messages.message_deleted)}</i>\n        :\n        Drafty.format(messageShown.content, previewFormatter, {\n          formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n          authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n        })\n      :\n      <i className=\"gray\">{this.props.intl.formatMessage(messages.message_not_found)}</i>;\n\n    const dots = [];\n    this.props.pins.forEach(seq => {\n      const cn = dots.length == selected ? 'adot' : 'dot';\n      dots.push(<div key={seq} className={cn} />);\n    });\n\n    return (\n      <div id=\"pinned-wrapper\" ref={this.touchSurface}>\n        {this.props.isAdmin ?\n          <div className=\"cancel\">\n            <a href=\"#\" onClick={this.handleCancel}><i className=\"material-icons gray\">close</i></a>\n          </div> :\n          <div><i className=\"material-icons gray\">push_pin</i></div>\n        }\n        <div className=\"pinned-scroll\">{dots}</div>\n        <div className=\"pinned\" onClick={this.handleSelected}><p>{messageShown}</p></div>\n        <div className=\"pinned-menu\">\n          <span className=\"menuTrigger upper\">\n            {selected > 0 ?\n              <a href=\"#\" onClick={this.handleMovePrev}>\n                <i className=\"material-icons\">expand_less</i>\n              </a>\n              : null\n            }\n          </span>\n          <span className=\"menuTrigger lower\">\n            {this.props.selected > 0 ?\n              <a href=\"#\" onClick={this.handleMoveNext}>\n                <i className=\"material-icons\">expand_more</i>\n              </a>\n              : null\n            }\n          </span>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default injectIntl(PinnedMessages);\n"
  },
  {
    "path": "src/widgets/received-marker.jsx",
    "content": "// Received/read indicator.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { deliveryMarker } from '../lib/utils.js';\n\nconst messages = defineMessages({\n  message_sending: {\n    id: 'message_sending',\n    defaultMessage: 'sending...',\n    description: 'Message being sent, in place of time stamp'\n  },\n  message_sending_failed: {\n    id: 'message_sending_failed',\n    defaultMessage: 'failed',\n    description: 'Failed to send message, in place of time stamp'\n  },\n  message_edited_marker: {\n    id: 'message_edited_marker',\n    defaultMessage: ', edited',\n    description: 'Marker indicating that the message was edited'\n  }\n});\n\nclass ReceivedMarker extends React.PureComponent {\n  render() {\n    const {formatMessage} = this.props.intl;\n    let timestamp;\n    if (this.props.received <= Tinode.MESSAGE_STATUS_SENDING) {\n      timestamp = formatMessage(messages.message_sending);\n    } else if (this.props.received == Tinode.MESSAGE_STATUS_FAILED ||\n        this.props.received == Tinode.MESSAGE_STATUS_FATAL) {\n      timestamp = formatMessage(messages.message_sending_failed);\n    } else {\n      timestamp = this.props.timestamp.toLocaleTimeString(this.props.intl.locale, { timeStyle: 'short' });\n    }\n\n    const icon = deliveryMarker(this.props.received);\n    const marker = icon ? <i className={'material-icons small ' + icon.color}>{icon.name}</i> : null;\n    const edited = this.props.edited ? formatMessage(messages.message_edited_marker) : null;\n\n    return (\n      <span className=\"timestamp\">\n        {timestamp}{edited}{'\\u00a0'}{marker}\n      </span>\n    );\n  }\n};\n\nexport default injectIntl(ReceivedMarker);\n"
  },
  {
    "path": "src/widgets/search-contacts.jsx",
    "content": "import React from 'react';\n\nimport { Tinode } from 'tinode-sdk';\n\nexport default class SearchContacts extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      edited: false,\n      search: this.props.initialQuery || ''\n    };\n\n    this.handleSearchChange = this.handleSearchChange.bind(this);\n    this.handleSearch = this.handleSearch.bind(this);\n    this.handleClear = this.handleClear.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  componentWillUnmount() {\n    if (this.state.edited) {\n      this.setState({search: '', edited: false});\n      this.props.onSearchContacts(Tinode.DEL_CHAR);\n    }\n  }\n\n  handleSearchChange(e) {\n    this.setState({search: e.target.value});\n  }\n\n  handleSearch(e) {\n    e.preventDefault();\n    const query = this.state.search.trim();\n    this.setState({edited: (query.length > 0)});\n    this.props.onSearchContacts(query.length > 0 ? query : Tinode.DEL_CHAR);\n  }\n\n  handleClear(e) {\n    e.preventDefault();\n    if (this.state.edited) {\n      this.props.onSearchContacts(Tinode.DEL_CHAR);\n    }\n    this.setState({search: '', edited: false});\n  }\n\n  handleKeyDown(e) {\n    if (e.key === 'Enter') {\n      this.handleSearch(e);\n    } else if (e.key === 'Escape') {\n      e.stopPropagation();\n      this.handleClear(e);\n    }\n  }\n\n  render() {\n    return (\n      <div className=\"panel-form\">\n        <div className=\"panel-form-row\">\n          <i className=\"material-icons search\">search</i>\n          <input className=\"search\" type=\"text\"\n              placeholder={this.props.placeholder}\n              value={this.state.search} onChange={this.handleSearchChange}\n              onKeyDown={this.handleKeyDown} required autoFocus />\n          {this.state.search ?\n            <a href=\"#\" onClick={this.handleClear}><i className=\"material-icons\">highlight_off</i></a>\n            :\n            <span><i className=\"material-icons\">&nbsp;</i></span>}\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/send-message.jsx",
    "content": "// Send message form.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\n// Lazy-loading AudioRecorder because it's quite large due to\n// a dependency on webm-duration-fix.\nconst AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\nimport { replyFormatter } from '../lib/formatters.js';\n\nconst messages = defineMessages({\n  messaging_disabled: {\n    id: 'messaging_disabled_prompt',\n    defaultMessage: 'Messaging disabled',\n    description: 'Prompt in SendMessage in read-only topic'\n  },\n  type_new_message: {\n    id: 'new_message_prompt',\n    defaultMessage: 'New message',\n    description: 'Prompt in send message field'\n  },\n  add_image_caption: {\n    id: 'image_caption_prompt',\n    defaultMessage: 'Image caption',\n    description: 'Prompt in SendMessage for attached image'\n  },\n  file_attachment_too_large: {\n    id: 'file_attachment_too_large',\n    defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n    description: 'Error message when attachment is too large'\n  },\n  cannot_initiate_upload: {\n    id: 'cannot_initiate_file_upload',\n    defaultMessage: 'Cannot initiate file upload.',\n    description: 'Generic error messagewhen attachment fails'\n  },\n  icon_title_record_voice: {\n    id: 'icon_title_record_voice',\n    defaultMessage: 'Record voice message',\n    description: 'Icon tool tip for recording a voice message'\n  },\n  icon_title_attach_file: {\n    id: 'icon_title_attach_file',\n    defaultMessage: 'Attach file',\n    description: 'Icon tool tip for attaching a file'\n  },\n  icon_title_add_image: {\n    id: 'icon_title_add_image',\n    defaultMessage: 'Add image',\n    description: 'Icon tool tip for attaching an image'\n  },\n  icon_title_send: {\n    id: 'icon_title_send',\n    defaultMessage: 'Send message',\n    description: 'Icon tool tip for sending a message'\n  },\n});\n\nclass SendMessage extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      quote: null,\n      message: '',\n      audioRec: false,\n      audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),\n    };\n\n    // Timestamp when the previous key press was sent to the server.\n    this.keypressTimestamp = 0;\n\n    this.handlePasteEvent = this.handlePasteEvent.bind(this);\n    this.handleAttachImage = this.handleAttachImage.bind(this);\n    this.handleAttachFile = this.handleAttachFile.bind(this);\n    this.handleAttachAudio = this.handleAttachAudio.bind(this);\n    this.handleSend = this.handleSend.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleMessageTyping = this.handleMessageTyping.bind(this);\n    this.handleDropAttach = this.handleDropAttach.bind(this);\n\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n\n    this.formatReply = this.formatReply.bind(this);\n  }\n\n  componentDidMount() {\n    if (this.messageEditArea) {\n      this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n      if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n        // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n        this.messageEditArea.focus();\n      }\n    }\n\n    this.setState({quote: this.formatReply()});\n  }\n\n  componentWillUnmount() {\n    if (this.messageEditArea) {\n      this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.messageEditArea) {\n      if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n        // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n        this.messageEditArea.focus();\n      }\n\n      // Adjust height of the message area for the amount of text.\n      this.messageEditArea.style.height = '0px';\n      this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\n    }\n\n    if (prevProps.topicName != this.props.topicName) {\n      this.setState({message: this.props.initMessage || '', audioRec: false, quote: null});\n    } else if (prevProps.initMessage != this.props.initMessage) {\n      const msg = this.props.initMessage || '';\n      this.setState({message: msg}, _ => {\n        // If there is text, scroll to bottom and set caret to the end.\n        this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\n        this.messageEditArea.setSelectionRange(msg.length, msg.length);\n      });\n    }\n    if (prevProps.reply != this.props.reply) {\n      this.setState({quote: this.formatReply()});\n    }\n  }\n\n  formatReply() {\n    return this.props.reply ?\n      Drafty.format(this.props.reply.content, replyFormatter, {\n        formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n        authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n      }) : null;\n  }\n\n  handlePasteEvent(e) {\n    if (this.props.disabled) {\n      return;\n    }\n    // FIXME: handle large files too.\n    if (filePasted(e,\n      file => { this.props.onAttachImage(file); },\n      file => { this.props.onAttachFile(file); },\n      this.props.onError)) {\n\n      // If a file was pasted, don't paste base64 data into input field.\n      e.preventDefault();\n    }\n  }\n\n  handleAttachImage(e) {\n    if (e.target.files && e.target.files.length > 0) {\n      this.props.onAttachImage(e.target.files[0]);\n    }\n    // Clear the value so the same file can be uploaded again.\n    e.target.value = '';\n  }\n\n  handleAttachFile(e) {\n    if (e.target.files && e.target.files.length > 0) {\n      this.props.onAttachFile(e.target.files[0]);\n    }\n    // Clear the value so the same file can be uploaded again.\n    e.target.value = '';\n  }\n\n  handleDropAttach(files) {\n    if (files && files.length > 0) {\n      this.props.onAttachFile(files[0]);\n    }\n  }\n\n  handleAttachAudio(url, preview, duration) {\n    this.setState({audioRec: false});\n    this.props.onAttachAudio(url, preview, duration);\n  }\n\n  handleSend(e) {\n    e.preventDefault();\n    const message = this.state.message.trim();\n    if (message || this.props.acceptBlank || this.props.noInput) {\n      this.props.onSendMessage(message);\n      this.setState({message: ''});\n    }\n  }\n\n  /* Send on Enter key */\n  handleKeyPress(e) {\n    if (this.state.audioRec) {\n      // Ignore key presses while audio is being recorded.\n      e.preventDefault();\n      e.stopPropagation();\n      return;\n    }\n\n    // Enter pressed: either send, or enter a new line.\n    if (e.key === 'Enter') {\n      if (this.props.sendOnEnter == 'plain') {\n        // Have Shift-Enter insert a line break instead\n        if (!e.shiftKey) {\n          e.preventDefault();\n          e.stopPropagation();\n\n          this.handleSend(e);\n        }\n      } else {\n        if (e.ctrlKey || e.metaKey) {\n          e.preventDefault();\n          e.stopPropagation();\n\n          this.handleSend(e);\n        }\n      }\n    }\n  }\n\n  handleMessageTyping(e) {\n    this.setState({message: e.target.value});\n    if (this.props.onKeyPress) {\n      const now = new Date().getTime();\n      if (now - this.keypressTimestamp > KEYPRESS_DELAY) {\n        this.props.onKeyPress();\n        this.keypressTimestamp = now;\n      }\n    }\n  }\n\n  handleQuoteClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.props.reply && this.props.onQuoteClick) {\n      const replyToSeq = this.props.reply.seq;\n      this.props.onQuoteClick(replyToSeq);\n    }\n  }\n\n  render() {\n    const { formatMessage } = this.props.intl;\n    const prompt = this.props.disabled ?\n      formatMessage(messages.messaging_disabled) :\n      (this.props.messagePrompt ?\n        formatMessage(messages[this.props.messagePrompt]) :\n        formatMessage(messages.type_new_message));\n\n    const sendIcon = (this.props.reply && this.props.reply.editing) ?\n      'check_circle' : 'send';\n\n    const quote = this.state.quote ?\n      (<div id=\"reply-quote-preview\">\n        <div className=\"cancel\">\n          <a href=\"#\" onClick={e => {e.preventDefault(); this.props.onCancelReply();}}><i className=\"material-icons gray\">close</i></a>\n        </div>\n        {this.state.quote}\n      </div>) : null;\n    const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\n    return (\n      <div id=\"send-message-wrapper\">\n        {!this.props.noInput ? quote : null}\n        <div id=\"send-message-panel\">\n          {!this.props.disabled ?\n            <>\n              {this.props.onAttachFile && !this.state.audioRec ?\n                <>\n                  <a href=\"#\" onClick={e => {e.preventDefault(); this.attachImage.click();}} title={formatMessage(messages.icon_title_add_image)}>\n                    <i className=\"material-icons secondary\">photo</i>\n                  </a>\n                  <a href=\"#\" onClick={e => {e.preventDefault(); this.attachFile.click();}} title={formatMessage(messages.icon_title_attach_file)}>\n                    <i className=\"material-icons secondary\">attach_file</i>\n                  </a>\n                </>\n                :\n                null}\n              {this.props.noInput ?\n                (quote || <div className=\"hr thin\" />) :\n                (this.state.audioRec ?\n                  (<Suspense fallback={<div><FormattedMessage id=\"loading_note\" defaultMessage=\"Loading...\"\n                  description=\"Message shown when component is loading\"/></div>}>\n                    <AudioRecorder\n                      onRecordingProgress={_ => this.props.onKeyPress(true)}\n                      onDeleted={_ => this.setState({audioRec: false})}\n                      onFinished={this.handleAttachAudio}/>\n                  </Suspense>) :\n                  <textarea id=\"send-message-input\" placeholder={prompt}\n                    value={this.state.message} onChange={this.handleMessageTyping}\n                    onKeyDown={this.handleKeyPress}\n                    ref={ref => {this.messageEditArea = ref;}} />)}\n              {this.state.message || !audioEnabled ?\n                <a href=\"#\" onClick={this.handleSend} title={formatMessage(messages.icon_title_send)}>\n                  <i className=\"material-icons\">{sendIcon}</i>\n                </a> :\n                !this.state.audioRec ?\n                  <a href=\"#\" onClick={e => {e.preventDefault(); this.setState({audioRec: true})}} title={formatMessage(messages.icon_title_record_voice)}>\n                    <i className=\"material-icons\">mic</i>\n                  </a> :\n                  null\n              }\n              <input type=\"file\" ref={ref => {this.attachFile = ref}}\n                onChange={this.handleAttachFile} style={{display: 'none'}} />\n              <input type=\"file\" ref={ref => {this.attachImage = ref}} accept=\"image/*, video/*\"\n                onChange={this.handleAttachImage} style={{display: 'none'}} />\n            </>\n            :\n            <div id=\"writing-disabled\">{prompt}</div>\n          }\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(SendMessage);\n"
  },
  {
    "path": "src/widgets/show-qrcode.jsx",
    "content": "import QRCode from 'qrcodejs';\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { QRCODE_SIZE } from '../config';\n\nexport default class ShowQRCode extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.qrCodeRef = React.createRef();\n  }\n\n  componentDidMount() {\n    new QRCode(this.qrCodeRef.current, {\n      text: this.props.uri,\n      width: QRCODE_SIZE,\n      height: QRCODE_SIZE,\n    });\n  }\n\n  render() {\n    return (\n      <div className=\"panel-form-column\">\n        <br />\n        <div className=\"qr-code\" ref={this.qrCodeRef} />\n        <div><tt>{this.props.uri}</tt></div>\n        <div className=\"dialog-buttons\">\n          <button className=\"outline\" onClick={this.props.onCancel}>\n            <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/side-navbar.jsx",
    "content": "import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\nimport ButtonBack from './button-back.jsx';\nimport ContactBadges from './contact-badges.jsx';\nimport MenuContacts from './menu-contacts.jsx';\nimport MenuStart from './menu-start.jsx';\n\nimport { sanitizeUrlForMime } from '../lib/utils.js';\n\nexport default class SideNavbar extends React.PureComponent {\n  render() {\n    const icon_badges = [];\n    if (this.props.trustedBadges) {\n      this.props.trustedBadges.forEach(b => {\n        icon_badges.push({icon: b, color: 'badge-inv'});\n      });\n    }\n    let avatar = null;\n    if (this.props.tinode) {\n      avatar = this.props.tinode.authorizeURL(sanitizeUrlForMime(this.props.avatar, 'image'));\n    }\n    return (\n      <div id=\"side-caption-panel\" className=\"caption-panel\">\n        {this.props.onCancel ? <ButtonBack onBack={this.props.onCancel} /> : null}\n        {avatar ?\n          <div id=\"self-avatar\" className=\"avatar-box\">\n            <LetterTile\n              authorizeURL={this.props.tinode.authorizeURL}\n              avatar={avatar}\n              topic={this.props.myUserId}\n              title={this.props.title} />\n          </div>\n          :\n          null}\n        <div id=\"sidepanel-title\" className=\"panel-title\">{this.props.title}<ContactBadges badges={icon_badges}/></div>\n        {this.props.state === 'login' ?\n            <MenuStart onSignUp={this.props.onSignUp} onSettings={this.props.onSettings} /> :\n          this.props.state === 'contacts' ?\n            <MenuContacts onNewTopic={this.props.onNewTopic} onSettings={this.props.onSettings} /> :\n          null}\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/tag-manager.jsx",
    "content": "// TagManager: edit topic or user tags.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TagManager extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      tags: this.props.tags || [],\n      alias: Tinode.tagByPrefix(this.props.tags, Tinode.TAG_ALIAS) || '',\n      tagInput: '',\n      activated: this.props.activated\n    };\n\n    this.handleTagInput = this.handleTagInput.bind(this);\n    this.handleAddTag = this.handleAddTag.bind(this);\n    this.handleRemoveTag = this.handleRemoveTag.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    const tags = nextProps.tags || [];\n    if (!arrayEqual(tags, prevState.tags) && !prevState.activated) {\n      return {\n        tags: tags || [],\n        alias: Tinode.tagByPrefix(tags, Tinode.TAG_ALIAS) || '',\n      };\n    }\n    return null;\n  }\n\n  handleTagInput(text) {\n    this.setState({tagInput: text});\n    if (text.length > 0) {\n      const last = text[text.length-1];\n      if (text[0] == '\"') {\n        // This is a quoted string.\n        if (text.length > 1 && last == '\"') {\n          this.handleAddTag(text.substring(1, text.length-1));\n        }\n      } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n        // User entered ',', ' ' or ';'\n        this.handleAddTag(text.substring(0, text.length-1).trim());\n      }\n    }\n  }\n\n  handleAddTag(tag) {\n    const maxTagCount = this.props.tinode.getServerParam(Tinode.MAX_TAG_COUNT, MAX_TAG_COUNT);\n\n    if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n      const tags = this.state.tags.slice(0);\n      tags.push(tag);\n\n      this.setState({tags: tags, tagInput: ''});\n      if (this.props.onTagsChanged) {\n        this.props.onTagsChanged(tags);\n      }\n      return tags;\n    }\n    return this.state.tags;\n  }\n\n  handleRemoveTag(tag, index) {\n    const tags = this.state.tags.slice(0);\n    tags.splice(index, 1);\n    this.setState({tags: tags});\n    if (this.props.onTagsChanged) {\n      this.props.onTagsChanged(tags);\n    }\n  }\n\n  handleSubmit() {\n    // Add unprocessed input to tags.\n    let tags = this.handleAddTag(this.state.tagInput.trim());\n    // Add back the alias (and overwrite one possibly added by hand).\n    tags = Tinode.setUniqueTag(tags, this.state.alias);\n    // Submit the updated list.\n    this.props.onSubmit(tags);\n    this.setState({activated: false, tags: this.props.tags || []});\n  }\n\n  handleCancel() {\n    this.setState({activated: false, tagInput: '', tags: this.props.tags || []});\n    if (this.props.onCancel) {\n      this.props.onCancel();\n    }\n  }\n\n  render() {\n    const minTagLength = this.props.tinode.getServerParam(Tinode.MIN_TAG_LENGTH, MIN_TAG_LENGTH);\n    const maxTagLength = this.props.tinode.getServerParam(Tinode.MAX_TAG_LENGTH, MAX_TAG_LENGTH);\n\n    let tags = [];\n    if (this.state.activated) {\n      this.state.tags.forEach(tag => {\n        if (tag != this.state.alias) {\n          tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\n        }\n      });\n\n    } else {\n      this.state.tags.forEach(tag => {\n        if (tag != this.state.alias) {\n          tags.push(<span className=\"badge\" key={tags.length}>{tag}</span>);\n        }\n      });\n      if (tags.length == 0) {\n        tags = (\n          <i>\n            <FormattedMessage id=\"tags_not_found\" defaultMessage=\"No tags defined. Add some.\" description=\"\" />\n          </i>\n        );\n      }\n    }\n    return (\n      <div className=\"panel-form-column\">\n        <div className=\"panel-form-row\">\n          <label className=\"small\">{this.props.title}</label>\n        </div>\n        {this.state.activated ?\n        <div>\n          <FormattedMessage id=\"tags_editor_no_tags\" defaultMessage=\"Add some tags\"\n            description=\"Tag editor prompt when no tags are found.\">{\n            (add_tags_prompt) => <ChipInput\n              tinode={this.props.tinode}\n              chips={tags}\n              avatarDisabled={true}\n              prompt={add_tags_prompt}\n              tabIndex={this.props.tabIndex}\n              onEnter={this.handleAddTag}\n              onFocusLost={this.handleAddTag}\n              onCancel={this.handleCancel}\n              onChipRemoved={this.handleRemoveTag}\n              filterFunc={this.handleTagInput} />\n          }</FormattedMessage>\n          {this.props.onSubmit || this.props.onCancel ?\n            <div id=\"tag-manager-buttons\" className=\"dialog-buttons panel-form-row\">\n              <button className=\"outline\" onClick={this.handleCancel}>\n                <FormattedMessage id=\"button_cancel\" defaultMessage=\"Cancel\" description=\"Button [Cancel]\" />\n              </button>\n              <button className=\"primary\" onClick={this.handleSubmit}>\n                <FormattedMessage id=\"button_ok\" defaultMessage=\"OK\" description=\"Button [OK]\" />\n              </button>\n            </div>\n          : null}\n        </div>\n        :\n        <div className=\"quoted\">\n          <a href=\"#\" className=\"flat-button\" onClick={(e) => {e.preventDefault(); this.setState({activated: true});}}>\n            <i className=\"material-icons\">edit</i> &nbsp;<FormattedMessage id=\"title_manage_tags\" defaultMessage=\"Manage\"\n              description=\"Section title for the list of tags\" />\n          </a>\n          <>{tags}</>\n        </div>\n      }\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/the-card-mini.jsx",
    "content": "import React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport { TheCard } from 'tinode-sdk';\n\nimport LetterTile from './letter-tile.jsx';\n\nconst messages = defineMessages({\n  unknown_name: {\n    id: 'unknown_name',\n    defaultMessage: 'Unknown',\n    description: 'Name to show when the name is missing'\n  }\n});\n\nclass TheCardMini extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleDownload = this.handleDownload.bind(this);\n    this.handleMessage = this.handleMessage.bind(this);\n  }\n\n  handleDownload(e) {\n    e.preventDefault();\n    try {\n      const vcard = TheCard.exportVCard(this.props.content);\n      const blob = new Blob([vcard], { type: 'text/vcard' });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.style.display = 'none';\n      a.href = url;\n      a.download = (this.props.content.fn || 'contact') + '.vcf';\n      document.body.appendChild(a);\n      a.click();\n      window.URL.revokeObjectURL(url);\n      document.body.removeChild(a);\n    } catch (err) {\n      console.error(\"Failed to download vcard\", err);\n      if (this.props.onError) {\n        this.props.onError(\"Failed to download vcard\", 'err');\n      }\n    }\n  }\n\n  handleMessage(e) {\n    // This is handled by the parent component via props.onAction which expects a click event.\n  }\n\n  render() {\n    const card = this.props.content;\n    if (!card) {\n      return null;\n    }\n\n    const uid = TheCard.getFirstTinodeID(card);\n    const contacts = TheCard.getEmails(card).concat(TheCard.getPhones(card));\n    const org = TheCard.getOrg(card);\n    return (\n      <div className=\"contact-card\">\n        <div className=\"contact-body\">\n          <div className=\"avatar-box\">\n            <LetterTile\n              authorizeURL={this.props.authorizeURL}\n              topic={uid || 'usr123XXX'}\n              avatar={TheCard.getPhotoUrl(card) || true}\n              title={card.fn} />\n          </div>\n          <div className=\"name-box\">\n            <div className=\"name\">{card.fn || <FormattedMessage {...messages.unknown_name} />}</div>\n            {org && <div className=\"org\">{org}</div>}\n          </div>\n        </div>\n        <div className=\"contact-actions\">\n          {uid ?\n            <>\n              <a className=\"flat-button\" data-val={uid} onClick={this.props.onChatClick}>\n                <FormattedMessage id=\"chat_now\" defaultMessage=\"Chat\"\n                  description=\"Label for message button in contact card\" />\n              </a>\n              <div className=\"divider\"></div>\n            </>\n            : contacts.length > 0 ?\n            <>\n              <a className=\"flat-button\" data-val={contacts.join(',')} onClick={this.props.onFindClick}>\n                <FormattedMessage id=\"find_user\" defaultMessage=\"Find\"\n                  description=\"Label for search button in contact card\" />\n              </a>\n              <div className=\"divider\"></div>\n            </>\n            : null\n          }\n          <a className=\"flat-button\" onClick={this.handleDownload}>\n            <FormattedMessage id=\"save_action\" defaultMessage=\"Save\" description=\"Label for Save button\" />\n          </a>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(TheCardMini);\n"
  },
  {
    "path": "src/widgets/the-card-preview.jsx",
    "content": "import React from 'react';\nimport { defineMessages, FormattedMessage } from 'react-intl';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nimport SendMessage from './send-message.jsx';\nimport LetterTile from './letter-tile.jsx';\n\nimport { TheCard } from 'tinode-sdk';\nimport { importVCard } from '../lib/blob-helpers.js';\n\nconst messages = defineMessages({\n  unknown_name: {\n    id: 'unknown_name',\n    defaultMessage: 'Unknown',\n    description: 'Name to show when the name is missing'\n  }\n});\n\nexport default class TheCardPreview extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      content: props.content.object\n    };\n\n    if (!props.content.object) {\n      importVCard(props.content.file)\n        .then(card => {\n          this.setState({ content: card });\n        });\n    }\n\n    this.handleSendCard = this.handleSendCard.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  handleKeyDown(e) {\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n\n  handleSendCard() {\n    this.props.onClose();\n    this.props.onSendMessage(this.props.content);\n  }\n\n  render() {\n    const card = this.state.content;\n\n    const fullName = TheCard.getFn(card);\n    const photoUrl = TheCard.getPhotoUrl(card) || null;\n    const note = card?.note;\n    const org = TheCard.getOrg(card);\n\n    // Get communication methods\n    const emails = TheCard.getComm(card, 'email') || [];\n    const phones = TheCard.getComm(card, 'tel') || [];\n    const tinodeIds = TheCard.getComm(card, 'tinode') || [];\n    const urls = TheCard.getComm(card, 'http') || [];\n\n    const contacts = [];\n\n    // Add emails\n    emails.forEach((email, idx) => {\n      const types = Array.isArray(email.des) ? email.des.join(', ') : '';\n      contacts.push(\n        <div className=\"group quoted\" key={`email-${idx}`}>\n          <tt>{email.value}</tt>\n          <span className=\"small gray\"> {types ? `(${types})` : ''}</span>\n        </div>\n      );\n    });\n\n    // Add phones\n    phones.forEach((phone, idx) => {\n      let val = phone.value;\n      try {\n        const number = parsePhoneNumber(phone.value);\n        val = number ? number.formatInternational() : phone.value;\n      } catch (err) {\n        // Use original value if parsing fails\n      }\n      const types = Array.isArray(phone.des) ? phone.des.join(', ') : '';\n      contacts.push(\n        <div className=\"group quoted\" key={`tel-${idx}`}>\n          <tt>{val}</tt>\n          <span className=\"small gray\"> {types ? `(${types})` : ''}</span>\n        </div>\n      );\n    });\n\n    // Add Tinode IDs\n    tinodeIds.forEach((tid, idx) => {\n      const types = Array.isArray(tid.des) ? tid.des.join(', ') : '';\n      contacts.push(\n        <div className=\"group quoted\" key={`tinode-${idx}`}>\n          <tt>{tid.value}</tt>\n          <span className=\"small gray\"> {types ? `(${types})` : ''}</span>\n        </div>\n      );\n    });\n\n    // Add URLs\n    urls.forEach((url, idx) => {\n      const types = Array.isArray(url.des) ? url.des.join(', ') : '';\n      contacts.push(\n        <div className=\"group quoted\" key={`url-${idx}`}>\n          <tt>{url.value}</tt>\n          <span className=\"small gray\"> {types ? `(${types})` : ''}</span>\n        </div>\n      );\n    });\n\n    return (\n      <div id=\"image-preview\">\n        <div id=\"preview-caption-panel\">\n          <span><FormattedMessage id=\"label_contact_card\" defaultMessage=\"Contact Card\"\n            description=\"Label for contact card preview\" /></span>\n          <a href=\"#\" onClick={(e) => {e.preventDefault(); this.props.onClose();}}>\n            <i className=\"material-icons gray\">close</i>\n          </a>\n        </div>\n        <div id=\"image-preview-container\">\n          <div className=\"doc-card\">\n            <div className=\"panel-form-column\">\n              <center>\n                <div className=\"avatar-box\">\n                  <LetterTile\n                    authorizeURL={this.props.tinode.authorizeURL}\n                    avatar={photoUrl || true}\n                    topic=\"usrXXX123\"\n                    title={fullName} />\n                </div>\n              </center>\n              <div className=\"group\">\n                <div className=\"large ellipsized\">{fullName || <FormattedMessage {...messages.unknown_name} />}</div>\n              </div>\n              {org ?\n                <div className=\"group\">\n                  <div>{org}</div>\n                </div>\n                : null}\n              {note ?\n                <div className=\"group\">\n                  <label className=\"small\">\n                    <FormattedMessage id=\"label_description\" defaultMessage=\"Description\"\n                      description=\"Label for description of user or topic\" />\n                  </label>\n                  <div className=\"quoted\">{note}</div>\n                </div>\n                : null}\n              {contacts.length > 0 ?\n                <div className=\"group\">\n                  <label className=\"small\">\n                    <FormattedMessage id=\"label_contacts\" defaultMessage=\"Contacts\"\n                      description=\"Label for contact information\" />\n                  </label>\n                  {contacts}\n                </div>\n                : null}\n            </div>\n          </div>\n        </div>\n        <SendMessage\n          noInput={true}\n          tinode={this.props.tinode}\n          reply={this.props.reply}\n          onCancelReply={this.props.onCancelReply}\n          onSendMessage={this.handleSendCard}\n          onError={this.props.onError} />\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/widgets/topic-desc-edit.jsx",
    "content": "// Widget for editing topic description.\n\nimport React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport AvatarCrop from './avatar-crop.jsx';\nimport AvatarUpload from './avatar-upload.jsx';\nimport InPlaceEdit from './in-place-edit.jsx';\nimport TagManager from './tag-manager.jsx';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE, MAX_TITLE_LENGTH,\n  MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\nimport { arrayEqual, theCard } from '../lib/utils.js';\n\nconst messages = defineMessages({\n  alias_invalid: {\n    id: 'alias_invalid',\n    defaultMessage: '(invalid)',\n    description: 'Error message for invalid alias'\n  },\n  alias_already_taken: {\n    id: 'alias_already_taken',\n    defaultMessage: '(already taken)',\n    description: 'Error message for alias already taken'\n  },\n  self_topic_name: {\n    id: 'self_topic_name',\n    defaultMessage: 'Saved messages',\n    description: 'Name of self topic for UI'\n  },\n  self_topic_comment: {\n    id: 'self_topic_comment',\n    defaultMessage: 'Notes, messages, links, files saved for posterity',\n    description: 'Comment for self topic for UI'\n  }\n});\n\nconst ALIAS_AVAILABILITY_CHECK_DELAY = 1000; // milliseconds\n\nclass TopicDescEdit extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    const acs = topic.getAccessMode();\n    const isSelf = Tinode.isSelfTopicName(this.props.topic);\n    this.state = {\n      isMe: Tinode.isMeTopicName(this.props.topic),\n      isSelf: isSelf,\n      owner: acs && acs.isOwner(),\n      fullName: topic.public ? topic.public.fn :\n        isSelf ? this.props.intl.formatMessage(messages.self_topic_name) : null,\n      private: topic.private ? topic.private.comment : null,\n      description: topic.public ? topic.public.note :\n        isSelf ? this.props.intl.formatMessage(messages.self_topic_comment) : null,\n      avatar: makeImageUrl(topic.public ? topic.public.photo : null),\n      tags: topic.tags() || [],\n      newAvatar: null,\n      newAvatarMime: null,\n      aliasError: ''\n    };\n\n    this.previousOnTags = null;\n    this.aliasCheckTimer = null;\n    this.aliasCheckPromise = null;\n\n    this.tnNewTags = this.tnNewTags.bind(this);\n    this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);\n    this.handleImageUpdated = this.handleImageUpdated.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.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);\n    this.handleAliasUpdate = this.handleAliasUpdate.bind(this);\n    this.handleDescriptionUpdate = this.handleDescriptionUpdate.bind(this);\n    this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n    this.validateAlias = this.validateAlias.bind(this);\n    this.cancelValidator = this.cancelValidator.bind(this);\n  }\n\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    this.previousOnTags = topic.onTagsUpdated;\n    topic.onTagsUpdated = this.tnNewTags;\n  }\n\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onTagsUpdated = this.previousOnTags;\n    this.cancelValidator();\n  }\n\n  tnNewTags(tags) {\n    this.setState({tags: tags});\n  }\n\n  handleFullNameUpdate(fn) {\n    fn = truncateString(fn.trim(), MAX_TITLE_LENGTH);\n    if (fn && this.state.fullName !== fn) {\n      this.setState({fullName: fn});\n      this.props.onUpdateTopicDesc(this.props.topic, theCard(fn, null));\n    }\n  }\n\n  handlePrivateUpdate(comment) {\n    comment = comment.trim().substring(0, MAX_TITLE_LENGTH);\n    if (this.state.private !== comment) {\n      this.setState({private: comment});\n      this.props.onUpdateTopicDesc(this.props.topic, null, comment || Tinode.DEL_CHAR);\n    }\n  }\n\n  handleDescriptionUpdate(desc) {\n    desc = desc.trim().substring(0, MAX_TOPIC_DESCRIPTION_LENGTH);\n    if (desc) {\n      this.setState({description: desc});\n      this.props.onUpdateTopicDesc(this.props.topic, theCard(null, null, null, desc));\n    }\n  }\n\n  // AvatarUpload widget has changed the avatar: received a new file or deleted the avatar.\n  handleImageUpdated(mime, img) {\n    // This will show the AvatarCropView is img is not null.\n    this.setState({newAvatar: img, newAvatarMime: mime});\n    if (!img) {\n      // Deleting the avatar.\n      this.setState({avatar: null});\n      this.props.onUpdateTopicDesc(this.props.topic, theCard(null, Tinode.DEL_CHAR));\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  // 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      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)\n          .then(url => this.props.onUpdateTopicDesc(this.props.topic, theCard(null, url)))\n          .catch(err => this.props.onError(err.message, 'err'));\n      } else {\n        // Convert blob to base64-encoded bits.\n        blobToBase64(blob)\n          .then(b64 => {\n            const du = makeImageUrl({data: b64.bits, type: mime});\n            this.setState({source: du});\n            this.props.onUpdateTopicDesc(this.props.topic, theCard(null, du));\n          });\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  handleAvatarCropCancel() {\n    this.setState({newAvatar: null, newAvatarMime: null});\n  }\n\n  handleAliasUpdate(alias) {\n    alias = (alias || '').trim();\n    const tags = alias ?\n      Tinode.setUniqueTag(this.state.tags, Tinode.TAG_ALIAS + alias.toLowerCase()) :\n      Tinode.clearTagPrefix(this.state.tags, Tinode.TAG_ALIAS);\n    this.handleTagsUpdated(tags);\n  }\n\n  validateAlias(alias) {\n    // Reset pending delayed check.\n    this.cancelValidator();\n\n    alias = alias.trim();\n    if (!alias) {\n      this.setState({aliasError: ''});\n      return true;\n    }\n\n    const valid = Tinode.isValidTagValue(alias);\n    if (!valid) {\n      this.setState({aliasError: this.props.intl.formatMessage(messages.alias_invalid)});\n      return false;\n    }\n    this.setState({aliasError: ''});\n\n    // Setup a delayed check for alias availability.\n    const fnd = this.props.tinode.getFndTopic();\n    if (!fnd) {\n      // Unable to check alias availability.\n      this.setState({aliasError: ''});\n      return true;\n    }\n    this.aliasCheckPromise = {};\n    const validationPromise = new Promise((resolve, reject) => {\n      this.aliasCheckPromise.resolve = resolve;\n      this.aliasCheckPromise.reject = reject;\n    });\n    this.aliasCheckTimer = setTimeout(_ => {\n      this.aliasCheckTimer = null;\n      fnd.checkTagUniqueness(`${Tinode.TAG_ALIAS}${alias}`, this.props.topic)\n        .then(ok => {\n          this.aliasCheckPromise.resolve(ok)\n          this.setState({aliasError: ok ? '' : this.props.intl.formatMessage(messages.alias_already_taken)});\n        })\n        .catch(err => {\n          this.aliasCheckPromise.reject(err);\n          this.setState({aliasError: err.message});\n        });\n    }, ALIAS_AVAILABILITY_CHECK_DELAY);\n    return validationPromise;\n  }\n\n  cancelValidator() {\n    // Reset pending delayed check.\n    if (this.aliasCheckTimer) {\n      clearTimeout(this.aliasCheckTimer);\n      this.aliasCheckTimer = null;\n      this.aliasCheckPromise.reject(null);\n    }\n  }\n\n  handleTagsUpdated(tags) {\n    // Check if tags have actually changed.\n    if (arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\n      return;\n    }\n    this.props.onUpdateTags(tags);\n  }\n\n  render() {\n    if (this.state.newAvatar) {\n      return (\n        <AvatarCrop\n          avatar={this.state.newAvatar}\n          mime={this.state.newAvatarMime}\n          onSubmit={this.handleAvatarCropped}\n          onCancel={this.handleAvatarCropCancel}\n          onError={this.props.onError} />\n      );\n    }\n\n    const editable = this.state.isMe || (this.state.owner && !this.state.isSelf);\n    let alias = this.state.tags && this.state.tags.find(t => t.startsWith('alias:'));\n    if (alias) {\n      // Remove 'alias:' prefix.\n      alias = alias.substring(6);\n    }\n\n    return (\n      <>\n      <div className=\"panel-form-column\">\n        <center>\n          <AvatarUpload\n            tinode={this.props.tinode}\n            avatar={this.state.avatar}\n            readOnly={!editable}\n            uid={this.props.topic}\n            title={this.state.fullName}\n            onImageUpdated={this.handleImageUpdated}\n            onError={this.props.onError} />\n        </center>\n        {this.state.isMe ?\n          <div className=\"group\">\n            <label className=\"small\">\n              <FormattedMessage id=\"label_your_name\" defaultMessage=\"Your name\"\n              description=\"Label for full name editing\" />\n            </label>\n            <div>\n              <FormattedMessage id=\"full_name_prompt\" defaultMessage=\"Full name, e.g. John Doe\"\n                description=\"Input placeholder for person's full name\">{\n                (full_name_placeholder) => <InPlaceEdit\n                  placeholder={full_name_placeholder}\n                  value={this.state.fullName}\n                  required={true}\n                  onFinished={this.handleFullNameUpdate} />\n              }</FormattedMessage>\n            </div>\n          </div>\n        :\n          <>\n            <div className=\"group\">\n              <div><label className=\"small\">\n                <FormattedMessage id=\"label_topic_name\" defaultMessage=\"Name\"\n                  description=\"Label for editing topic name\" />\n              </label></div>\n              <div>\n                <FormattedMessage id=\"topic_name_editing_placeholder\" defaultMessage=\"Freeform name of the group\"\n                  description=\"Prompt for entering topic name\">{\n                  (group_name_placeholder) => <InPlaceEdit\n                    placeholder={group_name_placeholder}\n                    readOnly={!editable}\n                    value={this.state.fullName}\n                    required={true}\n                    maxLength={32}\n                    onFinished={this.handleFullNameUpdate} />\n                }</FormattedMessage>\n              </div>\n            </div>\n            <div className=\"group\">\n              <div>\n                <label className=\"small\">\n                  <FormattedMessage id=\"label_private\" defaultMessage=\"Private comment\"\n                    description=\"Label for editing 'private'\" />\n                </label>\n              </div>\n              <div>\n                <FormattedMessage id=\"private_editing_placeholder\" defaultMessage=\"Visible to you only\"\n                  description=\"Placeholder for editing 'private'\">{\n                  (private_placeholder) => <InPlaceEdit\n                    placeholder={private_placeholder}\n                    value={this.state.private}\n                    onFinished={this.handlePrivateUpdate} />\n                }</FormattedMessage>\n              </div>\n            </div>\n          </>\n        }\n        {editable || alias ?\n          <div className=\"group\">\n            <div><label className={'small ' + (this.state.aliasError ? 'invalid' : '')}>\n              <FormattedMessage id=\"label_alias_edit\" defaultMessage=\"Alias\"\n                description=\"Label for editing user or topic alias\" /> {this.state.aliasError}\n            </label></div>\n            <div>\n              <FormattedMessage id=\"alias_editing_placeholder\"\n                defaultMessage=\"Alias (optional)\"\n                description=\"Placeholder for editing user or topic alias\">{\n                (private_placeholder) => <InPlaceEdit\n                  placeholder={private_placeholder}\n                  readOnly={!editable}\n                  value={alias}\n                  validator={this.validateAlias}\n                  iconLeft='alternate_email'\n                  maxLength={24}\n                  spellCheck={false}\n                  onFinished={this.handleAliasUpdate} />\n              }</FormattedMessage>\n            </div>\n          </div>\n          : null\n        }\n        {editable || this.state.description ?\n          <div className=\"group\">\n            <div><label className=\"small\">\n              <FormattedMessage id=\"label_description\" defaultMessage=\"Description\"\n                description=\"Label for description of user or topic\" />\n            </label></div>\n            <div>\n              <FormattedMessage id=\"description_editing_placeholder\"\n                defaultMessage=\"Description (optional)\"\n                description=\"Placeholder for editing topic description\">{\n                (private_placeholder) => <InPlaceEdit\n                  placeholder={private_placeholder}\n                  readOnly={!editable}\n                  value={this.state.description}\n                  multiline={2}\n                  onFinished={this.handleDescriptionUpdate} />\n              }</FormattedMessage>\n            </div>\n          </div>\n          : null\n        }\n      </div>\n      {editable && !this.state.isMe ?\n        <>\n          <div className=\"hr\" />\n          <FormattedMessage id=\"title_tag_manager\" defaultMessage=\"Tags (search & discovery)\"\n            description=\"Section title for TagManager\">{\n              (title_tag_manager) => <TagManager\n                tinode={this.props.tinode}\n                title={title_tag_manager}\n                activated={false}\n                tags={this.state.tags}\n                onSubmit={this.handleTagsUpdated} />\n          }</FormattedMessage>\n        </>\n        : null\n      }\n      </>\n    );\n  }\n};\n\nexport default injectIntl(TopicDescEdit);\n"
  },
  {
    "path": "src/widgets/topic-security.jsx",
    "content": "// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n  clear_messages: {\n    id: 'action_clear_messages',\n    defaultMessage: 'Clear Messages',\n    description: 'Flat button [Clear Messages] (soft-delete messages)'\n  },\n  clear_messages_warning: {\n    id: 'clear_messages_warning',\n    defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',\n    description: 'Alert dialog warning when deleting all messages.'\n  },\n  delete_messages: {\n    id: 'action_delete_messages',\n    defaultMessage: 'Clear Messages for All',\n    description: 'Flat button [Clear for All] (hard-delete all messages)'\n  },\n  delete_messages_warning: {\n    id: 'delete_messages_warning',\n    defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',\n    description: 'Alert dialog warning when hard-deleting all messages.'\n  },\n  topic_delete: {\n    id: 'topic_delete',\n    defaultMessage: 'Delete Conversation',\n    description: 'Alert title when deleting the topic.'\n  },\n  topic_delete_warning: {\n    id: 'topic_delete_warning',\n    defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',\n    description: 'Alert warning when deleting entire topic'\n  },\n  leave_chat: {\n    id: 'action_leave_chat',\n    defaultMessage: 'Leave Conversation',\n    description: 'Flat button [Leave Conversation]'\n  },\n  leave_chat_warning: {\n    id: 'leave_chat_warning',\n    defaultMessage: 'Are you sure you want to leave this conversation?',\n    description: 'Alert dialog warning when unsubscribing from a chat.'\n  },\n  block_contact: {\n    id: 'action_block_contact',\n    defaultMessage: \"Block Contact\",\n    description: \"Flat button [Block Contact]\"\n  },\n  block_contact_warning: {\n    id: 'block_contact_warning',\n    defaultMessage: 'Are you sure you want to block this contact?',\n    description: 'Alert dialog warning when blocking a contact.'\n  },\n  report_chat: {\n    id: 'action_report_chat',\n    defaultMessage: 'Report Conversation',\n    description: 'Flat button [Report Group]'\n  },\n  report_chat_warning: {\n    id: 'report_chat_warning',\n    defaultMessage: 'Are you sure you want to block and report this conversation?',\n    description: 'Alert dialog warning when reporting a conversation for abuse'\n  },\n  other_user: {\n    id: 'label_other_user',\n    defaultMessage: 'Other',\n    description: 'Label for the other user when the user is unnamed'\n  },\n});\n\nclass TopicSecurity extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.handleDeleteTopic = this.handleDeleteTopic.bind(this);\n    this.handleDeleteMessages = this.handleDeleteMessages.bind(this);\n    this.handleLeave = this.handleLeave.bind(this);\n    this.handleBlock = this.handleBlock.bind(this);\n    this.handleReport = this.handleReport.bind(this);\n  }\n\n  handleDeleteTopic(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(messages.topic_delete), // title\n      formatMessage(messages.topic_delete_warning), // content\n      _ => this.props.onDeleteTopic(this.props.topic), // onConfirm\n      null, // \"OK\"\n      true, // Show Reject button\n      null  // \"Cancel\"\n    );\n  }\n\n  handleDeleteMessages(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages), // title\n      formatMessage(this.props.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), // content\n      _ => this.props.onDeleteMessages(this.props.topic), // onConfirm\n      null, // \"OK\"\n      true, // Show Reject button\n      null  // \"Cancel\"\n    );\n  }\n\n  handleLeave(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(messages.leave_chat), // title\n      formatMessage(messages.leave_chat_warning), // content\n      _ => this.props.onLeaveTopic(this.props.topic), // onConfirm\n      null, // \"OK\"\n      true, // Show Reject button\n      null  // \"Cancel\"\n    );\n  }\n\n  handleBlock(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(messages.block_contact), // title\n      formatMessage(messages.block_contact_warning), // content\n      _ => this.props.onBlockTopic(this.props.topic), // onConfirm\n      null, // \"OK\"\n      true, // Show Reject button\n      null  // \"Cancel\"\n    );\n  }\n\n  handleReport(e) {\n    e.preventDefault();\n    const {formatMessage} = this.props.intl;\n    this.props.onShowAlert(\n      formatMessage(messages.report_chat), // title\n      formatMessage(messages.report_chat_warning), // content\n      (_ => { this.props.onReportTopic(this.props.topic); }), // onConfirm\n      null, // \"OK\"\n      true, // Show Reject button\n      null  // \"Cancel\"\n    );\n  }\n\n  render() {\n    const {formatMessage} = this.props.intl;\n    return (\n      <div className=\"scrollable-panel\">\n        <div className=\"panel-form-column\">\n          {!this.props.channel ?\n            <a href=\"#\" className=\"flat-button\" onClick={this.handleDeleteMessages}>\n              <i className=\"material-icons\">delete_outline</i> &nbsp;{\n                formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages)\n              }\n            </a>\n            :\n            null\n          }\n          {this.props.owner ?\n            <a href=\"#\" className=\"danger flat-button\" onClick={this.handleDeleteTopic}>\n              <i className=\"material-icons\">delete</i> &nbsp;{formatMessage(messages.topic_delete)}\n            </a>\n            :\n            <a href=\"#\" className=\"danger flat-button\" onClick={this.handleLeave}>\n              <i className=\"material-icons\">exit_to_app</i> &nbsp;{formatMessage(messages.leave_chat)}\n            </a>\n          }\n          {!this.props.groupTopic ?\n            <a href=\"#\" className=\"danger flat-button\" onClick={this.handleBlock}>\n              <i className=\"material-icons\">block</i> &nbsp;{formatMessage(messages.block_contact)}\n            </a>\n            :\n            null\n          }\n          {!this.props.owner ?\n            <a href=\"#\" className=\"danger flat-button\" onClick={this.handleReport}>\n              <i className=\"material-icons\">report</i> &nbsp;{formatMessage(messages.report_chat)}\n            </a>\n            :\n            null\n          }\n        </div>\n        <div className=\"hr\" />\n        <div className=\"panel-form-column\">\n          {this.props.groupTopic ?\n            <>\n              <div className=\"group\">\n                <label>\n                  <FormattedMessage id=\"label_your_permissions\" defaultMessage=\"Your permissions:\"\n                    description=\"Label for current user permissions\" />\n                </label> <tt className=\"clickable\"\n                  onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\n                  {this.props.access}\n                </tt>\n              </div>\n              {!this.props.channel ?\n                <div className=\"group\">\n                  <div>\n                    <label className=\"small\">\n                      <FormattedMessage id=\"label_default_access_mode\" defaultMessage=\"Default access mode:\"\n                      description=\"Label for default access mode\" />\n                    </label>\n                  </div>\n                  <div className=\"quoted\">\n                    <div>Auth: <tt className={this.props.owner ? 'clickable' : null}\n                      onClick={(e) => {\n                        e.preventDefault();\n                        if (this.props.owner) {\n                          this.props.onLaunchPermissionsEditor('auth');\n                        }\n                      }}>{this.props.auth}</tt>\n                    </div>\n                    <div>Anon: <tt className={this.props.owner ? 'clickable' : null}\n                      onClick={(e) => {\n                        e.preventDefault();\n                        if (this.props.owner) {\n                          this.props.onLaunchPermissionsEditor('anon');\n                        }\n                      }}>{this.props.anon}</tt>\n                    </div>\n                  </div>\n                </div>\n              :\n                null\n              }\n            </>\n            :\n            <div className=\"group\">\n              <div>\n                <label className=\"small\">\n                  <FormattedMessage id=\"label_permissions\" defaultMessage=\"Permissions:\"\n                    description=\"Section title\" />\n                </label>\n              </div>\n              <div className=\"quoted\">\n                <div>\n                  <FormattedMessage id=\"label_you\" defaultMessage=\"You:\"\n                    description=\"Label for the current user\" /> <tt className=\"clickable\"\n                    onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\n                    {this.props.access}\n                  </tt>\n                </div>\n                <div>{this.props.fullName ? this.props.fullName : formatMessage(messages.other_user)}:\n                  &nbsp;<tt className=\"clickable\"\n                    onClick={(e) => {e.preventDefault(); this.props.onLaunchPermissionsEditor('given')}}>\n                    {this.props.modeGiven2}\n                  </tt>\n                </div>\n              </div>\n            </div>\n          }\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(TopicSecurity);\n"
  },
  {
    "path": "src/widgets/unread-badge.jsx",
    "content": "// The counter of unread messages in the topic.\nimport React from 'react';\n\nexport default class UnreadBadge extends React.PureComponent {\n  render() {\n    return (this.props.count > 0 ?\n      <span className=\"unread\">{this.props.count > 9 ? \"9+\" : this.props.count}</span>\n      : null);\n  }\n};\n"
  },
  {
    "path": "src/widgets/uploading-image.jsx",
    "content": "// Image view with progress bar and a cancel button.\nimport React from 'react';\n\nimport FileProgress from './file-progress.jsx';\n\nexport default class UploadingImage extends React.PureComponent {\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return (\n      <div className=\"inline-image\">\n        {React.createElement('img', this.props)}\n        <div className=\"rounded-container\">\n          <FileProgress progress={this.props.progress} onCancel={this.props.onCancelUpload} />\n        </div>\n      </div>\n    );\n  }\n};\n"
  },
  {
    "path": "src/widgets/video-preview.jsx",
    "content": "import React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport SendMessage from './send-message.jsx';\n\nimport { bytesToHumanSize } from '../lib/strformat.js';\n\nconst messages = defineMessages({\n  unrecognized_video_format: {\n    id: 'unrecognized_video_format',\n    defaultMessage: 'Format of this video is not recognized',\n    description: 'Error message when uploaded video is invalid',\n  }\n});\n\nclass VideoPreview extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.videoRef = React.createRef();\n\n    this.handleSendVideo = this.handleSendVideo.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  handleKeyDown(e) {\n    if (this.props.onSendMessage) {\n      return;\n    }\n\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n\n  handleSendVideo(caption) {\n    this.props.onClose();\n    const params = {\n      width: this.videoRef.current.videoWidth,\n      height: this.videoRef.current.videoHeight,\n      duration: (this.videoRef.current.duration * 1000) | 0,\n      mime: this.props.content.mime,\n      name: this.props.content.filename\n    }\n\n    if (params.width == 0 || params.height == 0) {\n      this.props.onError(this.props.intl.formatMessage(messages.unrecognized_video_format), 'err');\n      return;\n    }\n\n    // Capture screen from a video.\n    const canvas = document.createElement('canvas');\n    canvas.width = params.width;\n    canvas.height = params.height;\n    const ctx = canvas.getContext('2d');\n    ctx.drawImage(this.videoRef.current, 0, 0, canvas.width, canvas.height);\n    ctx.canvas.toBlob(\n        preview => this.props.onSendMessage(caption, this.props.content.blob, preview, params),\n        'image/jpeg', 0.75\n    );\n  }\n\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n\n    const width = this.props.content.width || '-';\n    const height = this.props.content.height || '-';\n\n    const controlist = this.props.onSendMessage ? 'nodownload' : '';\n    const autoPlay = !this.props.onSendMessage;\n\n    return (\n      <div id=\"image-preview\">\n        <div id=\"preview-caption-panel\">\n          <span>{this.props.content.filename}</span>\n          <a href=\"#\" onClick={e => {e.preventDefault(); this.props.onClose();}}><i className=\"material-icons gray\">close</i></a>\n        </div>\n        <div id=\"image-preview-container\">\n          <video\n            className=\"image-preview\"\n            controls controlsList={controlist}\n            disablePictureInPicture ref={this.videoRef}\n            autoPlay={autoPlay}\n            src={this.props.tinode.authorizeURL(this.props.content.url)}\n            poster={this.props.content.preview}\n            alt={this.props.content.filename} />\n        </div>\n        {this.props.onSendMessage ?\n        <SendMessage\n          messagePrompt=\"add_image_caption\"\n          acceptBlank={true}\n          tinode={this.props.tinode}\n          reply={this.props.reply}\n          onCancelReply={this.props.onCancelReply}\n          onSendMessage={this.handleSendVideo}\n          onError={this.props.onError} />\n          :\n          <div id=\"image-preview-footer\">\n            <div>\n              <div><b><FormattedMessage id=\"label_file_name\" defaultMessage=\"File name:\"\n                description=\"Label for a file name\" /></b></div>\n              <div><span title={this.props.content.filename}>{this.props.content.filename}</span></div>\n            </div>\n            <div>\n              <div><b><FormattedMessage id=\"label_content_type\" defaultMessage=\"Content type:\"\n                description=\"Label for file content type (mime)\" /></b></div>\n              <div>{this.props.content.type}</div>\n            </div>\n            <div>\n              <div><b><FormattedMessage id=\"label_size\" defaultMessage=\"Size:\"\n                description=\"Label for file size\" /></b></div>\n              <div>{width} &times; {height} px; {bytesToHumanSize(this.props.content.size)}</div>\n            </div>\n          </div>}\n      </div>\n    );\n  }\n};\n\nexport default injectIntl(VideoPreview);\n"
  },
  {
    "path": "src/widgets/visible-password.jsx",
    "content": "// Password with a visiblity toggle.\nimport React from 'react';\n\nexport default class VisiblePassword extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.inputRef = React.createRef();\n\n    this.state = {\n      value: this.props.value || '',\n      visible: false\n    };\n\n    this.handleVisibility = this.handleVisibility.bind(this);\n    this.handeTextChange = this.handeTextChange.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n  }\n\n  componentDidMount() {\n    if (this.props.autoFocus) {\n      this.inputRef.current.focus();\n    }\n  }\n\n  handeTextChange(e) {\n    this.setState({value: e.target.value});\n    if (this.props.onChange) {\n      this.props.onChange(e);\n    }\n  }\n\n  handleVisibility(e) {\n    e.preventDefault();\n    this.setState({visible: !this.state.visible});\n  }\n\n  handleKeyDown(e) {\n    if (e.keyCode == 27) {\n      // Escape pressed\n      this.setState({value: this.props.value || '', visible: false});\n      if (this.props.onFinished) {\n        this.props.onFinished();\n      }\n    } else if (e.keyCode == 13) {\n      // Enter pressed\n      this.handleEditingFinished();\n    }\n  }\n\n  handleEditingFinished(e) {\n    if (e) {\n      let currentTarget = e.currentTarget;\n      setTimeout(_ => {\n        if (!currentTarget.contains(document.activeElement)) {\n          if (this.props.onFinished) {\n            this.props.onFinished(this.state.value);\n          }\n        }\n      }, 0);\n    } else if (this.props.onFinished) {\n      this.props.onFinished(this.state.value.trim());\n    }\n  }\n\n  render() {\n    return (\n      <div tabIndex=\"-1\" className=\"group-focus\" onBlur={this.handleEditingFinished}>\n        <input className=\"with-icon-right\"\n          type={this.state.visible ? 'text' : 'password'}\n          value={this.state.value}\n          placeholder={this.props.placeholder}\n          maxLength={32}\n          required={this.props.required ? 'required' : ''}\n          autoFocus={this.props.autoFocus ? 'autoFocus' : ''}\n          autoComplete={this.props.autoComplete}\n          onChange={this.handeTextChange}\n          onKeyDown={this.handleKeyDown}\n          ref={this.inputRef} />\n        <span onClick={this.handleVisibility}>\n          <i className=\"material-icons clickable light-gray\">\n            {this.state.visible ? 'visibility' : 'visibility_off'}\n          </i>\n        </span>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "umd/0.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[0],{4e3:function(e,t,i){i.r(t);var s=i(1594),a=i.n(s),n=i(8181),r=i(5053),o=i(3537),h=i.n(o),d=i(6110),l=i(8589),c=i(9027);const u=100,p=\"audio/webm\",m=[p,\"audio/mp4\",\"\"],v=(0,n.defineMessages)({icon_title_delete:{id:\"icon_title_delete\",defaultMessage:[{type:0,value:\"Delete recording\"}]},icon_title_pause:{id:\"icon_title_pause\",defaultMessage:[{type:0,value:\"Pause playback\"}]},icon_title_resume:{id:\"icon_title_resume\",defaultMessage:[{type:0,value:\"Resume playback\"}]},icon_title_send:{id:\"icon_title_send\",defaultMessage:[{type:0,value:\"Send message\"}]},failed_to_init_audio:{id:\"failed_to_init_audio\",defaultMessage:[{type:0,value:\"Failed to initialize audio recording\"}]}});class f extends a().PureComponent{constructor(e){super(e),this.state={enabled:!0,audioRecord:null,recording:!0,paused:!1,duration:\"0:00\",blobUrl:null,preview:null},this.visualize=this.visualize.bind(this),this.initMediaRecording=this.initMediaRecording.bind(this),this.initCanvas=this.initCanvas.bind(this),this.getRecording=this.getRecording.bind(this),this.cleanUp=this.cleanUp.bind(this),this.handleResume=this.handleResume.bind(this),this.handlePause=this.handlePause.bind(this),this.handleDelete=this.handleDelete.bind(this),this.handleDone=this.handleDone.bind(this),this.durationMillis=0,this.startedOn=null,this.viewBuffer=[],this.canvasRef=a().createRef(),this.recordingTimestamp=0}componentDidMount(){this.stream=null,this.mediaRecorder=null,this.audioContext=null,this.audioInput=null,this.analyser=null,this.audioChunks=[];try{navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.initMediaRecording,this.props.onError)}catch(e){this.props.onError(e)}}componentWillUnmount(){this.startedOn=null,this.stream&&this.cleanUp()}visualize(){this.initCanvas();const e=new Uint8Array(this.analyser.frequencyBinCount),t=this.canvasWidth,i=this.canvasHeight,s=t/10|0,a=u*s;this.canvasContext.lineWidth=6,this.canvasContext.strokeStyle=\"#BBBD\";let n=0,r=0,o=0;const h=d=>{if(!this.startedOn)return;window.requestAnimationFrame(h);const p=this.durationMillis+(Date.now()-this.startedOn);this.setState({duration:(0,l.Ye)(p/1e3)}),p>c.iB&&(this.startedOn=null,this.mediaRecorder.pause(),this.durationMillis+=Date.now()-this.startedOn,this.setState({enabled:!1,recording:!1,duration:(0,l.Ye)(this.durationMillis/1e3)})),this.analyser.getByteTimeDomainData(e);let m=0;for(const t of e)m+=(t-127)**2;r+=Math.sqrt(m/e.length),o++;let v=p/u|0;const f=a>p?0:(p-u*v)/u*10;n!=v&&(n=v,this.viewBuffer.push(r/o),r=0,o=0,this.viewBuffer.length>s&&this.viewBuffer.shift()),this.canvasContext.clearRect(0,0,t,i),this.canvasContext.beginPath();for(let e=0;e<this.viewBuffer.length;e++){let t=10*e-f,s=Math.max(Math.min(this.viewBuffer[e]/64,.9)*i,1);this.canvasContext.moveTo(t,.5*(i-s)),this.canvasContext.lineTo(t,.5*(i+s))}this.canvasContext.stroke();const g=(new Date).getTime();g-this.recordingTimestamp>c.NR&&(this.props.onRecordingProgress(),this.recordingTimestamp=g)};h()}handlePause(e){e.preventDefault(),this.mediaRecorder.pause(),this.mediaRecorder.requestData(),this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null,this.setState({recording:!1})}handleResume(e){e.preventDefault(),this.state.enabled&&(this.startedOn=Date.now(),this.mediaRecorder.resume(),this.setState({recording:!0},this.visualize))}handleDelete(e){e.preventDefault(),this.durationMillis=0,this.startedOn=null,this.mediaRecorder.stop(),this.cleanUp(),this.setState({recording:!1})}handleDone(e){e.preventDefault(),this.setState({recording:!1}),this.startedOn&&(this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null),this.mediaRecorder&&this.mediaRecorder.stop()}initCanvas(){this.canvasRef.current.width=2*this.canvasRef.current.offsetWidth,this.canvasRef.current.height=2*this.canvasRef.current.offsetHeight,this.canvasContext=this.canvasRef.current.getContext(\"2d\"),this.canvasContext.lineCap=\"round\",this.canvasContext.translate(.5,.5),this.canvasWidth=this.canvasRef.current.width,this.canvasHeight=this.canvasRef.current.height}initMediaRecording(e){return this.stream=e,m.some(t=>!!MediaRecorder.isTypeSupported(t)&&(this.mediaRecorder=new MediaRecorder(e,{mimeType:t,audioBitsPerSecond:24e3}),!0)),this.mediaRecorder?(this.audioContext=new AudioContext,this.audioInput=this.audioContext.createMediaStreamSource(e),this.audioInput?(this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=256,this.audioInput.connect(this.analyser),this.mediaRecorder.onstop=e=>{this.durationMillis>c.wl?this.getRecording(this.mediaRecorder.mimeType).then(e=>this.props.onFinished(e.url,e.preview,this.durationMillis)):this.props.onDeleted(),this.cleanUp()},this.mediaRecorder.ondataavailable=e=>{e.data.size>0&&this.audioChunks.push(e.data),\"inactive\"!=this.mediaRecorder.state&&this.getRecording(this.mediaRecorder.mimeType).then(e=>{this.setState({blobUrl:e.url,preview:e.preview})})},this.durationMillis=0,this.startedOn=Date.now(),this.mediaRecorder.start(),this.visualize(),this.props.onRecordingProgress(),void(this.recordingTimestamp=this.startedOn)):(console.warn(\"createMediaStreamSource returned null: audio input unavailable\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))):(console.warn(\"MediaRecorder failed to initialize: no supported audio formats\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))}getRecording(e){e=e||p;let t=new Blob(this.audioChunks,{type:e});return(e==p?h()(t,e):Promise.resolve(t)).then(e=>(t=e,e.arrayBuffer())).then(e=>this.audioContext.decodeAudioData(e)).then(e=>this.createPreview(e)).then(e=>({url:window.URL.createObjectURL(t),preview:(0,d.Pv)(e)}))}createPreview(e){const t=e.getChannelData(0),i=Math.min(t.length,96),s=t.length/i|0,a=Math.max(1,s/10|0);let n=[],r=-1;for(let e=0;e<i;e++){let i=0,o=0;for(let n=0;n<s;n+=a)i+=t[s*e+n]**2,o++;const h=Math.sqrt(i/o);n.push(h),r=Math.max(r,h)}return r>0&&(n=n.map(e=>100*e/r|0)),n}cleanUp(){this.audioInput&&this.audioInput.disconnect(),this.stream.getTracks().forEach(e=>e.stop())}render(){const{formatMessage:e}=this.props.intl,t=\"material-icons \"+(this.state.enabled?\"red\":\"gray\");return a().createElement(\"div\",{className:\"audio\"},a().createElement(\"a\",{href:\"#\",onClick:this.handleDelete,title:e(v.icon_title_delete)},a().createElement(\"i\",{className:\"material-icons gray\"},\"delete_outline\")),this.state.recording?a().createElement(\"canvas\",{ref:this.canvasRef}):a().createElement(r.A,{src:this.state.blobUrl,preview:this.state.preview,duration:this.durationMillis,short:!0}),a().createElement(\"div\",{className:\"duration\"},this.state.duration),this.state.recording?a().createElement(\"a\",{href:\"#\",onClick:this.handlePause,title:e(v.icon_title_pause)},a().createElement(\"i\",{className:\"material-icons\"},\"pause_circle_outline\")):a().createElement(\"a\",{href:\"#\",onClick:this.handleResume,title:e(v.icon_title_resume)},a().createElement(\"i\",{className:t},\"radio_button_checked\")),a().createElement(\"a\",{href:\"#\",onClick:this.handleDone,title:e(v.icon_title_send)},a().createElement(\"i\",{className:\"material-icons\"},\"send\")))}}t.default=(0,n.injectIntl)(f)}}]);\n//# sourceMappingURL=0.prod.js.map"
  },
  {
    "path": "umd/107.prod.js",
    "content": "\"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<br />¯∖_(ツ)_/¯\",\"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é\",\"pin_message\":\"Épingler\",\"unpin_message\":\"Détacher\",\"failed_to_init_audio\":\"Échec de l\\'initialisation de l\\'enregistrement audio\",\"calls_conference\":\"Conférence téléphonique\",\"password_reset_success\":\"Mot de passe réinitialisé avec succès\",\"join_conference\":\"+ Rejoindre\"}')}}]);"
  },
  {
    "path": "umd/128.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[128],{6128: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\":\"Чатов нет<br />¯∖_(ツ)_/¯\",\"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\":\"Пароль успешно изменен\",\"scan_qr_code\":\"Отсканируйте QR код\"}')}}]);"
  },
  {
    "path": "umd/140.prod.js",
    "content": "(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[140],{5704:(e,t)=>{\"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<f;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],u[c++]=t>>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;s<u;s+=a)o.push(l(e,s,s+a>u?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<r;s+=3)i=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(n[(o=i)>>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join(\"\")}r[\"-\".charCodeAt(0)]=62,r[\"_\".charCodeAt(0)]=63},3296:(e,t,n)=>{\"use strict\";const r=n(5704),i=n(4404),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<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function d(e){if(e>=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;o<s;o++)if(u(e,o)===u(t,-1===r?0:o-r)){if(-1===r&&(r=o),o-r+1===l)return r*a}else-1!==r&&(o-=o-r),r=-1}else for(n+l>s&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let r=0;r<l;r++)if(u(e,o+r)!==u(t,r)){n=!1;break}if(n)return o}return-1}function w(e,t,n,r){n=Number(n)||0;const i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;const o=t.length;let a;for(r>o/2&&(r=o/2),a=0;a<r;++a){const r=parseInt(t.substr(2*a,2),16);if(J(r))return a;e[n+a]=r}return a}function k(e,t,n,r){return X(W(t,e.length-n),e,n,r)}function T(e,t,n,r){return X(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function E(e,t,n,r){return X(G(t),e,n,r)}function C(e,t,n,r){return X(function(e,t){let n,r,i;const o=[];for(let a=0;a<e.length&&!((t-=2)<0);++a)n=e.charCodeAt(a),r=n>>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(;i<n;){const t=e[i];let o=null,a=t>239?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(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=I));return n}(r)}t.kMaxLength=a,l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(l.prototype,\"parent\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,\"offset\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return u(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return c(e),e<=0?s(e):void 0!==t?\"string\"==typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return f(e)},l.allocUnsafeSlow=function(e){return f(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),Y(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let i=0,o=Math.min(n,r);i<o;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let i=0;for(n=0;n<e.length;++n){let t=e[n];if(Y(t,Uint8Array))i+t.length>r.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;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?B(this,0,e):y.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e=\"\";const n=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,n).replace(/(.{2})/g,\"$1 \").trim(),this.length>n&&(e+=\" ... \"),\"<Buffer \"+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<s;++e)if(u[e]!==c[e]){o=u[e],a=c[e];break}return o<a?-1:a<o?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r=\"utf8\",n=this.length,t=0;else if(void 0===n&&\"string\"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=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;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function D(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function _(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let i=\"\";for(let r=t;r<n;++r)i+=K[e[r]];return i}function x(e,t,n){const r=e.slice(t,n);let i=\"\";for(let e=0;e<r.length-1;e+=2)i+=String.fromCharCode(r[e]+256*r[e+1]);return i}function P(e,t,n){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>n)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||t<o)throw new RangeError('\"value\" argument is out of bounds');if(n+r>e.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<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=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)<<BigInt(32))})),l.prototype.readBigUInt64BE=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*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)<<BigInt(32))+BigInt(i)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return i*=128,r>=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)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=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<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=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<n&&(i*=256);)this[t+o]=e/i&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=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=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<n&&(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.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<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=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<r-n&&(r=e.length-t+n);const i=r-n;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),i},l.prototype.fill=function(e,t,n,r){if(\"string\"==typeof e){if(\"string\"==typeof t?(r=t,t=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!l.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===r&&t<128||\"latin1\"===r)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError(\"Out of range index\");if(n<=t)return this;let i;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(i=t;i<n;++i)this[i]=e;else{const o=l.isBuffer(e)?e:l.from(e,r),a=o.length;if(0===a)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<n-t;++i)this[i+t]=o[i%a]}return this};const F={};function V(e,t,n){F[e]=class extends n{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function z(e){let t=\"\",n=e.length;const r=\"-\"===e[0]?1:0;for(;n>=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||e<t){const r=\"bigint\"==typeof t?\"n\":\"\";let i;throw i=o>3?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;a<r;++a){if(n=e.charCodeAt(a),n>55295&&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<r&&!(i+n>=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\")}},8563:(e,t,n)=>{var r=n(2148);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<o;n++)i.push(e.nextBuffer(r));return i}var a=[];if(1===t)for(n=0;n<o-1;n++){var s;r=0;do{r+=s=e.nextUInt8()}while(255===s);a.push(r)}else if(3===t)for(r=e.nextUIntV(),a.push(r),n=1;n<o-1;n++)r+=e.nextIntV(),a.push(r);for(n=0;n<o-1;n++)i.push(e.nextBuffer(a[n]));return i.push(e.nextBuffer()),i}(n,o),t}},2148:(e,t,n)=>{var r=n(3612);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},3612: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<r;i++){if(7===i&&o>=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}}},4936: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;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):d(i,i.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if(\"function\"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(o){r.once&&e.removeEventListener(t,i),n(o)}))}}Object.defineProperty(o,\"defaultMaxListeners\",{enumerable:!0,get:function(){return a},set:function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");a=e}}),o.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i=\"error\"===e,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var a;if(t.length>0&&(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<u;++n)r(c[n],this,t)}return!0},o.prototype.addListener=function(e,t){return u(this,e,t,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(e,t){return u(this,e,t,!0)},o.prototype.once=function(e,t){return s(t),this.on(e,f(this,e,t)),this},o.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,f(this,e,t)),this},o.prototype.removeListener=function(e,t){var n,r,i,o,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(\"removeListener\",e,n.listener||t));else if(\"function\"!=typeof n){for(i=-1,o=n.length-1;o>=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<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",e,a||t)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)\"removeListener\"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=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):[]}},4404:(e,t)=>{t.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<<s)-1,u=l>>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<<u)-1,f=c>>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<<i|s,u+=i;u>0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*m}},9880: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<o;){var c=parseInt(n[i++],r);if(!(c>=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<r;)e[t++]=255&n,n/=256}function b(e,t,n){var r=t+8;for(n++;t<r;)e[t++]=255&-n^255,n/=256}u(\"Uint64BE\",!0,!0),u(\"Int64BE\",!0,!1),u(\"Uint64LE\",!1,!0),u(\"Int64LE\",!1,!1)}(\"string\"!=typeof t.nodeName?t:this||{})},4215:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0})},4e3:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,i=n(9880),o=n(9112),a=n(9112),s=n(2661);!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&&(this._state!==r.STATE_TAG||this.readTag())&&(this._state!==r.STATE_SIZE||this.readSize())&&(this._state!==r.STATE_CONTENT||this.readContent()););},e.prototype.getSchemaInfo=function(e){return this._schema[e]||{name:\"unknown\",level:-1,type:\"unknown\",description:\"unknown\"}},e.prototype.readTag=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._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.length<this._cursor+e.dataSize)return!1;var n=this._buffer.slice(this._cursor,this._cursor+e.dataSize);switch(this._buffer=this._buffer.slice(this._cursor+e.dataSize),e.data=n,e.type){case\"u\":e.value=n.readUIntBE(0,n.length);break;case\"i\":e.value=n.readIntBE(0,n.length);break;case\"f\":e.value=4===e.dataSize?n.readFloatBE(0):8===e.dataSize?n.readDoubleBE(0):(console.warn(\"cannot read \".concat(e.dataSize,\" octets float. failback to 0\")),0);break;case\"s\":e.value=n.toString(\"ascii\");break;case\"8\":e.value=n.toString(\"utf8\");break;case\"b\":e.value=n;break;case\"d\":e.value=(0,o.convertEBMLDateToJSDate)(new i.Int64BE(n).toNumber())}if(null===e.value)throw new Error(\"unknown tag type:\"+e.type);for(this._result.push(e),this._total+=e.dataSize,this._state=r.STATE_TAG,this._cursor=0,this._tag_stack.pop();this._tag_stack.length>0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total<a.dataEnd)break;if(\"m\"!==a.type)throw new Error(\"parent element is not master element\");t=Object.assign({},a,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0},e}();t.default=l},6928:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9112),i=n(9112),o=n(2661),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;n<t.length;n++){var r=t[n];if(this._schema[r].name===e)return new i.Buffer(r.toString(16),\"hex\")}return null},e.prototype.writeTag=function(e){var t=e.name,n=this.getSchemaInfo(t),i=e.data;if(null==n)throw new Error(\"No schema entry found for \"+t);var o=r.encodeTag(n,i);this._stack.length>0?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},3692: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(4936),a=n(9112),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},2661:(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.\"}}},1012: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(4215),t);var o=n(4e3);t.Decoder=o.default;var a=n(6928);t.Encoder=a.default;var s=n(3692);t.Reader=s.default;var l=n(9112);t.tools=l},8560: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;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(9112),a=function(){function e(){}return e.readVint=function(t,n){void 0===n&&(n=0);var r=8-Math.floor(Math.log2(t[n]));if(r>8){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<r;a+=1){if(7===a&&o>=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<Math.pow(2,7*t)-1);t+=1);for(var n=o.Buffer.alloc(t),r=e,i=1;i<=t;i+=1){var a=255&r;n[t-i]=a,r-=a,r/=Math.pow(2,8)}return n[0]|=1<<8-t,n},e.concatenate=function(e,t){return e||t?e&&0!==e.byteLength?t&&0!==t.byteLength?o.Buffer.from(i(i([],e,!0),t,!0)):e:t:o.Buffer.from([])},e.readHexString=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=e.byteLength),Array.from(e.slice(t,n)).map((function(e){return Number(e).toString(16)})).reduce((function(e,t){return\"\".concat(e).concat(t.padStart(2,\"0\"))}),\"\")},e.readUtf8=function(e){try{return o.Buffer.from(e).toString(\"utf8\")}catch(e){return null}},e.readUnsigned=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return n.getUint8(0);case 2:return n.getUint16(0);case 4:return n.getUint32(0)}return t.byteLength<=6?t.reduce((function(e,t){return 256*e+t}),0):e.readHexString(t,0,t.byteLength)},e.readSigned=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 1:return t.getInt8(0);case 2:return t.getInt16(0);case 4:return t.getInt32(0);default:return NaN}},e.readFloat=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return t.getFloat32(0);case 8:return t.getFloat64(0);default:return NaN}},e.readDate=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return new Date(n.getUint8(0));case 2:return new Date(n.getUint16(0));case 4:return new Date(n.getUint32(0));case 8:return new Date(Number.parseInt(e.readHexString(t),16));default:return new Date(0)}},e.readDataFromTag=function(t,n){var i,o=t.type,a=t.name,s=t.track,l=t.discardable||!1,u=t.keyframe||!1,c=null;switch(o){case\"u\":i=e.readUnsigned(n);break;case\"f\":i=e.readFloat(n);break;case\"i\":i=e.readSigned(n);break;case\"s\":i=String.fromCharCode.apply(String,n);break;case\"8\":i=e.readUtf8(n);break;case\"d\":i=e.readDate(n)}if(\"SimpleBlock\"===a||\"Block\"===a){var f=0,h=e.readVint(n,f),p=h.length;f+=p,s=h.value,i=e.readSigned(n.subarray(f,f+2)),f+=2,\"SimpleBlock\"===a&&(u=Boolean(128&n[p+2]),l=Boolean(1&n[p+2])),f+=1,c=n.subarray(f)}return r(r({},t),{data:n,discardable:l,keyframe:u,payload:c,track:s,value:i})},e}();t.default=a},9112:(e,t,n)=>{\"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(9880),i=n(6928),o=n(3296),a=n(8560),s=n(8563);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<t.length;r++){var i=t[r];if(i.name===e){if(\"m\"!==i.type)return void t.splice(r,1);if(i.isEnd){if(-1==n)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));return void t.splice(n,r-n+1)}n=r}}}function c(e,t){for(var n=[],r=-1,i=0;i<t.length;i++){var o=t[i];if(o.name===e){if(\"m\"!==o.type){n.push(t[i]);break}if(o.isEnd){if(-1==r)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));n=t.slice(r,i+1);break}r=i}}return n}function f(e){var t=new i.default;return e.reduce((function(e,n){return e.concat(t.encode([n]))}),[]).reduce((function(e,t){return e+t.byteLength}),0)}function h(e,n,r){var i=r.duration,o=r.clusterPtrs,a=r.cues,s=e.slice(0);if(\"number\"==typeof i){var l=!1;s.forEach((function(e){\"f\"===e.type&&\"Duration\"===e.name&&(l=!0,e.data=g(i,8))})),l||p(s,\"Info\",[{name:\"Duration\",type:\"f\",data:g(i,8)}])}Array.isArray(a)&&p(s,\"Cues\",function(e,t){var n=[];return e.forEach((function(e){var r=e.CueTrack,i=e.CueClusterPosition,o=e.CueTime;n.push({name:\"CuePoint\",type:\"m\",isEnd:!1}),n.push({name:\"CueTime\",type:\"u\",data:m(o)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!1}),n.push({name:\"CueTrack\",type:\"u\",data:m(r)}),n.push({name:\"CueClusterPosition\",type:\"u\",data:m(i+t)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!0}),n.push({name:\"CuePoint\",type:\"m\",isEnd:!0})})),n}(a,n));var u=[];return Array.isArray(o)&&(console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\"),u=function(e,n){var r=[];return e.forEach((function(e){r.push({name:\"Seek\",type:\"m\",isEnd:!1}),r.push({name:\"SeekID\",type:\"b\",data:new t.Buffer([31,67,182,117])}),r.push({name:\"SeekPosition\",type:\"u\",data:m(e+n)}),r.push({name:\"Seek\",type:\"m\",isEnd:!0})})),r}(o,n)),p(s,\"SeekHead\",u,!0),s}function p(e,t,n,r){void 0===r&&(r=!1);for(var i=-1,o=0;o<e.length;o++){var a=e[o];if(\"m\"===a.type&&a.name===t&&!1===a.isEnd){i=o;break}}i>=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;a<e.length;a++){var s=e[a];if(\"m\"===s.type&&\"Segment\"===s.name){if(r=e.slice(0,a),o=e.slice(a),s.unknownSize){o.shift();break}throw new Error(\"this metadata is not streaming webm file\")}}if(!(o[o.length-1].dataEnd>0))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)}},1140: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]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1012);t.default=function(e){return r(this,void 0,void 0,(function(){var t,n,r,a,s,l,u,c,f,h,p;return i(this,(function(i){switch(i.label){case 0:if(!e)throw Error(\"call to fixWebmDuration requires a blob\");t=new o.Decoder,n=new o.Reader,r=e.stream(),a=r.getReader(),i.label=1;case 1:return[4,a.read()];case 2:return s=i.sent(),l=s.done,u=s.value,l?(n.stop(),[3,3]):((c=null==(c=t.decode(u))?void 0:c.filter((function(e){return\"unknown\"!==e.type}))).forEach((function(e){n.read(e)})),u=null,[3,1]);case 3:return f=o.tools.makeMetadataSeekable(n.metadatas,n.duration,n.cues),h=new Blob([f],{type:e.type}),p=e.slice(n.metadataSize),[2,new Blob([h,p],{type:e.type})]}}))}))}}}]);\n//# sourceMappingURL=140.prod.js.map"
  },
  {
    "path": "umd/143.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[143],{7143:function(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\":\"ليس لديك محادثات\\\\n¯∖_(ツ)_/¯\",\"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\":\"رمز التأكيد\",\"error_invalid_id\":\"معرف غير صالح\",\"file_attachment_too_large\":\"حجم الملف {size} يتجاوز الحد {limit}.\",\"forgot_password_link\":\"نسيت كلمة المرور؟\",\"full_name_prompt\":\"الاسم الكامل، مثال: جون دو\",\"granted_permissions\":\"ممنوح\",\"group_has_no_members\":\"لا يوجد أعضاء\",\"group_user_id_prompt\":\"معرف المجموعة أو المستخدم\",\"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\":\"المعرف:\",\"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_reply\":\"رد\",\"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\":\"قائمة مثل alice@example.com، +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\":\"بواسطة المعرف\",\"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_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\":\"تم إعادة تعيين كلمة المرور بنجاح\",\"scan_qr_code\":\"مسح رمز QR\",\"alias_already_taken\":\"(مُستخدم بالفعل)\",\"alias_editing_placeholder\":\"الاسم المستعار (اختياري)\",\"alias_invalid\":\"(غير صالح)\",\"label_alias\":\"الاسم المستعار:\",\"label_alias_edit\":\"الاسم المستعار\",\"message_deleted\":\"تم حذف الرسالة\",\"message_not_found\":\"لم يتم العثور على الرسالة\",\"pin_message\":\"تثبيت\",\"select_country\":\"اختر الدولة\",\"self_topic_comment\":\"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل\",\"self_topic_name\":\"الرسائل المحفوظة\",\"text_copied\":\"تم النسخ إلى الحافظة\",\"unpin_message\":\"إلغاء التثبيت\",\"color_schema_dark\":\"داكن\",\"color_schema_light\":\"فاتح\",\"color_schema_system\":\"افتراضي النظام\",\"label_color_schema\":\"‏المظهر:\",\"label_text_size\":\"‏حجم النص:\",\"incognito_mode_description\":\"إخفاء حالة اتصالك ومؤشرات الكتابة.\",\"send_command\":\"إرسال بـ {key}\",\"send_command_explained\":\"اضغط Enter لسطر جديد\",\"send_plain\":\"إرسال بـ Enter\",\"send_plain_explained\":\"اضغط Shift + Enter لسطر جديد\",\"sidepanel_title_acc_general\":\"عام\",\"label_keyboard\":\"لوحة المفاتيح:\",\"pin_chat\":\"تثبيت\",\"unpin_chat\":\"إلغاء التثبيت\",\"subscriber_count\":\"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}\",\"label_member_count\":\"الأعضاء:\",\"label_subscriber_count\":\"المشتركون:\",\"member_count\":\"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}\",\"tabtitle_image\":\"صورة\",\"tabtitle_pattern\":\"نمط\",\"button_restore\":\"استعادة الافتراضي\",\"wallpapers\":\"الخلفيات\",\"label_blur_wallpaper\":\"ضبابية:\",\"label_scan_id\":\"مسح معرفي:\",\"unknown_name\":\"غير معروف\",\"save_action\":\"حفظ\",\"cannot_parse_vcard\":\"تعذّر تحليل ملف vCard.\",\"chat_now\":\"محادثة\",\"find_user\":\"بحث\",\"label_contact_card\":\"بطاقة الاتصال\",\"label_contacts\":\"جهات الاتصال\",\"add_members_prompt\":\"إضافة أعضاء\"}')}}]);"
  },
  {
    "path": "umd/175.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[175],{2175:function(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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Anpinnen\",\"unpin_message\":\"Lösen\",\"password_reset_success\":\"Passwort erfolgreich zurückgesetzt\",\"scan_qr_code\":\"QR-Code scannen\",\"self_topic_comment\":\"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert\",\"self_topic_name\":\"Gespeicherte Nachrichten\",\"message_not_found\":\"Nachricht nicht gefunden\",\"message_deleted\":\"Nachricht gelöscht\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(bereits vergeben)\",\"alias_invalid\":\"(ungültig)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Land auswählen\",\"text_copied\":\"In die Zwischenablage kopiert\",\"color_schema_dark\":\"Dunkel\",\"color_schema_light\":\"Hell\",\"color_schema_system\":\"Systemstandard\",\"label_color_schema\":\"Thema:\",\"label_text_size\":\"Textgröße:\",\"incognito_mode_description\":\"Online-Status und Tipp-Indikatoren verbergen.\",\"send_command\":\"Senden mit {key}\",\"send_command_explained\":\"Drücken Sie Enter für eine neue Zeile\",\"send_plain\":\"Senden mit Enter\",\"send_plain_explained\":\"Drücken Sie Shift + Enter für eine neue Zeile\",\"sidepanel_title_acc_general\":\"Allgemein\",\"label_keyboard\":\"Tastatur:\",\"pin_chat\":\"Anheften\",\"unpin_chat\":\"Loslösen\",\"subscriber_count\":\"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}\",\"label_member_count\":\"Mitglieder:\",\"label_subscriber_count\":\"Abonnenten:\",\"member_count\":\"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}\",\"tabtitle_image\":\"Bild\",\"tabtitle_pattern\":\"Muster\",\"button_restore\":\"Standard wiederherstellen\",\"wallpapers\":\"Hintergrundbilder\",\"label_blur_wallpaper\":\"Unschärfe:\",\"label_scan_id\":\"Meine ID scannen:\",\"unknown_name\":\"Unbekannt\",\"save_action\":\"Speichern\",\"cannot_parse_vcard\":\"vCard-Datei konnte nicht verarbeitet werden.\",\"chat_now\":\"Chatten\",\"find_user\":\"Suchen\",\"label_contact_card\":\"Kontaktkarte\",\"label_contacts\":\"Kontakte\",\"add_members_prompt\":\"Mitglieder hinzufügen\"}')}}]);"
  },
  {
    "path": "umd/178.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[178],{8178: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\":\"Чатів немає<br />¯∖_(ツ)_/¯\",\"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\":\"Емейл, напр. 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\":\"Надіслати СМС для скидання пароля\",\"mobile_phone_number\":\"Номер мобільного телефону\",\"password_reset_sms_sent\":\"СМС із захисним кодом відправлено.\",\"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\":\"Пароль змінено успішно\",\"scan_qr_code\":\"Відскануйте QR-код\"}')}}]);"
  },
  {
    "path": "umd/186.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[186],{1186:function(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\":\"채팅이없습니다\\\\n¯∖_(ツ)_/¯\",\"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\":\"바쁘다\",\"pin_message\":\"고정\",\"unpin_message\":\"고정 해제\",\"failed_to_init_audio\":\"오디오 녹음 초기화 실패\",\"password_reset_success\":\"비밀번호 재설정 성공\",\"scan_qr_code\":\"QR 코드 스캔\",\"self_topic_comment\":\"후세를 위해 저장된 메모, 메시지, 링크, 파일\",\"self_topic_name\":\"저장된 메시지\",\"message_not_found\":\"메시지를 찾을 수 없음\",\"message_deleted\":\"메시지 삭제됨\",\"alias_editing_placeholder\":\"별칭(선택 사항)\",\"label_alias\":\"별칭:\",\"alias_already_taken\":\"(이미 취함)\",\"alias_invalid\":\"(잘못된)\",\"label_alias_edit\":\"별칭\",\"select_country\":\"국가 선택\",\"text_copied\":\"클립보드에 복사됨\",\"color_schema_dark\":\"어둡게\",\"color_schema_light\":\"밝게\",\"color_schema_system\":\"시스템 기본값\",\"label_color_schema\":\"테마:\",\"label_text_size\":\"텍스트 크기:\",\"incognito_mode_description\":\"온라인 상태와 입력 표시기를 숨깁니다.\",\"send_command\":\"{key}로 전송\",\"send_command_explained\":\"새 줄로 이동하려면 Enter를 누르세요\",\"send_plain\":\"Enter로 전송\",\"send_plain_explained\":\"새 줄로 이동하려면 Shift + Enter를 누르세요\",\"sidepanel_title_acc_general\":\"일반\",\"label_keyboard\":\"키보드:\",\"pin_chat\":\"고정\",\"unpin_chat\":\"고정 해제\",\"subscriber_count\":\"{count, plural, other {구독자 {count, number}명}}\",\"label_member_count\":\"멤버:\",\"label_subscriber_count\":\"구독자:\",\"member_count\":\"{count, plural, other {멤버 {count, number}명}}\",\"tabtitle_image\":\"이미지\",\"tabtitle_pattern\":\"패턴\",\"button_restore\":\"기본값 복원\",\"wallpapers\":\"배경화면\",\"label_blur_wallpaper\":\"흐림:\",\"label_scan_id\":\"내 ID 스캔:\",\"unknown_name\":\"알 수 없음\",\"save_action\":\"저장\",\"cannot_parse_vcard\":\"vCard 파일을 파싱할 수 없습니다.\",\"chat_now\":\"채팅\",\"find_user\":\"찾기\",\"label_contact_card\":\"연락처 카드\",\"label_contacts\":\"연락처\",\"add_members_prompt\":\"멤버 추가\"}')}}]);"
  },
  {
    "path": "umd/187.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[187],{1187: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\":\"ไม่พบแชท <br />¯∖_(ツ)_/¯\",\"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\":\"รหัสยืนยัน\",\"error_invalid_id\":\"ID ไม่ถูกต้อง\",\"file_attachment_too_large\":\"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\"forgot_password_link\":\"ลืมรหัสผ่าน?\",\"full_name_prompt\":\"ชื่อเต็ม, เช่น John Doe\",\"granted_permissions\":\"ยินยอม\",\"group_has_no_members\":\"ไม่มีสมาชิก\",\"group_user_id_prompt\":\"กลุ่ม หรือ ID ผู้ใช้\",\"image_caption_prompt\":\"คำอธิบายภาพ\",\"invalid_content\":\"เนื้อหาไม่ถูกต้อง\",\"invalid_security_token\":\"security token ไม่ถูกต้อง\",\"label_client\":\"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\":\"การแจ้งเตือน (requires 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\":\"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_reply\":\"ตอบกลับ\",\"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\\'s\",\"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_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\":\"รีเซ็ตรหัสผ่านสำเร็จ\",\"scan_qr_code\":\"สแกนรหัส QR\"}')}}]);"
  },
  {
    "path": "umd/197.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[197],{7197:function(e){e.exports=JSON.parse('{\"action_block_contact\":\"Bloccare contatto\",\"action_cancel\":\"cancella\",\"action_clear_messages\":\"Cancella messaggi\",\"action_delete_messages\":\"Cancella messaggi per tutti\",\"action_leave_chat\":\"Lascia la conversazione\",\"action_report_chat\":\"Report conversazione\",\"archived_contacts\":\"Contatti archiviati ({count})\",\"badge_danger\":\"Sospetto\",\"badge_owner\":\"propietario\",\"badge_staff\":\"Amministrazione\",\"badge_verified\":\"Verificato\",\"badge_you\":\"tu\",\"block_contact_warning\":\"Sei sicuro di bloccare questo contatto?\",\"blocked_contacts_link\":\"Contatti bloccati ({count})\",\"button_add_members\":\"Aggiungi membri\",\"button_cancel\":\"Cancella\",\"button_confirm\":\"Conferma\",\"button_create\":\"Crea\",\"button_delete_account\":\"Elimina account\",\"button_edit\":\"Editare\",\"button_logout\":\"Fine sessione\",\"button_ok\":\"OK\",\"button_reset\":\"Reset\",\"button_send_request\":\"Invia richiesta\",\"button_sign_in\":\"Entrare\",\"button_sign_up\":\"Registrazione\",\"button_subscribe\":\"Sottoscrivi\",\"button_update\":\"Aggiorna\",\"cannot_initiate_file_upload\":\"Non è possibile iniziare il caricamento dell\\'archivio.\",\"channel\":\"canale\",\"channel_prompt\":\"Questo è un canale\",\"chat_invitation\":\"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?\",\"chat_invitation_accept\":\"Accettare\",\"chat_invitation_block\":\"Bloccare\",\"chat_invitation_ignore\":\"Ignorare\",\"clear_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.\",\"code_doesnot_match\":\"Il codice non conicide\",\"contacts_not_found\":\"Non hai chats\\\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Nessun contatto coincide con \\'\\'{query}\\'\\'\",\"credential_email_prompt\":\"La tua mail di registrazione\",\"delete_account\":\"Elimina l\\'account\",\"delete_account_warning\":\"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.\",\"delete_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.\",\"download_action\":\"Scarica\",\"drafty_attachment\":\"Allegato\",\"drafty_form\":\"Form:\",\"drafty_image\":\"Immagine\",\"email_dative\":\"posta elettronica\",\"email_prompt\":\"Posta elettronica, per es. mario@example.com\",\"enable_peers_messaging\":\"Abilitare\",\"enter_confirmation_code_prompt\":\"Inserire il codice di conferma {method}:\",\"error_invalid_id\":\"ID non valido\",\"file_attachment_too_large\":\"La grandezza del file {size} eccede il limite di {limit}.\",\"forgot_password_link\":\"Hai dimenticato la password?\",\"full_name_prompt\":\"Nome completo, per es. Mario Rossi\",\"granted_permissions\":\"Garantito\",\"group_has_no_members\":\"Non hai membri\",\"group_user_id_prompt\":\"ID del gruppo o dell\\'utente\",\"image_caption_prompt\":\"Aggiungi un\\'immagine\",\"invalid_content\":\"contenuto non valido\",\"invalid_security_token\":\"Token di sicurezza invalido\",\"label_client\":\"Cliente:\",\"label_content_type\":\"Tipo di contenuto:\",\"label_default_access_mode\":\"Modalità di accesso predefinito:\",\"label_file_name\":\"Nome del file:\",\"label_group_members\":\"Membri del gruppo:\",\"label_incognito_mode\":\"Modalità incognito:\",\"label_message_sound\":\"Suono del messaggio:\",\"label_muting_topic\":\"Silenziato:\",\"label_other_user\":\"Altri\",\"label_password\":\"Password\",\"label_permissions\":\"Permessi:\",\"label_private\":\"Commento privato\",\"label_push_notifications\":\"Allarmi di notifica:\",\"label_push_notifications_disabled\":\"Allarmi di notifica (richiede HTTPS):\",\"label_reset_password\":\"Invia una mail per il reset della password:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Server:\",\"label_server_address\":\"Indirizzo del server:\",\"label_server_to_use\":\"Server da usare:\",\"label_size\":\"Grandezza:\",\"label_topic_name\":\"Nome dell\\'argomento\",\"label_user_contacts\":\"Contatti\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Tipo di Trasporto:\",\"label_you\":\"Tu:\",\"label_your_name\":\"Il tuo nome\",\"label_your_permissions\":\"I tuoi permessi:\",\"last_seen_timestamp\":\"Ultimo visto\",\"leave_chat_warning\":\"Sei sicuro di voler lasciare questa conversazione?\",\"link_contact_us\":\"Contattaci\",\"link_privacy_policy\":\"Política della privacy\",\"link_terms_of_service\":\"Termini d\\'uso del servizio\",\"login_prompt\":\"Nome dell\\'utente\",\"menu_item_archive_topic\":\"Archivia\",\"menu_item_block\":\"Bloccare\",\"menu_item_clear_messages\":\"Cancella i messaggi\",\"menu_item_clear_messages_for_all\":\"Cancella per tutti\",\"menu_item_delete\":\"Elimina\",\"menu_item_delete_for_all\":\"Elimina per tutti\",\"menu_item_delete_topic\":\"Eliminare\",\"menu_item_edit_permissions\":\"Modifica permessi\",\"menu_item_info\":\"Informazioni\",\"menu_item_member_delete\":\"Eliminare\",\"menu_item_mute\":\"Silenziare\",\"menu_item_restore_topic\":\"Ripristinare\",\"menu_item_send_retry\":\"Riprova\",\"menu_item_unblock\":\"Sblocca\",\"menu_item_unmute\":\"Riattiva le notifiche\",\"message_sending\":\"invio...\",\"message_sending_failed\":\"non è possibile inviare il messaggio\",\"messages_not_readable\":\"nessun accesso ai messaggi\",\"messaging_disabled_prompt\":\"L\\'invio dei messaggi è disabilitato\",\"more_online_members\":\"+{overflow} e oltre\",\"new_message_prompt\":\"Nuovo messaggio\",\"new_password_placeholder\":\"Inserire nuova password\",\"no_connection\":\"Nessuna connessione\",\"no_contacts\":\"Non ci sono contatti :-(\",\"numeric_confirmation_code_prompt\":\"Solo numeri\",\"online_now\":\"in linea\",\"password_prompt\":\"Password\",\"password_unchanged_prompt\":\"Non è cambiata\",\"peers_messaging_disabled\":\"I messaggi punto punto sono disabilitati.\",\"permission_admin\":\"Approvare ({val})\",\"permission_delete\":\"Eliminare ({val})\",\"permission_join\":\"Unisci ({val})\",\"permission_owner\":\"Propietario ({val})\",\"permission_pres\":\"Notifica arrivata ({val})\",\"permission_read\":\"Leggi ({val})\",\"permission_share\":\"Condividi ({val})\",\"permission_write\":\"Scrivi ({val})\",\"phone_dative\":\"telefono\",\"private_editing_placeholder\":\"Visibile solo a te\",\"push_init_failed\":\"Non è possibile inizializzare le notifiche push\",\"reconnect_countdown\":\"Disconnesso. Riconnessione in {seconds}…\",\"reconnect_now\":\"Riprovare\",\"reload_update\":\"Ricaricare\",\"report_chat_warning\":\"Sei sicuro di bloccare e denunciare questa conversazione?\",\"requested_permissions\":\"Sollecito\",\"save_attachment\":\"salva\",\"search_for_contacts\":\"Usa la ricerca per trovare i contatti\",\"search_no_results\":\"La ricerca non ha trovato nessun risultato\",\"search_placeholder\":\"Elenca come: email:mario@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Notifiche\",\"sidepanel_title_acc_support\":\"Supporto\",\"sidepanel_title_account_settings\":\"Impostazioni dell\\'account\",\"sidepanel_title_archive\":\"Chats archiviate\",\"sidepanel_title_blocked\":\"Chats bloccate\",\"sidepanel_title_cred\":\"Conferma le credenziali\",\"sidepanel_title_login\":\"Entra\",\"sidepanel_title_newtpk\":\"Comincia una Nuova Chat\",\"sidepanel_title_register\":\"Creare Account\",\"sidepanel_title_reset\":\"Resetta la Password\",\"sidepanel_title_settings\":\"Impostazioni\",\"stay_logged_in\":\"Rimani loggato\",\"tabtitle_find_user\":\"cerca\",\"tabtitle_group_by_id\":\"per ID\",\"tabtitle_new_group\":\"nuovo gruppo\",\"tags_editor_no_tags\":\"Aggiungi alcune etichette\",\"tags_not_found\":\"Non ci sono etichette definite. Aggiungine alcune.\",\"title_all_contacts\":\"Tutti i contatti\",\"title_group_members\":\"Membri del gruppo\",\"title_manage_tags\":\"Gestisci\",\"title_not_found\":\"Non trovato\",\"title_permissions\":\"Permessi\",\"title_tag_manager\":\"Etichette (trova e scopri)\",\"topic_block_warning\":\"Sei sicuro di voler bloccare questa conversazione?\",\"topic_delete_warning\":\"Sei sicuro di voler eliminare questa conversazione?\",\"topic_name_editing_placeholder\":\"Nome del gruppo\",\"unnamed_topic\":\"Senza nome\",\"update_available\":\"Aggiornamento disponibile.\",\"upload_finishing\":\"sto terminando...\",\"user_not_found\":\"Non trovato\",\"description_editing_placeholder\":\"Descrizione (opzionale)\",\"label_description\":\"Descrizione\",\"button_security\":\"Sicurezza\",\"panel_title_crop\":\"Trascina per aggiustare\",\"panel_title_general\":\"Generale\",\"panel_title_members\":\"Membri\",\"panel_title_security\":\"Sicurezza\",\"panel_title_info\":\"Informazione\",\"permissions_anonymous\":\"Anonimo\",\"permissions_authenticated\":\"Autenticato\",\"topic_delete\":\"Elimina la conversazione\",\"permissions_user\":\"Permessi dell\\'utente\",\"password_reset_email_sent\":\"Una mail con il codice di sicurezza è stata inviata.\",\"label_unarchive_topic\":\"Archiviato:\",\"menu_item_reply\":\"Replica\",\"menu_item_forward\":\"Reinvia\",\"forward_to\":\"Reinvia a\",\"forward_to_search_placeholder\":\"Cerca i contatti\",\"label_new_password\":\"Nuova password\",\"drafty_unknown\":\"Non supportato\",\"calls_incoming\":\"Chiamata in arrivo\",\"calls_outgoing\":\"Chiamata in uscita\",\"calls_you_label\":\"Tu\",\"menu_item_video_call\":\"Videochiamata\",\"already_in_call\":\"Sei già in una chiamata in uscita!\",\"call_cancelled\":\"cancellata\",\"call_missed\":\"persa\",\"call_declined\":\"rifiutata\",\"call_disconnected\":\"disconnessa\",\"label_use_secure_connection\":\"Usa una connessione sicura\",\"cred_confirmed_successfully\":\"Confermato con successo\",\"menu_item_edit\":\"Modifica\",\"editing_message\":\"Edita\",\"message_edited_marker\":\", editando\",\"icon_title_add_image\":\"Aggiungi immagine\",\"icon_title_attach_file\":\"Allega un file\",\"icon_title_delete\":\"Eliminare la registrazione\",\"icon_title_pause\":\"Riproduzione in pausa\",\"icon_title_play\":\"Riproduci la registrazione\",\"icon_title_record_voice\":\"Registra un messaggio vocale\",\"icon_title_resume\":\"Riprendi la riproduzione\",\"icon_title_send\":\"Inviare il messaggio\",\"drag_file\":\"Trascina il file qui\",\"drafty_video\":\"Registrazione video\",\"call_in_progress\":\"avanzamento\",\"menu_item_audio_call\":\"Chiamata\",\"unrecognized_video_format\":\"Il formato di questo video non è riconosciuto\",\"loading_note\":\"Caricando...\",\"password_i_have_code\":\"Ho un codice\",\"label_reset_password_tel\":\"Invia un SMS per resettare la password\",\"mobile_phone_number\":\"Numero di telefono cellulare\",\"password_reset_sms_sent\":\"Un SMS con il codice di sicurezza è stato inviato.\",\"mobile_number_required\":\"E\\' richiesto il numero di telefono cellulare\",\"current_email\":\"Email attuale\",\"current_phone\":\"Numero di telefono attuale\",\"new_email\":\"Nuova email\",\"new_phone_number\":\"Nuovo numero di telefono\",\"change_email\":\"Cambiare l\\'indirizzo di posta elettronica\",\"change_phone\":\"Cambiare numero di telefono\",\"call_busy\":\"occupato\",\"pin_message\":\"Fissare\",\"unpin_message\":\"Rimuovere\",\"failed_to_init_audio\":\"Non è possibile cominciare la registrazione audio\",\"password_reset_success\":\"Il reset della password è avvenuto con successo\",\"scan_qr_code\":\"Scansionare il codice QR\",\"self_topic_comment\":\"Note, messaggi, links e archivi, sono salvati per i posteri\",\"self_topic_name\":\"Messaggi salvati\",\"message_not_found\":\"Messaggi non trovati\",\"message_deleted\":\"Messaggi eliminati\",\"alias_editing_placeholder\":\"Alias (opzionale)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(già utilizzato)\",\"alias_invalid\":\"(invalido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleziona la nazione\",\"text_copied\":\"Copia nella clipboard\",\"incognito_mode_description\":\"Nascondi il tuo stato online e gli indicatori di digitazione.\",\"send_command\":\"Invia con {key}\",\"send_command_explained\":\"Premi Invio per una nuova riga\",\"send_plain\":\"Invia con Invio\",\"send_plain_explained\":\"Premi Shift + Invio per una nuova riga\",\"sidepanel_title_acc_general\":\"Generale\",\"label_keyboard\":\"Tastiera:\",\"color_schema_dark\":\"Scuro\",\"color_schema_light\":\"Chiaro\",\"color_schema_system\":\"Predefinito del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Dimensione testo:\",\"pin_chat\":\"Fissa\",\"unpin_chat\":\"Sblocca\",\"subscriber_count\":\"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Iscritti:\",\"member_count\":\"{count, plural, one {{count, number} membro} other {{count, number} membri}}\",\"tabtitle_image\":\"immagine\",\"tabtitle_pattern\":\"motivo\",\"button_restore\":\"Ripristina predefinito\",\"wallpapers\":\"Sfondi\",\"label_blur_wallpaper\":\"Sfocatura:\",\"label_scan_id\":\"Scansiona il mio ID:\",\"unknown_name\":\"Sconosciuto\",\"save_action\":\"Salva\",\"cannot_parse_vcard\":\"Impossibile analizzare il file vCard.\",\"chat_now\":\"Chatta\",\"find_user\":\"Cerca\",\"label_contact_card\":\"Scheda contatto\",\"label_contacts\":\"Contatti\",\"add_members_prompt\":\"aggiungi membri\"}')}}]);"
  },
  {
    "path": "umd/203.prod.js",
    "content": "\"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<d;e++)n[e]=t[e];return n}function c(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 f(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?c(Object(e),!0).forEach((function(d){h(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):c(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function h(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var g={formatExtension:function(t,d,e){return\"\".concat(t).concat(e.ext()).concat(d)}};function m(t,d,e,r){if(e=e?f(f({},g),e):g,r=new n.ZP(r),t.country&&\"001\"!==t.country){if(!r.hasCountry(t.country))throw new Error(\"Unknown country: \".concat(t.country));r.country(t.country)}else{if(!t.countryCallingCode)return t.phone||\"\";r.selectNumberingPlan(t.countryCallingCode)}var a,i=r.countryCallingCode(),$=e.v2?t.nationalNumber:t.phone;switch(d){case\"NATIONAL\":return $?p(a=y($,t.carrierCode,\"NATIONAL\",r,e),t.ext,r,e.formatExtension):\"\";case\"INTERNATIONAL\":return $?(a=y($,null,\"INTERNATIONAL\",r,e),p(a=\"+\".concat(i,\" \").concat(a),t.ext,r,e.formatExtension)):\"+\".concat(i);case\"E.164\":return\"+\".concat(i).concat($);case\"RFC3966\":return function(t){var d=t.number,e=t.ext;if(!d)return\"\";if(\"+\"!==d[0])throw new Error('\"formatRFC3966()\" expects \"number\" to be in E.164 format.');return\"tel:\".concat(d).concat(e?\";ext=\"+e:\"\")}({number:\"+\".concat(i).concat($),ext:t.ext});case\"IDD\":if(!e.fromCountry)return;var o=function(t,d,e,r,a){var i=(0,n.Gg)(r,a.metadata);if(i===e){var $=y(t,d,\"NATIONAL\",a);return\"1\"===e?e+\" \"+$:$}var o=function(t,d,e){var r=new n.ZP(e);return r.selectNumberingPlan(t,d),r.defaultIDDPrefix()?r.defaultIDDPrefix():u.test(r.IDDPrefix())?r.IDDPrefix():void 0}(r,void 0,a.metadata);if(o)return\"\".concat(o,\" \").concat(e,\" \").concat(y(t,null,\"INTERNATIONAL\",a))}($,t.carrierCode,i,e.fromCountry,r);return p(o,t.ext,r,e.formatExtension);default:throw new Error('Unknown \"format\" argument passed to \"formatNumber()\": \"'.concat(d,'\"'))}}function y(t,d,e,n,r){var i=function(t,d){for(var e,n=l(t);!(e=n()).done;){var r=e.value;if(r.leadingDigitsPatterns().length>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<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?v(Object(e),!0).forEach((function(d){C(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):v(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function C(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function N(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var P=function(){function t(d,e,r){if(function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!d)throw new TypeError(\"`country` or `countryCallingCode` not passed\");if(!e)throw new TypeError(\"`nationalNumber` not passed\");if(!r)throw new TypeError(\"`metadata` not passed\");var a=function(t,d){var e,r,a=new n.ZP(d);x(t)?(e=t,a.selectNumberingPlan(e),r=a.countryCallingCode()):r=t;return{country:e,countryCallingCode:r}}(d,r),i=a.country,$=a.countryCallingCode;this.country=i,this.countryCallingCode=$,this.nationalNumber=e,this.number=\"+\"+this.countryCallingCode+this.nationalNumber,this.getMetadata=function(){return r}}var d,e,o;return d=t,(e=[{key:\"setExt\",value:function(t){this.ext=t}},{key:\"getPossibleCountries\",value:function(){return this.country?[this.country]:$(this.countryCallingCode,this.nationalNumber,this.getMetadata())}},{key:\"isPossible\",value:function(){return(0,r.Z)(this,{v2:!0},this.getMetadata())}},{key:\"isValid\",value:function(){return function(t,d,e){if(d=d||{},(e=new n.ZP(e)).selectNumberingPlan(t.country,t.countryCallingCode),e.hasTypes())return void 0!==(0,i.Z)(t,d,e.metadata);var r=d.v2?t.nationalNumber:t.phone;return(0,a.Z)(r,e.nationalNumberPattern())}(this,{v2:!0},this.getMetadata())}},{key:\"isNonGeographic\",value:function(){return new n.ZP(this.getMetadata()).isNonGeographicCallingCode(this.countryCallingCode)}},{key:\"isEqual\",value:function(t){return this.number===t.number&&this.ext===t.ext}},{key:\"getType\",value:function(){return(0,i.Z)(this,{v2:!0},this.getMetadata())}},{key:\"format\",value:function(t,d){return m(this,t,d?b(b({},d),{},{v2:!0}):{v2:!0},this.getMetadata())}},{key:\"formatNational\",value:function(t){return this.format(\"NATIONAL\",t)}},{key:\"formatInternational\",value:function(t){return this.format(\"INTERNATIONAL\",t)}},{key:\"getURI\",value:function(t){return this.format(\"RFC3966\",t)}}])&&N(d.prototype,e),o&&N(d,o),Object.defineProperty(d,\"prototype\",{writable:!1}),t}(),x=function(t){return/^[A-Z]{2}$/.test(t)}},5619:(t,d,e)=>{e.d(d,{ex:()=>n,sJ:()=>r,uv:()=>$,xc:()=>i,xg:()=>a,xy:()=>o});var n=2,r=17,a=3,i=\"0-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);e<d;e++)n[e]=t[e];return n}function a(t,d){return i(t,void 0,d)}function i(t,d,e){var r=e.type(d),a=r&&r.possibleLengths()||e.possibleLengths();if(!a)return\"IS_POSSIBLE\";if(\"FIXED_LINE_OR_MOBILE\"===d){if(!e.type(\"FIXED_LINE\"))return i(t,\"MOBILE\",e);var $=e.type(\"MOBILE\");$&&(a=function(t,d){for(var e,r=t.slice(),a=n(d);!(e=a()).done;){var i=e.value;t.indexOf(i)<0&&r.push(i)}return r.sort((function(t,d){return t-d}))}(a,$.possibleLengths()))}else if(d&&!r)return\"INVALID_LENGTH\";var o=t.length,u=a[0];return u===o?\"IS_POSSIBLE\":u>o?\"TOO_SHORT\":a[a.length-1]<o?\"TOO_LONG\":a.indexOf(o,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)($):$}},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 $=i.getCountryCodesForCallingCode(t);return $?1===$.length?$[0]:(0,n.Z)(e,{countries:$,defaultCountry:a,metadata:i.metadata}):void 0}},9287:(t,d,e)=>{e.d(d,{Z:()=>$});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<d;e++)n[e]=t[e];return n}function $(t,d){var e=d.countries,i=d.defaultCountry,$=d.metadata;$=new n.ZP($);for(var o,u=[],l=a(e);!(o=l()).done;){var s=o.value;if($.country(s),$.leadingDigits()){if(t&&0===t.search($.leadingDigits()))return s}else if((0,r.Z)({phone:t,country:s},void 0,$.metadata)){if(!i)return s;if(s===i)return s;u.push(s)}}if(u.length>0)return u[0]}},1089:(t,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<d;e++)n[e]=t[e];return n}var $=[\"MOBILE\",\"PREMIUM_RATE\",\"TOLL_FREE\",\"SHARED_COST\",\"VOIP\",\"PERSONAL_NUMBER\",\"PAGER\",\"UAN\",\"VOICEMAIL\"];function o(t,d,e){if(d=d||{},t.country||t.countryCallingCode){(e=new n.ZP(e)).selectNumberingPlan(t.country,t.countryCallingCode);var i=d.v2?t.nationalNumber:t.phone;if((0,r.Z)(i,e.nationalNumberPattern())){if(u(i,\"FIXED_LINE\",e))return e.type(\"MOBILE\")&&\"\"===e.type(\"MOBILE\").pattern()?\"FIXED_LINE_OR_MOBILE\":e.type(\"MOBILE\")?u(i,\"MOBILE\",e)?\"FIXED_LINE_OR_MOBILE\":\"FIXED_LINE\":\"FIXED_LINE_OR_MOBILE\";for(var o,l=a($);!(o=l()).done;){var s=o.value;if(u(i,s,e))return s}}}}function u(t,d,e){return!(!(d=e.type(d))||!d.pattern())&&(!(d.possibleLengths()&&d.possibleLengths().indexOf(t.length)<0)&&(0,r.Z)(t,d.pattern()))}},3398:(t,d,e)=>{e.d(d,{Z:()=>r});var n={}.constructor;function r(t){return null!=t&&t.constructor===n}},1316:(t,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<d;e++)n[e]=t[e];return n}e.d(d,{ZP:()=>$,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\",\"１\":\"1\",\"２\":\"2\",\"３\":\"3\",\"４\":\"4\",\"５\":\"5\",\"６\":\"6\",\"７\":\"7\",\"８\":\"8\",\"９\":\"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]<d[1]?-1:0:!t[1]&&d[1]?1:t[1]&&!d[1]?-1:0}e.d(d,{ZP:()=>s,Gg:()=>p});var r=e(3398);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){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}function $(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,d,e){return d&&$(t.prototype,d),e&&$(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}var u=\" ext. \",l=/^\\d+$/,s=function(){function t(d){i(this,t),function(t){if(!t)throw new Error(\"[libphonenumber-js] `metadata` argument not passed. Check your arguments.\");if(!(0,r.Z)(t)||!(0,r.Z)(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((0,r.Z)(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&&l.test(t)&&(d=t,t=null),t&&\"001\"!==t){if(!this.hasCountry(t))throw new Error(\"Unknown country: \".concat(t));this.numberingPlan=new c(this.getCountryMetadata(t),this)}else if(d){if(!this.hasCallingCode(d))throw new Error(\"Unknown calling code: \".concat(d));this.numberingPlan=new c(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}(),c=function(){function t(d,e){i(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 f(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()&&m(this.types(),t))return new g(m(this.types(),t),this)}},{key:\"ext\",value:function(){return this.v1||this.v2?u:this.metadata[13]||u}}]),t}(),f=function(){function t(d,e){i(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()||h.test(this.nationalPrefixFormattingRule()))}},{key:\"internationalFormat\",value:function(){return this._format[5]||this.format()}}]),t}(),h=/^\\(?\\$1\\)?$/,g=function(){function t(d,e){i(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 m(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 y=function(t){return a(t)};function p(t,d){if((d=new s(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-8]|[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[0-26-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(?:[15]|28|4[14])|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[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|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-6]|[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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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[0-26-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([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?: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}|63\\\\d{6}|(?: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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|63)\\\\d{6}\",[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[0-26-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(?:0(?:00|[178]\\\\d)|[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(?:[0-79]\\\\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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[0167]\\\\d|2[0-2]|5[01]|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,[\"700[1-9]\\\\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|11|22|33|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(?:[018]\\\\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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],GU:[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:510|6\\\\d\\\\d|7(?:0\\\\d|1[0-8]|25|49))\\\\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(?:1[0-7]|4[0-57-9]|6[0-4]))|5(?:73[0-6]|95[0-8])|6(?:26[013-8]|66[0-3])|70(?:7[1-6]|8[0-4])|848[0-25-9]|9(?:29[013-9]|59[0-4]|899))\\\\d{4}|(?:4(?:4[015]|6[02357-9])|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[5-7])))\\\\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,[\"55410\\\\d{4}|5(?:(?:[02][02-9]|[149][2-9]|[36]\\\\d|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[34]|5[0-25689]|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(?:[12]\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|69|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)|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])|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])|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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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,\"(000[259]\\\\d{6})$|(?:(?:003768)0?)|0\",\"$1\",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-9]\\\\d{8}\",[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]|9(?:12|9[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[0-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-469])\\\\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{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)|8(?:0[89]|92)\",\"5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|8(?:0[89]|92)\"],\"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(?:[0167]\\\\d|2[0-2]|5[01]|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|6[01]|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]|92[039])\\\\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-3]|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|87|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-69]|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[0-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-7]))|(?:[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[047]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[047]|[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]|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\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],NZ:[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|6[89]|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-247]\\\\d|3[0-79]|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\\\\d\\\\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(?:[06][0-6]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))\\\\d{4}\"]]],RO:[\"40\",\"00\",\"(?:[2378]\\\\d|62|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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7020\\\\d{5}|(?:62\\\\d|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\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-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-8]|[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(?:08[013]|95[0-2])\\\\d{4}|(?:8(?:0[1-7]|[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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|77|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[79]|8[08])\\\\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,[\"[67]\\\\d{7}\",[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\",[\"44[02-479]|[34]7\"]],[\"(\\\\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,[\"(?:4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:0[0-57-9]|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-8])\\\\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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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(?:[015-8]\\\\d|20|36|4[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[468])|73020\\\\d)\\\\d{4}|(?:4722|505[2-57-9]|983[289])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013569]|3[0-24679]|4[167]|5[0-2]|6[0149]|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\\\\d{2,9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",[6,7,8,9,10,11,12,13],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],UZ:[\"998\",\"810\",\"(?:20|33|[5-79]\\\\d|88)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:(?:[25]0|33|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]))|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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\",\"(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])\\\\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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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[0-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:()=>$t});var n=e(6183),r=e(2581),a=e(7520);function i(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var $=function(){function t(d){var e=d.onCountryChange,n=d.onCallingCodeChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.onCountryChange=e,this.onCallingCodeChange=n}var d,e,n;return d=t,(e=[{key:\"reset\",value:function(t){var d=t.country,e=t.callingCode;this.international=!1,this.missingPlus=!1,this.IDDPrefix=void 0,this.callingCode=void 0,this.digits=\"\",this.resetNationalSignificantNumber(),this.initCountryAndCallingCode(d,e)}},{key:\"resetNationalSignificantNumber\",value:function(){this.nationalSignificantNumber=this.getNationalDigits(),this.nationalSignificantNumberMatchesInput=!0,this.nationalPrefix=void 0,this.carrierCode=void 0,this.complexPrefixBeforeNationalSignificantNumber=void 0}},{key:\"update\",value:function(t){for(var d=0,e=Object.keys(t);d<e.length;d++){var n=e[d];this[n]=t[n]}}},{key:\"initCountryAndCallingCode\",value:function(t,d){this.setCountry(t),this.setCallingCode(d)}},{key:\"setCountry\",value:function(t){this.country=t,this.onCountryChange(t)}},{key:\"setCallingCode\",value:function(t){this.callingCode=t,this.onCallingCodeChange(t,this.country)}},{key:\"startInternationalNumber\",value:function(t,d){this.international=!0,this.initCountryAndCallingCode(t,d)}},{key:\"appendDigits\",value:function(t){this.digits+=t}},{key:\"appendNationalSignificantNumberDigits\",value:function(t){this.nationalSignificantNumber+=t}},{key:\"getNationalDigits\",value:function(){return this.international?this.digits.slice((this.IDDPrefix?this.IDDPrefix.length:0)+(this.callingCode?this.callingCode.length:0)):this.digits}},{key:\"getDigitsWithoutInternationalPrefix\",value:function(){return this.international&&this.IDDPrefix?this.digits.slice(this.IDDPrefix.length):this.digits}}])&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function o(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 u(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 u(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 u(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}var l=\"x\",s=new RegExp(l);function c(t,d){if(d<1)return\"\";for(var e=\"\";d>1;)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;)\"(\"===t[e]?d.push(e):\")\"===t[e]&&d.pop(),e++;var n=0,r=\"\";d.push(t.length);for(var a=0,i=d;a<i.length;a++){var $=i[a];r+=t.slice(n,$),n=$+1}return r}(t.slice(0,d))}var h=e(7856),g=e(9233),m=e(5738);function y(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;if(new RegExp(\"^(?:\".concat(d.pattern(),\")$\")).test(t.nationalSignificantNumber))return function(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;t.nationalSignificantNumber,t.international,t.nationalPrefix,t.carrierCode;if(r(d)){var i=p(t,d,{useNationalPrefixFormattingRule:!0,getSeparatorAfterNationalPrefix:a,metadata:n});if(i)return i}return p(t,d,{useNationalPrefixFormattingRule:!1,getSeparatorAfterNationalPrefix:a,metadata:n})}(t,d,{metadata:n,shouldTryNationalPrefixFormattingRule:r,getSeparatorAfterNationalPrefix:a})}function p(t,d,e){var n=e.metadata,r=e.useNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix,i=(0,m.Z)(t.nationalSignificantNumber,d,{carrierCode:t.carrierCode,useInternationalFormat:t.international,withNationalPrefix:r,metadata:n});if(r||(t.nationalPrefix?i=t.nationalPrefix+a(d)+i:t.complexPrefixBeforeNationalSignificantNumber&&(i=t.complexPrefixBeforeNationalSignificantNumber+\" \"+i)),function(t,d){return(0,g.ZP)(t)===d.getNationalDigits()}(i,t))return i}function v(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var b=function(){function t(){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}var d,e,n;return d=t,(e=[{key:\"parse\",value:function(t){if(this.context=[{or:!0,instructions:[]}],this.parsePattern(t),1!==this.context.length)throw new Error(\"Non-finalized contexts left when pattern parse ended\");var d=this.context[0],e=d.branches,n=d.instructions;if(e)return{op:\"|\",args:e.concat([x(n)])};if(0===n.length)throw new Error(\"Pattern is required\");return 1===n.length?n[0]:n}},{key:\"startContext\",value:function(t){this.context.push(t)}},{key:\"endContext\",value:function(){this.context.pop()}},{key:\"getContext\",value:function(){return this.context[this.context.length-1]}},{key:\"parsePattern\",value:function(t){if(!t)throw new Error(\"Pattern is required\");var d=t.match(P);if(d){var e=d[1],n=t.slice(0,d.index),r=t.slice(d.index+e.length);switch(e){case\"(?:\":n&&this.parsePattern(n),this.startContext({or:!0,instructions:[],branches:[]});break;case\")\":if(!this.getContext().or)throw new Error('\")\" operator must be preceded by \"(?:\" operator');if(n&&this.parsePattern(n),0===this.getContext().instructions.length)throw new Error('No instructions found after \"|\" operator in an \"or\" group');var a=this.getContext().branches;a.push(x(this.getContext().instructions)),this.endContext(),this.getContext().instructions.push({op:\"|\",args:a});break;case\"|\":if(!this.getContext().or)throw new Error('\"|\" operator can only be used inside \"or\" groups');if(n&&this.parsePattern(n),!this.getContext().branches){if(1!==this.context.length)throw new Error('\"branches\" not found in an \"or\" group context');this.getContext().branches=[]}this.getContext().branches.push(x(this.getContext().instructions)),this.getContext().instructions=[];break;case\"[\":n&&this.parsePattern(n),this.startContext({oneOfSet:!0});break;case\"]\":if(!this.getContext().oneOfSet)throw new Error('\"]\" operator must be preceded by \"[\" operator');this.endContext(),this.getContext().instructions.push({op:\"[]\",args:C(n)});break;default:throw new Error(\"Unknown operator: \".concat(e))}r&&this.parsePattern(r)}else{if(N.test(t))throw new Error(\"Illegal characters found in a pattern: \".concat(t));this.getContext().instructions=this.getContext().instructions.concat(t.split(\"\"))}}}])&&v(d.prototype,e),n&&v(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function C(t){for(var d=[],e=0;e<t.length;){if(\"-\"===t[e]){if(0===e||e===t.length-1)throw new Error(\"Couldn't parse a one-of set pattern: \".concat(t));for(var n=t[e-1].charCodeAt(0)+1,r=t[e+1].charCodeAt(0)-1,a=n;a<=r;)d.push(String.fromCharCode(a)),a++}else d.push(t[e]);e++}return d}var N=/[\\(\\)\\[\\]\\?\\:\\|]/,P=new RegExp(\"(\\\\||\\\\(\\\\?\\\\:|\\\\)|\\\\[|\\\\])\");function x(t){return 1===t.length?t[0]:t}function S(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 O(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 O(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 O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function w(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var I=function(){function t(d){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.matchTree=(new b).parse(d)}var d,e,n;return d=t,e=[{key:\"match\",value:function(t){var d=(arguments.length>1&&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<d.length;){var i=E(r,d[a],e&&a===d.length-1);if(!i)return;if(i.overflow)return i;if(!i.match){if(i.partialMatch)return{partialMatch:!0};throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(i,null,2)))}if(0===(r=r.slice(i.matchedChars.length)).length)return a===d.length-1?{match:!0,matchedChars:t}:{partialMatch:!0};a++}return e?{overflow:!0}:{match:!0,matchedChars:t.slice(0,t.length-r.length)}}switch(d.op){case\"|\":for(var $,o,u=S(d.args);!(o=u()).done;){var l=E(t,o.value,e);if(l){if(l.overflow)return l;if(l.match)return{match:!0,matchedChars:l.matchedChars};if(!l.partialMatch)throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(l,null,2)));$=!0}}return $?{partialMatch:!0}:void 0;case\"[]\":for(var s,c=S(d.args);!(s=c()).done;){var f=s.value;if(t[0]===f)return 1===t.length?{match:!0,matchedChars:t}:e?{overflow:!0}:{match:!0,matchedChars:[f]}}return;default:throw new Error(\"Unsupported instruction tree: \".concat(d))}}var A=e(5619),T=e(2354);function M(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 F(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 F(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 F(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function k(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var R=c(\"9\",15),D=/[- ]/,L=function(){return/\\[([^\\[\\]])*\\]/g},Z=function(){return/\\d(?=[^,}][^,}])/g},j=new RegExp(\"[\"+A.uv+\"]*\\\\$1[\"+A.uv+\"]*(\\\\$\\\\d[\"+A.uv+\"]*)*$\"),G=function(){function t(d){d.state;var e=d.metadata;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=e,this.resetFormat()}var d,e,n;return d=t,(e=[{key:\"resetFormat\",value:function(){this.chosenFormat=void 0,this.template=void 0,this.nationalNumberTemplate=void 0,this.populatedNationalNumberTemplate=void 0,this.populatedNationalNumberTemplatePosition=-1}},{key:\"reset\",value:function(t,d){this.resetFormat(),t?(this.isNANP=\"1\"===t.callingCode(),this.matchingFormats=t.formats(),d.nationalSignificantNumber&&this.narrowDownMatchingFormats(d)):(this.isNANP=void 0,this.matchingFormats=[])}},{key:\"format\",value:function(t,d){var e,n,r=this;if(e=d.nationalSignificantNumber,n=this.metadata,\"IS_POSSIBLE\"===(0,h.Z)(e,n))for(var a,i=M(this.matchingFormats);!(a=i()).done;){var $=a.value,o=y(d,$,{metadata:this.metadata,shouldTryNationalPrefixFormattingRule:function(t){return r.shouldTryNationalPrefixFormattingRule(t,{international:d.international,nationalPrefix:d.nationalPrefix})},getSeparatorAfterNationalPrefix:function(t){return r.getSeparatorAfterNationalPrefix(t)}});if(o)return this.resetFormat(),this.chosenFormat=$,this.setNationalNumberTemplate(o.replace(/\\d/g,l),d),this.populatedNationalNumberTemplate=o,this.populatedNationalNumberTemplatePosition=this.template.lastIndexOf(l),o}return this.formatNationalNumberWithNextDigits(t,d)}},{key:\"formatNationalNumberWithNextDigits\",value:function(t,d){var e=this.chosenFormat,n=this.chooseFormat(d);if(n)return n===e?this.formatNextNationalNumberDigits(t):this.formatNextNationalNumberDigits(d.getNationalDigits())}},{key:\"narrowDownMatchingFormats\",value:function(t){var d=this,e=t.nationalSignificantNumber,n=t.nationalPrefix,r=t.international,a=e,i=a.length-3;i<0&&(i=0),this.matchingFormats=this.matchingFormats.filter((function(t){return d.formatSuits(t,r,n)&&d.formatMatches(t,a,i)})),this.chosenFormat&&-1===this.matchingFormats.indexOf(this.chosenFormat)&&this.resetFormat()}},{key:\"formatSuits\",value:function(t,d,e){return!(e&&!t.usesNationalPrefix()&&!t.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!d&&!e&&t.nationalPrefixIsMandatoryWhenFormattingInNationalFormat())}},{key:\"formatMatches\",value:function(t,d,e){var n=t.leadingDigitsPatterns().length;if(0===n)return!0;e=Math.min(e,n-1);var r=t.leadingDigitsPatterns()[e];if(d.length<3)try{return void 0!==new I(r).match(d,{allowOverflow:!0})}catch(t){return console.error(t),!0}return new RegExp(\"^(\".concat(r,\")\")).test(d)}},{key:\"getFormatFormat\",value:function(t,d){return d?t.internationalFormat():t.format()}},{key:\"chooseFormat\",value:function(t){for(var d,e=this,n=function(){var n=d.value;return e.chosenFormat===n?\"break\":j.test(e.getFormatFormat(n,t.international))?e.createTemplateForFormat(n,t)?(e.chosenFormat=n,\"break\"):(e.matchingFormats=e.matchingFormats.filter((function(t){return t!==n})),\"continue\"):\"continue\"},r=M(this.matchingFormats.slice());!(d=r()).done;){var a=n();if(\"break\"===a)break}return this.chosenFormat||this.resetFormat(),this.chosenFormat}},{key:\"createTemplateForFormat\",value:function(t,d){if(!(t.pattern().indexOf(\"|\")>=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<n.length+t.getDigitsWithoutInternationalPrefix().length;)d=this.template.indexOf(l,d+1),e++;return f(this.template,d+1)}}},{key:\"setNationalNumberTemplate\",value:function(t,d){this.nationalNumberTemplate=t,this.populatedNationalNumberTemplate=t,this.populatedNationalNumberTemplatePosition=-1,d.international?this.template=this.getInternationalPrefixBeforeCountryCallingCode(d).replace(/[\\d\\+]/g,l)+c(l,d.callingCode.length)+\" \"+t:this.template=t}},{key:\"getTemplateForFormat\",value:function(t,d){var e=d.nationalSignificantNumber,n=d.international,r=d.nationalPrefix,a=d.complexPrefixBeforeNationalSignificantNumber,i=t.pattern();i=i.replace(L(),\"\\\\d\").replace(Z(),\"\\\\d\");var $=R.match(i)[0];if(!(e.length>$.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<d;e++)n[e]=t[e];return n}function V(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var Y=\"[\"+A.uv+A.xc+\"]+\",J=new RegExp(\"^\"+Y+\"$\",\"i\"),X=\"(?:[\"+A.xy+\"][\"+A.uv+A.xc+\"]*|[\"+A.uv+A.xc+\"]+)\",Q=new RegExp(\"[^\"+A.uv+A.xc+\"]+.*$\"),q=/[^\\d\\[\\]]/,z=function(){function t(d){var e=d.defaultCountry,n=d.defaultCallingCode,r=d.metadata,a=d.onNationalSignificantNumberChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.defaultCountry=e,this.defaultCallingCode=n,this.metadata=r,this.onNationalSignificantNumberChange=a}var d,e,n;return d=t,(e=[{key:\"input\",value:function(t,d){var e,n=function(t){var d=function(t){var d=function(t){var d,e=t.search(X);if(!(e<0))return\"+\"===(t=t.slice(e))[0]&&(d=!0,t=t.slice(1)),t=t.replace(Q,\"\"),d&&(t=\"+\"+t),t}(t)||\"\";return\"+\"===d[0]?[d.slice(1),!0]:[d]}(t),e=W(d,2),n=e[0],r=e[1];return J.test(n)||(n=\"\"),[n,r]}(t),r=W(n,2),a=r[0],i=r[1],$=(0,g.ZP)(a);return i&&(d.digits||(d.startInternationalNumber(),$||(e=!0))),$&&this.inputDigits($,d),{digits:$,justLeadingPlus:e}}},{key:\"inputDigits\",value:function(t,d){var e=d.digits,n=e.length<3&&e.length+t.length>=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(2691),dt=e(9287),et=e(3398);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,$=!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 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);e<d;e++)n[e]=t[e];return n}function at(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var it=function(){function t(d,e){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=new r.ZP(e);var n=nt(this.getCountryAndCallingCode(d),2),a=n[0],i=n[1];this.defaultCountry=a,this.defaultCallingCode=i,this.reset()}var d,e,n;return d=t,(e=[{key:\"getCountryAndCallingCode\",value:function(t){var d,e;return t&&((0,et.Z)(t)?(d=t.defaultCountry,e=t.defaultCallingCode):d=t),d&&!this.metadata.hasCountry(d)&&(d=void 0),[d,e]}},{key:\"input\",value:function(t){var d=this.parser.input(t,this.state),e=d.digits;if(d.justLeadingPlus)this.formattedOutput=\"+\";else if(e){var n;if(this.determineTheCountryIfNeeded(),this.state.nationalSignificantNumber&&this.formatter.narrowDownMatchingFormats(this.state),this.metadata.hasSelectedNumberingPlan()&&(n=this.formatter.format(e,this.state)),void 0===n&&this.parser.reExtractNationalSignificantNumber(this.state)){this.determineTheCountryIfNeeded();var r=this.state.getNationalDigits();r&&(n=this.formatter.format(r,this.state))}this.formattedOutput=n?this.getFullNumber(n):this.getNonFormattedNumber()}return this.formattedOutput}},{key:\"reset\",value:function(){var t=this;return this.state=new $({onCountryChange:function(d){t.country=d},onCallingCodeChange:function(d,e){t.metadata.selectNumberingPlan(e,d),t.formatter.reset(t.metadata.numberingPlan,t.state),t.parser.reset(t.metadata.numberingPlan)}}),this.formatter=new G({state:this.state,metadata:this.metadata}),this.parser=new z({defaultCountry:this.defaultCountry,defaultCallingCode:this.defaultCallingCode,metadata:this.metadata,state:this.state,onNationalSignificantNumberChange:function(){t.determineTheCountryIfNeeded(),t.formatter.reset(t.metadata.numberingPlan,t.state)}}),this.state.reset({country:this.defaultCountry,callingCode:this.defaultCallingCode}),this.formattedOutput=\"\",this}},{key:\"isInternational\",value:function(){return this.state.international}},{key:\"getCallingCode\",value:function(){if(this.isInternational())return this.state.callingCode}},{key:\"getCountryCallingCode\",value:function(){return this.getCallingCode()}},{key:\"getCountry\",value:function(){if(this.state.digits)return this._getCountry()}},{key:\"_getCountry\",value:function(){var t=this.state.country;return t}},{key:\"determineTheCountryIfNeeded\",value:function(){this.state.country&&!this.isCountryCallingCodeAmbiguous()||this.determineTheCountry()}},{key:\"getFullNumber\",value:function(t){var d=this;if(this.isInternational()){var e=function(t){return d.formatter.getInternationalPrefixBeforeCountryCallingCode(d.state,{spacing:!!t})+t},n=this.state.callingCode;return e(n?t?\"\".concat(n,\" \").concat(t):n:\"\".concat(this.state.getDigitsWithoutInternationalPrefix()))}return t}},{key:\"getNonFormattedNationalNumberWithPrefix\",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.complexPrefixBeforeNationalSignificantNumber,n=t.nationalPrefix,r=d,a=e||n;return a&&(r=a+r),r}},{key:\"getNonFormattedNumber\",value:function(){var t=this.state.nationalSignificantNumberMatchesInput;return this.getFullNumber(t?this.getNonFormattedNationalNumberWithPrefix():this.state.getNationalDigits())}},{key:\"getNonFormattedTemplate\",value:function(){var t=this.getNonFormattedNumber();if(t)return t.replace(/[\\+\\d]/g,l)}},{key:\"isCountryCallingCodeAmbiguous\",value:function(){var t=this.state.callingCode,d=this.metadata.getCountryCodesForCallingCode(t);return d&&d.length>1}},{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 $=new r.ZP(this.metadata.metadata);$.selectNumberingPlan(i);var o=$.numberingPlan.callingCode(),u=this.metadata.getCountryCodesForCallingCode(o);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 $t(t){return it.call(this,t,n.Z)}$t.prototype=Object.create(it.prototype,{}),$t.prototype.constructor=$t},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:()=>it});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<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function $(t){var d=s();return function(){var e,n=f(t);if(d){var r=f(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return function(t,d){if(d&&(\"object\"===a(d)||\"function\"==typeof d))return d;if(void 0!==d)throw new TypeError(\"Derived constructors may only return object or undefined\");return o(t)}(this,e)}}function o(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function u(t){var d=\"function\"==typeof Map?new Map:void 0;return u=function(t){if(null===t||(e=t,-1===Function.toString.call(e).indexOf(\"[native code]\")))return t;var e;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==d){if(d.has(t))return d.get(t);d.set(t,n)}function n(){return l(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},u(t)}function l(t,d,e){return l=s()?Reflect.construct:function(t,d,e){var n=[null];n.push.apply(n,d);var r=new(Function.bind.apply(t,n));return e&&c(r,e.prototype),r},l.apply(null,arguments)}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function c(t,d){return c=Object.setPrototypeOf||function(t,d){return t.__proto__=d,t},c(t,d)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}var h=function(t){!function(t,d){if(\"function\"!=typeof d&&null!==d)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(d&&d.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),d&&c(t,d)}(a,t);var d,e,n,r=$(a);function a(t){var d;return function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,a),d=r.call(this,t),Object.setPrototypeOf(o(d),a.prototype),d.name=d.constructor.name,d}return d=a,e&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),d}(u(Error)),g=e(2581),m=function(t){return\"([\".concat(r.xc,\"]{1,\").concat(t,\"})\")};function y(t){var d=\"[  \\\\t,]*\",e=\"[:\\\\.．]?[  \\\\t,-]*\",n=\"#?\",r=\"[  \\\\t]*\";return\";ext=\"+m(\"20\")+\"|\"+(d+\"(?:e?xt(?:ensi(?:ó?|ó))?n?|ｅ?ｘｔｎ?|доб|anexo)\"+e+m(\"20\")+n)+\"|\"+(d+\"(?:[xｘ#＃~～]|int|ｉｎｔ)\"+e+m(\"9\")+n)+\"|\"+(\"[- ]+\"+m(\"6\")+\"#\")+\"|\"+(r+\"(?:,{2}|;)\"+e+m(\"15\")+n)+\"|\"+(r+\"(?:,)+\"+e+m(\"9\")+n)}var p=\"[\"+r.xc+\"]{\"+r.ex+\"}\",v=\"[\"+r.xy+\"]{0,1}(?:[\"+r.uv+\"]*[\"+r.xc+\"]){3,}[\"+r.uv+r.xc+\"]*\",b=new RegExp(\"^[\"+r.xy+\"]{0,1}(?:[\"+r.uv+\"]*[\"+r.xc+\"]){1,2}$\",\"i\"),C=v+\"(?:\"+y()+\")?\",N=new RegExp(\"^\"+p+\"$|^\"+C+\"$\",\"i\");var P=new RegExp(\"(?:\"+y()+\")$\",\"i\");var x=e(9233);function S(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 O(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 O(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 O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function w(t){for(var d,e=\"\",n=S(t.split(\"\"));!(d=n()).done;){e+=I(d.value,e)||\"\"}return e}function I(t,d){if(\"+\"===t){if(d)return;return\"+\"}return(0,x.xh)(t)}var E=e(3499),A=e(7520),T=e(1316),M=e(3661),F=e(7428),k=e(2691),R=\"+\",D=\"([\"+r.xc+\"]|[\\\\-\\\\.\\\\(\\\\)]?)\",L=\"^\\\\\"+R+D+\"*[\"+r.xc+\"]\"+D+\"*$\",Z=new RegExp(L,\"g\"),j=r.xc,G=new RegExp(\"^(\"+(\"[\"+j+\"]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.)*\"+(\"[a-zA-Z]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.?$\",\"g\"),B=\"tel:\",_=\";phone-context=\",U=\";isub=\";function K(t,d){var e,n=d.extractFormattedPhoneNumber,r=function(t){var d=t.indexOf(_);if(d<0)return null;var e=d+_.length;if(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&&(Z.test(t)||G.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;r<n.length;){if(n[r])return{number:e,ext:n[r]};r++}}(n);if(a.ext)return a;return{number:n}}(t,d.v2,d.extract),a=n.number,i=n.ext,$=n.error;if(!a){if(d.v2){if(\"TOO_SHORT\"===$)throw new h(\"TOO_SHORT\");throw new h(\"NOT_A_NUMBER\")}return{}}var o=function(t,d,e,n){var r,a=(0,M.Z)(w(t),d,e,n.metadata),i=a.countryCallingCodeSource,$=a.countryCallingCode,o=a.number;if($)n.selectNumberingPlan($);else{if(!o||!d&&!e)return{};n.selectNumberingPlan(d,e),d?r=d:Y&&n.isNonGeographicCallingCode(e)&&(r=\"001\"),$=e||(0,g.Gg)(d,n.metadata)}if(!o)return{countryCallingCodeSource:i,countryCallingCode:$};var u=(0,F.Z)(w(o),n),l=u.nationalNumber,s=u.carrierCode,c=(0,k.Z)($,{nationalNumber:l,defaultCountry:d,metadata:n});c&&(r=c,\"001\"===c||n.country(r));return{country:r,countryCallingCode:$,countryCallingCodeSource:i,nationalNumber:l,carrierCode:s}}(a,d.defaultCountry,d.defaultCallingCode,e),u=o.country,l=o.nationalNumber,s=o.countryCallingCode,c=o.countryCallingCodeSource,f=o.carrierCode;if(!e.hasSelectedNumberingPlan()){if(d.v2)throw new h(\"INVALID_COUNTRY\");return{}}if(!l||l.length<r.ex){if(d.v2)throw new h(\"TOO_SHORT\");return{}}if(l.length>r.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;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?X(Object(e),!0).forEach((function(d){q(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):X(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function q(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var z=e(3398);function tt(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 dt(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,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);e<d;e++)n[e]=t[e];return n}function rt(t){var d,e,n,r=et(Array.prototype.slice.call(t),4),a=r[0],i=r[1],$=r[2],o=r[3];if(\"string\"!=typeof a)throw new TypeError(\"A text for parsing must be a string.\");if(d=a,i&&\"string\"!=typeof i){if(!(0,z.Z)(i))throw new Error(\"Invalid second argument: \".concat(i));$?(e=i,n=$):n=i}else o?(e=$,n=o):(e=void 0,n=$),i&&(e=function(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?tt(Object(e),!0).forEach((function(d){dt(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):tt(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}({defaultCountry:i},e));return{text:d,options:e,metadata:n}}function at(){var t=rt(arguments);return function(t,d,e){return J(t,Q(Q({},d),{},{v2:!0}),e)}(t.text,t.options,t.metadata)}function it(){return(0,n.Z)(at,arguments)}},2364:(t,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)}}}]);\n//# sourceMappingURL=203.prod.js.map"
  },
  {
    "path": "umd/226.prod.js",
    "content": "\"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\":\"您沒有任何對話<br />¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置頂消息\",\"unpin_message\":\"取消置頂消息\",\"failed_to_init_audio\":\"初始化錄音失敗\",\"calls_conference\":\"電話會議\",\"password_reset_success\":\"密碼重置成功\",\"join_conference\":\"+ 加入通話\"}')}}]);"
  },
  {
    "path": "umd/246.prod.js",
    "content": "(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<f;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],u[c++]=t>>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;s<l;s+=a)o.push(u(e,s,s+a>l?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;a<s;++a)n[a]=o[a],r[o.charCodeAt(a)]=a;function l(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 u(e,t,r){for(var i,o,a=[],s=t;s<r;s+=3)i=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(n[(o=i)>>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<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function d(e){if(e>=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;o<s;o++)if(u(e,o)===u(t,-1===r?0:o-r)){if(-1===r&&(r=o),o-r+1===l)return r*a}else-1!==r&&(o-=o-r),r=-1}else for(n+l>s&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let r=0;r<l;r++)if(u(e,o+r)!==u(t,r)){n=!1;break}if(n)return o}return-1}function w(e,t,n,r){n=Number(n)||0;const i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;const o=t.length;let a;for(r>o/2&&(r=o/2),a=0;a<r;++a){const r=parseInt(t.substr(2*a,2),16);if(J(r))return a;e[n+a]=r}return a}function k(e,t,n,r){return X(W(t,e.length-n),e,n,r)}function T(e,t,n,r){return X(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function E(e,t,n,r){return X(G(t),e,n,r)}function C(e,t,n,r){return X(function(e,t){let n,r,i;const o=[];for(let a=0;a<e.length&&!((t-=2)<0);++a)n=e.charCodeAt(a),r=n>>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(;i<n;){const t=e[i];let o=null,a=t>239?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(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=I));return n}(r)}t.kMaxLength=a,l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(l.prototype,\"parent\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,\"offset\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return u(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return c(e),e<=0?s(e):void 0!==t?\"string\"==typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return f(e)},l.allocUnsafeSlow=function(e){return f(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),Y(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let i=0,o=Math.min(n,r);i<o;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let i=0;for(n=0;n<e.length;++n){let t=e[n];if(Y(t,Uint8Array))i+t.length>r.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;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?B(this,0,e):y.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e=\"\";const n=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,n).replace(/(.{2})/g,\"$1 \").trim(),this.length>n&&(e+=\" ... \"),\"<Buffer \"+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<s;++e)if(u[e]!==c[e]){o=u[e],a=c[e];break}return o<a?-1:a<o?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r=\"utf8\",n=this.length,t=0;else if(void 0===n&&\"string\"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=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;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function D(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function _(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let i=\"\";for(let r=t;r<n;++r)i+=K[e[r]];return i}function x(e,t,n){const r=e.slice(t,n);let i=\"\";for(let e=0;e<r.length-1;e+=2)i+=String.fromCharCode(r[e]+256*r[e+1]);return i}function P(e,t,n){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>n)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||t<o)throw new RangeError('\"value\" argument is out of bounds');if(n+r>e.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<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=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)<<BigInt(32))})),l.prototype.readBigUInt64BE=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*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)<<BigInt(32))+BigInt(i)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return i*=128,r>=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)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=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<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=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<n&&(i*=256);)this[t+o]=e/i&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=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=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<n&&(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.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<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=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<r-n&&(r=e.length-t+n);const i=r-n;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),i},l.prototype.fill=function(e,t,n,r){if(\"string\"==typeof e){if(\"string\"==typeof t?(r=t,t=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!l.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===r&&t<128||\"latin1\"===r)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError(\"Out of range index\");if(n<=t)return this;let i;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(i=t;i<n;++i)this[i]=e;else{const o=l.isBuffer(e)?e:l.from(e,r),a=o.length;if(0===a)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<n-t;++i)this[i+t]=o[i%a]}return this};const F={};function V(e,t,n){F[e]=class extends n{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function z(e){let t=\"\",n=e.length;const r=\"-\"===e[0]?1:0;for(;n>=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||e<t){const r=\"bigint\"==typeof t?\"n\":\"\";let i;throw i=o>3?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;a<r;++a){if(n=e.charCodeAt(a),n>55295&&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<r&&!(i+n>=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<l;n++)s.push(e.nextBuffer(r));return s}var u=[];if(t===i)for(n=0;n<l-1;n++){var c;r=0;do{r+=c=e.nextUInt8()}while(255===c);u.push(r)}else if(t===o)for(r=e.nextUIntV(),u.push(r),n=1;n<l-1;n++)r+=e.nextIntV(),u.push(r);for(n=0;n<l-1;n++)s.push(e.nextBuffer(u[n]));return s.push(e.nextBuffer()),s}(n,l),t}},1721:(e,t,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<r;i++){if(7===i&&o>=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;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):d(i,i.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if(\"function\"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(o){r.once&&e.removeEventListener(t,i),n(o)}))}}Object.defineProperty(o,\"defaultMaxListeners\",{enumerable:!0,get:function(){return a},set:function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");a=e}}),o.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i=\"error\"===e,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var a;if(t.length>0&&(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<u;++n)r(c[n],this,t)}return!0},o.prototype.addListener=function(e,t){return u(this,e,t,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(e,t){return u(this,e,t,!0)},o.prototype.once=function(e,t){return s(t),this.on(e,f(this,e,t)),this},o.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,f(this,e,t)),this},o.prototype.removeListener=function(e,t){var n,r,i,o,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(\"removeListener\",e,n.listener||t));else if(\"function\"!=typeof n){for(i=-1,o=n.length-1;o>=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<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",e,a||t)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)\"removeListener\"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=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<<s)-1,u=l>>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<<u)-1,f=c>>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<<i|s,u+=i;u>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<o;){var c=parseInt(n[i++],r);if(!(c>=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<r;)e[t++]=255&n,n/=256}function w(e,t,n){var r=t+8;for(n++;t<r;)e[t++]=255&-n^255,n/=256}c(\"Uint64BE\",!0,!0),c(\"Int64BE\",!0,!1),c(\"Uint64LE\",!1,!0),c(\"Int64LE\",!1,!1)}(\"string\"!=typeof t.nodeName?t:this||{})},4990:(e,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&&(this._state!==r.STATE_TAG||this.readTag())&&(this._state!==r.STATE_SIZE||this.readSize())&&(this._state!==r.STATE_CONTENT||this.readContent()););},e.prototype.getSchemaInfo=function(e){return this._schema[e]||{name:\"unknown\",level:-1,type:\"unknown\",description:\"unknown\"}},e.prototype.readTag=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._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.length<this._cursor+e.dataSize)return!1;var n=this._buffer.slice(this._cursor,this._cursor+e.dataSize);switch(this._buffer=this._buffer.slice(this._cursor+e.dataSize),e.data=n,e.type){case\"u\":e.value=n.readUIntBE(0,n.length);break;case\"i\":e.value=n.readIntBE(0,n.length);break;case\"f\":e.value=4===e.dataSize?n.readFloatBE(0):8===e.dataSize?n.readDoubleBE(0):(console.warn(\"cannot read \".concat(e.dataSize,\" octets float. failback to 0\")),0);break;case\"s\":e.value=n.toString(\"ascii\");break;case\"8\":e.value=n.toString(\"utf8\");break;case\"b\":e.value=n;break;case\"d\":e.value=(0,o.convertEBMLDateToJSDate)(new i.Int64BE(n).toNumber())}if(null===e.value)throw new Error(\"unknown tag type:\"+e.type);for(this._result.push(e),this._total+=e.dataSize,this._state=r.STATE_TAG,this._cursor=0,this._tag_stack.pop();this._tag_stack.length>0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total<a.dataEnd)break;if(\"m\"!==a.type)throw new Error(\"parent element is not master element\");t=Object.assign({},a,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0},e}();t.default=l},8031:(e,t,n)=>{\"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;n<t.length;n++){var r=t[n];if(this._schema[r].name===e)return new i.Buffer(r.toString(16),\"hex\")}return null},e.prototype.writeTag=function(e){var t=e.name,n=this.getSchemaInfo(t),i=e.data;if(null==n)throw new Error(\"No schema entry found for \"+t);var o=r.encodeTag(n,i);this._stack.length>0?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;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(3210),a=function(){function e(){}return e.readVint=function(t,n){void 0===n&&(n=0);var r=8-Math.floor(Math.log2(t[n]));if(r>8){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<r;a+=1){if(7===a&&o>=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<Math.pow(2,7*t)-1);t+=1);for(var n=o.Buffer.alloc(t),r=e,i=1;i<=t;i+=1){var a=255&r;n[t-i]=a,r-=a,r/=Math.pow(2,8)}return n[0]|=1<<8-t,n},e.concatenate=function(e,t){return e||t?e&&0!==e.byteLength?t&&0!==t.byteLength?o.Buffer.from(i(i([],e,!0),t,!0)):e:t:o.Buffer.from([])},e.readHexString=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=e.byteLength),Array.from(e.slice(t,n)).map((function(e){return Number(e).toString(16)})).reduce((function(e,t){return\"\".concat(e).concat(t.padStart(2,\"0\"))}),\"\")},e.readUtf8=function(e){try{return o.Buffer.from(e).toString(\"utf8\")}catch(e){return null}},e.readUnsigned=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return n.getUint8(0);case 2:return n.getUint16(0);case 4:return n.getUint32(0)}return t.byteLength<=6?t.reduce((function(e,t){return 256*e+t}),0):e.readHexString(t,0,t.byteLength)},e.readSigned=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 1:return t.getInt8(0);case 2:return t.getInt16(0);case 4:return t.getInt32(0);default:return NaN}},e.readFloat=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return t.getFloat32(0);case 8:return t.getFloat64(0);default:return NaN}},e.readDate=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return new Date(n.getUint8(0));case 2:return new Date(n.getUint16(0));case 4:return new Date(n.getUint32(0));case 8:return new Date(Number.parseInt(e.readHexString(t),16));default:return new Date(0)}},e.readDataFromTag=function(t,n){var i,o=t.type,a=t.name,s=t.track,l=t.discardable||!1,u=t.keyframe||!1,c=null;switch(o){case\"u\":i=e.readUnsigned(n);break;case\"f\":i=e.readFloat(n);break;case\"i\":i=e.readSigned(n);break;case\"s\":i=String.fromCharCode.apply(String,n);break;case\"8\":i=e.readUtf8(n);break;case\"d\":i=e.readDate(n)}if(\"SimpleBlock\"===a||\"Block\"===a){var f=0,h=e.readVint(n,f),p=h.length;f+=p,s=h.value,i=e.readSigned(n.subarray(f,f+2)),f+=2,\"SimpleBlock\"===a&&(u=Boolean(128&n[p+2]),l=Boolean(1&n[p+2])),f+=1,c=n.subarray(f)}return r(r({},t),{data:n,discardable:l,keyframe:u,payload:c,track:s,value:i})},e}();t.default=a},3210:(e,t,n)=>{\"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<t.length;r++){var i=t[r];if(i.name===e){if(\"m\"!==i.type)return void t.splice(r,1);if(i.isEnd){if(-1==n)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));return void t.splice(n,r-n+1)}n=r}}}function c(e,t){for(var n=[],r=-1,i=0;i<t.length;i++){var o=t[i];if(o.name===e){if(\"m\"!==o.type){n.push(t[i]);break}if(o.isEnd){if(-1==r)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));n=t.slice(r,i+1);break}r=i}}return n}function f(e){var t=new i.default;return e.reduce((function(e,n){return e.concat(t.encode([n]))}),[]).reduce((function(e,t){return e+t.byteLength}),0)}function h(e,n,r){var i=r.duration,o=r.clusterPtrs,a=r.cues,s=e.slice(0);if(\"number\"==typeof i){var l=!1;s.forEach((function(e){\"f\"===e.type&&\"Duration\"===e.name&&(l=!0,e.data=g(i,8))})),l||p(s,\"Info\",[{name:\"Duration\",type:\"f\",data:g(i,8)}])}Array.isArray(a)&&p(s,\"Cues\",function(e,t){var n=[];return e.forEach((function(e){var r=e.CueTrack,i=e.CueClusterPosition,o=e.CueTime;n.push({name:\"CuePoint\",type:\"m\",isEnd:!1}),n.push({name:\"CueTime\",type:\"u\",data:m(o)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!1}),n.push({name:\"CueTrack\",type:\"u\",data:m(r)}),n.push({name:\"CueClusterPosition\",type:\"u\",data:m(i+t)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!0}),n.push({name:\"CuePoint\",type:\"m\",isEnd:!0})})),n}(a,n));var u=[];return Array.isArray(o)&&(console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\"),u=function(e,n){var r=[];return e.forEach((function(e){r.push({name:\"Seek\",type:\"m\",isEnd:!1}),r.push({name:\"SeekID\",type:\"b\",data:new t.Buffer([31,67,182,117])}),r.push({name:\"SeekPosition\",type:\"u\",data:m(e+n)}),r.push({name:\"Seek\",type:\"m\",isEnd:!0})})),r}(o,n)),p(s,\"SeekHead\",u,!0),s}function p(e,t,n,r){void 0===r&&(r=!1);for(var i=-1,o=0;o<e.length;o++){var a=e[o];if(\"m\"===a.type&&a.name===t&&!1===a.isEnd){i=o;break}}i>=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;a<e.length;a++){var s=e[a];if(\"m\"===s.type&&\"Segment\"===s.name){if(r=e.slice(0,a),o=e.slice(a),s.unknownSize){o.shift();break}throw new Error(\"this metadata is not streaming webm file\")}}if(!(o[o.length-1].dataEnd>0))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]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1384);t.default=function(e){return r(this,void 0,void 0,(function(){var t,n,r,a,s,l,u,c,f,h,p;return i(this,(function(i){switch(i.label){case 0:if(!e)throw Error(\"call to fixWebmDuration requires a blob\");t=new o.Decoder,n=new o.Reader,r=e.stream(),a=r.getReader(),i.label=1;case 1:return[4,a.read()];case 2:return s=i.sent(),l=s.done,u=s.value,l?(n.stop(),[3,3]):((c=null==(c=t.decode(u))?void 0:c.filter((function(e){return\"unknown\"!==e.type}))).forEach((function(e){n.read(e)})),u=null,[3,1]);case 3:return f=o.tools.makeMetadataSeekable(n.metadatas,n.duration,n.cues),h=new Blob([f],{type:e.type}),p=e.slice(n.metadataSize),[2,new Blob([h,p],{type:e.type})]}}))}))}}}]);\n//# sourceMappingURL=246.prod.js.map"
  },
  {
    "path": "umd/252.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[252],{252:(e,t,i)=>{i.r(t),i.d(t,{default:()=>g});var s=i(7363),a=i.n(s),n=i(916),r=i(4861),o=i(8246),h=i.n(o),d=i(8405),l=i(3905),c=i(8962);const u=100,m=\"audio/webm\",p=[m,\"audio/mp4\",\"\"],v=(0,n.defineMessages)({icon_title_delete:{id:\"icon_title_delete\",defaultMessage:[{type:0,value:\"Delete recording\"}]},icon_title_pause:{id:\"icon_title_pause\",defaultMessage:[{type:0,value:\"Pause playback\"}]},icon_title_resume:{id:\"icon_title_resume\",defaultMessage:[{type:0,value:\"Resume playback\"}]},icon_title_send:{id:\"icon_title_send\",defaultMessage:[{type:0,value:\"Send message\"}]},failed_to_init_audio:{id:\"failed_to_init_audio\",defaultMessage:[{type:0,value:\"Failed to initialize audio recording\"}]}});class f extends a().PureComponent{constructor(e){super(e),this.state={enabled:!0,audioRecord:null,recording:!0,paused:!1,duration:\"0:00\",blobUrl:null,preview:null},this.visualize=this.visualize.bind(this),this.initMediaRecording=this.initMediaRecording.bind(this),this.initCanvas=this.initCanvas.bind(this),this.getRecording=this.getRecording.bind(this),this.cleanUp=this.cleanUp.bind(this),this.handleResume=this.handleResume.bind(this),this.handlePause=this.handlePause.bind(this),this.handleDelete=this.handleDelete.bind(this),this.handleDone=this.handleDone.bind(this),this.durationMillis=0,this.startedOn=null,this.viewBuffer=[],this.canvasRef=a().createRef(),this.recordingTimestamp=0}componentDidMount(){this.stream=null,this.mediaRecorder=null,this.audioContext=null,this.audioInput=null,this.analyser=null,this.audioChunks=[];try{navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.initMediaRecording,this.props.onError)}catch(e){this.props.onError(e)}}componentWillUnmount(){this.startedOn=null,this.stream&&this.cleanUp()}visualize(){this.initCanvas();const e=new Uint8Array(this.analyser.frequencyBinCount),t=this.canvasWidth,i=this.canvasHeight,s=t/10|0,a=u*s;this.canvasContext.lineWidth=6,this.canvasContext.strokeStyle=\"#BBBD\";let n=0,r=0,o=0;const h=d=>{if(!this.startedOn)return;window.requestAnimationFrame(h);const m=this.durationMillis+(Date.now()-this.startedOn);this.setState({duration:(0,l.nH)(m/1e3)}),m>c.Zf&&(this.startedOn=null,this.mediaRecorder.pause(),this.durationMillis+=Date.now()-this.startedOn,this.setState({enabled:!1,recording:!1,duration:(0,l.nH)(this.durationMillis/1e3)})),this.analyser.getByteTimeDomainData(e);let p=0;for(const t of e)p+=(t-127)**2;r+=Math.sqrt(p/e.length),o++;let v=m/u|0;const f=a>m?0:(m-u*v)/u*10;n!=v&&(n=v,this.viewBuffer.push(r/o),r=0,o=0,this.viewBuffer.length>s&&this.viewBuffer.shift()),this.canvasContext.clearRect(0,0,t,i),this.canvasContext.beginPath();for(let e=0;e<this.viewBuffer.length;e++){let t=10*e-f,s=Math.max(Math.min(this.viewBuffer[e]/64,.9)*i,1);this.canvasContext.moveTo(t,.5*(i-s)),this.canvasContext.lineTo(t,.5*(i+s))}this.canvasContext.stroke();const g=(new Date).getTime();g-this.recordingTimestamp>c.mc&&(this.props.onRecordingProgress(),this.recordingTimestamp=g)};h()}handlePause(e){e.preventDefault(),this.mediaRecorder.pause(),this.mediaRecorder.requestData(),this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null,this.setState({recording:!1})}handleResume(e){e.preventDefault(),this.state.enabled&&(this.startedOn=Date.now(),this.mediaRecorder.resume(),this.setState({recording:!0},this.visualize))}handleDelete(e){e.preventDefault(),this.durationMillis=0,this.startedOn=null,this.mediaRecorder.stop(),this.cleanUp(),this.setState({recording:!1})}handleDone(e){e.preventDefault(),this.setState({recording:!1}),this.startedOn&&(this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null),this.mediaRecorder&&this.mediaRecorder.stop()}initCanvas(){this.canvasRef.current.width=2*this.canvasRef.current.offsetWidth,this.canvasRef.current.height=2*this.canvasRef.current.offsetHeight,this.canvasContext=this.canvasRef.current.getContext(\"2d\"),this.canvasContext.lineCap=\"round\",this.canvasContext.translate(.5,.5),this.canvasWidth=this.canvasRef.current.width,this.canvasHeight=this.canvasRef.current.height}initMediaRecording(e){return this.stream=e,p.some((t=>!!MediaRecorder.isTypeSupported(t)&&(this.mediaRecorder=new MediaRecorder(e,{mimeType:t,audioBitsPerSecond:24e3}),!0))),this.mediaRecorder?(this.audioContext=new AudioContext,this.audioInput=this.audioContext.createMediaStreamSource(e),this.audioInput?(this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=256,this.audioInput.connect(this.analyser),this.mediaRecorder.onstop=e=>{this.durationMillis>c.rX?this.getRecording(this.mediaRecorder.mimeType).then((e=>this.props.onFinished(e.url,e.preview,this.durationMillis))):this.props.onDeleted(),this.cleanUp()},this.mediaRecorder.ondataavailable=e=>{e.data.size>0&&this.audioChunks.push(e.data),\"inactive\"!=this.mediaRecorder.state&&this.getRecording(this.mediaRecorder.mimeType).then((e=>{this.setState({blobUrl:e.url,preview:e.preview})}))},this.durationMillis=0,this.startedOn=Date.now(),this.mediaRecorder.start(),this.visualize(),this.props.onRecordingProgress(),void(this.recordingTimestamp=this.startedOn)):(console.warn(\"createMediaStreamSource returned null: audio input unavailable\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))):(console.warn(\"MediaRecorder failed to initialize: no supported audio formats\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))}getRecording(e){e=e||m;let t=new Blob(this.audioChunks,{type:e});return(e==m?h()(t,e):Promise.resolve(t)).then((e=>(t=e,e.arrayBuffer()))).then((e=>this.audioContext.decodeAudioData(e))).then((e=>this.createPreview(e))).then((e=>({url:window.URL.createObjectURL(t),preview:(0,d.JG)(e)})))}createPreview(e){const t=e.getChannelData(0),i=Math.min(t.length,96),s=t.length/i|0,a=Math.max(1,s/10|0);let n=[],r=-1;for(let e=0;e<i;e++){let i=0,o=0;for(let n=0;n<s;n+=a)i+=t[s*e+n]**2,o++;const h=Math.sqrt(i/o);n.push(h),r=Math.max(r,h)}return r>0&&(n=n.map((e=>100*e/r|0))),n}cleanUp(){this.audioInput&&this.audioInput.disconnect(),this.stream.getTracks().forEach((e=>e.stop()))}render(){const{formatMessage:e}=this.props.intl,t=\"material-icons \"+(this.state.enabled?\"red\":\"gray\");return a().createElement(\"div\",{className:\"audio\"},a().createElement(\"a\",{href:\"#\",onClick:this.handleDelete,title:e(v.icon_title_delete)},a().createElement(\"i\",{className:\"material-icons gray\"},\"delete_outline\")),this.state.recording?a().createElement(\"canvas\",{ref:this.canvasRef}):a().createElement(r.Z,{src:this.state.blobUrl,preview:this.state.preview,duration:this.durationMillis,short:!0}),a().createElement(\"div\",{className:\"duration\"},this.state.duration),this.state.recording?a().createElement(\"a\",{href:\"#\",onClick:this.handlePause,title:e(v.icon_title_pause)},a().createElement(\"i\",{className:\"material-icons\"},\"pause_circle_outline\")):a().createElement(\"a\",{href:\"#\",onClick:this.handleResume,title:e(v.icon_title_resume)},a().createElement(\"i\",{className:t},\"radio_button_checked\")),a().createElement(\"a\",{href:\"#\",onClick:this.handleDone,title:e(v.icon_title_send)},a().createElement(\"i\",{className:\"material-icons\"},\"send\")))}}const g=(0,n.injectIntl)(f)}}]);\n//# sourceMappingURL=252.prod.js.map"
  },
  {
    "path": "umd/264.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[264],{1264: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<br />¯∖_(ツ)_/¯\",\"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\",\"password_reset_success\":\"Password reset successfully\",\"scan_qr_code\":\"Scan QR Code\"}')}}]);"
  },
  {
    "path": "umd/271.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[271],{111:function(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\"}]')},4271:function(e,a,t){t.r(a),t.d(a,{default:function(){return C}});var l=t(1594),d=t.n(l),i=t(8181),o=t(8892),s=t(9418),c=t(635),n=t(4956);const r=(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 m extends d().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.L)(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?r.password_reset_email_sent:r.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?m.formatPhoneNumber(a):a,l=d().createElement(d().Fragment,null,d().createElement(\"div\",{className:\"panel-form-row\"},d().createElement(\"label\",{className:\"large\"},d().createElement(i.FormattedMessage,{id:\"change_email\",defaultMessage:[{type:0,value:\"Change email\"}]}))),d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small gray\"},d().createElement(i.FormattedMessage,{id:\"current_email\",defaultMessage:[{type:0,value:\"Current email\"}]})))),o=d().createElement(d().Fragment,null,d().createElement(\"div\",{className:\"panel-form-row\"},d().createElement(\"label\",{className:\"large\"},d().createElement(i.FormattedMessage,{id:\"change_phone\",defaultMessage:[{type:0,value:\"Change phone number\"}]}))),d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small gray\"},d().createElement(i.FormattedMessage,{id:\"current_phone\",defaultMessage:[{type:0,value:\"Current phone number\"}]})))),s=d().createElement(\"label\",{className:\"small gray\"},d().createElement(i.FormattedMessage,{id:\"new_email\",defaultMessage:[{type:0,value:\"New email\"}]})),c=d().createElement(d().Fragment,null,d().createElement(\"div\",{className:\"group\"},s),d().createElement(\"div\",{className:\"group\"},d().createElement(i.FormattedMessage,{id:\"email_prompt\",defaultMessage:[{type:0,value:\"Email, e.g. jdoe@example.com\"}]},e=>d().createElement(\"input\",{type:\"email\",placeholder:e,autoComplete:\"email\",value:this.state.email,onChange:this.handleEmailChange,required:!0})))),r=d().createElement(\"label\",{className:\"small gray\"},d().createElement(i.FormattedMessage,{id:\"new_phone_number\",defaultMessage:[{type:0,value:\"New phone number\"}]})),h=d().createElement(d().Fragment,null,d().createElement(\"div\",{className:\"group\"},r),d().createElement(\"div\",{className:\"panel-form-row\"},d().createElement(n.A,{autoFocus:!0,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))),u=d().createElement(d().Fragment,null,d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small gray\"},d().createElement(i.FormattedMessage,{id:\"enter_confirmation_code_prompt\",defaultMessage:[{type:0,value:\"Confirmation code\"}]}))),d().createElement(\"div\",{className:\"group\"},d().createElement(i.FormattedMessage,{id:\"numeric_confirmation_code_prompt\",defaultMessage:[{type:0,value:\"Numbers only\"}]},e=>d().createElement(\"input\",{type:\"text\",placeholder:e,maxLength:10,value:this.state.code,onChange:this.handleCodeChange,required:!0}))));return d().createElement(\"form\",{className:\"panel-form-column\",onSubmit:this.handleSubmit},e?\"email\"==this.props.method?s:\"tel\"==this.props.method?r:null:\"email\"==this.props.method?l:\"tel\"==this.props.method?o:null,d().createElement(\"div\",{className:\"panel-form-row\"},d().createElement(\"tt\",{className:\"quoted\"},t)),e?null:\"email\"==this.props.method?c:\"tel\"==this.props.method?h:null,e?u:null,d().createElement(\"div\",{className:\"dialog-buttons\"},d().createElement(\"button\",{className:\"secondary\",onClick:this.props.onCancel},d().createElement(i.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),d().createElement(\"button\",{className:\"primary\",type:\"submit\"},d().createElement(i.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}var h=(0,i.injectIntl)(m),u=t(6110),p=t(8589),E=t(9027);function g(e,a){return(0,p.W5)(e,a)}class C extends d().Component{constructor(e){super(e);const a=this.props.tinode.getMeTopic();this.state={fullName:g(a.public?a.public.fn:void 0,E.tS),description:g(a.public?a.public.note:void 0,E.lQ),avatar:(0,u.to)(a.public?a.public.photo:null),credentials:a.getCredentials()||[],credEdit:void 0,alias:((a.tags()||[]).find(e=>e.startsWith(\"alias:\"))||\"\").substring(6)}}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 d().createElement(h,{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,l)=>{if(![\"email\",\"tel\"].includes(t.meth))return;let i=t.val;if(\"tel\"==t.meth){const e=(0,o.L)(t.val);i=e?e.formatInternational():t.val}a.push(d().createElement(\"div\",{className:\"group quoted\",key:l},d().createElement(\"tt\",{className:\"clickable\",onClick:e=>{e.preventDefault(),this.setState({credEdit:t})}},i),d().createElement(\"span\",null,\" \",t.done?null:d().createElement(\"i\",{className:\"material-icons\"},\"pending\"),\" \",!t.done||e[t.meth]>1||this.props.reqCredMethod!=t.meth?d().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onCredDelete(t.meth,t.val)}},d().createElement(\"i\",{className:\"material-icons\"},\"delete\")):null)))}),a.length>0&&a.unshift(d().createElement(\"label\",{className:\"small\",key:\"title\"},d().createElement(i.FormattedMessage,{id:\"label_user_contacts\",defaultMessage:[{type:0,value:\"Contacts\"}]}))),d().createElement(\"div\",{className:\"scrollable-panel\"},d().createElement(\"div\",{className:\"panel-form-column\"},d().createElement(\"a\",{href:\"#\",className:\"flat-button float-right\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"general\")}},d().createElement(\"i\",{className:\"material-icons\"},\"edit\"),\" \",d().createElement(i.FormattedMessage,{id:\"button_edit\",defaultMessage:[{type:0,value:\"Edit\"}]})),d().createElement(\"center\",null,d().createElement(s.A,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.myUserId,title:this.state.fullName})),d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small\"},d().createElement(i.FormattedMessage,{id:\"label_your_name\",defaultMessage:[{type:0,value:\"Your name\"}]})),d().createElement(\"div\",{className:\"large ellipsized\"},this.state.fullName)),d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small\"},d().createElement(i.FormattedMessage,{id:\"label_user_id\",defaultMessage:[{type:0,value:\"ID:\"}]})),\" \",d().createElement(\"tt\",null,this.props.myUserId)),this.state.alias?d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small\"},d().createElement(i.FormattedMessage,{id:\"label_alias\",defaultMessage:[{type:0,value:\"Alias:\"}]})),\" \",d().createElement(\"tt\",null,\"@\",this.state.alias)):null,d().createElement(\"div\",{className:\"group\"},d().createElement(c.A,{trustedBadges:this.props.trustedBadges})),this.state.description?d().createElement(\"div\",{className:\"group\"},d().createElement(\"label\",{className:\"small\"},d().createElement(i.FormattedMessage,{id:\"label_description\",defaultMessage:[{type:0,value:\"Description\"}]})),d().createElement(\"div\",{className:\"quoted\"},this.state.description)):null),d().createElement(\"div\",{className:\"hr\"}),d().createElement(\"div\",{className:\"panel-form-column\"},d().createElement(\"div\",{className:\"group\"},a)),d().createElement(\"div\",{className:\"hr\"}),d().createElement(\"div\",{className:\"panel-form-column\"},d().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"acc_general\")}},d().createElement(\"i\",{className:\"material-icons\"},\"tune\"),\" \",d().createElement(i.FormattedMessage,{id:\"sidepanel_title_acc_general\",defaultMessage:[{type:0,value:\"General\"}]})),d().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"notif\")}},d().createElement(\"i\",{className:\"material-icons\"},\"notifications\"),\" \",d().createElement(i.FormattedMessage,{id:\"sidepanel_title_acc_notifications\",defaultMessage:[{type:0,value:\"Notifications\"}]})),d().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"security\")}},d().createElement(\"i\",{className:\"material-icons\"},\"security\"),\" \",d().createElement(i.FormattedMessage,{id:\"button_security\",defaultMessage:[{type:0,value:\"Security\"}]})),d().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"support\")}},d().createElement(\"i\",{className:\"material-icons\"},\"contact_support\"),\" \",d().createElement(i.FormattedMessage,{id:\"sidepanel_title_acc_support\",defaultMessage:[{type:0,value:\"Support\"}]}))))}}},4956:function(e,a,t){var l=t(1594),d=t.n(l),i=t(8181),o=t(8892),s=t(4724),c=t(6187),n=t(4701),r=t(111),m=t(8589);const h=(0,i.defineMessages)({mobile_number_required:{id:\"mobile_number_required\",defaultMessage:[{type:0,value:\"Mobile phone number required\"}]}});class u extends d().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 s.Q).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,o.L)(`+${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.a)(e,n.A);return t?t.formatInternational().substring(a.length+1).trim():\"123 0123\"}render(){return d().createElement(d().Fragment,null,d().createElement(\"span\",{className:\"dial-code\",onClick:this.showCountrySelector},d().createElement(\"span\",{className:\"country-flag\"},(0,m.lb)(this.state.countryCode),\" \"),\"+\",this.state.dialCode,\" \"),d().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}))}}a.A=(0,i.injectIntl)(u)}}]);\n//# sourceMappingURL=271.prod.js.map"
  },
  {
    "path": "umd/290.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[290],{1290:(d,e,a)=>{a.r(e),a.d(e,{default:()=>n});var c=a(7363),l=a.n(c),o=a(916),i=a(6670),t=a(3905);class s extends l().PureComponent{constructor(d){super(d),this.countries=[];const{formatDisplayName:e}=d.intl;i.forEach((d=>{d.dial.split(\",\").forEach((a=>{this.countries.push({dial:a.trim(),code:d.code,flag:(0,t.Yu)(d.code),name:e(d.code,{type:\"region\"})})}))})),this.countries.sort(((d,e)=>d.name.localeCompare(e.name)))}componentDidMount(){this.selectedRef&&this.selectedRef.scrollIntoView({block:\"center\",inline:\"nearest\"})}render(){const d=[],e=this.props.selected||\"US\";return this.countries.forEach(((a,c)=>{const o=a.code==e?\"selected \":\"\";d.push(l().createElement(\"li\",{className:o,key:c,ref:d=>{a.code==e&&(this.selectedRef=d)},onClick:d=>this.props.onSubmit(a.code,a.dial)},l().createElement(\"span\",{className:\"country-flag\"},a.flag),l().createElement(\"span\",{className:\"country\"},\" \",a.name),l().createElement(\"span\",{className:\"dial-code\"},\" +\",a.dial)))})),l().createElement(\"div\",{className:\"scrollable-panel\",style:{height:\"30rem\"}},l().createElement(\"ul\",{className:\"phone-country-selector\"},d))}}const n=(0,o.injectIntl)(s)},6670:d=>{d.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\"}]')}}]);\n//# sourceMappingURL=290.prod.js.map"
  },
  {
    "path": "umd/297.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[297],{6297:function(n){n.exports=JSON.parse('{\"action_block_contact\":\"Chặn liên hệ\",\"action_cancel\":\"hủy\",\"action_clear_messages\":\"Xóa tin nhắn\",\"action_delete_messages\":\"Xóa tin nhắn cho tất cả\",\"action_leave_chat\":\"Rời cuộc trò chuyện\",\"action_report_chat\":\"Báo cáo cuộc trò chuyện\",\"archived_contacts\":\"Liên hệ đã lưu trữ ({count})\",\"badge_danger\":\"Không đáng tin\",\"badge_owner\":\"chủ sở hữu\",\"badge_staff\":\"Được quản lý bởi nhân viên\",\"badge_verified\":\"Đã xác minh/chính thức\",\"badge_you\":\"bạn\",\"block_contact_warning\":\"Bạn có chắc muốn chặn liên hệ này?\",\"blocked_contacts_link\":\"Liên hệ bị chặn ({count})\",\"button_add_members\":\"Thêm thành viên\",\"button_cancel\":\"Hủy\",\"button_confirm\":\"Xác nhận\",\"button_create\":\"Tạo\",\"button_delete_account\":\"Xóa tài khoản\",\"button_edit\":\"Sửa\",\"button_logout\":\"Đăng xuất\",\"button_ok\":\"OK\",\"button_reset\":\"Đặt lại\",\"button_send_request\":\"Gửi yêu cầu\",\"button_sign_in\":\"Đăng nhập\",\"button_sign_up\":\"Đăng ký\",\"button_subscribe\":\"Theo dõi\",\"button_update\":\"Cập nhật\",\"cannot_initiate_file_upload\":\"Không thể bắt đầu tải tệp lên.\",\"channel\":\"kênh\",\"channel_prompt\":\"Đây là một kênh\",\"chat_invitation\":\"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?\",\"chat_invitation_accept\":\"Chấp nhận\",\"chat_invitation_block\":\"Chặn\",\"chat_invitation_ignore\":\"Bỏ qua\",\"clear_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.\",\"code_doesnot_match\":\"Mã không khớp\",\"contacts_not_found\":\"Bạn chưa có cuộc trò chuyện nào\\\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Không có liên hệ nào khớp với \\'\\'{query}\\'\\'\",\"credential_email_prompt\":\"Email đăng ký của bạn\",\"delete_account\":\"Xóa tài khoản\",\"delete_account_warning\":\"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.\",\"delete_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.\",\"download_action\":\"tải xuống\",\"drafty_attachment\":\"Tệp đính kèm\",\"drafty_form\":\"Biểu mẫu:\",\"drafty_image\":\"Hình ảnh\",\"email_dative\":\"email\",\"email_prompt\":\"Email, ví dụ jdoe@example.com\",\"enable_peers_messaging\":\"Bật\",\"enter_confirmation_code_prompt\":\"Mã xác nhận\",\"error_invalid_id\":\"ID không hợp lệ\",\"file_attachment_too_large\":\"Kích thước tệp {size} vượt quá giới hạn {limit}.\",\"forgot_password_link\":\"Quên mật khẩu?\",\"full_name_prompt\":\"Họ và tên, ví dụ John Doe\",\"granted_permissions\":\"Đã cấp\",\"group_has_no_members\":\"Không có thành viên\",\"group_user_id_prompt\":\"ID nhóm hoặc người dùng\",\"image_caption_prompt\":\"Chú thích hình ảnh\",\"invalid_content\":\"nội dung không hợp lệ\",\"invalid_security_token\":\"Mã bảo mật không hợp lệ\",\"label_client\":\"Client:\",\"label_content_type\":\"Kiểu nội dung:\",\"label_default_access_mode\":\"Chế độ truy cập mặc định:\",\"label_file_name\":\"Tên tệp:\",\"label_group_members\":\"Thành viên nhóm:\",\"label_incognito_mode\":\"Chế độ ẩn danh:\",\"label_message_sound\":\"Âm thanh tin nhắn:\",\"label_muting_topic\":\"Đã tắt:\",\"label_other_user\":\"Khác\",\"label_password\":\"Mật khẩu\",\"label_permissions\":\"Quyền:\",\"label_private\":\"Chỉ bạn nhìn thấy\",\"label_push_notifications\":\"Cảnh báo thông báo:\",\"label_push_notifications_disabled\":\"Cảnh báo thông báo (yêu cầu HTTPS):\",\"label_reset_password\":\"Gửi email đặt lại mật khẩu:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Máy chủ:\",\"label_server_address\":\"Địa chỉ máy chủ:\",\"label_server_to_use\":\"Máy chủ sử dụng:\",\"label_size\":\"Kích thước:\",\"label_topic_name\":\"Tên\",\"label_user_contacts\":\"Danh bạ\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Giao thức truyền tải:\",\"label_you\":\"Bạn:\",\"label_your_name\":\"Tên của bạn\",\"label_your_permissions\":\"Quyền của bạn:\",\"last_seen_timestamp\":\"Lần cuối hoạt động: {timestamp}\",\"leave_chat_warning\":\"Bạn có chắc muốn rời cuộc trò chuyện này?\",\"link_contact_us\":\"Liên hệ chúng tôi\",\"link_privacy_policy\":\"Chính sách quyền riêng tư\",\"link_terms_of_service\":\"Điều khoản dịch vụ\",\"login_prompt\":\"Đăng nhập\",\"menu_item_archive_topic\":\"Lưu trữ\",\"menu_item_block\":\"Chặn\",\"menu_item_clear_messages\":\"Xóa tin nhắn\",\"menu_item_clear_messages_for_all\":\"Xóa cho tất cả\",\"menu_item_delete\":\"Xóa\",\"menu_item_delete_for_all\":\"Xóa cho tất cả\",\"menu_item_delete_topic\":\"Xóa\",\"menu_item_edit_permissions\":\"Sửa quyền\",\"menu_item_info\":\"Thông tin\",\"menu_item_member_delete\":\"Xóa\",\"menu_item_mute\":\"Tắt thông báo\",\"menu_item_reply\":\"Trả lời\",\"menu_item_restore_topic\":\"Khôi phục\",\"menu_item_send_retry\":\"Thử lại\",\"menu_item_unblock\":\"Bỏ chặn\",\"menu_item_unmute\":\"Bật thông báo\",\"message_sending\":\"đang gửi...\",\"message_sending_failed\":\"thất bại\",\"messages_not_readable\":\"không có quyền xem tin nhắn\",\"messaging_disabled_prompt\":\"Tin nhắn bị tắt\",\"more_online_members\":\"+{overflow} nữa\",\"new_message_prompt\":\"Tin nhắn mới\",\"new_password_placeholder\":\"Nhập mật khẩu mới\",\"no_connection\":\"Không có kết nối\",\"no_contacts\":\"Bạn chưa có liên hệ nào :-(\",\"numeric_confirmation_code_prompt\":\"Chỉ số\",\"online_now\":\"đang online\",\"password_prompt\":\"Mật khẩu\",\"password_unchanged_prompt\":\"Không thay đổi\",\"peers_messaging_disabled\":\"Tin nhắn của người kia đã bị tắt.\",\"permission_admin\":\"Phê duyệt ({val})\",\"permission_delete\":\"Xóa ({val})\",\"permission_join\":\"Tham gia ({val})\",\"permission_owner\":\"Chủ sở hữu ({val})\",\"permission_pres\":\"Nhận thông báo ({val})\",\"permission_read\":\"Đọc ({val})\",\"permission_share\":\"Chia sẻ ({val})\",\"permission_write\":\"Ghi ({val})\",\"phone_dative\":\"điện thoại\",\"private_editing_placeholder\":\"Chỉ mình bạn nhìn thấy\",\"push_init_failed\":\"Khởi tạo thông báo đẩy thất bại\",\"reconnect_countdown\":\"Mất kết nối. Kết nối lại sau {seconds}…\",\"reconnect_now\":\"Thử ngay\",\"reload_update\":\"Tải lại\",\"report_chat_warning\":\"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?\",\"requested_permissions\":\"Đã yêu cầu\",\"save_attachment\":\"lưu\",\"search_for_contacts\":\"Dùng tìm kiếm để tìm liên hệ\",\"search_no_results\":\"Không có kết quả nào\",\"search_placeholder\":\"Liệt kê như email:alice@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Thông báo\",\"sidepanel_title_acc_support\":\"Hỗ trợ\",\"sidepanel_title_account_settings\":\"Cài đặt tài khoản\",\"sidepanel_title_archive\":\"Cuộc trò chuyện đã lưu trữ\",\"sidepanel_title_blocked\":\"Cuộc trò chuyện bị chặn\",\"sidepanel_title_cred\":\"Xác nhận thông tin\",\"sidepanel_title_login\":\"Đăng nhập\",\"sidepanel_title_newtpk\":\"Bắt đầu cuộc trò chuyện mới\",\"sidepanel_title_register\":\"Tạo tài khoản\",\"sidepanel_title_reset\":\"Đặt lại mật khẩu\",\"sidepanel_title_settings\":\"Cài đặt\",\"stay_logged_in\":\"Giữ tôi đăng nhập\",\"tabtitle_find_user\":\"tìm\",\"tabtitle_group_by_id\":\"theo id\",\"tabtitle_new_group\":\"nhóm mới\",\"tags_editor_no_tags\":\"Thêm vài thẻ\",\"tags_not_found\":\"Chưa có thẻ nào. Hãy thêm một vài thẻ.\",\"title_all_contacts\":\"Tất cả liên hệ\",\"title_group_members\":\"Thành viên nhóm\",\"title_manage_tags\":\"Quản lý\",\"title_not_found\":\"Không tìm thấy\",\"title_permissions\":\"Quyền\",\"title_tag_manager\":\"Thẻ (tìm kiếm & khám phá)\",\"topic_block_warning\":\"Bạn có chắc muốn chặn cuộc trò chuyện này?\",\"topic_delete_warning\":\"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.\",\"topic_name_editing_placeholder\":\"Tên nhóm tự do\",\"unnamed_topic\":\"Chưa đặt tên\",\"update_available\":\"Có bản cập nhật.\",\"upload_finishing\":\"đang hoàn tất...\",\"user_not_found\":\"Không tìm thấy\",\"description_editing_placeholder\":\"Mô tả tùy chọn\",\"label_description\":\"Mô tả\",\"button_security\":\"Bảo mật\",\"panel_title_crop\":\"Kéo để điều chỉnh\",\"panel_title_general\":\"Chung\",\"panel_title_members\":\"Thành viên\",\"panel_title_security\":\"Bảo mật\",\"panel_title_info\":\"Thông tin\",\"permissions_anonymous\":\"Ẩn danh\",\"permissions_authenticated\":\"Đã xác thực\",\"topic_delete\":\"Xóa cuộc trò chuyện\",\"permissions_user\":\"Quyền của người dùng\",\"password_reset_email_sent\":\"Email chứa mã bảo mật đã được gửi.\",\"label_unarchive_topic\":\"Đã lưu trữ:\",\"menu_item_forward\":\"Chuyển tiếp\",\"forward_to\":\"Chuyển tiếp đến\",\"forward_to_search_placeholder\":\"Tìm kiếm liên hệ\",\"label_new_password\":\"Mật khẩu mới\",\"drafty_unknown\":\"Không hỗ trợ\",\"calls_incoming\":\"Cuộc gọi đến\",\"calls_outgoing\":\"Cuộc gọi đi\",\"calls_you_label\":\"Bạn\",\"menu_item_video_call\":\"Gọi video\",\"already_in_call\":\"Bạn đang có một cuộc gọi đang diễn ra!\",\"call_cancelled\":\"đã hủy\",\"call_missed\":\"bỏ lỡ\",\"call_declined\":\"từ chối\",\"call_disconnected\":\"mất kết nối\",\"label_use_secure_connection\":\"Sử dụng kết nối bảo mật\",\"cred_confirmed_successfully\":\"Xác nhận thành công\",\"menu_item_edit\":\"Sửa\",\"editing_message\":\"Đang sửa\",\"message_edited_marker\":\", đã sửa\",\"icon_title_add_image\":\"Thêm hình ảnh\",\"icon_title_attach_file\":\"Đính kèm tệp\",\"icon_title_delete\":\"Xóa\",\"icon_title_pause\":\"Tạm dừng\",\"icon_title_play\":\"Phát\",\"icon_title_record_voice\":\"Ghi âm tin nhắn\",\"icon_title_resume\":\"Tiếp tục\",\"icon_title_send\":\"Gửi tin nhắn\",\"drag_file\":\"Kéo tệp vào đây\",\"drafty_video\":\"Video\",\"call_in_progress\":\"đang diễn ra\",\"menu_item_audio_call\":\"Gọi\",\"unrecognized_video_format\":\"Không nhận dạng được định dạng video này\",\"loading_note\":\"Đang tải...\",\"password_i_have_code\":\"Tôi có mã\",\"label_reset_password_tel\":\"Gửi SMS đặt lại mật khẩu:\",\"mobile_phone_number\":\"Số điện thoại di động\",\"password_reset_sms_sent\":\"Tin nhắn chứa mã bảo mật đã được gửi.\",\"mobile_number_required\":\"Cần số điện thoại di động\",\"current_email\":\"Email hiện tại\",\"current_phone\":\"Số điện thoại hiện tại\",\"new_email\":\"Email mới\",\"new_phone_number\":\"Số điện thoại mới\",\"change_email\":\"Đổi email\",\"change_phone\":\"Đổi số điện thoại\",\"call_busy\":\"bận\",\"failed_to_init_audio\":\"Không thể khởi tạo ghi âm\",\"password_reset_success\":\"Đặt lại mật khẩu thành công\",\"scan_qr_code\":\"Quét mã QR\",\"add_members_prompt\":\"thêm thành viên\",\"alias_already_taken\":\"(đã được sử dụng)\",\"alias_editing_placeholder\":\"Bí danh (tùy chọn)\",\"alias_invalid\":\"(không hợp lệ)\",\"button_restore\":\"Khôi phục mặc định\",\"cannot_parse_vcard\":\"Không thể đọc tệp vCard.\",\"chat_now\":\"Nhắn tin\",\"color_schema_dark\":\"Tối\",\"color_schema_light\":\"Sáng\",\"color_schema_system\":\"Mặc định hệ thống\",\"find_user\":\"Tìm kiếm\",\"incognito_mode_description\":\"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.\",\"label_alias\":\"Bí danh:\",\"label_alias_edit\":\"Bí danh\",\"label_blur_wallpaper\":\"Làm mờ:\",\"label_color_schema\":\"Giao diện:\",\"label_contact_card\":\"Danh thiếp\",\"label_contacts\":\"Danh bạ\",\"label_keyboard\":\"Bàn phím:\",\"label_member_count\":\"Thành viên:\",\"label_scan_id\":\"Quét mã của tôi:\",\"label_subscriber_count\":\"Người theo dõi:\",\"label_text_size\":\"Cỡ chữ:\",\"member_count\":\"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}\",\"message_deleted\":\"tin nhắn đã xóa\",\"message_not_found\":\"không tìm thấy tin nhắn\",\"pin_chat\":\"Ghim\",\"pin_message\":\"Ghim\",\"save_action\":\"Lưu\",\"select_country\":\"Chọn quốc gia\",\"self_topic_comment\":\"Ghi chú, tin nhắn, liên kết, tệp lưu lại\",\"self_topic_name\":\"Tin nhắn đã lưu\",\"send_command\":\"Gửi bằng {key}\",\"send_command_explained\":\"Nhấn Enter để xuống dòng\",\"send_plain\":\"Gửi bằng Enter\",\"send_plain_explained\":\"Nhấn Shift + Enter để xuống dòng\",\"sidepanel_title_acc_general\":\"Chung\",\"subscriber_count\":\"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}\",\"tabtitle_image\":\"hình ảnh\",\"tabtitle_pattern\":\"hoa văn\",\"text_copied\":\"Đã sao chép vào clipboard\",\"unknown_name\":\"Không rõ\",\"unpin_chat\":\"Bỏ ghim\",\"unpin_message\":\"Bỏ ghim\",\"wallpapers\":\"Hình nền\"}')}}]);"
  },
  {
    "path": "umd/311.prod.js",
    "content": "\"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(2610),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\"}]')}}]);\n//# sourceMappingURL=311.prod.js.map"
  },
  {
    "path": "umd/316.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[316],{111:function(d){d.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\"}]')},4316:function(d,e,c){c.r(e);var a=c(1594),l=c.n(a),o=c(8181),i=c(111),t=c(8589);class s extends l().PureComponent{constructor(d){super(d),this.countries=[];const{formatDisplayName:e}=d.intl;i.forEach(d=>{d.dial.split(\",\").forEach(c=>{this.countries.push({dial:c.trim(),code:d.code,flag:(0,t.lb)(d.code),name:e(d.code,{type:\"region\"})})})}),this.countries.sort((d,e)=>d.name.localeCompare(e.name))}componentDidMount(){this.selectedRef&&this.selectedRef.scrollIntoView({block:\"center\",inline:\"nearest\"})}render(){const d=[],e=this.props.selected||\"US\";return this.countries.forEach((c,a)=>{const o=c.code==e?\"selected \":\"\";d.push(l().createElement(\"li\",{className:o,key:a,ref:d=>{c.code==e&&(this.selectedRef=d)},onClick:d=>this.props.onSubmit(c.code,c.dial)},l().createElement(\"span\",{className:\"country-flag\"},c.flag),l().createElement(\"span\",{className:\"country\"},\" \",c.name),l().createElement(\"span\",{className:\"dial-code\"},\" +\",c.dial)))}),l().createElement(\"div\",{className:\"scrollable-panel\",style:{height:\"30rem\"}},l().createElement(\"ul\",{className:\"phone-country-selector\"},d))}}e.default=(0,o.injectIntl)(s)}}]);\n//# sourceMappingURL=316.prod.js.map"
  },
  {
    "path": "umd/327.prod.js",
    "content": "\"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\"}]')}}]);\n//# sourceMappingURL=327.prod.js.map"
  },
  {
    "path": "umd/330.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[330],{4701:function(t,e){e.A={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:\"0195123456\",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:\"34412345\",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:\"60123456\",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:\"2221234567\",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\"}},4724:function(t,e,n){n.d(e,{Q:function(){return bt}});var r=n(1211),i=n(3247),a=n(96);function o(t){return o=\"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},o(t)}function l(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,u(r.key),r)}}function u(t){var e=function(t,e){if(\"object\"!=o(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=o(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==o(e)?e:e+\"\"}var s=function(){return t=function t(e){var n=e.onCountryChange,r=e.onCallingCodeChange;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.onCountryChange=n,this.onCallingCodeChange=r},(e=[{key:\"reset\",value:function(t){var e=t.country,n=t.callingCode;this.international=!1,this.missingPlus=!1,this.IDDPrefix=void 0,this.callingCode=void 0,this.digits=\"\",this.resetNationalSignificantNumber(),this.initCountryAndCallingCode(e,n)}},{key:\"resetNationalSignificantNumber\",value:function(){this.nationalSignificantNumber=this.getNationalDigits(),this.nationalSignificantNumberIsModified=!1,this.nationalPrefix=void 0,this.carrierCode=void 0,this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix=void 0}},{key:\"update\",value:function(t){for(var e=0,n=Object.keys(t);e<n.length;e++){var r=n[e];this[r]=t[r]}}},{key:\"initCountryAndCallingCode\",value:function(t,e){this.setCountry(t),this.setCallingCode(e)}},{key:\"setCountry\",value:function(t){this.country=t,this.onCountryChange(t)}},{key:\"setCallingCode\",value:function(t){this.callingCode=t,this.onCallingCodeChange(t,this.country)}},{key:\"startInternationalNumber\",value:function(t,e){this.international=!0,this.initCountryAndCallingCode(t,e)}},{key:\"appendDigits\",value:function(t){this.digits+=t}},{key:\"appendNationalSignificantNumberDigits\",value:function(t){this.nationalSignificantNumber+=t}},{key:\"getNationalDigits\",value:function(){return this.international?this.digits.slice((this.IDDPrefix?this.IDDPrefix.length:0)+(this.callingCode?this.callingCode.length:0)):this.digits}},{key:\"getDigitsWithoutInternationalPrefix\",value:function(){return this.international&&this.IDDPrefix?this.digits.slice(this.IDDPrefix.length):this.digits}}])&&l(t.prototype,e),n&&l(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}();function f(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if(\"string\"==typeof t)return c(t,e);var n={}.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(t,e):void 0}}(t))||e&&t&&\"number\"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}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 c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var h=\"x\",m=new RegExp(h);function g(t,e){if(e<1)return\"\";for(var n=\"\";e>1;)1&e&&(n+=t),e>>=1,t+=t;return n+t}function d(t,e){return\")\"===t[e]&&e++,function(t){var e=[],n=0;for(;n<t.length;)\"(\"===t[n]?e.push(n):\")\"===t[n]&&e.pop(),n++;var r=0,i=\"\";e.push(t.length);for(var a=0,o=e;a<o.length;a++){var l=o[a];i+=t.slice(r,l),r=l+1}return i}(t.slice(0,e))}var y=n(1786),p=n(3578),v=n(1528);function b(t,e,n){var r=n.metadata,i=n.shouldTryNationalPrefixFormattingRule,a=n.getSeparatorAfterNationalPrefix;if(new RegExp(\"^(?:\".concat(e.pattern(),\")$\")).test(t.nationalSignificantNumber))return function(t,e,n){var r=n.metadata,i=n.shouldTryNationalPrefixFormattingRule,a=n.getSeparatorAfterNationalPrefix;t.nationalSignificantNumber,t.international,t.nationalPrefix,t.carrierCode;if(i(e)){var o=N(t,e,{useNationalPrefixFormattingRule:!0,getSeparatorAfterNationalPrefix:a,metadata:r});if(o)return o}return N(t,e,{useNationalPrefixFormattingRule:!1,getSeparatorAfterNationalPrefix:a,metadata:r})}(t,e,{metadata:r,shouldTryNationalPrefixFormattingRule:i,getSeparatorAfterNationalPrefix:a})}function N(t,e,n){var r=n.metadata,i=n.useNationalPrefixFormattingRule,a=n.getSeparatorAfterNationalPrefix,o=(0,v.A)(t.nationalSignificantNumber,e,{carrierCode:t.carrierCode,useInternationalFormat:t.international,withNationalPrefix:i,metadata:r});if(i||(t.nationalPrefix?o=t.nationalPrefix+a(e)+o:t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix&&(o=t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix+\" \"+o)),function(t,e){return(0,p.Ay)(t)===e.getNationalDigits()}(o,t))return o}function C(t){return C=\"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},C(t)}function S(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,x(r.key),r)}}function x(t){var e=function(t,e){if(\"object\"!=C(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=C(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==C(e)?e:e+\"\"}var P=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)},(e=[{key:\"parse\",value:function(t){if(this.context=[{or:!0,instructions:[]}],this.parsePattern(t),1!==this.context.length)throw new Error(\"Non-finalized contexts left when pattern parse ended\");var e=this.context[0],n=e.branches,r=e.instructions;if(n)return{op:\"|\",args:n.concat([T(r)])};if(0===r.length)throw new Error(\"Pattern is required\");return 1===r.length?r[0]:r}},{key:\"startContext\",value:function(t){this.context.push(t)}},{key:\"endContext\",value:function(){this.context.pop()}},{key:\"getContext\",value:function(){return this.context[this.context.length-1]}},{key:\"parsePattern\",value:function(t){if(!t)throw new Error(\"Pattern is required\");var e=t.match(F);if(e){var n=e[1],r=t.slice(0,e.index),i=t.slice(e.index+n.length);switch(n){case\"(?:\":r&&this.parsePattern(r),this.startContext({or:!0,instructions:[],branches:[]});break;case\")\":if(!this.getContext().or)throw new Error('\")\" operator must be preceded by \"(?:\" operator');if(r&&this.parsePattern(r),0===this.getContext().instructions.length)throw new Error('No instructions found after \"|\" operator in an \"or\" group');var a=this.getContext().branches;a.push(T(this.getContext().instructions)),this.endContext(),this.getContext().instructions.push({op:\"|\",args:a});break;case\"|\":if(!this.getContext().or)throw new Error('\"|\" operator can only be used inside \"or\" groups');if(r&&this.parsePattern(r),!this.getContext().branches){if(1!==this.context.length)throw new Error('\"branches\" not found in an \"or\" group context');this.getContext().branches=[]}this.getContext().branches.push(T(this.getContext().instructions)),this.getContext().instructions=[];break;case\"[\":r&&this.parsePattern(r),this.startContext({oneOfSet:!0});break;case\"]\":if(!this.getContext().oneOfSet)throw new Error('\"]\" operator must be preceded by \"[\" operator');this.endContext(),this.getContext().instructions.push({op:\"[]\",args:w(r)});break;default:throw new Error(\"Unknown operator: \".concat(n))}i&&this.parsePattern(i)}else{if(A.test(t))throw new Error(\"Illegal characters found in a pattern: \".concat(t));this.getContext().instructions=this.getContext().instructions.concat(t.split(\"\"))}}}])&&S(t.prototype,e),n&&S(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}();function w(t){for(var e=[],n=0;n<t.length;){if(\"-\"===t[n]){if(0===n||n===t.length-1)throw new Error(\"Couldn't parse a one-of set pattern: \".concat(t));for(var r=t[n-1].charCodeAt(0)+1,i=t[n+1].charCodeAt(0)-1,a=r;a<=i;)e.push(String.fromCharCode(a)),a++}else e.push(t[n]);n++}return e}var A=/[\\(\\)\\[\\]\\?\\:\\|]/,F=new RegExp(\"(\\\\||\\\\(\\\\?\\\\:|\\\\)|\\\\[|\\\\])\");function T(t){return 1===t.length?t[0]:t}function I(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if(\"string\"==typeof t)return k(t,e);var n={}.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(t,e):void 0}}(t))||e&&t&&\"number\"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}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 k(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function E(t){return E=\"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},E(t)}function D(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,M(r.key),r)}}function M(t){var e=function(t,e){if(\"object\"!=E(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=E(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==E(e)?e:e+\"\"}var O=function(){return t=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.matchTree=(new P).parse(e)},e=[{key:\"match\",value:function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error(\"String is required\");var n=R(t.split(\"\"),this.matchTree,!0);if(n&&n.match&&delete n.matchedChars,!n||!n.overflow||e)return n}}],e&&D(t.prototype,e),n&&D(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}();function R(t,e,n){if(\"string\"==typeof e){var r=t.join(\"\");return 0===e.indexOf(r)?t.length===e.length?{match:!0,matchedChars:t}:{partialMatch:!0}:0===r.indexOf(e)?n&&t.length>e.length?{overflow:!0}:{match:!0,matchedChars:t.slice(0,e.length)}:void 0}if(Array.isArray(e)){for(var i=t.slice(),a=0;a<e.length;){var o=R(i,e[a],n&&a===e.length-1);if(!o)return;if(o.overflow)return o;if(!o.match){if(o.partialMatch)return{partialMatch:!0};throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(o,null,2)))}if(0===(i=i.slice(o.matchedChars.length)).length)return a===e.length-1?{match:!0,matchedChars:t}:{partialMatch:!0};a++}return n?{overflow:!0}:{match:!0,matchedChars:t.slice(0,t.length-i.length)}}switch(e.op){case\"|\":for(var l,u,s=I(e.args);!(u=s()).done;){var f=R(t,u.value,n);if(f){if(f.overflow)return f;if(f.match)return{match:!0,matchedChars:f.matchedChars};if(!f.partialMatch)throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(f,null,2)));l=!0}}return l?{partialMatch:!0}:void 0;case\"[]\":for(var c,h=I(e.args);!(c=h()).done;){var m=c.value;if(t[0]===m)return 1===t.length?{match:!0,matchedChars:t}:n?{overflow:!0}:{match:!0,matchedChars:[m]}}return;default:throw new Error(\"Unsupported instruction tree: \".concat(e))}}var j=n(6128),B=n(1135);function G(t){return G=\"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},G(t)}function L(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if(\"string\"==typeof t)return W(t,e);var n={}.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?W(t,e):void 0}}(t))||e&&t&&\"number\"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}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 W(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function U(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,K(r.key),r)}}function K(t){var e=function(t,e){if(\"object\"!=G(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=G(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==G(e)?e:e+\"\"}var V=g(\"9\",15),H=/[- ]/,Z=function(){return/\\[([^\\[\\]])*\\]/g},$=function(){return/\\d(?=[^,}][^,}])/g},J=new RegExp(\"[\"+j.uD+\"]*\\\\$1[\"+j.uD+\"]*(\\\\$\\\\d[\"+j.uD+\"]*)*$\"),Y=function(){return t=function t(e){e.state;var n=e.metadata;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=n,this.resetFormat()},(e=[{key:\"resetFormat\",value:function(){this.chosenFormat=void 0,this.template=void 0,this.nationalNumberTemplate=void 0,this.populatedNationalNumberTemplate=void 0,this.populatedNationalNumberTemplatePosition=-1}},{key:\"reset\",value:function(t,e){this.resetFormat(),t?(this.isNANP=\"1\"===t.callingCode(),this.matchingFormats=t.formats(),e.nationalSignificantNumber&&this.narrowDownMatchingFormats(e)):(this.isNANP=void 0,this.matchingFormats=[])}},{key:\"format\",value:function(t,e){var n,r,i,a=this;if(n=e.nationalSignificantNumber,r=e.country,i=this.metadata,\"IS_POSSIBLE\"===(0,y.A)(n,r,i))for(var o,l=L(this.matchingFormats);!(o=l()).done;){var u=o.value,s=b(e,u,{metadata:this.metadata,shouldTryNationalPrefixFormattingRule:function(t){return a.shouldTryNationalPrefixFormattingRule(t,{international:e.international,nationalPrefix:e.nationalPrefix})},getSeparatorAfterNationalPrefix:function(t){return a.getSeparatorAfterNationalPrefix(t)}});if(s)return this.resetFormat(),this.chosenFormat=u,this.setNationalNumberTemplate(s.replace(/\\d/g,h),e),this.populatedNationalNumberTemplate=s,this.populatedNationalNumberTemplatePosition=this.template.lastIndexOf(h),s}return this.formatNationalNumberWithNextDigits(t,e)}},{key:\"formatNationalNumberWithNextDigits\",value:function(t,e){var n=this.chosenFormat,r=this.chooseFormat(e);if(r)return r===n?this.formatNextNationalNumberDigits(t):this.formatNextNationalNumberDigits(e.getNationalDigits())}},{key:\"narrowDownMatchingFormats\",value:function(t){var e=this,n=t.nationalSignificantNumber,r=t.nationalPrefix,i=t.international,a=n,o=a.length-3;o<0&&(o=0),this.matchingFormats=this.matchingFormats.filter(function(t){return e.formatSuits(t,i,r)&&e.formatMatches(t,a,o)}),this.chosenFormat&&-1===this.matchingFormats.indexOf(this.chosenFormat)&&this.resetFormat()}},{key:\"formatSuits\",value:function(t,e,n){return!(n&&!t.usesNationalPrefix()&&!t.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!e&&!n&&t.nationalPrefixIsMandatoryWhenFormattingInNationalFormat())}},{key:\"formatMatches\",value:function(t,e,n){var r=t.leadingDigitsPatterns().length;if(0===r)return!0;n=Math.min(n,r-1);var i=t.leadingDigitsPatterns()[n];if(e.length<3)try{return void 0!==new O(i).match(e,{allowOverflow:!0})}catch(t){return console.error(t),!0}return new RegExp(\"^(\".concat(i,\")\")).test(e)}},{key:\"getFormatFormat\",value:function(t,e){return e?t.internationalFormat():t.format()}},{key:\"chooseFormat\",value:function(t){for(var e,n=this,r=function(){var r=e.value;return n.chosenFormat===r?0:J.test(n.getFormatFormat(r,t.international))?n.createTemplateForFormat(r,t)?(n.chosenFormat=r,0):(n.matchingFormats=n.matchingFormats.filter(function(t){return t!==r}),1):1},i=L(this.matchingFormats.slice());!(e=i()).done&&0!==r(););return this.chosenFormat||this.resetFormat(),this.chosenFormat}},{key:\"createTemplateForFormat\",value:function(t,e){if(!(t.pattern().indexOf(\"|\")>=0)){var n=this.getTemplateForFormat(t,e);return n?(this.setNationalNumberTemplate(n,e),!0):void 0}}},{key:\"getSeparatorAfterNationalPrefix\",value:function(t){return this.isNANP||t&&t.nationalPrefixFormattingRule()&&H.test(t.nationalPrefixFormattingRule())?\" \":\"\"}},{key:\"getInternationalPrefixBeforeCountryCallingCode\",value:function(t,e){var n=t.IDDPrefix,r=t.missingPlus;return n?e&&!1===e.spacing?n:n+\" \":r?\"\":\"+\"}},{key:\"getTemplate\",value:function(t){if(this.template){for(var e=-1,n=0,r=t.international?this.getInternationalPrefixBeforeCountryCallingCode(t,{spacing:!1}):\"\";n<r.length+t.getDigitsWithoutInternationalPrefix().length;)e=this.template.indexOf(h,e+1),n++;return d(this.template,e+1)}}},{key:\"setNationalNumberTemplate\",value:function(t,e){this.nationalNumberTemplate=t,this.populatedNationalNumberTemplate=t,this.populatedNationalNumberTemplatePosition=-1,e.international?this.template=this.getInternationalPrefixBeforeCountryCallingCode(e).replace(/[\\d\\+]/g,h)+g(h,e.callingCode.length)+\" \"+t:this.template=t}},{key:\"getTemplateForFormat\",value:function(t,e){var n=e.nationalSignificantNumber,r=e.international,i=e.nationalPrefix,a=e.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,o=t.pattern();o=o.replace(Z(),\"\\\\d\").replace($(),\"\\\\d\");var l=V.match(o)[0];if(!(n.length>l.length)){var u=new RegExp(\"^\"+o+\"$\"),s=n.replace(/\\d/g,\"9\");u.test(s)&&(l=s);var f,c=this.getFormatFormat(t,r);if(this.shouldTryNationalPrefixFormattingRule(t,{international:r,nationalPrefix:i})){var m=c.replace(v._,t.nationalPrefixFormattingRule());if((0,p.Ay)(t.nationalPrefixFormattingRule())===(i||\"\")+(0,p.Ay)(\"$1\")&&(c=m,f=!0,i))for(var d=i.length;d>0;)c=c.replace(/\\d/,h),d--}var y=l.replace(new RegExp(o),c).replace(new RegExp(\"9\",\"g\"),h);return f||(a?y=g(h,a.length)+\" \"+y:i&&(y=g(h,i.length)+this.getSeparatorAfterNationalPrefix(t)+y)),r&&(y=(0,B.A)(y)),y}}},{key:\"formatNextNationalNumberDigits\",value:function(t){var e=function(t,e,n){for(var r,i=f(n.split(\"\"));!(r=i()).done;){var a=r.value;if(t.slice(e+1).search(m)<0)return;e=t.search(m),t=t.replace(m,a)}return[t,e]}(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition,t);if(e)return this.populatedNationalNumberTemplate=e[0],this.populatedNationalNumberTemplatePosition=e[1],d(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition+1);this.resetFormat()}},{key:\"shouldTryNationalPrefixFormattingRule\",value:function(t,e){var n=e.international,r=e.nationalPrefix;if(t.nationalPrefixFormattingRule()){var i=t.usesNationalPrefix();if(i&&r||!i&&!n)return!0}}}])&&U(t.prototype,e),n&&U(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}(),_=n(9713),Q=n(283),X=n(1459),q=n(6890);function z(t){return z=\"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},z(t)}function tt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=n){var r,i,a,o,l=[],u=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(t,e)||function(t,e){if(t){if(\"string\"==typeof t)return et(t,e);var n={}.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?et(t,e):void 0}}(t,e)||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 et(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function nt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,rt(r.key),r)}}function rt(t){var e=function(t,e){if(\"object\"!=z(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=z(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==z(e)?e:e+\"\"}var it=\"[\"+j.uD+j.OA+\"]+\",at=new RegExp(\"^\"+it+\"$\",\"i\"),ot=\"(?:[\"+j.tz+\"][\"+j.uD+j.OA+\"]*|[\"+j.uD+j.OA+\"]+)\",lt=new RegExp(\"[^\"+j.uD+j.OA+\"]+.*$\"),ut=/[^\\d\\[\\]]/,st=function(){return t=function t(e){var n=e.defaultCountry,r=e.defaultCallingCode,i=e.metadata,a=e.onNationalSignificantNumberChange;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.defaultCountry=n,this.defaultCallingCode=r,this.metadata=i,this.onNationalSignificantNumberChange=a},(e=[{key:\"input\",value:function(t,e){var n,r=function(t){var e=function(t){var e=function(t){var e,n=t.search(ot);if(!(n<0))return\"+\"===(t=t.slice(n))[0]&&(e=!0,t=t.slice(1)),t=t.replace(lt,\"\"),e&&(t=\"+\"+t),t}(t)||\"\";return\"+\"===e[0]?[e.slice(1),!0]:[e]}(t),n=tt(e,2),r=n[0],i=n[1];return at.test(r)||(r=\"\"),[r,i]}(t),i=tt(r,2),a=i[0],o=i[1],l=(0,p.Ay)(a);return o&&(e.digits||(e.startInternationalNumber(void 0,void 0),l||(n=!0))),l&&this.inputDigits(l,e),{digits:l,justLeadingPlus:n}}},{key:\"inputDigits\",value:function(t,e){var n=e.digits,r=n.length<3&&n.length+t.length>=3;if(e.appendDigits(t),r&&this.extractIddPrefix(e),this.isWaitingForCountryCallingCode(e)){if(!this.extractCountryCallingCode(e))return}else e.appendNationalSignificantNumberDigits(t);e.international||this.hasExtractedNationalSignificantNumber||this.extractNationalSignificantNumber(e.getNationalDigits(),function(t){return e.update(t)})}},{key:\"isWaitingForCountryCallingCode\",value:function(t){var e=t.international,n=t.callingCode;return e&&!n}},{key:\"extractCountryCallingCode\",value:function(t){var e=(0,_.A)(\"+\"+t.getDigitsWithoutInternationalPrefix(),t.country,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),n=e.countryCallingCode,r=e.number;if(n)return t.setCallingCode(n),t.update({nationalSignificantNumber:r}),!0}},{key:\"reset\",value:function(t){if(t){this.hasSelectedNumberingPlan=!0;var e=t._nationalPrefixForParsing();this.couldPossiblyExtractAnotherNationalSignificantNumber=e&&ut.test(e)}else this.hasSelectedNumberingPlan=void 0,this.couldPossiblyExtractAnotherNationalSignificantNumber=void 0}},{key:\"extractNationalSignificantNumber\",value:function(t,e){if(this.hasSelectedNumberingPlan){var n=(0,X.A)(t,this.metadata),r=n.nationalPrefix,i=n.nationalNumber,a=n.carrierCode;if(i!==t)return this.onExtractedNationalNumber(r,a,i,t,e),!0}}},{key:\"extractAnotherNationalSignificantNumber\",value:function(t,e,n){if(!this.hasExtractedNationalSignificantNumber)return this.extractNationalSignificantNumber(t,n);if(this.couldPossiblyExtractAnotherNationalSignificantNumber){var r=(0,X.A)(t,this.metadata),i=r.nationalPrefix,a=r.nationalNumber,o=r.carrierCode;if(a!==e)return this.onExtractedNationalNumber(i,o,a,t,n),!0}}},{key:\"onExtractedNationalNumber\",value:function(t,e,n,r,i){var a,o=!1,l=r.lastIndexOf(n);if(l<0||l!==r.length-n.length)o=!0;else{var u=r.slice(0,l);u&&u!==t&&(a=u)}i({nationalPrefix:t,carrierCode:e,nationalSignificantNumber:n,nationalSignificantNumberIsModified:o,prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix:a}),this.hasExtractedNationalSignificantNumber=!0,this.onNationalSignificantNumberChange()}},{key:\"reExtractNationalSignificantNumber\",value:function(t){return!!this.extractAnotherNationalSignificantNumber(t.getNationalDigits(),t.nationalSignificantNumber,function(e){return t.update(e)})||(this.extractIddPrefix(t)||this.fixMissingPlus(t)?(this.extractCallingCodeAndNationalSignificantNumber(t),!0):void 0)}},{key:\"extractIddPrefix\",value:function(t){var e=t.international,n=t.IDDPrefix,r=t.digits;if(t.nationalSignificantNumber,!e&&!n){var i=(0,q.A)(r,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata);return void 0!==i&&i!==r?(t.update({IDDPrefix:r.slice(0,r.length-i.length)}),this.startInternationalNumber(t,{country:void 0,callingCode:void 0}),!0):void 0}}},{key:\"fixMissingPlus\",value:function(t){if(!t.international){var e=(0,Q.A)(t.digits,t.country,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata).countryCallingCode;if(e)return t.update({missingPlus:!0}),this.startInternationalNumber(t,{country:t.country,callingCode:e}),!0}}},{key:\"startInternationalNumber\",value:function(t,e){var n=e.country,r=e.callingCode;t.startInternationalNumber(n,r),t.nationalSignificantNumber&&(t.resetNationalSignificantNumber(),this.onNationalSignificantNumberChange(),this.hasExtractedNationalSignificantNumber=void 0)}},{key:\"extractCallingCodeAndNationalSignificantNumber\",value:function(t){this.extractCountryCallingCode(t)&&this.extractNationalSignificantNumber(t.getNationalDigits(),function(e){return t.update(e)})}}])&&nt(t.prototype,e),n&&nt(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}();var ft=n(9495),ct=n(6111),ht=n(284);function mt(t){return mt=\"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},mt(t)}function gt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=n){var r,i,a,o,l=[],u=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(t,e)||function(t,e){if(t){if(\"string\"==typeof t)return dt(t,e);var n={}.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dt(t,e):void 0}}(t,e)||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 dt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function yt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,pt(r.key),r)}}function pt(t){var e=function(t,e){if(\"object\"!=mt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||\"default\");if(\"object\"!=mt(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==mt(e)?e:e+\"\"}var vt=function(){return t=function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=new i.Ay(n);var r=gt(this.getCountryAndCallingCode(e),2),a=r[0],o=r[1];this.defaultCountry=a,this.defaultCallingCode=o,this.reset()},(e=[{key:\"getCountryAndCallingCode\",value:function(t){var e,n;return t&&((0,ht.A)(t)?(e=t.defaultCountry,n=t.defaultCallingCode):e=t),e&&!this.metadata.hasCountry(e)&&(e=void 0),[e,n]}},{key:\"input\",value:function(t){var e=this.parser.input(t,this.state),n=e.digits;if(e.justLeadingPlus)this.formattedOutput=\"+\";else if(n){var r;if(this.determineTheCountryIfNeeded(),this.state.nationalSignificantNumber&&this.formatter.narrowDownMatchingFormats(this.state),this.metadata.hasSelectedNumberingPlan()&&(r=this.formatter.format(n,this.state)),void 0===r&&this.parser.reExtractNationalSignificantNumber(this.state)){this.determineTheCountryIfNeeded();var i=this.state.getNationalDigits();i&&(r=this.formatter.format(i,this.state))}this.formattedOutput=r?this.getFullNumber(r):this.getNonFormattedNumber()}return this.formattedOutput}},{key:\"reset\",value:function(){var t=this;return this.state=new s({onCountryChange:function(e){t.country=e},onCallingCodeChange:function(e,n){t.metadata.selectNumberingPlan(n,e),t.formatter.reset(t.metadata.numberingPlan,t.state),t.parser.reset(t.metadata.numberingPlan)}}),this.formatter=new Y({state:this.state,metadata:this.metadata}),this.parser=new st({defaultCountry:this.defaultCountry,defaultCallingCode:this.defaultCallingCode,metadata:this.metadata,state:this.state,onNationalSignificantNumberChange:function(){t.determineTheCountryIfNeeded(),t.formatter.reset(t.metadata.numberingPlan,t.state)}}),this.state.reset({country:this.defaultCountry,callingCode:this.defaultCallingCode}),this.formattedOutput=\"\",this}},{key:\"isInternational\",value:function(){return this.state.international}},{key:\"getCallingCode\",value:function(){if(this.isInternational())return this.state.callingCode}},{key:\"getCountryCallingCode\",value:function(){return this.getCallingCode()}},{key:\"getCountry\",value:function(){if(this.state.digits)return this._getCountry()}},{key:\"_getCountry\",value:function(){var t=this.state.country;return t}},{key:\"determineTheCountryIfNeeded\",value:function(){this.state.country&&!this.isCountryCallingCodeAmbiguous()||this.determineTheCountry()}},{key:\"getFullNumber\",value:function(t){var e=this;if(this.isInternational()){var n=function(t){return e.formatter.getInternationalPrefixBeforeCountryCallingCode(e.state,{spacing:!!t})+t},r=this.state.callingCode;return n(r?t?\"\".concat(r,\" \").concat(t):r:\"\".concat(this.state.getDigitsWithoutInternationalPrefix()))}return t}},{key:\"getNonFormattedNationalNumberWithPrefix\",value:function(){var t=this.state,e=t.nationalSignificantNumber,n=t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,r=t.nationalPrefix,i=e,a=n||r;return a&&(i=a+i),i}},{key:\"getNonFormattedNumber\",value:function(){var t=this.state.nationalSignificantNumberIsModified;return this.getFullNumber(t?this.state.getNationalDigits():this.getNonFormattedNationalNumberWithPrefix())}},{key:\"getNonFormattedTemplate\",value:function(){var t=this.getNonFormattedNumber();if(t)return t.replace(/[\\+\\d]/g,h)}},{key:\"isCountryCallingCodeAmbiguous\",value:function(){var t=this.state.callingCode,e=this.metadata.getCountryCodesForCallingCode(t);return e&&e.length>1}},{key:\"determineTheCountry\",value:function(){this.state.setCountry((0,ft.A)(this.isInternational()?this.state.callingCode:this.defaultCallingCode,{nationalNumber:this.state.nationalSignificantNumber,metadata:this.metadata}))}},{key:\"getNumberValue\",value:function(){var t=this.state,e=t.digits,n=t.callingCode,r=t.country,i=t.nationalSignificantNumber;if(e)return this.isInternational()?n?\"+\"+n+i:\"+\"+e:r||n?\"+\"+(r?this.metadata.countryCallingCode():n)+i:void 0}},{key:\"getNumber\",value:function(){var t=this.state,e=t.nationalSignificantNumber,n=t.carrierCode,r=t.callingCode,o=this._getCountry();if(e&&(o||r)){if(o&&o===this.defaultCountry){var l=new i.Ay(this.metadata.metadata);l.selectNumberingPlan(o);var u=l.numberingPlan.callingCode(),s=this.metadata.getCountryCodesForCallingCode(u);if(s.length>1){var f=(0,ct.A)(e,{countries:s,metadata:this.metadata.metadata});f&&(o=f)}}var c=new a.A(o||r,e,this.metadata.metadata);return n&&(c.carrierCode=n),c}}},{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()||\"\"}}])&&yt(t.prototype,e),n&&yt(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,e,n}();function bt(t){return vt.call(this,t,r.A)}bt.prototype=Object.create(vt.prototype,{}),bt.prototype.constructor=bt},6187:function(t,e,n){n.d(e,{a:function(){return o}});var r=n(5693),i=n(96);function a(t,e,n){if(e[t])return new i.A(t,e[t],n)}function o(){return(0,r.A)(a,arguments)}}}]);\n//# sourceMappingURL=330.prod.js.map"
  },
  {
    "path": "umd/336.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[336],{3336: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<br />¯∖_(ツ)_/¯\",\"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\",\"scan_qr_code\":\"Escanear código QR\"}')}}]);"
  },
  {
    "path": "umd/352.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[352],{2352:function(e,t,a){a.r(t);var s=a(1594),l=a.n(s),n=a(8181),i=a(1166),o=a(1485),r=a(6235);const d=(0,n.defineMessages)({delete_account:{id:\"delete_account\",defaultMessage:[{type:0,value:\"Delete account\"}]},delete_account_warning:{id:\"delete_account_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to delete your account? It cannot be undone.\"}]}});class c extends l().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let a=0;t.contacts(e=>{e.acs&&!e.acs.isJoiner()&&a++});const s=t.getDefaultAccess();this.state={auth:s?s.auth:null,anon:s?s.anon:null,showPermissionEditorFor:void 0,blockedCount:a},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdatePassword(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccountDesc(\"me\",void 0,void 0,t);let a={showPermissionEditorFor:void 0};a[this.state.showPermissionEditorFor]=e,this.setState(a)}handleCheckboxClick(e,t){this.props.onToggleIncognitoMode(t)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(d.delete_account),t(d.delete_account_warning),e=>this.props.onDeleteAccount(),null,!0,null)}render(){return l().createElement(l().Fragment,null,this.state.showPermissionEditorFor?l().createElement(r.A,{mode:this.state.editedPermissions,skip:\"O\",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):l().createElement(\"div\",{className:\"scrollable-panel\"},l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"label\",{className:\"small\"},l().createElement(n.FormattedMessage,{id:\"label_password\",defaultMessage:[{type:0,value:\"Password\"}]})),l().createElement(\"div\",null,l().createElement(n.FormattedMessage,{id:\"password_unchanged_prompt\",defaultMessage:[{type:0,value:\"Unchanged\"}]},e=>l().createElement(o.A,{placeholder:e,type:\"password\",onFinished:this.handlePasswordUpdate})))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{htmlFor:\"incognito-mode\"},l().createElement(n.FormattedMessage,{id:\"label_incognito_mode\",defaultMessage:[{type:0,value:\"Incognito mode:\"}]})),l().createElement(i.A,{name:\"incognito\",id:\"incognito-mode\",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"span\",{className:\"small gray\"},l().createElement(n.FormattedMessage,{id:\"incognito_mode_description\",defaultMessage:[{type:0,value:\"Hide your online status and typing indicators.\"}]}))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:e=>{e.preventDefault(),this.props.onLogout()}},l().createElement(\"i\",{className:\"material-icons\"},\"exit_to_app\"),\"  \",l().createElement(n.FormattedMessage,{id:\"button_logout\",defaultMessage:[{type:0,value:\"Logout\"}]})),l().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:e=>{this.handleDeleteAccount(e)}},l().createElement(\"i\",{className:\"material-icons\"},\"delete\"),\"  \",l().createElement(n.FormattedMessage,{id:\"button_delete_account\",defaultMessage:[{type:0,value:\"Delete account\"}]}))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"div\",null,l().createElement(\"label\",{className:\"small\"},l().createElement(n.FormattedMessage,{id:\"label_default_access_mode\",defaultMessage:[{type:0,value:\"Default access mode:\"}]}))),l().createElement(\"div\",{className:\"quoted\"},l().createElement(\"div\",null,\"Auth: \",l().createElement(\"tt\",{className:\"clickable\",onClick:this.handleLaunchPermissionsEditor.bind(this,\"auth\")},this.state.auth)),l().createElement(\"div\",null,\"Anon: \",l().createElement(\"tt\",{className:\"clickable\",onClick:this.handleLaunchPermissionsEditor.bind(this,\"anon\")},this.state.anon)))),this.state.blockedCount>0?l().createElement(l().Fragment,null,l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"i\",{className:\"material-icons\"},\"block\"),\" \",l().createElement(\"a\",{href:\"#\",className:\"gray\",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},l().createElement(n.FormattedMessage,{id:\"blocked_contacts_link\",defaultMessage:[{type:0,value:\"Blocked contacts (\"},{type:1,value:\"count\"},{type:0,value:\")\"}],values:{count:this.state.blockedCount}})))):null))}}t.default=(0,n.injectIntl)(c)},6235:function(e,t,a){var s=a(1594),l=a.n(s),n=a(8181),i=a(1166),o=a(6005),r=a(6110);const d=(0,n.defineMessages)({joiner:{id:\"permission_join\",defaultMessage:[{type:0,value:\"Join (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},reader:{id:\"permission_read\",defaultMessage:[{type:0,value:\"Read (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},writer:{id:\"permission_write\",defaultMessage:[{type:0,value:\"Write (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},preser:{id:\"permission_pres\",defaultMessage:[{type:0,value:\"Get notified (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},approver:{id:\"permission_admin\",defaultMessage:[{type:0,value:\"Approve (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},sharer:{id:\"permission_share\",defaultMessage:[{type:0,value:\"Share (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},deleter:{id:\"permission_delete\",defaultMessage:[{type:0,value:\"Delete (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},owner:{id:\"permission_owner\",defaultMessage:[{type:0,value:\"Owner (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]}});class c extends l().Component{constructor(e){super(e),this.state={mode:(e.mode||\"\").replace(\"N\",\"\")},this.handleChange=this.handleChange.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){let t=this.state.mode;-1==t.indexOf(e)?t+=e:t=t.replace(e,\"\"),this.setState({mode:t})}handleSubmit(){const e=(this.state.mode||\"N\").split(\"\").sort().join(\"\");e!==(this.props.mode||\"N\").split(\"\").sort().join(\"\")?this.props.onSubmit(e):this.props.onCancel()}handleCancel(){this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t=\"JRWPASDO\",a={J:e(d.joiner,{val:\"J\"}),R:e(d.reader,{val:\"R\"}),W:e(d.writer,{val:\"W\"}),P:e(d.preser,{val:\"P\"}),A:e(d.approver,{val:\"A\"}),S:e(d.sharer,{val:\"S\"}),D:e(d.deleter,{val:\"D\"}),O:e(d.owner,{val:\"O\"})};let s=this.props.skip||\"\",c=this.state.mode,m=(this.props.compare||\"\").replace(\"N\",\"\"),h=[];for(let e=0;e<8;e++){let n=t.charAt(e);s.indexOf(n)>=0&&c.indexOf(n)<0||h.push(l().createElement(\"tr\",{key:n},l().createElement(\"td\",null,a[n]),l().createElement(\"td\",{className:\"checkbox\"},s.indexOf(n)<0?l().createElement(i.A,{name:n,checked:c.indexOf(n)>=0,onChange:this.handleChange}):l().createElement(i.A,{name:n,checked:c.indexOf(n)>=0})),this.props.compare?l().createElement(\"td\",{className:\"checkbox\"},l().createElement(i.A,{name:n,checked:m.indexOf(n)>=0})):null))}return l().createElement(\"div\",{className:\"panel-form-column\"},this.props.userTitle?l().createElement(\"ul\",{className:\"contact-box small\"},l().createElement(o.A,{tinode:this.props.tinode,item:this.props.item,title:this.props.userTitle,small:!0,avatar:(0,r.to)(this.props.userAvatar?this.props.userAvatar:null)})):null,l().createElement(\"label\",{className:\"small\"},l().createElement(n.FormattedMessage,{id:\"title_permissions\",defaultMessage:[{type:0,value:\"Permissions\"}]})),l().createElement(\"table\",{className:\"permission-editor\"},this.props.compare?l().createElement(\"thead\",null,l().createElement(\"tr\",null,l().createElement(\"th\",null),l().createElement(\"th\",null,this.props.modeTitle),l().createElement(\"th\",null,this.props.compareTitle))):null,l().createElement(\"tbody\",null,h)),l().createElement(\"br\",null),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:\"outline\",onClick:this.handleCancel},l().createElement(n.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),l().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},l().createElement(n.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}t.A=(0,n.injectIntl)(c)}}]);\n//# sourceMappingURL=352.prod.js.map"
  },
  {
    "path": "umd/365.prod.js",
    "content": "\"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),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(2610),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\"}]')}}]);\n//# sourceMappingURL=365.prod.js.map"
  },
  {
    "path": "umd/371.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[371],{6371:function(e,t,n){n.r(t);var i=n(1594),o=n.n(i),s=n(8181),r=n(1725),a=n(8589);const l=(0,s.defineMessages)({unrecognized_video_format:{id:\"unrecognized_video_format\",defaultMessage:[{type:0,value:\"Format of this video is not recognized\"}]}});class d extends o().PureComponent{constructor(e){super(e),this.videoRef=o().createRef(),this.handleSendVideo=this.handleSendVideo.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){document.addEventListener(\"keydown\",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener(\"keydown\",this.handleKeyDown)}handleKeyDown(e){this.props.onSendMessage||(e.preventDefault(),\"Escape\"===e.key&&this.props.onClose())}handleSendVideo(e){this.props.onClose();const t={width:this.videoRef.current.videoWidth,height:this.videoRef.current.videoHeight,duration:1e3*this.videoRef.current.duration|0,mime:this.props.content.mime,name:this.props.content.filename};if(0==t.width||0==t.height)return void this.props.onError(this.props.intl.formatMessage(l.unrecognized_video_format),\"err\");const n=document.createElement(\"canvas\");n.width=t.width,n.height=t.height;const i=n.getContext(\"2d\");i.drawImage(this.videoRef.current,0,0,n.width,n.height),i.canvas.toBlob(n=>this.props.onSendMessage(e,this.props.content.blob,n,t),\"image/jpeg\",.75)}render(){if(!this.props.content)return null;const e=this.props.content.width||\"-\",t=this.props.content.height||\"-\",n=this.props.onSendMessage?\"nodownload\":\"\",i=!this.props.onSendMessage;return o().createElement(\"div\",{id:\"image-preview\"},o().createElement(\"div\",{id:\"preview-caption-panel\"},o().createElement(\"span\",null,this.props.content.filename),o().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onClose()}},o().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))),o().createElement(\"div\",{id:\"image-preview-container\"},o().createElement(\"video\",{className:\"image-preview\",controls:!0,controlsList:n,disablePictureInPicture:!0,ref:this.videoRef,autoPlay:i,src:this.props.tinode.authorizeURL(this.props.content.url),poster:this.props.content.preview,alt:this.props.content.filename})),this.props.onSendMessage?o().createElement(r.A,{messagePrompt:\"add_image_caption\",acceptBlank:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendVideo,onError:this.props.onError}):o().createElement(\"div\",{id:\"image-preview-footer\"},o().createElement(\"div\",null,o().createElement(\"div\",null,o().createElement(\"b\",null,o().createElement(s.FormattedMessage,{id:\"label_file_name\",defaultMessage:[{type:0,value:\"File name:\"}]}))),o().createElement(\"div\",null,o().createElement(\"span\",{title:this.props.content.filename},this.props.content.filename))),o().createElement(\"div\",null,o().createElement(\"div\",null,o().createElement(\"b\",null,o().createElement(s.FormattedMessage,{id:\"label_content_type\",defaultMessage:[{type:0,value:\"Content type:\"}]}))),o().createElement(\"div\",null,this.props.content.type)),o().createElement(\"div\",null,o().createElement(\"div\",null,o().createElement(\"b\",null,o().createElement(s.FormattedMessage,{id:\"label_size\",defaultMessage:[{type:0,value:\"Size:\"}]}))),o().createElement(\"div\",null,e,\" × \",t,\" px; \",(0,a.lX)(this.props.content.size)))))}}t.default=(0,s.injectIntl)(d)}}]);\n//# sourceMappingURL=371.prod.js.map"
  },
  {
    "path": "umd/372.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[372],{7752:(e,d,a)=>{a.r(d),a.d(d,{default:()=>h});var t=a(6376),l=a.n(t),o=a(6648),i=a(8516),s=a(1636),c=a(5808);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.c.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.c,{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.c,{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)},8516:(e,d,a)=>{a.d(d,{c:()=>p});var t=a(6376),l=a.n(t),o=a(6648),i=a(9780),s=a(4880),c=a(428),r=a(6088),n=a(7770),h=a(1848);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.C).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._)(`+${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.M)(e,r.c);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.tQ)(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)},7770: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\"}]')}}]);\n//# sourceMappingURL=372.prod.js.map"
  },
  {
    "path": "umd/399.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[399],{3399:function(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\\\\n¯∖_(ツ)_/¯\",\"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\",\"password_reset_success\":\"Password reset successfully\",\"scan_qr_code\":\"Scan QR Code\",\"self_topic_comment\":\"Notes, messages, links, files saved for posterity\",\"self_topic_name\":\"Saved messages\",\"message_not_found\":\"message not found\",\"message_deleted\":\"message deleted\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(already taken)\",\"alias_invalid\":\"(invalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Select country\",\"text_copied\":\"Copied to clipboard\",\"color_schema_dark\":\"Dark\",\"color_schema_light\":\"Light\",\"color_schema_system\":\"System default\",\"label_color_schema\":\"Theme:\",\"label_text_size\":\"Text size:\",\"incognito_mode_description\":\"Hide your online status and typing indicators.\",\"send_command\":\"Send on {key}\",\"send_command_explained\":\"Press Enter for new line\",\"send_plain\":\"Send on Enter\",\"send_plain_explained\":\"Press Shift + Enter for new line\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Keyboard:\",\"pin_chat\":\"Pin\",\"unpin_chat\":\"Unpin\",\"subscriber_count\":\"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}\",\"label_member_count\":\"Members:\",\"label_subscriber_count\":\"Subscribers:\",\"member_count\":\"{count, plural, one {{count, number} member} other {{count, number} members}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"pattern\",\"button_restore\":\"Restore default\",\"wallpapers\":\"Wallpapers\",\"label_blur_wallpaper\":\"Blur:\",\"label_scan_id\":\"Scan my ID:\",\"unknown_name\":\"Unknown\",\"save_action\":\"Save\",\"cannot_parse_vcard\":\"Cannot parse vCard file.\",\"chat_now\":\"Chat\",\"find_user\":\"Find\",\"label_contact_card\":\"Contact Card\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"add members\"}')}}]);"
  },
  {
    "path": "umd/429.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[429],{1725:function(e,t,s){var i=s(1594),a=s.n(i),n=s(8181),l=s(4532),r=s(9027),o=s(6110),h=s(5791);const d=a().lazy(e=>Promise.all([s.e(537),s.e(0)]).then(s.bind(s,4e3))),p=(0,n.defineMessages)({messaging_disabled:{id:\"messaging_disabled_prompt\",defaultMessage:[{type:0,value:\"Messaging disabled\"}]},type_new_message:{id:\"new_message_prompt\",defaultMessage:[{type:0,value:\"New message\"}]},add_image_caption:{id:\"image_caption_prompt\",defaultMessage:[{type:0,value:\"Image caption\"}]},file_attachment_too_large:{id:\"file_attachment_too_large\",defaultMessage:[{type:0,value:\"The file size \"},{type:1,value:\"size\"},{type:0,value:\" exceeds the \"},{type:1,value:\"limit\"},{type:0,value:\" limit.\"}]},cannot_initiate_upload:{id:\"cannot_initiate_file_upload\",defaultMessage:[{type:0,value:\"Cannot initiate file upload.\"}]},icon_title_record_voice:{id:\"icon_title_record_voice\",defaultMessage:[{type:0,value:\"Record voice message\"}]},icon_title_attach_file:{id:\"icon_title_attach_file\",defaultMessage:[{type:0,value:\"Attach file\"}]},icon_title_add_image:{id:\"icon_title_add_image\",defaultMessage:[{type:0,value:\"Add image\"}]},icon_title_send:{id:\"icon_title_send\",defaultMessage:[{type:0,value:\"Send message\"}]}});class c extends a().PureComponent{constructor(e){super(e),this.state={quote:null,message:\"\",audioRec:!1,audioAvailable:!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)},this.keypressTimestamp=0,this.handlePasteEvent=this.handlePasteEvent.bind(this),this.handleAttachImage=this.handleAttachImage.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachAudio=this.handleAttachAudio.bind(this),this.handleSend=this.handleSend.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleMessageTyping=this.handleMessageTyping.bind(this),this.handleDropAttach=this.handleDropAttach.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.formatReply=this.formatReply.bind(this)}componentDidMount(){this.messageEditArea&&(this.messageEditArea.addEventListener(\"paste\",this.handlePasteEvent,!1),\"all\"==window.getComputedStyle(this.messageEditArea).getPropertyValue(\"transition-property\")&&this.messageEditArea.focus()),this.setState({quote:this.formatReply()})}componentWillUnmount(){this.messageEditArea&&this.messageEditArea.removeEventListener(\"paste\",this.handlePasteEvent,!1)}componentDidUpdate(e){if(this.messageEditArea&&(\"all\"==window.getComputedStyle(this.messageEditArea).getPropertyValue(\"transition-property\")&&this.messageEditArea.focus(),this.messageEditArea.style.height=\"0px\",this.messageEditArea.style.height=this.messageEditArea.scrollHeight+\"px\"),e.topicName!=this.props.topicName)this.setState({message:this.props.initMessage||\"\",audioRec:!1,quote:null});else if(e.initMessage!=this.props.initMessage){const e=this.props.initMessage||\"\";this.setState({message:e},t=>{this.messageEditArea.scrollTop=this.messageEditArea.scrollHeight,this.messageEditArea.setSelectionRange(e.length,e.length)})}e.reply!=this.props.reply&&this.setState({quote:this.formatReply()})}formatReply(){return this.props.reply?l.Drafty.format(this.props.reply.content,h.NV,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):null}handlePasteEvent(e){this.props.disabled||(0,o.iJ)(e,e=>{this.props.onAttachImage(e)},e=>{this.props.onAttachFile(e)},this.props.onError)&&e.preventDefault()}handleAttachImage(e){e.target.files&&e.target.files.length>0&&this.props.onAttachImage(e.target.files[0]),e.target.value=\"\"}handleAttachFile(e){e.target.files&&e.target.files.length>0&&this.props.onAttachFile(e.target.files[0]),e.target.value=\"\"}handleDropAttach(e){e&&e.length>0&&this.props.onAttachFile(e[0])}handleAttachAudio(e,t,s){this.setState({audioRec:!1}),this.props.onAttachAudio(e,t,s)}handleSend(e){e.preventDefault();const t=this.state.message.trim();(t||this.props.acceptBlank||this.props.noInput)&&(this.props.onSendMessage(t),this.setState({message:\"\"}))}handleKeyPress(e){if(this.state.audioRec)return e.preventDefault(),void e.stopPropagation();\"Enter\"===e.key&&(\"plain\"==this.props.sendOnEnter?e.shiftKey||(e.preventDefault(),e.stopPropagation(),this.handleSend(e)):(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.stopPropagation(),this.handleSend(e)))}handleMessageTyping(e){if(this.setState({message:e.target.value}),this.props.onKeyPress){const e=(new Date).getTime();e-this.keypressTimestamp>r.NR&&(this.props.onKeyPress(),this.keypressTimestamp=e)}}handleQuoteClick(e){if(e.preventDefault(),e.stopPropagation(),this.props.reply&&this.props.onQuoteClick){const e=this.props.reply.seq;this.props.onQuoteClick(e)}}render(){const{formatMessage:e}=this.props.intl,t=this.props.disabled?e(p.messaging_disabled):this.props.messagePrompt?e(p[this.props.messagePrompt]):e(p.type_new_message),s=this.props.reply&&this.props.reply.editing?\"check_circle\":\"send\",l=this.state.quote?a().createElement(\"div\",{id:\"reply-quote-preview\"},a().createElement(\"div\",{className:\"cancel\"},a().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onCancelReply()}},a().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))),this.state.quote):null,r=this.state.audioAvailable&&this.props.onAttachAudio;return a().createElement(\"div\",{id:\"send-message-wrapper\"},this.props.noInput?null:l,a().createElement(\"div\",{id:\"send-message-panel\"},this.props.disabled?a().createElement(\"div\",{id:\"writing-disabled\"},t):a().createElement(a().Fragment,null,this.props.onAttachFile&&!this.state.audioRec?a().createElement(a().Fragment,null,a().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.attachImage.click()},title:e(p.icon_title_add_image)},a().createElement(\"i\",{className:\"material-icons secondary\"},\"photo\")),a().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.attachFile.click()},title:e(p.icon_title_attach_file)},a().createElement(\"i\",{className:\"material-icons secondary\"},\"attach_file\"))):null,this.props.noInput?l||a().createElement(\"div\",{className:\"hr thin\"}):this.state.audioRec?a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(d,{onRecordingProgress:e=>this.props.onKeyPress(!0),onDeleted:e=>this.setState({audioRec:!1}),onFinished:this.handleAttachAudio})):a().createElement(\"textarea\",{id:\"send-message-input\",placeholder:t,value:this.state.message,onChange:this.handleMessageTyping,onKeyDown:this.handleKeyPress,ref:e=>{this.messageEditArea=e}}),this.state.message||!r?a().createElement(\"a\",{href:\"#\",onClick:this.handleSend,title:e(p.icon_title_send)},a().createElement(\"i\",{className:\"material-icons\"},s)):this.state.audioRec?null:a().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.setState({audioRec:!0})},title:e(p.icon_title_record_voice)},a().createElement(\"i\",{className:\"material-icons\"},\"mic\")),a().createElement(\"input\",{type:\"file\",ref:e=>{this.attachFile=e},onChange:this.handleAttachFile,style:{display:\"none\"}}),a().createElement(\"input\",{type:\"file\",ref:e=>{this.attachImage=e},accept:\"image/*, video/*\",onChange:this.handleAttachImage,style:{display:\"none\"}}))))}}t.A=(0,n.injectIntl)(c)},6429:function(e,t,s){s.r(t),s.d(t,{default:function(){return j}});var i=s(1594),a=s.n(i),n=s(8181),l=s(4532),r=s(9895),o=s(8589),h=s(3540);class d extends a().Component{constructor(e){super(e),this.state={downloader:null,progress:0},this.downloadFile=this.downloadFile.bind(this),this.handleCancel=this.handleCancel.bind(this)}downloadFile(e,t,s){if(!e)return void this.props.onError(\"Invalid download URL '\"+e+\"'\");const i=this.props.tinode.getLargeFileHelper();this.setState({downloader:i}),i.download(e,t,s,e=>this.setState({progress:e/this.props.size}),e=>this.props.onError(e,\"err\")).then(e=>this.setState({downloader:null,progress:0})).catch(e=>{e&&this.props.onError(\"Error downloading file: \"+e.message,\"err\"),this.setState({downloader:null,progress:0})})}handleCancel(){this.props.uploading?this.props.onCancelUpload():this.state.downloader&&this.state.downloader.cancel()}render(){let e=this.props.filename||\"file_attachment\";e.length>36&&(e=e.substr(0,16)+\"...\"+e.substr(-16));let t,s,i=this.props.size>0?a().createElement(\"span\",{className:\"small gray\"},\"(\",(0,o.lX)(this.props.size),\")\"):null;this.props.uploading||this.state.downloader||!(0,h.YO)(this.props.downloadUrl)?(t=(0,h.Jf)(this.props.downloadUrl),s=null):(t=\"#\",s=e=>{e.preventDefault(),this.downloadFile(this.props.downloadUrl,this.props.filename,this.props.mimetype)});const l=a().createElement(a().Fragment,null,a().createElement(\"i\",{className:\"material-icons\"},\"file_download\"),\" \",a().createElement(n.FormattedMessage,{id:\"save_attachment\",defaultMessage:[{type:0,value:\"save\"}]}));return a().createElement(\"div\",{className:\"attachment\"},a().createElement(\"div\",null,a().createElement(\"i\",{className:\"material-icons big gray\"},\"insert_drive_file\")),a().createElement(\"div\",{className:\"flex-column\"},a().createElement(\"div\",null,e,\" \",i),this.props.uploading||this.state.downloader?a().createElement(r.A,{progress:this.props.uploading?this.props.progress:this.state.progress,onCancel:this.handleCancel}):a().createElement(\"div\",null,t?a().createElement(\"a\",{href:t,download:this.props.filename,onClick:s},l):a().createElement(\"span\",{className:\"light-gray\"},l))))}}var p=s(6904);const c=(0,n.defineMessages)({message_sending:{id:\"message_sending\",defaultMessage:[{type:0,value:\"sending...\"}]},message_sending_failed:{id:\"message_sending_failed\",defaultMessage:[{type:0,value:\"failed\"}]},message_edited_marker:{id:\"message_edited_marker\",defaultMessage:[{type:0,value:\", edited\"}]}});class u extends a().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t;t=this.props.received<=l.Tinode.MESSAGE_STATUS_SENDING?e(c.message_sending):this.props.received==l.Tinode.MESSAGE_STATUS_FAILED||this.props.received==l.Tinode.MESSAGE_STATUS_FATAL?e(c.message_sending_failed):this.props.timestamp.toLocaleTimeString(this.props.intl.locale,{timeStyle:\"short\"});const s=(0,h.LO)(this.props.received),i=s?a().createElement(\"i\",{className:\"material-icons small \"+s.color},s.name):null,n=this.props.edited?e(c.message_edited_marker):null;return a().createElement(\"span\",{className:\"timestamp\"},t,n,\" \",i)}}var m=(0,n.injectIntl)(u),g=s(5791),f=s(7151);function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var i in s)({}).hasOwnProperty.call(s,i)&&(e[i]=s[i])}return e},v.apply(null,arguments)}class y extends a().PureComponent{constructor(e){super(e),this.state={progress:0},e.uploader&&(e.uploader.onProgress=this.handleProgress.bind(this)),this.handleExpandImage=this.handleExpandImage.bind(this),this.handlePlayVideo=this.handlePlayVideo.bind(this),this.handleFormButtonClick=this.handleFormButtonClick.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.handleDraftyClick=this.handleDraftyClick.bind(this),this.formatterContext={formatMessage:e.intl.formatMessage.bind(e.intl),viewportWidth:e.viewportWidth,authorizeURL:e.tinode.authorizeURL.bind(e.tinode),onHandleClick:this.handleDraftyClick}}handleDraftyClick=(e,t)=>{switch(t){case\"image\":this.handleExpandImage(e);break;case\"video\":this.handlePlayVideo(e);break;case\"form_button\":this.handleFormButtonClick(e);break;case\"quote\":this.handleQuoteClick(e);break;case\"contact_chat\":e.preventDefault();try{const t=new URL(e.target.dataset.val)?.pathname,s=t.split(\"/\").filter(Boolean);f.A.navigateTo(f.A.setUrlTopic(\"\",s.pop()||\"\"))}catch(e){console.error(\"Invalid URL:\",e)}break;case\"contact_find\":e.preventDefault();let s=f.A.setUrlSidePanel(window.location.hash,\"newtpk\");s=f.A.addUrlParam(s,\"q\",e.target.dataset.val),s=f.A.addUrlParam(s,\"tab\",\"find\"),f.A.navigateTo(s);break;default:console.info(\"Unhandled drafty action.\",t,e.target.dataset)}};handleExpandImage(e){e.preventDefault(),this.props.onExpandMedia({url:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,size:e.target.dataset.size,type:e.target.dataset.mime})}handlePlayVideo(e){e.preventDefault(),this.props.onExpandMedia({video:!0,url:e.target.dataset.src,preview:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,duration:e.target.dataset.duration,size:e.target.dataset.size,type:e.target.dataset.mime})}handleFormButtonClick(e){e.preventDefault();const t={seq:this.props.seq,resp:{}};e.target.dataset.name&&(t.resp[e.target.dataset.name]=e.target.dataset.val?e.target.dataset.val:void 0===e.target.dataset.val?1:\"\"+e.target.dataset.val),\"url\"==e.target.dataset.act&&(t.ref=(0,h.Jf)(e.target.dataset.ref)||\"about:blank\");const s=e.target.dataset.title||\"unknown\";this.props.onFormResponse(e.target.dataset.act,s,t)}handleContextClick(e){e.preventDefault(),e.stopPropagation();const t=[];if(this.props.received==l.Tinode.MESSAGE_STATUS_FAILED&&t.push(\"menu_item_send_retry\"),this.props.received>l.Tinode.MESSAGE_STATUS_FATAL){if(this.props.userIsWriter&&(t.push(\"menu_item_reply\"),!this.props.response)){let e=!1;l.Drafty.entities(this.props.content,(t,s,i)=>(e=[\"AU\",\"EX\",\"FM\",\"IM\",\"TC\",\"VC\",\"VD\"].includes(i),e)),e||l.Drafty.styles(this.props.content,t=>(e=[\"QQ\"].includes(t),e)),e||t.push(\"menu_item_edit\")}this.props.userIsAdmin&&t.push(this.props.pinned?\"menu_item_unpin\":\"menu_item_pin\")}t.push(\"menu_item_forward\"),this.props.showContextMenu({seq:this.props.seq,replace:this.props.edited?parseInt(this.props.edited.split(\":\")[1]):0,content:this.props.content,userFrom:this.props.userFrom,userName:this.props.userName,y:e.pageY,x:e.pageX,pickReply:this.props.pickReply,editMessage:this.props.editMessage,timestamp:this.props.timestamp},t)}handleProgress(e){this.setState({progress:e})}handleCancelUpload(){this.props.onCancelUpload(this.props.seq,this.props.uploader)}handleQuoteClick(e){e.preventDefault(),e.stopPropagation();const t=this.props.replyToSeq;t&&this.props.onQuoteClick(t)}render(){const e=this.props.sequence+\" \"+(this.props.response?\"left\":\"right\"),t=\"single\"==this.props.sequence||\"last\"==this.props.sequence?\"bubble tip\":\"bubble\",s=this.props.userAvatar||!0;let i=\"message-content\";const r=this.props.isGroup&&this.props.response&&(\"single\"==this.props.sequence||\"last\"==this.props.sequence);let o=this.props.content;const h=[];if(this.props.mimeType==l.Drafty.getContentType()&&l.Drafty.isValid(o)){l.Drafty.attachments(o,(e,t)=>{l.Drafty.isFormResponseType(e.mime)||h.push(a().createElement(d,{tinode:this.props.tinode,downloadUrl:l.Drafty.getDownloadUrl(e),filename:e.name,uploading:l.Drafty.isProcessing(e),mimetype:e.mime,size:l.Drafty.getEntitySize(e),progress:this.state.progress,onCancelUpload:this.handleCancelUpload,onError:this.props.onError,key:t}))},this);const e=l.Drafty.format(o,g.e3,this.formatterContext);o=a().createElement(a().Fragment,null,e)}else\"string\"==typeof o?new RegExp(\"^\\\\p{RGI_Emoji}{1,5}$\",\"v\").test(o||\"\")&&(i+=\" emoji-\"+(o||\"\").match(/(?:👨🏻‍❤️‍💋‍👨🏻|👨🏻‍❤️‍💋‍👨🏼|👨🏻‍❤️‍💋‍👨🏽|👨🏻‍❤️‍💋‍👨🏾|👨🏻‍❤️‍💋‍👨🏿|👨🏼‍❤️‍💋‍👨🏻|👨🏼‍❤️‍💋‍👨🏼|👨🏼‍❤️‍💋‍👨🏽|👨🏼‍❤️‍💋‍👨🏾|👨🏼‍❤️‍💋‍👨🏿|👨🏽‍❤️‍💋‍👨🏻|👨🏽‍❤️‍💋‍👨🏼|👨🏽‍❤️‍💋‍👨🏽|👨🏽‍❤️‍💋‍👨🏾|👨🏽‍❤️‍💋‍👨🏿|👨🏾‍❤️‍💋‍👨🏻|👨🏾‍❤️‍💋‍👨🏼|👨🏾‍❤️‍💋‍👨🏽|👨🏾‍❤️‍💋‍👨🏾|👨🏾‍❤️‍💋‍👨🏿|👨🏿‍❤️‍💋‍👨🏻|👨🏿‍❤️‍💋‍👨🏼|👨🏿‍❤️‍💋‍👨🏽|👨🏿‍❤️‍💋‍👨🏾|👨🏿‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👨🏻|👩🏻‍❤️‍💋‍👨🏼|👩🏻‍❤️‍💋‍👨🏽|👩🏻‍❤️‍💋‍👨🏾|👩🏻‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👩🏻|👩🏻‍❤️‍💋‍👩🏼|👩🏻‍❤️‍💋‍👩🏽|👩🏻‍❤️‍💋‍👩🏾|👩🏻‍❤️‍💋‍👩🏿|👩🏼‍❤️‍💋‍👨🏻|👩🏼‍❤️‍💋‍👨🏼|👩🏼‍❤️‍💋‍👨🏽|👩🏼‍❤️‍💋‍👨🏾|👩🏼‍❤️‍💋‍👨🏿|👩🏼‍❤️‍💋‍👩🏻|👩🏼‍❤️‍💋‍👩🏼|👩🏼‍❤️‍💋‍👩🏽|👩🏼‍❤️‍💋‍👩🏾|👩🏼‍❤️‍💋‍👩🏿|👩🏽‍❤️‍💋‍👨🏻|👩🏽‍❤️‍💋‍👨🏼|👩🏽‍❤️‍💋‍👨🏽|👩🏽‍❤️‍💋‍👨🏾|👩🏽‍❤️‍💋‍👨🏿|👩🏽‍❤️‍💋‍👩🏻|👩🏽‍❤️‍💋‍👩🏼|👩🏽‍❤️‍💋‍👩🏽|👩🏽‍❤️‍💋‍👩🏾|👩🏽‍❤️‍💋‍👩🏿|👩🏾‍❤️‍💋‍👨🏻|👩🏾‍❤️‍💋‍👨🏼|👩🏾‍❤️‍💋‍👨🏽|👩🏾‍❤️‍💋‍👨🏾|👩🏾‍❤️‍💋‍👨🏿|👩🏾‍❤️‍💋‍👩🏻|👩🏾‍❤️‍💋‍👩🏼|👩🏾‍❤️‍💋‍👩🏽|👩🏾‍❤️‍💋‍👩🏾|👩🏾‍❤️‍💋‍👩🏿|👩🏿‍❤️‍💋‍👨🏻|👩🏿‍❤️‍💋‍👨🏼|👩🏿‍❤️‍💋‍👨🏽|👩🏿‍❤️‍💋‍👨🏾|👩🏿‍❤️‍💋‍👨🏿|👩🏿‍❤️‍💋‍👩🏻|👩🏿‍❤️‍💋‍👩🏼|👩🏿‍❤️‍💋‍👩🏽|👩🏿‍❤️‍💋‍👩🏾|👩🏿‍❤️‍💋‍👩🏿|🧑🏻‍❤️‍💋‍🧑🏼|🧑🏻‍❤️‍💋‍🧑🏽|🧑🏻‍❤️‍💋‍🧑🏾|🧑🏻‍❤️‍💋‍🧑🏿|🧑🏼‍❤️‍💋‍🧑🏻|🧑🏼‍❤️‍💋‍🧑🏽|🧑🏼‍❤️‍💋‍🧑🏾|🧑🏼‍❤️‍💋‍🧑🏿|🧑🏽‍❤️‍💋‍🧑🏻|🧑🏽‍❤️‍💋‍🧑🏼|🧑🏽‍❤️‍💋‍🧑🏾|🧑🏽‍❤️‍💋‍🧑🏿|🧑🏾‍❤️‍💋‍🧑🏻|🧑🏾‍❤️‍💋‍🧑🏼|🧑🏾‍❤️‍💋‍🧑🏽|🧑🏾‍❤️‍💋‍🧑🏿|🧑🏿‍❤️‍💋‍🧑🏻|🧑🏿‍❤️‍💋‍🧑🏼|🧑🏿‍❤️‍💋‍🧑🏽|🧑🏿‍❤️‍💋‍🧑🏾|🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|👨🏻‍❤️‍👨🏻|👨🏻‍❤️‍👨🏼|👨🏻‍❤️‍👨🏽|👨🏻‍❤️‍👨🏾|👨🏻‍❤️‍👨🏿|👨🏻‍🐰‍👨🏼|👨🏻‍🐰‍👨🏽|👨🏻‍🐰‍👨🏾|👨🏻‍🐰‍👨🏿|👨🏻‍🤝‍👨🏼|👨🏻‍🤝‍👨🏽|👨🏻‍🤝‍👨🏾|👨🏻‍🤝‍👨🏿|👨🏻‍🫯‍👨🏼|👨🏻‍🫯‍👨🏽|👨🏻‍🫯‍👨🏾|👨🏻‍🫯‍👨🏿|👨🏼‍❤️‍👨🏻|👨🏼‍❤️‍👨🏼|👨🏼‍❤️‍👨🏽|👨🏼‍❤️‍👨🏾|👨🏼‍❤️‍👨🏿|👨🏼‍🐰‍👨🏻|👨🏼‍🐰‍👨🏽|👨🏼‍🐰‍👨🏾|👨🏼‍🐰‍👨🏿|👨🏼‍🤝‍👨🏻|👨🏼‍🤝‍👨🏽|👨🏼‍🤝‍👨🏾|👨🏼‍🤝‍👨🏿|👨🏼‍🫯‍👨🏻|👨🏼‍🫯‍👨🏽|👨🏼‍🫯‍👨🏾|👨🏼‍🫯‍👨🏿|👨🏽‍❤️‍👨🏻|👨🏽‍❤️‍👨🏼|👨🏽‍❤️‍👨🏽|👨🏽‍❤️‍👨🏾|👨🏽‍❤️‍👨🏿|👨🏽‍🐰‍👨🏻|👨🏽‍🐰‍👨🏼|👨🏽‍🐰‍👨🏾|👨🏽‍🐰‍👨🏿|👨🏽‍🤝‍👨🏻|👨🏽‍🤝‍👨🏼|👨🏽‍🤝‍👨🏾|👨🏽‍🤝‍👨🏿|👨🏽‍🫯‍👨🏻|👨🏽‍🫯‍👨🏼|👨🏽‍🫯‍👨🏾|👨🏽‍🫯‍👨🏿|👨🏾‍❤️‍👨🏻|👨🏾‍❤️‍👨🏼|👨🏾‍❤️‍👨🏽|👨🏾‍❤️‍👨🏾|👨🏾‍❤️‍👨🏿|👨🏾‍🐰‍👨🏻|👨🏾‍🐰‍👨🏼|👨🏾‍🐰‍👨🏽|👨🏾‍🐰‍👨🏿|👨🏾‍🤝‍👨🏻|👨🏾‍🤝‍👨🏼|👨🏾‍🤝‍👨🏽|👨🏾‍🤝‍👨🏿|👨🏾‍🫯‍👨🏻|👨🏾‍🫯‍👨🏼|👨🏾‍🫯‍👨🏽|👨🏾‍🫯‍👨🏿|👨🏿‍❤️‍👨🏻|👨🏿‍❤️‍👨🏼|👨🏿‍❤️‍👨🏽|👨🏿‍❤️‍👨🏾|👨🏿‍❤️‍👨🏿|👨🏿‍🐰‍👨🏻|👨🏿‍🐰‍👨🏼|👨🏿‍🐰‍👨🏽|👨🏿‍🐰‍👨🏾|👨🏿‍🤝‍👨🏻|👨🏿‍🤝‍👨🏼|👨🏿‍🤝‍👨🏽|👨🏿‍🤝‍👨🏾|👨🏿‍🫯‍👨🏻|👨🏿‍🫯‍👨🏼|👨🏿‍🫯‍👨🏽|👨🏿‍🫯‍👨🏾|👩🏻‍❤️‍👨🏻|👩🏻‍❤️‍👨🏼|👩🏻‍❤️‍👨🏽|👩🏻‍❤️‍👨🏾|👩🏻‍❤️‍👨🏿|👩🏻‍❤️‍👩🏻|👩🏻‍❤️‍👩🏼|👩🏻‍❤️‍👩🏽|👩🏻‍❤️‍👩🏾|👩🏻‍❤️‍👩🏿|👩🏻‍🐰‍👩🏼|👩🏻‍🐰‍👩🏽|👩🏻‍🐰‍👩🏾|👩🏻‍🐰‍👩🏿|👩🏻‍🤝‍👨🏼|👩🏻‍🤝‍👨🏽|👩🏻‍🤝‍👨🏾|👩🏻‍🤝‍👨🏿|👩🏻‍🤝‍👩🏼|👩🏻‍🤝‍👩🏽|👩🏻‍🤝‍👩🏾|👩🏻‍🤝‍👩🏿|👩🏻‍🫯‍👩🏼|👩🏻‍🫯‍👩🏽|👩🏻‍🫯‍👩🏾|👩🏻‍🫯‍👩🏿|👩🏼‍❤️‍👨🏻|👩🏼‍❤️‍👨🏼|👩🏼‍❤️‍👨🏽|👩🏼‍❤️‍👨🏾|👩🏼‍❤️‍👨🏿|👩🏼‍❤️‍👩🏻|👩🏼‍❤️‍👩🏼|👩🏼‍❤️‍👩🏽|👩🏼‍❤️‍👩🏾|👩🏼‍❤️‍👩🏿|👩🏼‍🐰‍👩🏻|👩🏼‍🐰‍👩🏽|👩🏼‍🐰‍👩🏾|👩🏼‍🐰‍👩🏿|👩🏼‍🤝‍👨🏻|👩🏼‍🤝‍👨🏽|👩🏼‍🤝‍👨🏾|👩🏼‍🤝‍👨🏿|👩🏼‍🤝‍👩🏻|👩🏼‍🤝‍👩🏽|👩🏼‍🤝‍👩🏾|👩🏼‍🤝‍👩🏿|👩🏼‍🫯‍👩🏻|👩🏼‍🫯‍👩🏽|👩🏼‍🫯‍👩🏾|👩🏼‍🫯‍👩🏿|👩🏽‍❤️‍👨🏻|👩🏽‍❤️‍👨🏼|👩🏽‍❤️‍👨🏽|👩🏽‍❤️‍👨🏾|👩🏽‍❤️‍👨🏿|👩🏽‍❤️‍👩🏻|👩🏽‍❤️‍👩🏼|👩🏽‍❤️‍👩🏽|👩🏽‍❤️‍👩🏾|👩🏽‍❤️‍👩🏿|👩🏽‍🐰‍👩🏻|👩🏽‍🐰‍👩🏼|👩🏽‍🐰‍👩🏾|👩🏽‍🐰‍👩🏿|👩🏽‍🤝‍👨🏻|👩🏽‍🤝‍👨🏼|👩🏽‍🤝‍👨🏾|👩🏽‍🤝‍👨🏿|👩🏽‍🤝‍👩🏻|👩🏽‍🤝‍👩🏼|👩🏽‍🤝‍👩🏾|👩🏽‍🤝‍👩🏿|👩🏽‍🫯‍👩🏻|👩🏽‍🫯‍👩🏼|👩🏽‍🫯‍👩🏾|👩🏽‍🫯‍👩🏿|👩🏾‍❤️‍👨🏻|👩🏾‍❤️‍👨🏼|👩🏾‍❤️‍👨🏽|👩🏾‍❤️‍👨🏾|👩🏾‍❤️‍👨🏿|👩🏾‍❤️‍👩🏻|👩🏾‍❤️‍👩🏼|👩🏾‍❤️‍👩🏽|👩🏾‍❤️‍👩🏾|👩🏾‍❤️‍👩🏿|👩🏾‍🐰‍👩🏻|👩🏾‍🐰‍👩🏼|👩🏾‍🐰‍👩🏽|👩🏾‍🐰‍👩🏿|👩🏾‍🤝‍👨🏻|👩🏾‍🤝‍👨🏼|👩🏾‍🤝‍👨🏽|👩🏾‍🤝‍👨🏿|👩🏾‍🤝‍👩🏻|👩🏾‍🤝‍👩🏼|👩🏾‍🤝‍👩🏽|👩🏾‍🤝‍👩🏿|👩🏾‍🫯‍👩🏻|👩🏾‍🫯‍👩🏼|👩🏾‍🫯‍👩🏽|👩🏾‍🫯‍👩🏿|👩🏿‍❤️‍👨🏻|👩🏿‍❤️‍👨🏼|👩🏿‍❤️‍👨🏽|👩🏿‍❤️‍👨🏾|👩🏿‍❤️‍👨🏿|👩🏿‍❤️‍👩🏻|👩🏿‍❤️‍👩🏼|👩🏿‍❤️‍👩🏽|👩🏿‍❤️‍👩🏾|👩🏿‍❤️‍👩🏿|👩🏿‍🐰‍👩🏻|👩🏿‍🐰‍👩🏼|👩🏿‍🐰‍👩🏽|👩🏿‍🐰‍👩🏾|👩🏿‍🤝‍👨🏻|👩🏿‍🤝‍👨🏼|👩🏿‍🤝‍👨🏽|👩🏿‍🤝‍👨🏾|👩🏿‍🤝‍👩🏻|👩🏿‍🤝‍👩🏼|👩🏿‍🤝‍👩🏽|👩🏿‍🤝‍👩🏾|👩🏿‍🫯‍👩🏻|👩🏿‍🫯‍👩🏼|👩🏿‍🫯‍👩🏽|👩🏿‍🫯‍👩🏾|🧑🏻‍❤️‍🧑🏼|🧑🏻‍❤️‍🧑🏽|🧑🏻‍❤️‍🧑🏾|🧑🏻‍❤️‍🧑🏿|🧑🏻‍🐰‍🧑🏼|🧑🏻‍🐰‍🧑🏽|🧑🏻‍🐰‍🧑🏾|🧑🏻‍🐰‍🧑🏿|🧑🏻‍🤝‍🧑🏻|🧑🏻‍🤝‍🧑🏼|🧑🏻‍🤝‍🧑🏽|🧑🏻‍🤝‍🧑🏾|🧑🏻‍🤝‍🧑🏿|🧑🏻‍🫯‍🧑🏼|🧑🏻‍🫯‍🧑🏽|🧑🏻‍🫯‍🧑🏾|🧑🏻‍🫯‍🧑🏿|🧑🏼‍❤️‍🧑🏻|🧑🏼‍❤️‍🧑🏽|🧑🏼‍❤️‍🧑🏾|🧑🏼‍❤️‍🧑🏿|🧑🏼‍🐰‍🧑🏻|🧑🏼‍🐰‍🧑🏽|🧑🏼‍🐰‍🧑🏾|🧑🏼‍🐰‍🧑🏿|🧑🏼‍🤝‍🧑🏻|🧑🏼‍🤝‍🧑🏼|🧑🏼‍🤝‍🧑🏽|🧑🏼‍🤝‍🧑🏾|🧑🏼‍🤝‍🧑🏿|🧑🏼‍🫯‍🧑🏻|🧑🏼‍🫯‍🧑🏽|🧑🏼‍🫯‍🧑🏾|🧑🏼‍🫯‍🧑🏿|🧑🏽‍❤️‍🧑🏻|🧑🏽‍❤️‍🧑🏼|🧑🏽‍❤️‍🧑🏾|🧑🏽‍❤️‍🧑🏿|🧑🏽‍🐰‍🧑🏻|🧑🏽‍🐰‍🧑🏼|🧑🏽‍🐰‍🧑🏾|🧑🏽‍🐰‍🧑🏿|🧑🏽‍🤝‍🧑🏻|🧑🏽‍🤝‍🧑🏼|🧑🏽‍🤝‍🧑🏽|🧑🏽‍🤝‍🧑🏾|🧑🏽‍🤝‍🧑🏿|🧑🏽‍🫯‍🧑🏻|🧑🏽‍🫯‍🧑🏼|🧑🏽‍🫯‍🧑🏾|🧑🏽‍🫯‍🧑🏿|🧑🏾‍❤️‍🧑🏻|🧑🏾‍❤️‍🧑🏼|🧑🏾‍❤️‍🧑🏽|🧑🏾‍❤️‍🧑🏿|🧑🏾‍🐰‍🧑🏻|🧑🏾‍🐰‍🧑🏼|🧑🏾‍🐰‍🧑🏽|🧑🏾‍🐰‍🧑🏿|🧑🏾‍🤝‍🧑🏻|🧑🏾‍🤝‍🧑🏼|🧑🏾‍🤝‍🧑🏽|🧑🏾‍🤝‍🧑🏾|🧑🏾‍🤝‍🧑🏿|🧑🏾‍🫯‍🧑🏻|🧑🏾‍🫯‍🧑🏼|🧑🏾‍🫯‍🧑🏽|🧑🏾‍🫯‍🧑🏿|🧑🏿‍❤️‍🧑🏻|🧑🏿‍❤️‍🧑🏼|🧑🏿‍❤️‍🧑🏽|🧑🏿‍❤️‍🧑🏾|🧑🏿‍🐰‍🧑🏻|🧑🏿‍🐰‍🧑🏼|🧑🏿‍🐰‍🧑🏽|🧑🏿‍🐰‍🧑🏾|🧑🏿‍🤝‍🧑🏻|🧑🏿‍🤝‍🧑🏼|🧑🏿‍🤝‍🧑🏽|🧑🏿‍🤝‍🧑🏾|🧑🏿‍🤝‍🧑🏿|🧑🏿‍🫯‍🧑🏻|🧑🏿‍🫯‍🧑🏼|🧑🏿‍🫯‍🧑🏽|🧑🏿‍🫯‍🧑🏾|👨‍❤️‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍👦|👨‍👨‍👧‍👧|👨‍👩‍👦‍👦|👨‍👩‍👧‍👦|👨‍👩‍👧‍👧|👩‍❤️‍💋‍👨|👩‍❤️‍💋‍👩|👩‍👩‍👦‍👦|👩‍👩‍👧‍👦|👩‍👩‍👧‍👧|🧑‍🧑‍🧒‍🧒|🏃🏻‍♀️‍➡️|🏃🏻‍♂️‍➡️|🏃🏼‍♀️‍➡️|🏃🏼‍♂️‍➡️|🏃🏽‍♀️‍➡️|🏃🏽‍♂️‍➡️|🏃🏾‍♀️‍➡️|🏃🏾‍♂️‍➡️|🏃🏿‍♀️‍➡️|🏃🏿‍♂️‍➡️|👨🏻‍🦯‍➡️|👨🏻‍🦼‍➡️|👨🏻‍🦽‍➡️|👨🏼‍🦯‍➡️|👨🏼‍🦼‍➡️|👨🏼‍🦽‍➡️|👨🏽‍🦯‍➡️|👨🏽‍🦼‍➡️|👨🏽‍🦽‍➡️|👨🏾‍🦯‍➡️|👨🏾‍🦼‍➡️|👨🏾‍🦽‍➡️|👨🏿‍🦯‍➡️|👨🏿‍🦼‍➡️|👨🏿‍🦽‍➡️|👩🏻‍🦯‍➡️|👩🏻‍🦼‍➡️|👩🏻‍🦽‍➡️|👩🏼‍🦯‍➡️|👩🏼‍🦼‍➡️|👩🏼‍🦽‍➡️|👩🏽‍🦯‍➡️|👩🏽‍🦼‍➡️|👩🏽‍🦽‍➡️|👩🏾‍🦯‍➡️|👩🏾‍🦼‍➡️|👩🏾‍🦽‍➡️|👩🏿‍🦯‍➡️|👩🏿‍🦼‍➡️|👩🏿‍🦽‍➡️|🚶🏻‍♀️‍➡️|🚶🏻‍♂️‍➡️|🚶🏼‍♀️‍➡️|🚶🏼‍♂️‍➡️|🚶🏽‍♀️‍➡️|🚶🏽‍♂️‍➡️|🚶🏾‍♀️‍➡️|🚶🏾‍♂️‍➡️|🚶🏿‍♀️‍➡️|🚶🏿‍♂️‍➡️|🧎🏻‍♀️‍➡️|🧎🏻‍♂️‍➡️|🧎🏼‍♀️‍➡️|🧎🏼‍♂️‍➡️|🧎🏽‍♀️‍➡️|🧎🏽‍♂️‍➡️|🧎🏾‍♀️‍➡️|🧎🏾‍♂️‍➡️|🧎🏿‍♀️‍➡️|🧎🏿‍♂️‍➡️|🧑🏻‍🦯‍➡️|🧑🏻‍🦼‍➡️|🧑🏻‍🦽‍➡️|🧑🏼‍🦯‍➡️|🧑🏼‍🦼‍➡️|🧑🏼‍🦽‍➡️|🧑🏽‍🦯‍➡️|🧑🏽‍🦼‍➡️|🧑🏽‍🦽‍➡️|🧑🏾‍🦯‍➡️|🧑🏾‍🦼‍➡️|🧑🏾‍🦽‍➡️|🧑🏿‍🦯‍➡️|🧑🏿‍🦼‍➡️|🧑🏿‍🦽‍➡️|🫱🏻‍🫲🏼|🫱🏻‍🫲🏽|🫱🏻‍🫲🏾|🫱🏻‍🫲🏿|🫱🏼‍🫲🏻|🫱🏼‍🫲🏽|🫱🏼‍🫲🏾|🫱🏼‍🫲🏿|🫱🏽‍🫲🏻|🫱🏽‍🫲🏼|🫱🏽‍🫲🏾|🫱🏽‍🫲🏿|🫱🏾‍🫲🏻|🫱🏾‍🫲🏼|🫱🏾‍🫲🏽|🫱🏾‍🫲🏿|🫱🏿‍🫲🏻|🫱🏿‍🫲🏼|🫱🏿‍🫲🏽|🫱🏿‍🫲🏾|🏃‍♀️‍➡️|🏃‍♂️‍➡️|👨‍❤️‍👨|👨‍👦‍👦|👨‍👧‍👦|👨‍👧‍👧|👨‍👨‍👦|👨‍👨‍👧|👨‍👩‍👦|👨‍👩‍👧|👨‍🦯‍➡️|👨‍🦼‍➡️|👨‍🦽‍➡️|👩‍❤️‍👨|👩‍❤️‍👩|👩‍👦‍👦|👩‍👧‍👦|👩‍👧‍👧|👩‍👩‍👦|👩‍👩‍👧|👩‍🦯‍➡️|👩‍🦼‍➡️|👩‍🦽‍➡️|🚶‍♀️‍➡️|🚶‍♂️‍➡️|🧎‍♀️‍➡️|🧎‍♂️‍➡️|🧑‍🤝‍🧑|🧑‍🦯‍➡️|🧑‍🦼‍➡️|🧑‍🦽‍➡️|🧑‍🧑‍🧒|🧑‍🧒‍🧒|🏃🏻‍♀️|🏃🏻‍♂️|🏃🏻‍➡️|🏃🏼‍♀️|🏃🏼‍♂️|🏃🏼‍➡️|🏃🏽‍♀️|🏃🏽‍♂️|🏃🏽‍➡️|🏃🏾‍♀️|🏃🏾‍♂️|🏃🏾‍➡️|🏃🏿‍♀️|🏃🏿‍♂️|🏃🏿‍➡️|🏄🏻‍♀️|🏄🏻‍♂️|🏄🏼‍♀️|🏄🏼‍♂️|🏄🏽‍♀️|🏄🏽‍♂️|🏄🏾‍♀️|🏄🏾‍♂️|🏄🏿‍♀️|🏄🏿‍♂️|🏊🏻‍♀️|🏊🏻‍♂️|🏊🏼‍♀️|🏊🏼‍♂️|🏊🏽‍♀️|🏊🏽‍♂️|🏊🏾‍♀️|🏊🏾‍♂️|🏊🏿‍♀️|🏊🏿‍♂️|🏋🏻‍♀️|🏋🏻‍♂️|🏋🏼‍♀️|🏋🏼‍♂️|🏋🏽‍♀️|🏋🏽‍♂️|🏋🏾‍♀️|🏋🏾‍♂️|🏋🏿‍♀️|🏋🏿‍♂️|🏌🏻‍♀️|🏌🏻‍♂️|🏌🏼‍♀️|🏌🏼‍♂️|🏌🏽‍♀️|🏌🏽‍♂️|🏌🏾‍♀️|🏌🏾‍♂️|🏌🏿‍♀️|🏌🏿‍♂️|👁️‍🗨️|👨🏻‍⚕️|👨🏻‍⚖️|👨🏻‍✈️|👨🏻‍🌾|👨🏻‍🍳|👨🏻‍🍼|👨🏻‍🎓|👨🏻‍🎤|👨🏻‍🎨|👨🏻‍🏫|👨🏻‍🏭|👨🏻‍💻|👨🏻‍💼|👨🏻‍🔧|👨🏻‍🔬|👨🏻‍🚀|👨🏻‍🚒|👨🏻‍🦯|👨🏻‍🦰|👨🏻‍🦱|👨🏻‍🦲|👨🏻‍🦳|👨🏻‍🦼|👨🏻‍🦽|👨🏼‍⚕️|👨🏼‍⚖️|👨🏼‍✈️|👨🏼‍🌾|👨🏼‍🍳|👨🏼‍🍼|👨🏼‍🎓|👨🏼‍🎤|👨🏼‍🎨|👨🏼‍🏫|👨🏼‍🏭|👨🏼‍💻|👨🏼‍💼|👨🏼‍🔧|👨🏼‍🔬|👨🏼‍🚀|👨🏼‍🚒|👨🏼‍🦯|👨🏼‍🦰|👨🏼‍🦱|👨🏼‍🦲|👨🏼‍🦳|👨🏼‍🦼|👨🏼‍🦽|👨🏽‍⚕️|👨🏽‍⚖️|👨🏽‍✈️|👨🏽‍🌾|👨🏽‍🍳|👨🏽‍🍼|👨🏽‍🎓|👨🏽‍🎤|👨🏽‍🎨|👨🏽‍🏫|👨🏽‍🏭|👨🏽‍💻|👨🏽‍💼|👨🏽‍🔧|👨🏽‍🔬|👨🏽‍🚀|👨🏽‍🚒|👨🏽‍🦯|👨🏽‍🦰|👨🏽‍🦱|👨🏽‍🦲|👨🏽‍🦳|👨🏽‍🦼|👨🏽‍🦽|👨🏾‍⚕️|👨🏾‍⚖️|👨🏾‍✈️|👨🏾‍🌾|👨🏾‍🍳|👨🏾‍🍼|👨🏾‍🎓|👨🏾‍🎤|👨🏾‍🎨|👨🏾‍🏫|👨🏾‍🏭|👨🏾‍💻|👨🏾‍💼|👨🏾‍🔧|👨🏾‍🔬|👨🏾‍🚀|👨🏾‍🚒|👨🏾‍🦯|👨🏾‍🦰|👨🏾‍🦱|👨🏾‍🦲|👨🏾‍🦳|👨🏾‍🦼|👨🏾‍🦽|👨🏿‍⚕️|👨🏿‍⚖️|👨🏿‍✈️|👨🏿‍🌾|👨🏿‍🍳|👨🏿‍🍼|👨🏿‍🎓|👨🏿‍🎤|👨🏿‍🎨|👨🏿‍🏫|👨🏿‍🏭|👨🏿‍💻|👨🏿‍💼|👨🏿‍🔧|👨🏿‍🔬|👨🏿‍🚀|👨🏿‍🚒|👨🏿‍🦯|👨🏿‍🦰|👨🏿‍🦱|👨🏿‍🦲|👨🏿‍🦳|👨🏿‍🦼|👨🏿‍🦽|👩🏻‍⚕️|👩🏻‍⚖️|👩🏻‍✈️|👩🏻‍🌾|👩🏻‍🍳|👩🏻‍🍼|👩🏻‍🎓|👩🏻‍🎤|👩🏻‍🎨|👩🏻‍🏫|👩🏻‍🏭|👩🏻‍💻|👩🏻‍💼|👩🏻‍🔧|👩🏻‍🔬|👩🏻‍🚀|👩🏻‍🚒|👩🏻‍🦯|👩🏻‍🦰|👩🏻‍🦱|👩🏻‍🦲|👩🏻‍🦳|👩🏻‍🦼|👩🏻‍🦽|👩🏼‍⚕️|👩🏼‍⚖️|👩🏼‍✈️|👩🏼‍🌾|👩🏼‍🍳|👩🏼‍🍼|👩🏼‍🎓|👩🏼‍🎤|👩🏼‍🎨|👩🏼‍🏫|👩🏼‍🏭|👩🏼‍💻|👩🏼‍💼|👩🏼‍🔧|👩🏼‍🔬|👩🏼‍🚀|👩🏼‍🚒|👩🏼‍🦯|👩🏼‍🦰|👩🏼‍🦱|👩🏼‍🦲|👩🏼‍🦳|👩🏼‍🦼|👩🏼‍🦽|👩🏽‍⚕️|👩🏽‍⚖️|👩🏽‍✈️|👩🏽‍🌾|👩🏽‍🍳|👩🏽‍🍼|👩🏽‍🎓|👩🏽‍🎤|👩🏽‍🎨|👩🏽‍🏫|👩🏽‍🏭|👩🏽‍💻|👩🏽‍💼|👩🏽‍🔧|👩🏽‍🔬|👩🏽‍🚀|👩🏽‍🚒|👩🏽‍🦯|👩🏽‍🦰|👩🏽‍🦱|👩🏽‍🦲|👩🏽‍🦳|👩🏽‍🦼|👩🏽‍🦽|👩🏾‍⚕️|👩🏾‍⚖️|👩🏾‍✈️|👩🏾‍🌾|👩🏾‍🍳|👩🏾‍🍼|👩🏾‍🎓|👩🏾‍🎤|👩🏾‍🎨|👩🏾‍🏫|👩🏾‍🏭|👩🏾‍💻|👩🏾‍💼|👩🏾‍🔧|👩🏾‍🔬|👩🏾‍🚀|👩🏾‍🚒|👩🏾‍🦯|👩🏾‍🦰|👩🏾‍🦱|👩🏾‍🦲|👩🏾‍🦳|👩🏾‍🦼|👩🏾‍🦽|👩🏿‍⚕️|👩🏿‍⚖️|👩🏿‍✈️|👩🏿‍🌾|👩🏿‍🍳|👩🏿‍🍼|👩🏿‍🎓|👩🏿‍🎤|👩🏿‍🎨|👩🏿‍🏫|👩🏿‍🏭|👩🏿‍💻|👩🏿‍💼|👩🏿‍🔧|👩🏿‍🔬|👩🏿‍🚀|👩🏿‍🚒|👩🏿‍🦯|👩🏿‍🦰|👩🏿‍🦱|👩🏿‍🦲|👩🏿‍🦳|👩🏿‍🦼|👩🏿‍🦽|👮🏻‍♀️|👮🏻‍♂️|👮🏼‍♀️|👮🏼‍♂️|👮🏽‍♀️|👮🏽‍♂️|👮🏾‍♀️|👮🏾‍♂️|👮🏿‍♀️|👮🏿‍♂️|👯🏻‍♀️|👯🏻‍♂️|👯🏼‍♀️|👯🏼‍♂️|👯🏽‍♀️|👯🏽‍♂️|👯🏾‍♀️|👯🏾‍♂️|👯🏿‍♀️|👯🏿‍♂️|👰🏻‍♀️|👰🏻‍♂️|👰🏼‍♀️|👰🏼‍♂️|👰🏽‍♀️|👰🏽‍♂️|👰🏾‍♀️|👰🏾‍♂️|👰🏿‍♀️|👰🏿‍♂️|👱🏻‍♀️|👱🏻‍♂️|👱🏼‍♀️|👱🏼‍♂️|👱🏽‍♀️|👱🏽‍♂️|👱🏾‍♀️|👱🏾‍♂️|👱🏿‍♀️|👱🏿‍♂️|👳🏻‍♀️|👳🏻‍♂️|👳🏼‍♀️|👳🏼‍♂️|👳🏽‍♀️|👳🏽‍♂️|👳🏾‍♀️|👳🏾‍♂️|👳🏿‍♀️|👳🏿‍♂️|👷🏻‍♀️|👷🏻‍♂️|👷🏼‍♀️|👷🏼‍♂️|👷🏽‍♀️|👷🏽‍♂️|👷🏾‍♀️|👷🏾‍♂️|👷🏿‍♀️|👷🏿‍♂️|💁🏻‍♀️|💁🏻‍♂️|💁🏼‍♀️|💁🏼‍♂️|💁🏽‍♀️|💁🏽‍♂️|💁🏾‍♀️|💁🏾‍♂️|💁🏿‍♀️|💁🏿‍♂️|💂🏻‍♀️|💂🏻‍♂️|💂🏼‍♀️|💂🏼‍♂️|💂🏽‍♀️|💂🏽‍♂️|💂🏾‍♀️|💂🏾‍♂️|💂🏿‍♀️|💂🏿‍♂️|💆🏻‍♀️|💆🏻‍♂️|💆🏼‍♀️|💆🏼‍♂️|💆🏽‍♀️|💆🏽‍♂️|💆🏾‍♀️|💆🏾‍♂️|💆🏿‍♀️|💆🏿‍♂️|💇🏻‍♀️|💇🏻‍♂️|💇🏼‍♀️|💇🏼‍♂️|💇🏽‍♀️|💇🏽‍♂️|💇🏾‍♀️|💇🏾‍♂️|💇🏿‍♀️|💇🏿‍♂️|🕵🏻‍♀️|🕵🏻‍♂️|🕵🏼‍♀️|🕵🏼‍♂️|🕵🏽‍♀️|🕵🏽‍♂️|🕵🏾‍♀️|🕵🏾‍♂️|🕵🏿‍♀️|🕵🏿‍♂️|🙅🏻‍♀️|🙅🏻‍♂️|🙅🏼‍♀️|🙅🏼‍♂️|🙅🏽‍♀️|🙅🏽‍♂️|🙅🏾‍♀️|🙅🏾‍♂️|🙅🏿‍♀️|🙅🏿‍♂️|🙆🏻‍♀️|🙆🏻‍♂️|🙆🏼‍♀️|🙆🏼‍♂️|🙆🏽‍♀️|🙆🏽‍♂️|🙆🏾‍♀️|🙆🏾‍♂️|🙆🏿‍♀️|🙆🏿‍♂️|🙇🏻‍♀️|🙇🏻‍♂️|🙇🏼‍♀️|🙇🏼‍♂️|🙇🏽‍♀️|🙇🏽‍♂️|🙇🏾‍♀️|🙇🏾‍♂️|🙇🏿‍♀️|🙇🏿‍♂️|🙋🏻‍♀️|🙋🏻‍♂️|🙋🏼‍♀️|🙋🏼‍♂️|🙋🏽‍♀️|🙋🏽‍♂️|🙋🏾‍♀️|🙋🏾‍♂️|🙋🏿‍♀️|🙋🏿‍♂️|🙍🏻‍♀️|🙍🏻‍♂️|🙍🏼‍♀️|🙍🏼‍♂️|🙍🏽‍♀️|🙍🏽‍♂️|🙍🏾‍♀️|🙍🏾‍♂️|🙍🏿‍♀️|🙍🏿‍♂️|🙎🏻‍♀️|🙎🏻‍♂️|🙎🏼‍♀️|🙎🏼‍♂️|🙎🏽‍♀️|🙎🏽‍♂️|🙎🏾‍♀️|🙎🏾‍♂️|🙎🏿‍♀️|🙎🏿‍♂️|🚣🏻‍♀️|🚣🏻‍♂️|🚣🏼‍♀️|🚣🏼‍♂️|🚣🏽‍♀️|🚣🏽‍♂️|🚣🏾‍♀️|🚣🏾‍♂️|🚣🏿‍♀️|🚣🏿‍♂️|🚴🏻‍♀️|🚴🏻‍♂️|🚴🏼‍♀️|🚴🏼‍♂️|🚴🏽‍♀️|🚴🏽‍♂️|🚴🏾‍♀️|🚴🏾‍♂️|🚴🏿‍♀️|🚴🏿‍♂️|🚵🏻‍♀️|🚵🏻‍♂️|🚵🏼‍♀️|🚵🏼‍♂️|🚵🏽‍♀️|🚵🏽‍♂️|🚵🏾‍♀️|🚵🏾‍♂️|🚵🏿‍♀️|🚵🏿‍♂️|🚶🏻‍♀️|🚶🏻‍♂️|🚶🏻‍➡️|🚶🏼‍♀️|🚶🏼‍♂️|🚶🏼‍➡️|🚶🏽‍♀️|🚶🏽‍♂️|🚶🏽‍➡️|🚶🏾‍♀️|🚶🏾‍♂️|🚶🏾‍➡️|🚶🏿‍♀️|🚶🏿‍♂️|🚶🏿‍➡️|🤦🏻‍♀️|🤦🏻‍♂️|🤦🏼‍♀️|🤦🏼‍♂️|🤦🏽‍♀️|🤦🏽‍♂️|🤦🏾‍♀️|🤦🏾‍♂️|🤦🏿‍♀️|🤦🏿‍♂️|🤵🏻‍♀️|🤵🏻‍♂️|🤵🏼‍♀️|🤵🏼‍♂️|🤵🏽‍♀️|🤵🏽‍♂️|🤵🏾‍♀️|🤵🏾‍♂️|🤵🏿‍♀️|🤵🏿‍♂️|🤷🏻‍♀️|🤷🏻‍♂️|🤷🏼‍♀️|🤷🏼‍♂️|🤷🏽‍♀️|🤷🏽‍♂️|🤷🏾‍♀️|🤷🏾‍♂️|🤷🏿‍♀️|🤷🏿‍♂️|🤸🏻‍♀️|🤸🏻‍♂️|🤸🏼‍♀️|🤸🏼‍♂️|🤸🏽‍♀️|🤸🏽‍♂️|🤸🏾‍♀️|🤸🏾‍♂️|🤸🏿‍♀️|🤸🏿‍♂️|🤹🏻‍♀️|🤹🏻‍♂️|🤹🏼‍♀️|🤹🏼‍♂️|🤹🏽‍♀️|🤹🏽‍♂️|🤹🏾‍♀️|🤹🏾‍♂️|🤹🏿‍♀️|🤹🏿‍♂️|🤼🏻‍♀️|🤼🏻‍♂️|🤼🏼‍♀️|🤼🏼‍♂️|🤼🏽‍♀️|🤼🏽‍♂️|🤼🏾‍♀️|🤼🏾‍♂️|🤼🏿‍♀️|🤼🏿‍♂️|🤽🏻‍♀️|🤽🏻‍♂️|🤽🏼‍♀️|🤽🏼‍♂️|🤽🏽‍♀️|🤽🏽‍♂️|🤽🏾‍♀️|🤽🏾‍♂️|🤽🏿‍♀️|🤽🏿‍♂️|🤾🏻‍♀️|🤾🏻‍♂️|🤾🏼‍♀️|🤾🏼‍♂️|🤾🏽‍♀️|🤾🏽‍♂️|🤾🏾‍♀️|🤾🏾‍♂️|🤾🏿‍♀️|🤾🏿‍♂️|🦸🏻‍♀️|🦸🏻‍♂️|🦸🏼‍♀️|🦸🏼‍♂️|🦸🏽‍♀️|🦸🏽‍♂️|🦸🏾‍♀️|🦸🏾‍♂️|🦸🏿‍♀️|🦸🏿‍♂️|🦹🏻‍♀️|🦹🏻‍♂️|🦹🏼‍♀️|🦹🏼‍♂️|🦹🏽‍♀️|🦹🏽‍♂️|🦹🏾‍♀️|🦹🏾‍♂️|🦹🏿‍♀️|🦹🏿‍♂️|🧍🏻‍♀️|🧍🏻‍♂️|🧍🏼‍♀️|🧍🏼‍♂️|🧍🏽‍♀️|🧍🏽‍♂️|🧍🏾‍♀️|🧍🏾‍♂️|🧍🏿‍♀️|🧍🏿‍♂️|🧎🏻‍♀️|🧎🏻‍♂️|🧎🏻‍➡️|🧎🏼‍♀️|🧎🏼‍♂️|🧎🏼‍➡️|🧎🏽‍♀️|🧎🏽‍♂️|🧎🏽‍➡️|🧎🏾‍♀️|🧎🏾‍♂️|🧎🏾‍➡️|🧎🏿‍♀️|🧎🏿‍♂️|🧎🏿‍➡️|🧏🏻‍♀️|🧏🏻‍♂️|🧏🏼‍♀️|🧏🏼‍♂️|🧏🏽‍♀️|🧏🏽‍♂️|🧏🏾‍♀️|🧏🏾‍♂️|🧏🏿‍♀️|🧏🏿‍♂️|🧑🏻‍⚕️|🧑🏻‍⚖️|🧑🏻‍✈️|🧑🏻‍🌾|🧑🏻‍🍳|🧑🏻‍🍼|🧑🏻‍🎄|🧑🏻‍🎓|🧑🏻‍🎤|🧑🏻‍🎨|🧑🏻‍🏫|🧑🏻‍🏭|🧑🏻‍💻|🧑🏻‍💼|🧑🏻‍🔧|🧑🏻‍🔬|🧑🏻‍🚀|🧑🏻‍🚒|🧑🏻‍🦯|🧑🏻‍🦰|🧑🏻‍🦱|🧑🏻‍🦲|🧑🏻‍🦳|🧑🏻‍🦼|🧑🏻‍🦽|🧑🏻‍🩰|🧑🏼‍⚕️|🧑🏼‍⚖️|🧑🏼‍✈️|🧑🏼‍🌾|🧑🏼‍🍳|🧑🏼‍🍼|🧑🏼‍🎄|🧑🏼‍🎓|🧑🏼‍🎤|🧑🏼‍🎨|🧑🏼‍🏫|🧑🏼‍🏭|🧑🏼‍💻|🧑🏼‍💼|🧑🏼‍🔧|🧑🏼‍🔬|🧑🏼‍🚀|🧑🏼‍🚒|🧑🏼‍🦯|🧑🏼‍🦰|🧑🏼‍🦱|🧑🏼‍🦲|🧑🏼‍🦳|🧑🏼‍🦼|🧑🏼‍🦽|🧑🏼‍🩰|🧑🏽‍⚕️|🧑🏽‍⚖️|🧑🏽‍✈️|🧑🏽‍🌾|🧑🏽‍🍳|🧑🏽‍🍼|🧑🏽‍🎄|🧑🏽‍🎓|🧑🏽‍🎤|🧑🏽‍🎨|🧑🏽‍🏫|🧑🏽‍🏭|🧑🏽‍💻|🧑🏽‍💼|🧑🏽‍🔧|🧑🏽‍🔬|🧑🏽‍🚀|🧑🏽‍🚒|🧑🏽‍🦯|🧑🏽‍🦰|🧑🏽‍🦱|🧑🏽‍🦲|🧑🏽‍🦳|🧑🏽‍🦼|🧑🏽‍🦽|🧑🏽‍🩰|🧑🏾‍⚕️|🧑🏾‍⚖️|🧑🏾‍✈️|🧑🏾‍🌾|🧑🏾‍🍳|🧑🏾‍🍼|🧑🏾‍🎄|🧑🏾‍🎓|🧑🏾‍🎤|🧑🏾‍🎨|🧑🏾‍🏫|🧑🏾‍🏭|🧑🏾‍💻|🧑🏾‍💼|🧑🏾‍🔧|🧑🏾‍🔬|🧑🏾‍🚀|🧑🏾‍🚒|🧑🏾‍🦯|🧑🏾‍🦰|🧑🏾‍🦱|🧑🏾‍🦲|🧑🏾‍🦳|🧑🏾‍🦼|🧑🏾‍🦽|🧑🏾‍🩰|🧑🏿‍⚕️|🧑🏿‍⚖️|🧑🏿‍✈️|🧑🏿‍🌾|🧑🏿‍🍳|🧑🏿‍🍼|🧑🏿‍🎄|🧑🏿‍🎓|🧑🏿‍🎤|🧑🏿‍🎨|🧑🏿‍🏫|🧑🏿‍🏭|🧑🏿‍💻|🧑🏿‍💼|🧑🏿‍🔧|🧑🏿‍🔬|🧑🏿‍🚀|🧑🏿‍🚒|🧑🏿‍🦯|🧑🏿‍🦰|🧑🏿‍🦱|🧑🏿‍🦲|🧑🏿‍🦳|🧑🏿‍🦼|🧑🏿‍🦽|🧑🏿‍🩰|🧔🏻‍♀️|🧔🏻‍♂️|🧔🏼‍♀️|🧔🏼‍♂️|🧔🏽‍♀️|🧔🏽‍♂️|🧔🏾‍♀️|🧔🏾‍♂️|🧔🏿‍♀️|🧔🏿‍♂️|🧖🏻‍♀️|🧖🏻‍♂️|🧖🏼‍♀️|🧖🏼‍♂️|🧖🏽‍♀️|🧖🏽‍♂️|🧖🏾‍♀️|🧖🏾‍♂️|🧖🏿‍♀️|🧖🏿‍♂️|🧗🏻‍♀️|🧗🏻‍♂️|🧗🏼‍♀️|🧗🏼‍♂️|🧗🏽‍♀️|🧗🏽‍♂️|🧗🏾‍♀️|🧗🏾‍♂️|🧗🏿‍♀️|🧗🏿‍♂️|🧘🏻‍♀️|🧘🏻‍♂️|🧘🏼‍♀️|🧘🏼‍♂️|🧘🏽‍♀️|🧘🏽‍♂️|🧘🏾‍♀️|🧘🏾‍♂️|🧘🏿‍♀️|🧘🏿‍♂️|🧙🏻‍♀️|🧙🏻‍♂️|🧙🏼‍♀️|🧙🏼‍♂️|🧙🏽‍♀️|🧙🏽‍♂️|🧙🏾‍♀️|🧙🏾‍♂️|🧙🏿‍♀️|🧙🏿‍♂️|🧚🏻‍♀️|🧚🏻‍♂️|🧚🏼‍♀️|🧚🏼‍♂️|🧚🏽‍♀️|🧚🏽‍♂️|🧚🏾‍♀️|🧚🏾‍♂️|🧚🏿‍♀️|🧚🏿‍♂️|🧛🏻‍♀️|🧛🏻‍♂️|🧛🏼‍♀️|🧛🏼‍♂️|🧛🏽‍♀️|🧛🏽‍♂️|🧛🏾‍♀️|🧛🏾‍♂️|🧛🏿‍♀️|🧛🏿‍♂️|🧜🏻‍♀️|🧜🏻‍♂️|🧜🏼‍♀️|🧜🏼‍♂️|🧜🏽‍♀️|🧜🏽‍♂️|🧜🏾‍♀️|🧜🏾‍♂️|🧜🏿‍♀️|🧜🏿‍♂️|🧝🏻‍♀️|🧝🏻‍♂️|🧝🏼‍♀️|🧝🏼‍♂️|🧝🏽‍♀️|🧝🏽‍♂️|🧝🏾‍♀️|🧝🏾‍♂️|🧝🏿‍♀️|🧝🏿‍♂️|⛹🏻‍♀️|⛹🏻‍♂️|⛹🏼‍♀️|⛹🏼‍♂️|⛹🏽‍♀️|⛹🏽‍♂️|⛹🏾‍♀️|⛹🏾‍♂️|⛹🏿‍♀️|⛹🏿‍♂️|🏋️‍♀️|🏋️‍♂️|🏌️‍♀️|🏌️‍♂️|🏳️‍⚧️|🏳️‍🌈|🕵️‍♀️|🕵️‍♂️|😶‍🌫️|⛓️‍💥|⛹️‍♀️|⛹️‍♂️|❤️‍🔥|❤️‍🩹|🍄‍🟫|🍋‍🟩|🏃‍♀️|🏃‍♂️|🏃‍➡️|🏄‍♀️|🏄‍♂️|🏊‍♀️|🏊‍♂️|🏴‍☠️|🐕‍🦺|🐦‍🔥|🐻‍❄️|👨‍⚕️|👨‍⚖️|👨‍✈️|👨‍🌾|👨‍🍳|👨‍🍼|👨‍🎓|👨‍🎤|👨‍🎨|👨‍🏫|👨‍🏭|👨‍👦|👨‍👧|👨‍💻|👨‍💼|👨‍🔧|👨‍🔬|👨‍🚀|👨‍🚒|👨‍🦯|👨‍🦰|👨‍🦱|👨‍🦲|👨‍🦳|👨‍🦼|👨‍🦽|👩‍⚕️|👩‍⚖️|👩‍✈️|👩‍🌾|👩‍🍳|👩‍🍼|👩‍🎓|👩‍🎤|👩‍🎨|👩‍🏫|👩‍🏭|👩‍👦|👩‍👧|👩‍💻|👩‍💼|👩‍🔧|👩‍🔬|👩‍🚀|👩‍🚒|👩‍🦯|👩‍🦰|👩‍🦱|👩‍🦲|👩‍🦳|👩‍🦼|👩‍🦽|👮‍♀️|👮‍♂️|👯‍♀️|👯‍♂️|👰‍♀️|👰‍♂️|👱‍♀️|👱‍♂️|👳‍♀️|👳‍♂️|👷‍♀️|👷‍♂️|💁‍♀️|💁‍♂️|💂‍♀️|💂‍♂️|💆‍♀️|💆‍♂️|💇‍♀️|💇‍♂️|😮‍💨|😵‍💫|🙂‍↔️|🙂‍↕️|🙅‍♀️|🙅‍♂️|🙆‍♀️|🙆‍♂️|🙇‍♀️|🙇‍♂️|🙋‍♀️|🙋‍♂️|🙍‍♀️|🙍‍♂️|🙎‍♀️|🙎‍♂️|🚣‍♀️|🚣‍♂️|🚴‍♀️|🚴‍♂️|🚵‍♀️|🚵‍♂️|🚶‍♀️|🚶‍♂️|🚶‍➡️|🤦‍♀️|🤦‍♂️|🤵‍♀️|🤵‍♂️|🤷‍♀️|🤷‍♂️|🤸‍♀️|🤸‍♂️|🤹‍♀️|🤹‍♂️|🤼‍♀️|🤼‍♂️|🤽‍♀️|🤽‍♂️|🤾‍♀️|🤾‍♂️|🦸‍♀️|🦸‍♂️|🦹‍♀️|🦹‍♂️|🧍‍♀️|🧍‍♂️|🧎‍♀️|🧎‍♂️|🧎‍➡️|🧏‍♀️|🧏‍♂️|🧑‍⚕️|🧑‍⚖️|🧑‍✈️|🧑‍🌾|🧑‍🍳|🧑‍🍼|🧑‍🎄|🧑‍🎓|🧑‍🎤|🧑‍🎨|🧑‍🏫|🧑‍🏭|🧑‍💻|🧑‍💼|🧑‍🔧|🧑‍🔬|🧑‍🚀|🧑‍🚒|🧑‍🦯|🧑‍🦰|🧑‍🦱|🧑‍🦲|🧑‍🦳|🧑‍🦼|🧑‍🦽|🧑‍🧒|🧑‍🩰|🧔‍♀️|🧔‍♂️|🧖‍♀️|🧖‍♂️|🧗‍♀️|🧗‍♂️|🧘‍♀️|🧘‍♂️|🧙‍♀️|🧙‍♂️|🧚‍♀️|🧚‍♂️|🧛‍♀️|🧛‍♂️|🧜‍♀️|🧜‍♂️|🧝‍♀️|🧝‍♂️|🧞‍♀️|🧞‍♂️|🧟‍♀️|🧟‍♂️|\\*️⃣|🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿|🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿|🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|🐈‍⬛|🐦‍⬛|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿|👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿|👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿|👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿|👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿|👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|👯🏻|👯🏼|👯🏽|👯🏾|👯🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿|👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿|👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿|👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿|💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿|💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿|🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿|🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿|🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿|🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿|🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿|🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿|🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|🤝🏻|🤝🏼|🤝🏽|🤝🏾|🤝🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿|🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿|🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿|🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🤼🏻|🤼🏼|🤼🏽|🤼🏾|🤼🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿|🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿|🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿|🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿|🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿|🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿|🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|🫃🏻|🫃🏼|🫃🏽|🫃🏾|🫃🏿|🫄🏻|🫄🏼|🫄🏽|🫄🏾|🫄🏿|🫅🏻|🫅🏼|🫅🏽|🫅🏾|🫅🏿|🫰🏻|🫰🏼|🫰🏽|🫰🏾|🫰🏿|🫱🏻|🫱🏼|🫱🏽|🫱🏾|🫱🏿|🫲🏻|🫲🏼|🫲🏽|🫲🏾|🫲🏿|🫳🏻|🫳🏼|🫳🏽|🫳🏾|🫳🏿|🫴🏻|🫴🏼|🫴🏽|🫴🏾|🫴🏿|🫵🏻|🫵🏼|🫵🏽|🫵🏾|🫵🏿|🫶🏻|🫶🏼|🫶🏽|🫶🏾|🫶🏿|🫷🏻|🫷🏼|🫷🏽|🫷🏾|🫷🏿|🫸🏻|🫸🏼|🫸🏽|🫸🏾|🫸🏿|#️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣|☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿|✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|🅰️|🅱️|🅾️|🅿️|🈂️|🈷️|🌡️|🌤️|🌥️|🌦️|🌧️|🌨️|🌩️|🌪️|🌫️|🌬️|🌶️|🍽️|🎖️|🎗️|🎙️|🎚️|🎛️|🎞️|🎟️|🏋️|🏌️|🏍️|🏎️|🏔️|🏕️|🏖️|🏗️|🏘️|🏙️|🏚️|🏛️|🏜️|🏝️|🏞️|🏟️|🏳️|🏵️|🏷️|🐿️|👁️|📽️|🕉️|🕊️|🕯️|🕰️|🕳️|🕴️|🕵️|🕶️|🕷️|🕸️|🕹️|🖇️|🖊️|🖋️|🖌️|🖍️|🖐️|🖥️|🖨️|🖱️|🖲️|🖼️|🗂️|🗃️|🗄️|🗑️|🗒️|🗓️|🗜️|🗝️|🗞️|🗡️|🗣️|🗨️|🗯️|🗳️|🗺️|🛋️|🛍️|🛎️|🛏️|🛠️|🛡️|🛢️|🛣️|🛤️|🛥️|🛩️|🛰️|🛳️|©️|®️|‼️|⁉️|™️|ℹ️|↔️|↕️|↖️|↗️|↘️|↙️|↩️|↪️|⌨️|⏏️|⏭️|⏮️|⏯️|⏱️|⏲️|⏸️|⏹️|⏺️|Ⓜ️|▪️|▫️|▶️|◀️|◻️|◼️|☀️|☁️|☂️|☃️|☄️|☎️|☑️|☘️|☝️|☠️|☢️|☣️|☦️|☪️|☮️|☯️|☸️|☹️|☺️|♀️|♂️|♟️|♠️|♣️|♥️|♦️|♨️|♻️|♾️|⚒️|⚔️|⚕️|⚖️|⚗️|⚙️|⚛️|⚜️|⚠️|⚧️|⚰️|⚱️|⛈️|⛏️|⛑️|⛓️|⛩️|⛰️|⛱️|⛴️|⛷️|⛸️|⛹️|✂️|✈️|✉️|✌️|✍️|✏️|✒️|✔️|✖️|✝️|✡️|✳️|✴️|❄️|❇️|❣️|❤️|➡️|⤴️|⤵️|⬅️|⬆️|⬇️|〰️|〽️|㊗️|㊙️|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55\\u{1F004}\\u{1F0CF}\\u{1F18E}\\u{1F191}-\\u{1F19A}\\u{1F201}\\u{1F21A}\\u{1F22F}\\u{1F232}-\\u{1F236}\\u{1F238}-\\u{1F23A}\\u{1F250}\\u{1F251}\\u{1F300}-\\u{1F320}\\u{1F32D}-\\u{1F335}\\u{1F337}-\\u{1F37C}\\u{1F37E}-\\u{1F393}\\u{1F3A0}-\\u{1F3CA}\\u{1F3CF}-\\u{1F3D3}\\u{1F3E0}-\\u{1F3F0}\\u{1F3F4}\\u{1F3F8}-\\u{1F43E}\\u{1F440}\\u{1F442}-\\u{1F4FC}\\u{1F4FF}-\\u{1F53D}\\u{1F54B}-\\u{1F54E}\\u{1F550}-\\u{1F567}\\u{1F57A}\\u{1F595}\\u{1F596}\\u{1F5A4}\\u{1F5FB}-\\u{1F64F}\\u{1F680}-\\u{1F6C5}\\u{1F6CC}\\u{1F6D0}-\\u{1F6D2}\\u{1F6D5}-\\u{1F6D8}\\u{1F6DC}-\\u{1F6DF}\\u{1F6EB}\\u{1F6EC}\\u{1F6F4}-\\u{1F6FC}\\u{1F7E0}-\\u{1F7EB}\\u{1F7F0}\\u{1F90C}-\\u{1F93A}\\u{1F93C}-\\u{1F945}\\u{1F947}-\\u{1F9FF}\\u{1FA70}-\\u{1FA7C}\\u{1FA80}-\\u{1FA8A}\\u{1FA8E}-\\u{1FAC6}\\u{1FAC8}\\u{1FACD}-\\u{1FADC}\\u{1FADF}-\\u{1FAEA}\\u{1FAEF}-\\u{1FAF8}])/gu).length):o=a().createElement(a().Fragment,null,a().createElement(\"i\",{className:\"material-icons gray\"},\"warning_amber\"),\" \",a().createElement(\"i\",{className:\"gray\"},a().createElement(n.FormattedMessage,{id:\"invalid_content\",defaultMessage:[{type:0,value:\"invalid content\"}]})));return a().createElement(\"li\",{ref:this.props.innerRef,className:e},this.props.isGroup&&this.props.response?a().createElement(\"div\",{className:\"avatar-box\"},r?a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:this.props.userFrom,title:this.props.userName,avatar:s}):null):null,a().createElement(\"div\",null,a().createElement(\"div\",{className:t},a().createElement(\"div\",{className:\"content-meta\"},a().createElement(\"div\",{className:i},o,h),this.props.timestamp?a().createElement(m,{edited:this.props.edited,timestamp:this.props.timestamp,received:this.props.received}):null),this.props.showContextMenu?a().createElement(\"span\",{className:\"menuTrigger\"},a().createElement(\"a\",{href:\"#\",onClick:this.handleContextClick},a().createElement(\"i\",{className:\"material-icons\"},\"expand_more\"))):null),r?a().createElement(\"div\",{className:\"author\"},this.props.userName||a().createElement(\"i\",null,a().createElement(n.FormattedMessage,{id:\"user_not_found\",defaultMessage:[{type:0,value:\"Not found\"}]}))):null))}}const E=(0,n.injectIntl)(y);var b=a().forwardRef((e,t)=>a().createElement(E,v({innerRef:t},e))),M=s(504),S=s(1334),C=s(9027),_=s(6110);class w extends a().Component{constructor(e){super(e)}render(){const e=[],t=(this.props.subscribers||[]).length,s=Math.min(C.DT,t);return(this.props.subscribers||[]).some(t=>(e.push(a().createElement(\"div\",{className:\"avatar-box\",key:t.user},a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:t.user,avatar:(0,_.to)(t.public?t.public.photo:null)||!0,title:t.public?t.public.fn:null}))),e.length==s)),0==e.length?null:a().createElement(\"div\",{id:\"topic-users\"},e,\" \",t>s?a().createElement(\"span\",null,a().createElement(n.FormattedMessage,{id:\"more_online_members\",defaultMessage:[{type:0,value:\"+\"},{type:1,value:\"overflow\"},{type:0,value:\" more\"}],values:{overflow:t-s}})):null)}}class A extends a().PureComponent{constructor(e){super(e),this.handleButtonAction=this.handleButtonAction.bind(this)}handleButtonAction(e,t){e.preventDefault(),this.props.onAction(t)}render(){return a().createElement(\"div\",{className:\"accept-invite-panel\"},a().createElement(\"div\",{className:\"title\"},a().createElement(n.FormattedMessage,{id:\"chat_invitation\",defaultMessage:[{type:0,value:\"You are invited to start a new chat. What would you like to do?\"}]})),a().createElement(\"div\",{className:\"footer\"},a().createElement(\"button\",{className:\"primary\",onClick:e=>{this.handleButtonAction(e,\"accept\")}},a().createElement(n.FormattedMessage,{id:\"chat_invitation_accept\",defaultMessage:[{type:0,value:\"Accept\"}]})),a().createElement(\"button\",{className:\"secondary\",onClick:e=>{this.handleButtonAction(e,\"delete\")}},a().createElement(n.FormattedMessage,{id:\"chat_invitation_ignore\",defaultMessage:[{type:0,value:\"Ignore\"}]})),a().createElement(\"button\",{className:\"secondary\",onClick:e=>{this.handleButtonAction(e,\"block\")}},a().createElement(n.FormattedMessage,{id:\"chat_invitation_block\",defaultMessage:[{type:0,value:\"Block\"}]}))))}}var F=s(1013);class D extends a().PureComponent{render(){const e=C.C3+\" (\"+l.Tinode.getLibrary()+\")\";return a().createElement(\"div\",{id:\"dummy-view\"},a().createElement(\"div\",null,a().createElement(\"a\",{href:\"https://github.com/tinode/chat/\"},a().createElement(\"img\",{id:\"logo\",alt:\"logo\",src:\"img/logo.svg\"}),a().createElement(\"h2\",null,\"Tinode Web\")),a().createElement(\"p\",null,a().createElement(n.FormattedMessage,{id:\"label_client\",defaultMessage:[{type:0,value:\"Client:\"}]}),\" \",e),a().createElement(\"p\",null,a().createElement(n.FormattedMessage,{id:\"label_server\",defaultMessage:[{type:0,value:\"Server:\"}]}),\" \",this.props.serverVersion,\" (\",this.props.serverAddress,\")\")))}}class P extends a().PureComponent{constructor(e){super(e)}render(){let e=null,t=\"bubble\";return this.props.date&&(e=a().createElement(a().Fragment,null,this.props.date),t+=\" date\"),e?a().createElement(\"li\",{className:\"meta\"},a().createElement(\"div\",{className:t},a().createElement(\"div\",{className:\"message-content\"},e))):a().createElement(a().Fragment,null,null)}}const T=(0,n.defineMessages)({message_not_found:{id:\"message_not_found\",defaultMessage:[{type:0,value:\"message not found\"}]},message_deleted:{id:\"message_deleted\",defaultMessage:[{type:0,value:\"message deleted\"}]}});class R extends a().PureComponent{constructor(e){super(e),this.touchX=null,this.touchY=null,this.touchSurface=a().createRef(),this.getSelectedIndex=this.getSelectedIndex.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleSelected=this.handleSelected.bind(this),this.handleMoveNext=this.handleMoveNext.bind(this),this.handleMovePrev=this.handleMovePrev.bind(this),this.handleTouchEventStart=this.handleTouchEventStart.bind(this),this.handleTouchEventEnd=this.handleTouchEventEnd.bind(this),this.handleTouchCancel=this.handleTouchCancel.bind(this)}componentDidMount(){this.touchSurface.current.addEventListener(\"touchstart\",this.handleTouchEventStart,{passive:!0}),this.touchSurface.current.addEventListener(\"touchend\",this.handleTouchEventEnd,{passive:!0}),this.touchSurface.current.addEventListener(\"touchcancel\",this.handleTouchCancel,{passive:!0})}componentWillUnmount(){this.touchSurface.current.removeEventListener(\"touchstart\",this.handleTouchEventStart),this.touchSurface.current.removeEventListener(\"touchend\",this.handleTouchEventEnd),this.touchSurface.current.removeEventListener(\"touchcancel\",this.handleTouchCancel)}getSelectedIndex(){return(this.props.pins||[]).length-this.props.selected-1}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.pins[this.getSelectedIndex()])}handleSelected(e){e.preventDefault(),this.props.onSelected(this.props.pins[this.getSelectedIndex()])}handleMoveNext(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.max(this.props.selected-1,0);s!=this.props.selected&&this.props.setSelected(s)}handleMovePrev(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.min(this.props.selected+1,(this.props.pins||[]).length-1);s!=this.props.selected&&this.props.setSelected(s)}handleTouchEventStart(e){1==e.touches.length&&(this.touchX=e.touches[0].clientX,this.touchY=e.touches[0].clientY)}handleTouchEventEnd(e){if(null===this.touchX||1!=e.changedTouches.length)return void(this.touchX=null);const t=this.touchX-e.changedTouches[0].clientX,s=this.touchY-e.changedTouches[0].clientY;this.touchX=null,Math.abs(t)>Math.abs(s)||Math.abs(s)<C.yS||(s>0?this.handleMovePrev(e,!0):this.handleMoveNext(e,!0))}handleTouchCancel(){this.touchX=null}render(){const e=this.getSelectedIndex();let t=(this.props.messages||[])[e];t=t?t._deleted?a().createElement(\"i\",{className:\"gray\"},this.props.intl.formatMessage(T.message_deleted)):l.Drafty.format(t.content,g.TU,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):a().createElement(\"i\",{className:\"gray\"},this.props.intl.formatMessage(T.message_not_found));const s=[];return this.props.pins.forEach(t=>{const i=s.length==e?\"adot\":\"dot\";s.push(a().createElement(\"div\",{key:t,className:i}))}),a().createElement(\"div\",{id:\"pinned-wrapper\",ref:this.touchSurface},this.props.isAdmin?a().createElement(\"div\",{className:\"cancel\"},a().createElement(\"a\",{href:\"#\",onClick:this.handleCancel},a().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))):a().createElement(\"div\",null,a().createElement(\"i\",{className:\"material-icons gray\"},\"push_pin\")),a().createElement(\"div\",{className:\"pinned-scroll\"},s),a().createElement(\"div\",{className:\"pinned\",onClick:this.handleSelected},a().createElement(\"p\",null,t)),a().createElement(\"div\",{className:\"pinned-menu\"},a().createElement(\"span\",{className:\"menuTrigger upper\"},e>0?a().createElement(\"a\",{href:\"#\",onClick:this.handleMovePrev},a().createElement(\"i\",{className:\"material-icons\"},\"expand_less\")):null),a().createElement(\"span\",{className:\"menuTrigger lower\"},this.props.selected>0?a().createElement(\"a\",{href:\"#\",onClick:this.handleMoveNext},a().createElement(\"i\",{className:\"material-icons\"},\"expand_more\")):null)))}}var k=(0,n.injectIntl)(R),N=s(1725),I=s(3832);const x=a().lazy(e=>s.e(836).then(s.bind(s,6836))),L=a().lazy(e=>s.e(472).then(s.bind(s,4472))),U=a().lazy(e=>s.e(889).then(s.bind(s,8889))),z=a().lazy(e=>Promise.all([s.e(892),s.e(942)]).then(s.bind(s,8942))),q=a().lazy(e=>s.e(371).then(s.bind(s,6371))),B=(0,n.defineMessages)({online_now:{id:\"online_now\",defaultMessage:[{type:0,value:\"online now\"}]},last_seen:{id:\"last_seen_timestamp\",defaultMessage:[{type:0,value:\"Last seen: \"},{type:1,value:\"timestamp\"}]},not_found:{id:\"title_not_found\",defaultMessage:[{type:0,value:\"Not found\"}]},channel:{id:\"channel\",defaultMessage:[{type:0,value:\"channel\"}]},file_attachment_too_large:{id:\"file_attachment_too_large\",defaultMessage:[{type:0,value:\"The file size \"},{type:1,value:\"size\"},{type:0,value:\" exceeds the \"},{type:1,value:\"limit\"},{type:0,value:\" limit.\"}]},invalid_content:{id:\"invalid_content\",defaultMessage:[{type:0,value:\"invalid content\"}]},editing_message:{id:\"editing_message\",defaultMessage:[{type:0,value:\"Editing\"}]},drag_file:{id:\"drag_file\",defaultMessage:[{type:0,value:\"Drag file here\"}]},self_topic_name:{id:\"self_topic_name\",defaultMessage:[{type:0,value:\"Saved messages\"}]},subscriber_count:{id:\"subscriber_count\",defaultMessage:[{type:6,value:\"count\",options:{one:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscriber\"}]},two:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscribers\"}]},three:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscribers\"}]},few:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscribers\"}]},many:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscribers\"}]},other:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" subscribers\"}]}},offset:0,pluralType:\"cardinal\"}]},member_count:{id:\"member_count\",defaultMessage:[{type:6,value:\"count\",options:{one:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" member\"}]},two:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" members\"}]},three:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" members\"}]},few:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" members\"}]},many:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" members\"}]},other:{value:[{type:2,value:\"count\",style:null},{type:0,value:\" members\"}]}},offset:0,pluralType:\"cardinal\"}]},cannot_parse_vcard:{id:\"cannot_parse_vcard\",defaultMessage:[{type:0,value:\"Cannot parse vCard file.\"}]}});function O(e){if(e){const t=e.getExcessive()||\"\";return e.isJoiner(\"given\")&&(t.includes(\"R\")||t.includes(\"W\"))}return!1}function Q(e){if(e){const t=e.getMissing()||\"\";return e.isJoiner(\"want\")&&(t.includes(\"R\")||t.includes(\"W\"))}return!1}function V(e){return e==I.No||e==I.d1}class H extends a().Component{constructor(e){super(e),this.state=H.getDerivedStateFromProps(e,{}),this.componentSetup=this.componentSetup.bind(this),this.leave=this.leave.bind(this),this.sendMessage=this.sendMessage.bind(this),this.retrySend=this.retrySend.bind(this),this.sendImageAttachment=this.sendImageAttachment.bind(this),this.sendVideoAttachment=this.sendVideoAttachment.bind(this),this.sendFileAttachment=this.sendFileAttachment.bind(this),this.sendAudioAttachment=this.sendAudioAttachment.bind(this),this.sendTheCardAttachment=this.sendTheCardAttachment.bind(this),this.sendKeyPress=this.sendKeyPress.bind(this),this.subscribe=this.subscribe.bind(this),this.handleScrollReference=this.handleScrollReference.bind(this),this.mountDnDEvents=this.mountDnDEvents.bind(this),this.handleScrollEvent=this.handleScrollEvent.bind(this),this.handleDescChange=this.handleDescChange.bind(this),this.handleSubsUpdated=this.handleSubsUpdated.bind(this),this.handleMessageUpdate=this.handleMessageUpdate.bind(this),this.handleAuxUpdate=this.handleAuxUpdate.bind(this),this.handleAllMessagesReceived=this.handleAllMessagesReceived.bind(this),this.handleInfoReceipt=this.handleInfoReceipt.bind(this),this.handleExpandMedia=this.handleExpandMedia.bind(this),this.handleClosePreview=this.handleClosePreview.bind(this),this.handleCallPanelToggle=this.handleCallPanelToggle.bind(this),this.handleFormResponse=this.handleFormResponse.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleShowMessageContextMenu=this.handleShowMessageContextMenu.bind(this),this.handleNewChatAcceptance=this.handleNewChatAcceptance.bind(this),this.handleEnablePeer=this.handleEnablePeer.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachImageOrVideo=this.handleAttachImageOrVideo.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.postReadNotification=this.postReadNotification.bind(this),this.clearNotificationQueue=this.clearNotificationQueue.bind(this),this.goToLatestMessage=this.goToLatestMessage.bind(this),this.handleFileDrop=this.handleFileDrop.bind(this),this.handlePickReply=this.handlePickReply.bind(this),this.handleEditMessage=this.handleEditMessage.bind(this),this.handleCancelReply=this.handleCancelReply.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.handleUnpinMessage=this.handleUnpinMessage.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.isDragEnabled=this.isDragEnabled.bind(this),this.handleDragStart=this.handleDragStart.bind(this),this.handleDragIn=this.handleDragIn.bind(this),this.handleDragOut=this.handleDragOut.bind(this),this.handleDrag=this.handleDrag.bind(this),this.handleDrop=this.handleDrop.bind(this),this.chatMessageRefs=[],this.getOrCreateMessageRef=this.getOrCreateMessageRef.bind(this),this.getVisibleMessageRange=this.getVisibleMessageRange.bind(this),this.dragCounter=0,this.dndRef=null,this.readNotificationQueue=[],this.readNotificationTimer=null,this.keyPressTimer=null}getOrCreateMessageRef(e){if(this.chatMessageRefs[e])return this.chatMessageRefs[e];const t=a().createRef();return this.chatMessageRefs[e]=t,t}getVisibleMessageRange(e){let t=Number.MAX_SAFE_INTEGER,s=-1,i=!1;return this.chatMessageRefs.every((a,n)=>{if(a.current){const{top:l,bottom:r,height:o}=a.current.getBoundingClientRect();if(l<=e.top?e.top-l<=o:r-e.bottom<=o)i=!0,t=Math.min(t,n),s=Math.max(s,n);else if(i)return!1}return!0}),s>=t?{min:t,max:s}:{min:0,max:0}}componentDidMount(){this.messagesScroller&&this.messagesScroller.addEventListener(\"scroll\",this.handleScrollEvent),this.mountDnDEvents(this.dndRef),this.componentSetup({},{})}componentWillUnmount(){this.messagesScroller&&this.messagesScroller.removeEventListener(\"scroll\",this.handleScrollEvent),this.clearNotificationQueue(),this.dndRef&&(this.dndRef.removeEventListener(\"dragstart\",this.handleDragStart),this.dndRef.removeEventListener(\"dragenter\",this.handleDragIn),this.dndRef.removeEventListener(\"dragleave\",this.handleDragOut),this.dndRef.removeEventListener(\"dragover\",this.handleDrag),this.dndRef.removeEventListener(\"drop\",this.handleDrop))}componentDidUpdate(e,t){!this.messagesScroller||t.topic==this.state.topic&&t.maxSeqId==this.state.maxSeqId&&t.minSeqId==this.state.minSeqId||this.state.scrollPosition<100&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight),this.props.applicationVisible?this.postReadNotification(0):this.clearNotificationQueue(),this.componentSetup(e,t)}componentSetup(e,t){const s=this.props.tinode?this.props.tinode.getTopic(this.state.topic):void 0;if(this.state.topic!=t.topic&&(t.topic&&!l.Tinode.isNewGroupTopicName(t.topic)&&(this.leave(t.topic),t.rtcPanel&&this.handleCallHangup(t.topic,e.callSeq)),s&&(s.onData=this.handleMessageUpdate,s.onAllMessagesReceived=this.handleAllMessagesReceived,s.onInfo=this.handleInfoReceipt,s.onMetaDesc=this.handleDescChange,s.onSubsUpdated=this.handleSubsUpdated,s.onPres=this.handleSubsUpdated,s.onAuxUpdated=this.handleAuxUpdate)),s)if(this.state.topic!=t.topic||this.props.myUserId&&!e.myUserId){const e=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;s.isP2PType()&&e&&!C.rl?s.getMeta(s.startMetaQuery().withDesc().build()):this.props.myUserId&&this.subscribe(s)}else s.isSubscribed()&&this.state.isReader&&!t.isReader?s.getMeta(s.startMetaQuery().withLaterData().build()):s.isSubscribed()||!this.props.ready||e.ready||this.subscribe(s)}static getDerivedStateFromProps(e,t){let s={};if(e.topic)if(e.topic!=t.topic){const i=e.tinode.getTopic(e.topic);if(s={topic:e.topic,deleted:i._deleted,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,showGoToLastButton:!1,contentToEdit:null,dragging:!1,selectedPin:0},e.forwardMessage)if(e.forwardMessage.content){const t=e.forwardMessage.content,i=t?.length||t?.size||0;s.docPreview={object:t,type:e.forwardMessage.type,size:i}}else s.reply={content:e.forwardMessage.preview,seq:null};else s.reply=null;if(i){const a=[];e.connected&&i.subscribers(t=>{t.online&&t.user!=e.myUserId&&a.push(t)}),Object.assign(s,{onlineSubs:a}),i.isSelfType()?Object.assign(s,{title:e.intl.formatMessage(B.self_topic_name),avatar:!0}):i.public?Object.assign(s,{title:i.public.fn,avatar:(0,_.to)(i.public.photo)}):Object.assign(s,{title:\"\",avatar:null});const n=i.p2pPeerDesc();n?Object.assign(s,{peerMessagingDisabled:Q(n.acs)}):t.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),Object.assign(s,{minSeqId:i.minMsgSeq(),maxSeqId:i.maxMsgSeq(),latestClearId:i.maxClearId(),channel:i.isChannelType(),pins:(i.aux(\"pins\")||[]).slice(),pinsLoaded:!1}),e.callTopic==i.name&&V(e.callState)&&(s.rtcPanel=e.callTopic)}else Object.assign(s,{minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],title:\"\",avatar:null,peerMessagingDisabled:!1,channel:!1,pins:[],pinsLoaded:!1})}else e.callTopic==t.topic&&!t.rtcPanel&&V(e.callState)&&(s.rtcPanel=e.callTopic);else s={minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],topic:null,title:\"\",avatar:null,isVerified:!1,isStaff:!1,isDangerous:!1,deleted:!1,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,peerMessagingDisabled:!1,channel:!1,reply:null,contentToEdit:null,showGoToLastButton:!1,dragging:!1,pins:[],pinsLoaded:!1,selectedPin:0,subsVersion:0};return e.acs?(e.acs.isWriter()!=t.isWriter&&(s.isWriter=!t.isWriter),e.acs.isReader()!=t.isReader&&(s.isReader=!t.isReader),e.acs.isAdmin()!=t.isAdmin&&(s.isAdmin=!t.isAdmin),!e.acs.isReader(\"given\")!=t.readingBlocked&&(s.readingBlocked=!t.readingBlocked),e.acs.isSharer()!=t.isSharer&&(s.isSharer=!t.isSharer)):(t.isWriter&&(s.isWriter=!1),t.isReader&&(s.isReader=!1),t.isAdmin&&(s.isAdmin=!1),t.readingBlocked||(t.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),O(e.acs)==!t.unconformed&&(s.unconfirmed=!t.unconformed),!e.connected&&t.onlineSubs&&t.onlineSubs.length>0&&(s.onlineSubs=[]),s}subscribe(e){if(e.isSubscribed()||!this.props.ready)return;const t=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;let s=e.startMetaQuery().withLaterDesc().withLaterSub().withAux();(this.state.isReader||t)&&(s=s.withLaterData(C.H1),this.state.isReader&&(s=s.withLaterDel()),this.setState({fetchingMessages:!0}));const i=t?this.props.newTopicParams:void 0;e.subscribe(s.build(),i).then(t=>{if(303==t.code)return void f.A.navigateTo(f.A.setUrlTopic(\"\",t.params.topic));this.state.topic!=t.topic&&this.setState({topic:t.topic}),this.state.deleted&&this.setState({deleted:!1}),this.props.onNewTopicCreated(this.props.topic,t.topic);let s=[];e.queuedMessages(t=>{t._sending||(t._fatal||t.head&&t.head.webrtc?s.push(t.seq):e.isSubscribed()&&this.retrySend(t))}),s.length>0&&e.delMessagesList(s,!0)}).catch(e=>{console.error(\"Failed subscription to\",this.state.topic,e),this.props.onError(e.message,\"err\");const t=H.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(B.not_found),this.setState(t)})}leave(e){if(!e||!this.props.tinode.isTopicCached(e))return;const t=this.props.tinode.getTopic(e);t&&t.isSubscribed()&&t.leave(!1).catch(e=>{}).finally(e=>{this.setState({fetchingMessages:!1}),t.onData=void 0,t.onAllMessagesReceived=void 0,t.onInfo=void 0,t.onMetaDesc=void 0,t.onSubsUpdated=void 0,t.onPres=void 0,t.onAuxUpdated=void 0})}handleScrollReference(e){e&&(e.addEventListener(\"scroll\",this.handleScrollEvent),this.messagesScroller=e,this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)}handleScrollEvent(e){const t=e.target.scrollHeight-e.target.scrollTop-e.target.offsetHeight;if(this.setState({scrollPosition:t,showGoToLastButton:t>100&&t<this.state.scrollPosition}),!this.state.fetchingMessages&&!this.processingScrollEvent){if(e.target.scrollTop<=40){const t=this.props.tinode.getTopic(this.state.topic);if(t&&t.isSubscribed()){this.processingScrollEvent=!0;const{min:s,max:i}=this.getVisibleMessageRange(e.target.getBoundingClientRect()),a=t.msgHasMoreMessages(s,i,!1);a.length>0&&this.setState({fetchingMessages:!0},e=>{t.getMessagesPage(C.H1,a,s,i).catch(e=>this.props.onError(e.message,\"err\")).finally(e=>this.setState({fetchingMessages:!1}))})}}this.processingScrollEvent=!1}}mountDnDEvents(e){e&&(e.addEventListener(\"dragstart\",this.handleDragStart),e.addEventListener(\"dragenter\",this.handleDragIn),e.addEventListener(\"dragleave\",this.handleDragOut),e.addEventListener(\"dragover\",this.handleDrag),e.addEventListener(\"drop\",this.handleDrop),this.dndRef=e)}goToLatestMessage(){this.setState({scrollPosition:0}),this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.messagesScroller.offsetHeight)}handleDescChange(e){l.Tinode.isSelfTopicName(this.props.topic)?this.setState({title:this.props.intl.formatMessage(B.self_topic_name),avatar:!0}):e.public?this.setState({title:e.public.fn,avatar:(0,_.to)(e.public.photo)}):this.setState({title:\"\",avatar:null}),e.acs&&this.setState({isWriter:e.acs.isWriter(),isReader:e.acs.isReader(),isAdmin:e.acs.isAdmin(),readingBlocked:!e.acs.isReader(\"given\"),unconfirmed:O(e.acs)})}postReadNotification(e){if(!this.props.applicationVisible||!this.state.topic)return;this.readNotificationTimer||(this.readNotificationTimer=setInterval(e=>{if(0==this.readNotificationQueue.length)return clearInterval(this.readNotificationTimer),void(this.readNotificationTimer=null);let t=-1;for(;this.readNotificationQueue.length>0;){const e=this.readNotificationQueue[0];if(e.topicName!=this.state.topic){this.readNotificationQueue.shift();continue}const s=new Date;if(!(e.sendAt<=s))break;this.readNotificationQueue.shift(),(0==e.seq||l.Tinode.isServerAssignedSeq(e.seq))&&(t=Math.max(t,e.seq))}if(t>=0){const e=this.props.tinode.getTopic(this.state.topic);if(e)try{e.noteRead(t)}catch(e){console.error(\"Failed to send read notification\",e)}}},300));const t=new Date;this.readNotificationQueue.push({topicName:this.state.topic,seq:e,sendAt:t.setMilliseconds(t.getMilliseconds()+C.J)})}clearNotificationQueue(){this.readNotificationQueue=[],this.readNotificationTimer&&(clearInterval(this.readNotificationTimer),this.readNotificationTimer=null)}handleSubsUpdated(){if(this.state.topic){const e=[],t=this.props.tinode.getTopic(this.state.topic);t.subscribers(t=>{t.online&&t.user!=this.props.myUserId&&e.push(t)});const s={onlineSubs:e,subsVersion:this.state.subsVersion+1},i=t.p2pPeerDesc();i?Object.assign(s,{peerMessagingDisabled:Q(i.acs)}):this.state.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),this.setState(s)}}handleMessageUpdate(e){if(!this.state.topic)return;const t=this.props.tinode.getTopic(this.state.topic);if(!e)return void this.setState({latestClearId:t.maxClearId()});clearTimeout(this.keyPressTimer),this.setState({maxSeqId:t.maxMsgSeq(),minSeqId:t.minMsgSeq(),typingIndicator:!1},s=>{t.isNewMessage(e.seq)?this.state.scrollPosition>100?this.setState({showGoToLastButton:!0}):this.goToLatestMessage():this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)});t.msgStatus(e,!0)>=l.Tinode.MESSAGE_STATUS_SENT&&e.from!=this.props.myUserId&&this.postReadNotification(e.seq)}handleAllMessagesReceived(e){if(this.setState({fetchingMessages:!1}),!e){const e=this.props.tinode.getTopic(this.state.topic);return void(e&&this.postReadNotification(e.seq))}if(this.state.pinsLoaded)this.setState({pinsLoaded:!1});else{const e=this.props.tinode.getTopic(this.state.topic);this.setState({pinsLoaded:!0},t=>{e.getPinnedMessages()})}}handleAuxUpdate(e){const t=(e.pins||[]).slice();let s=this.state.selectedPin;t.length>this.state.pins.length?s=0:s>=t.length&&(s=Math.max(0,t.length-1)),this.setState({pins:t,selectedPin:s})}handleInfoReceipt(e){switch(e.what){case\"kp\":clearTimeout(this.keyPressTimer),this.keyPressTimer=setTimeout(e=>this.setState({typingIndicator:!1}),C.NR+1e3),this.state.typingIndicator||this.setState({typingIndicator:!0});break;case\"read\":case\"recv\":this.forceUpdate();break;default:console.info(\"Other change in topic: \",e.what)}}handleExpandMedia(e){e&&(e.video?this.setState({videoPostview:e}):this.setState({imagePostview:e}))}handleClosePreview(){this.state.imagePreview&&this.state.imagePreview.url&&URL.revokeObjectURL(this.state.imagePreview.url),this.state.videoPreview&&this.state.videoPreview.url&&URL.revokeObjectURL(this.state.videoPreview.url),this.setState({imagePostview:null,imagePreview:null,docPreview:null,videoPreview:null,videoPostview:null}),this.props.onCancelForwardMessage()}handleFormResponse(e,t,s){if(\"pub\"==e)this.sendMessage(l.Drafty.attachJSON(l.Drafty.parse(t),s));else if(\"url\"==e){const e=new URL(s.ref),t=e.searchParams;for(let e in s.resp)s.resp.hasOwnProperty(e)&&t.set(e,s.resp[e]);[\"name\",\"seq\"].forEach(e=>{s[e]&&t.set(e,s[e])}),t.set(\"uid\",this.props.myUserId),t.set(\"topic\",this.state.topic),e.search=t,window.open(e,\"_blank\")}else console.info(\"Unknown action in form\",e)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.state.topic,y:e.pageY,x:e.pageX})}handleShowMessageContextMenu(e,t){\"chan\"==e.userFrom&&(e.userFrom=this.state.topic,e.userName=this.state.title),e.topicName=this.state.topic;const s=t||[],i=this.props.tinode.getTopic(e.topicName);if(i)if(i.isSelfType())s.push(\"message_delete_generic\");else{i.isChannelType()||s.push(\"message_delete\");const t=i.getAccessMode();if(t&&t.isDeleter()){let i=t.isOwner();if(!i){const t=0|this.props.tinode.getServerParam(l.Tinode.MSG_DELETE_AGE,0);i=0==t||!!(t>0&&e.timestamp)&&e.timestamp.getTime()>(new Date).getTime()-1e3*t}i&&s.push(\"message_delete_hard\")}}this.props.showContextMenu(e,s)}handleNewChatAcceptance(e){this.props.onNewChat(this.state.topic,e)}handleEnablePeer(e){e.preventDefault(),this.props.onChangePermissions(this.state.topic,C.cZ,this.state.topic)}sendKeyPress(e){const t=this.props.tinode.getTopic(this.state.topic);t.isSubscribed()&&(e?t.noteRecording(!0):t.noteKeyPress())}sendMessage(e,t,s){let i;if(!e&&this.props.forwardMessage)e=this.props.forwardMessage.msg,i=this.props.forwardMessage.head,this.handleCancelReply();else if(this.state.reply){if(this.state.reply.editing){if(e==this.state.contentToEdit)return void this.handleCancelReply();i={replace:\":\"+this.state.reply.seq}}else this.state.reply.content&&(i={reply:\"\"+this.state.reply.seq},\"string\"==typeof e&&(e=l.Drafty.parse(e)),e=l.Drafty.append(l.Drafty.sanitizeEntities(this.state.reply.content),e));this.handleCancelReply()}this.props.sendMessage(e,t,s,i)}retrySend(e){this.props.sendMessage(e.content,void 0,void 0,e.head).then(t=>{this.props.tinode.getTopic(this.state.topic).delMessagesList([e.seq],!0)})}sendFileAttachment(e){const t=.75*this.props.tinode.getServerParam(\"maxMessageSize\",C.mp)-1024|0;if((l.TheCard.isFileSupported(e.type,e.name)||e.type==l.TheCard.contentType)&&this.sendTheCardAttachment(e,t))return;const s=e=>e===C.Uv?\"application/octet-stream\":e;if(e.size>t){const t=this.props.tinode.getLargeFileHelper();if(!t)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const i=t.upload(e),a=l.Drafty.attachFile(null,{mime:s(e.type),filename:e.name,size:e.size,urlPromise:i});this.sendMessage(a,i,t)}else(0,_.bB)(e).then(t=>this.sendMessage(l.Drafty.attachFile(null,{mime:s(t.mime),data:t.bits,filename:t.name,size:e.size}))).catch(e=>this.props.onError(e.message,\"err\"))}sendTheCardAttachment(e,t){return!(e.size>t)&&(e.type==l.TheCard.contentType?(this.sendMessage(l.Drafty.appendTheCard(null,e.object)),!0):((0,_.QJ)(e).then(e=>{this.sendMessage(l.Drafty.appendTheCard(null,e))}).catch(e=>{this.props.onError(this.props.intl.formatMessage(B.cannot_parse_vcard,{error:e.message}),\"err\")}),!0))}handleAttachFile(e){const t=this.props.tinode.getServerParam(\"maxFileUploadSize\",C.qy);e.size>t?this.props.onError(this.props.intl.formatMessage(B.file_attachment_too_large,{size:(0,o.lX)(e.size),limit:(0,o.lX)(t)}),\"err\"):this.setState({docPreview:{file:e,name:e.name,size:e.size,type:e.type}})}handleCallHangup(e,t){this.props.onVideoCallClosed(),this.setState({rtcPanel:null}),this.props.onCallHangup(e,t)}handleCallPanelToggle(){this.setState({minimizedCallPanel:!this.state.minimizedCallPanel})}sendImageAttachment(e,t){const s=this.state.imagePreview.mime,i=this.state.imagePreview.width,a=this.state.imagePreview.height,n=this.state.imagePreview.filename,r=.75*this.props.tinode.getServerParam(\"maxMessageSize\",C.mp)-1024|0;if(t.size>r){const r=this.props.tinode.getLargeFileHelper();if(!r)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const o=r.upload(t);return void(0,_.ag)(t,C.wj,C.wj,-1,!1).then(e=>(0,_.Sk)(e.blob)).then(h=>{let d=l.Drafty.insertImage(null,0,{mime:s,_tempPreview:h.bits,bits:h.bits,width:i,height:a,filename:n,size:t.size,urlPromise:o});e&&(d=l.Drafty.appendLineBreak(d),d=l.Drafty.append(d,l.Drafty.parse(e))),this.sendMessage(d,o,r)}).catch(e=>this.props.onError(e,\"err\"))}(0,_.Sk)(t).then(s=>{let r=l.Drafty.insertImage(null,0,{mime:s.mime,bits:s.bits,width:i,height:a,filename:n,size:t.size});e&&(r=l.Drafty.appendLineBreak(r),r=l.Drafty.append(r,l.Drafty.parse(e))),this.sendMessage(r)})}sendVideoAttachment(e,t,s,i){const a=i.width,n=i.height,r=.75*this.props.tinode.getServerParam(\"maxMessageSize\",C.mp)-1024|0,o=[];let h;if(t.size+s.size>r){if(h=this.props.tinode.getLargeFileHelper(),!h)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));o[0]=t.size>.675*r?h.upload(t):null,o[1]=s.size>.275*r?h.upload(s):null}if(0==o.length)return void Promise.all([(0,_.Sk)(t),(0,_.Sk)(s)]).then(s=>{const[r,o]=s;let h=l.Drafty.insertVideo(null,0,{mime:r.mime,bits:r.bits,preview:o.bits,premime:o.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size});e&&(h=l.Drafty.appendLineBreak(h),h=l.Drafty.append(h,l.Drafty.parse(e))),this.sendMessage(h)});const d=Promise.all(o),p=[];p[0]=o[0]?null:(0,_.Sk)(t),p[1]=o[1]?null:(0,_.ag)(s,C.QG,C.QG,-1,!1).then(e=>(0,_.Sk)(e.blob)),p[2]=(0,_.ag)(s,C.Cx,C.Cx,-1,!1).then(e=>(0,_.Sk)(e.blob)),Promise.all(p).then(s=>{const[r,o,p]=s;let c=l.Drafty.insertVideo(null,0,{mime:i.mime,bits:r?r.bits:null,_tempPreview:p.bits,preview:o?o.bits:p.bits,premime:o?o.mime:p.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size,urlPromise:d});e&&(c=l.Drafty.appendLineBreak(c),c=l.Drafty.append(c,l.Drafty.parse(e))),this.sendMessage(c,d,h)}).catch(e=>this.props.onError(e.message,\"err\"))}handleAttachImageOrVideo(e){const t=this.props.tinode.getServerParam(\"maxFileUploadSize\",C.qy);e.type.startsWith(\"video/\")?this.setState({videoPreview:{url:URL.createObjectURL(e),blob:e,filename:e.name,size:e.size,mime:e.type}}):(0,_.ag)(e,C.QG,C.QG,t,!1).then(e=>{this.setState({imagePreview:{url:URL.createObjectURL(e.blob),blob:e.blob,filename:e.name,width:e.width,height:e.height,size:e.blob.size,mime:e.mime}})}).catch(e=>{this.props.onError(e.message,\"err\")})}handleFileDrop(e){if(!e||0==e.length)return;const t=e[0];t.type&&t.type.startsWith(\"image/\")?this.handleAttachImageOrVideo(t):this.handleAttachFile(t)}sendAudioAttachment(e,t,s){fetch(e).then(e=>e.blob()).then(e=>{const i=.75*this.props.tinode.getServerParam(\"maxMessageSize\",C.mp)-1024;if(e.size>i){const i=this.props.tinode.getLargeFileHelper();if(!i)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const a=i.upload(e),n=l.Drafty.appendAudio(null,{mime:e.type,size:e.size,duration:s,preview:t,urlPromise:a});this.sendMessage(n,a,i)}else(0,_.Sk)(e).then(i=>{this.sendMessage(l.Drafty.appendAudio(null,{mime:i.mime,bits:i.bits,size:e.size,duration:s,preview:t}))})}).catch(e=>{this.props.onError(e.message,\"err\")})}handleCancelUpload(e,t){const s=this.props.tinode.getTopic(this.state.topic).findMessage(e);s&&(s._cancelled=!0),t.cancel()}handlePickReply(e,t,s,i){e&&t?(t=\"string\"==typeof t?l.Drafty.init(t):t,t=l.Drafty.isValid(t)?l.Drafty.replyContent(t,C.Rz):l.Drafty.append(l.Drafty.init(\"⚠ \"),l.Drafty.wrapInto(this.props.intl.formatMessage(B.invalid_content),\"EM\")),this.setState({reply:{content:l.Drafty.quote(i,s,t),seq:e}}),this.props.onCancelForwardMessage()):this.setState({reply:null})}handleEditMessage(e,t){if(!e||!t)return void this.setState({reply:null});t=\"string\"==typeof t?l.Drafty.init(t):t;const s=l.Drafty.toMarkdown(t);t=l.Drafty.isValid(t)?l.Drafty.replyContent(t,C.hB):l.Drafty.append(l.Drafty.init(\"⚠ \"),l.Drafty.wrapInto(this.props.intl.formatMessage(B.invalid_content),\"EM\")),this.setState({reply:{content:l.Drafty.quote(this.props.intl.formatMessage(B.editing_message),null,t),seq:e,editing:!0},contentToEdit:s}),this.props.onCancelForwardMessage()}handleCancelReply(){this.setState({reply:null,contentToEdit:null}),this.props.onCancelForwardMessage()}handleQuoteClick(e){const t=this.getOrCreateMessageRef(e);t&&t.current?(t.current.scrollIntoView({block:\"center\",behavior:\"smooth\"}),t.current.classList.add(\"flash\"),setTimeout(e=>{t.current.classList.remove(\"flash\")},1e3)):console.error(\"Unresolved message ref\",e)}handleUnpinMessage(e){this.props.tinode.getTopic(this.state.topic).pinMessage(e,!1)}isDragEnabled(){return this.state.isWriter&&!this.state.unconfirmed&&!this.props.forwardMessage&&!this.state.peerMessagingDisabled}handleDragStart(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.clearData()}handleDragIn(e){e.preventDefault(),e.stopPropagation(),this.dragCounter++,e.dataTransfer.items&&e.dataTransfer.items.length>0&&this.setState({dragging:!0})}handleDragOut(e){e.preventDefault(),e.stopPropagation(),this.dragCounter--,this.dragCounter<=0&&this.setState({dragging:!1})}handleDrag(e){e.preventDefault(),e.stopPropagation()}handleDrop(e){e.preventDefault(),e.stopPropagation(),this.setState({dragging:!1}),this.isDragEnabled()&&e.dataTransfer.files&&e.dataTransfer.files.length>0&&(this.handleFileDrop(e.dataTransfer.files),this.dragCounter=0)}render(){const{formatMessage:e}=this.props.intl,t=this.state.rtcPanel&&a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(x,{topic:this.state.topic,seq:this.props.callSeq,callState:this.props.callState,callAudioOnly:this.props.callAudioOnly,tinode:this.props.tinode,title:this.state.title,avatar:this.state.avatar||!0,minimized:this.state.minimizedCallPanel,onError:this.props.onError,onHangup:this.handleCallHangup,onToggleMinimize:this.handleCallPanelToggle,onInvite:this.props.onCallInvite,onSendOffer:this.props.onCallSendOffer,onIceCandidate:this.props.onCallIceCandidate,onSendAnswer:this.props.onCallSendAnswer}));let s;if(this.state.topic){let r;if(this.state.imagePreview)r=a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(U,{content:this.state.imagePreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendImageAttachment}));else if(this.state.videoPreview)r=a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(q,{content:this.state.videoPreview,tinode:this.props.tinode,reply:this.state.reply,onError:this.props.onError,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendVideoAttachment}));else if(this.state.imagePostview)r=a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(U,{content:this.state.imagePostview,onClose:this.handleClosePreview}));else if(this.state.videoPostview)r=a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(q,{content:this.state.videoPostview,tinode:this.props.tinode,onError:this.props.onError,onClose:this.handleClosePreview}));else if(this.state.docPreview)r=l.TheCard.isFileSupported(this.state.docPreview.type,this.state.docPreview.name)||this.state.docPreview.type==l.TheCard.contentType?a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(z,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment})):a().createElement(i.Suspense,{fallback:a().createElement(\"div\",null,a().createElement(n.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},a().createElement(L,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment}));else{const t=this.props.tinode.getTopic(this.state.topic),s=t.isChannelType()||t.chan,i=t.isGroupType()&&!s,h=[];t.trusted&&(t.trusted.verified&&h.push({icon:\"verified\",color:\"badge-inv\"}),t.trusted.staff&&h.push({icon:\"staff\",color:\"badge-inv\"}),t.trusted.danger&&h.push({icon:\"dangerous\",color:\"badge-inv\"}));const d=[];this.state.pins.forEach(e=>d.push(t.latestMsgVersion(e)||t.findMessage(e)));const c=[];let u=null,m=null,g=null;t.messages((e,s,n,l)=>{let r=n?n.from||\"chan\":null,h=\"single\",d=e.from||\"chan\";d==u?h=d==r?\"middle\":\"last\":d==r&&(h=\"first\"),u=d;const p=!(d==this.props.myUserId),f=t.msgStatus(e,!0);let v,y,E=d;const M=t.userDesc(d);M&&M.public&&(v=M.public.fn,y=(0,_.to)(M.public.photo)),g=i?\"chat-box group\":\"chat-box\";const S=this.getOrCreateMessageRef(e.seq);let C=e.head?parseInt(e.head.reply):null;if(C&&!isNaN(C)||(C=null),e.hi)c.push(a().createElement(P,{deleted:!0,key:e.seq}));else{const t=new Date(e.ts);m&&m.toDateString()==t.toDateString()||(c.push(a().createElement(P,{date:(0,o.mf)(e.ts),locale:this.props.intl.locale,key:\"date-\"+e.seq})),m=t),c.push(a().createElement(b,{tinode:this.props.tinode,topic:this.state.topic,content:e.content,mimeType:e.head&&e.head.mime,replyToSeq:C,edited:e.head&&!e.head.webrtc&&e.head.replace,timestamp:e.ts,response:p,seq:e.seq,isGroup:i,isChan:this.state.channel,userFrom:E,userName:v,userAvatar:y,sequence:h,received:f,uploader:e._uploader,userIsWriter:this.state.isWriter,userIsAdmin:this.state.isAdmin,pinned:this.state.pins.includes(e.seq),viewportWidth:this.props.viewportWidth,showContextMenu:this.handleShowMessageContextMenu,onExpandMedia:this.handleExpandMedia,onFormResponse:this.handleFormResponse,onCancelUpload:this.handleCancelUpload,pickReply:this.handlePickReply,editMessage:this.handleEditMessage,onQuoteClick:this.handleQuoteClick,onAcceptCall:this.props.onAcceptCall,onError:this.props.onError,ref:S,key:e.seq}))}});let f=null;if(s)t.subcnt&&(f=e(B.subscriber_count,{count:t.subcnt}));else{const s=this.props.tinode.getMeTopic().getContact(this.state.topic);s&&(l.Tinode.isP2PTopicName(s.topic)?s.online?f=e(B.online_now):s.seen&&(f=e(B.last_seen,{timestamp:(0,o.cq)(s.seen.when,this.props.intl.locale)})):l.Tinode.isGroupTopicName(s.topic)&&t.subcnt&&(f=e(B.member_count,{count:t.subcnt})))}const v=this.state.avatar||!0,y=this.state.deleted||t.isSelfType()?null:this.props.online?\"online\"+(this.state.typingIndicator?\" typing\":\"\"):\"offline\",E=\"panel-title\"+(this.state.deleted?\" deleted\":\"\"),C=\"dark\"==this.props.colorSchema?\"dark\":\"\";let D=a().createElement(a().Fragment,null,a().createElement(\"div\",{id:\"messages-container\",className:C},a().createElement(\"button\",{id:\"go-to-latest\",className:\"action-button\"+(this.state.showGoToLastButton?\"\":\" hidden\"),onClick:this.goToLatestMessage},a().createElement(\"i\",{className:\"material-icons\"},\"arrow_downward\")),a().createElement(\"div\",{id:\"messages-panel\",ref:this.handleScrollReference},a().createElement(\"ul\",{id:\"scroller\",className:g},c)),this.state.isReader?null:a().createElement(\"div\",{id:\"write-only-background\"},this.state.readingBlocked?a().createElement(\"div\",{id:\"write-only-note\"},a().createElement(n.FormattedMessage,{id:\"messages_not_readable\",defaultMessage:[{type:0,value:\"no access to messages\"}]})):null)),this.state.peerMessagingDisabled&&!this.state.unconfirmed?a().createElement(\"div\",{id:\"peer-messaging-disabled-note\"},a().createElement(\"i\",{className:\"material-icons secondary\"},\"block\"),\" \",a().createElement(n.FormattedMessage,{id:\"peers_messaging_disabled\",defaultMessage:[{type:0,value:\"Peer's messaging is disabled.\"}]}),\" \",a().createElement(\"a\",{href:\"#\",onClick:this.handleEnablePeer},a().createElement(n.FormattedMessage,{id:\"enable_peers_messaging\",defaultMessage:[{type:0,value:\"Enable\"}]})),\".\"):null,this.state.unconfirmed?a().createElement(A,{onAction:this.handleNewChatAcceptance}):a().createElement(N.A,{tinode:this.props.tinode,topicName:this.state.topic,noInput:!!this.props.forwardMessage,disabled:!this.state.isWriter||this.state.deleted,reply:this.state.reply,initMessage:this.state.contentToEdit,sendOnEnter:this.props.sendOnEnter,onKeyPress:this.sendKeyPress,onRecordingProgress:this.sendKeyPress,onSendMessage:this.sendMessage,onAttachFile:this.props.forwardMessage?null:this.handleAttachFile,onAttachImage:this.props.forwardMessage?null:this.handleAttachImageOrVideo,onAttachAudio:this.props.forwardMessage?null:this.sendAudioAttachment,onError:this.props.onError,onQuoteClick:this.handleQuoteClick,onCancelReply:this.handleCancelReply}));r=a().createElement(a().Fragment,null,a().createElement(\"div\",{id:\"topic-caption-panel\",className:\"caption-panel\"},this.props.displayMobile?a().createElement(\"a\",{href:\"#\",id:\"hide-message-view\",onClick:e=>{e.preventDefault(),this.leave(this.state.topic),this.props.onHideMessagesView()}},a().createElement(\"i\",{className:\"material-icons\"},\"arrow_back\")):null,a().createElement(\"div\",{className:\"avatar-box\"},a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:v,topic:this.state.topic,title:this.state.title,deleted:this.state.deleted}),s?null:a().createElement(\"span\",{className:y})),a().createElement(\"div\",{id:\"topic-title-group\"},a().createElement(\"div\",{id:\"topic-title\",className:E},this.state.title||a().createElement(\"i\",null,a().createElement(n.FormattedMessage,{id:\"unnamed_topic\",defaultMessage:[{type:0,value:\"Unnamed\"}]})),a().createElement(M.A,{badges:h})),a().createElement(\"div\",{id:\"topic-last-seen\"},f)),a().createElement(\"div\",{style:{marginLeft:\"auto\"}}),!this.props.displayMobile&&this.state.pins.length>0?a().createElement(k,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,i?a().createElement(w,{tinode:this.props.tinode,subscribers:this.state.onlineSubs}):null,a().createElement(\"div\",null,a().createElement(\"a\",{href:\"#\",onClick:this.handleContextClick},a().createElement(\"i\",{className:\"material-icons\"},\"more_vert\")))),this.props.displayMobile?a().createElement(a().Fragment,null,this.state.pins.length>0?a().createElement(k,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,a().createElement(S.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError})):null,a().createElement(F.A,{show:this.state.fetchingMessages}),D,this.state.dragging&&this.isDragEnabled()?a().createElement(\"div\",{className:\"drag-n-drop\"},e(B.drag_file)):null)}s=a().createElement(\"div\",{id:\"topic-view\",ref:this.mountDnDEvents},r,t)}else s=a().createElement(D,{serverVersion:this.props.serverVersion,serverAddress:this.props.serverAddress});return s}}var j=(0,n.injectIntl)(H)}}]);\n//# sourceMappingURL=429.prod.js.map"
  },
  {
    "path": "umd/440.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[440],{440:(e,t,i)=>{i.r(t),i.d(t,{default:()=>g});var s=i(6376),a=i.n(s),n=i(6648),r=i(5748),o=i(1140),h=i.n(o),d=i(1480),l=i(1848),c=i(936);const u=100,m=\"audio/webm\",p=[m,\"audio/mp4\",\"\"],v=(0,n.defineMessages)({icon_title_delete:{id:\"icon_title_delete\",defaultMessage:[{type:0,value:\"Delete recording\"}]},icon_title_pause:{id:\"icon_title_pause\",defaultMessage:[{type:0,value:\"Pause playback\"}]},icon_title_resume:{id:\"icon_title_resume\",defaultMessage:[{type:0,value:\"Resume playback\"}]},icon_title_send:{id:\"icon_title_send\",defaultMessage:[{type:0,value:\"Send message\"}]},failed_to_init_audio:{id:\"failed_to_init_audio\",defaultMessage:[{type:0,value:\"Failed to initialize audio recording\"}]}});class f extends a().PureComponent{constructor(e){super(e),this.state={enabled:!0,audioRecord:null,recording:!0,paused:!1,duration:\"0:00\",blobUrl:null,preview:null},this.visualize=this.visualize.bind(this),this.initMediaRecording=this.initMediaRecording.bind(this),this.initCanvas=this.initCanvas.bind(this),this.getRecording=this.getRecording.bind(this),this.cleanUp=this.cleanUp.bind(this),this.handleResume=this.handleResume.bind(this),this.handlePause=this.handlePause.bind(this),this.handleDelete=this.handleDelete.bind(this),this.handleDone=this.handleDone.bind(this),this.durationMillis=0,this.startedOn=null,this.viewBuffer=[],this.canvasRef=a().createRef(),this.recordingTimestamp=0}componentDidMount(){this.stream=null,this.mediaRecorder=null,this.audioContext=null,this.audioInput=null,this.analyser=null,this.audioChunks=[];try{navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.initMediaRecording,this.props.onError)}catch(e){this.props.onError(e)}}componentWillUnmount(){this.startedOn=null,this.stream&&this.cleanUp()}visualize(){this.initCanvas();const e=new Uint8Array(this.analyser.frequencyBinCount),t=this.canvasWidth,i=this.canvasHeight,s=t/10|0,a=u*s;this.canvasContext.lineWidth=6,this.canvasContext.strokeStyle=\"#BBBD\";let n=0,r=0,o=0;const h=d=>{if(!this.startedOn)return;window.requestAnimationFrame(h);const m=this.durationMillis+(Date.now()-this.startedOn);this.setState({duration:(0,l.sj)(m/1e3)}),m>c.W0&&(this.startedOn=null,this.mediaRecorder.pause(),this.durationMillis+=Date.now()-this.startedOn,this.setState({enabled:!1,recording:!1,duration:(0,l.sj)(this.durationMillis/1e3)})),this.analyser.getByteTimeDomainData(e);let p=0;for(const t of e)p+=(t-127)**2;r+=Math.sqrt(p/e.length),o++;let v=m/u|0;const f=a>m?0:(m-u*v)/u*10;n!=v&&(n=v,this.viewBuffer.push(r/o),r=0,o=0,this.viewBuffer.length>s&&this.viewBuffer.shift()),this.canvasContext.clearRect(0,0,t,i),this.canvasContext.beginPath();for(let e=0;e<this.viewBuffer.length;e++){let t=10*e-f,s=Math.max(Math.min(this.viewBuffer[e]/64,.9)*i,1);this.canvasContext.moveTo(t,.5*(i-s)),this.canvasContext.lineTo(t,.5*(i+s))}this.canvasContext.stroke();const g=(new Date).getTime();g-this.recordingTimestamp>c.mo&&(this.props.onRecordingProgress(),this.recordingTimestamp=g)};h()}handlePause(e){e.preventDefault(),this.mediaRecorder.pause(),this.mediaRecorder.requestData(),this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null,this.setState({recording:!1})}handleResume(e){e.preventDefault(),this.state.enabled&&(this.startedOn=Date.now(),this.mediaRecorder.resume(),this.setState({recording:!0},this.visualize))}handleDelete(e){e.preventDefault(),this.durationMillis=0,this.startedOn=null,this.mediaRecorder.stop(),this.cleanUp(),this.setState({recording:!1})}handleDone(e){e.preventDefault(),this.setState({recording:!1}),this.startedOn&&(this.durationMillis+=Date.now()-this.startedOn,this.startedOn=null),this.mediaRecorder&&this.mediaRecorder.stop()}initCanvas(){this.canvasRef.current.width=2*this.canvasRef.current.offsetWidth,this.canvasRef.current.height=2*this.canvasRef.current.offsetHeight,this.canvasContext=this.canvasRef.current.getContext(\"2d\"),this.canvasContext.lineCap=\"round\",this.canvasContext.translate(.5,.5),this.canvasWidth=this.canvasRef.current.width,this.canvasHeight=this.canvasRef.current.height}initMediaRecording(e){return this.stream=e,p.some((t=>!!MediaRecorder.isTypeSupported(t)&&(this.mediaRecorder=new MediaRecorder(e,{mimeType:t,audioBitsPerSecond:24e3}),!0))),this.mediaRecorder?(this.audioContext=new AudioContext,this.audioInput=this.audioContext.createMediaStreamSource(e),this.audioInput?(this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=256,this.audioInput.connect(this.analyser),this.mediaRecorder.onstop=e=>{this.durationMillis>c.OS?this.getRecording(this.mediaRecorder.mimeType).then((e=>this.props.onFinished(e.url,e.preview,this.durationMillis))):this.props.onDeleted(),this.cleanUp()},this.mediaRecorder.ondataavailable=e=>{e.data.size>0&&this.audioChunks.push(e.data),\"inactive\"!=this.mediaRecorder.state&&this.getRecording(this.mediaRecorder.mimeType).then((e=>{this.setState({blobUrl:e.url,preview:e.preview})}))},this.durationMillis=0,this.startedOn=Date.now(),this.mediaRecorder.start(),this.visualize(),this.props.onRecordingProgress(),void(this.recordingTimestamp=this.startedOn)):(console.warn(\"createMediaStreamSource returned null: audio input unavailable\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))):(console.warn(\"MediaRecorder failed to initialize: no supported audio formats\"),void this.props.onError(this.props.intl.formatMessage(v.failed_to_init_audio)))}getRecording(e){e=e||m;let t=new Blob(this.audioChunks,{type:e});return(e==m?h()(t,e):Promise.resolve(t)).then((e=>(t=e,e.arrayBuffer()))).then((e=>this.audioContext.decodeAudioData(e))).then((e=>this.createPreview(e))).then((e=>({url:window.URL.createObjectURL(t),preview:(0,d.wf)(e)})))}createPreview(e){const t=e.getChannelData(0),i=Math.min(t.length,96),s=t.length/i|0,a=Math.max(1,s/10|0);let n=[],r=-1;for(let e=0;e<i;e++){let i=0,o=0;for(let n=0;n<s;n+=a)i+=t[s*e+n]**2,o++;const h=Math.sqrt(i/o);n.push(h),r=Math.max(r,h)}return r>0&&(n=n.map((e=>100*e/r|0))),n}cleanUp(){this.audioInput&&this.audioInput.disconnect(),this.stream.getTracks().forEach((e=>e.stop()))}render(){const{formatMessage:e}=this.props.intl,t=\"material-icons \"+(this.state.enabled?\"red\":\"gray\");return a().createElement(\"div\",{className:\"audio\"},a().createElement(\"a\",{href:\"#\",onClick:this.handleDelete,title:e(v.icon_title_delete)},a().createElement(\"i\",{className:\"material-icons gray\"},\"delete_outline\")),this.state.recording?a().createElement(\"canvas\",{ref:this.canvasRef}):a().createElement(r.c,{src:this.state.blobUrl,preview:this.state.preview,duration:this.durationMillis,short:!0}),a().createElement(\"div\",{className:\"duration\"},this.state.duration),this.state.recording?a().createElement(\"a\",{href:\"#\",onClick:this.handlePause,title:e(v.icon_title_pause)},a().createElement(\"i\",{className:\"material-icons\"},\"pause_circle_outline\")):a().createElement(\"a\",{href:\"#\",onClick:this.handleResume,title:e(v.icon_title_resume)},a().createElement(\"i\",{className:t},\"radio_button_checked\")),a().createElement(\"a\",{href:\"#\",onClick:this.handleDone,title:e(v.icon_title_send)},a().createElement(\"i\",{className:\"material-icons\"},\"send\")))}}const g=(0,n.injectIntl)(f)}}]);\n//# sourceMappingURL=440.prod.js.map"
  },
  {
    "path": "umd/472.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[472],{4472:function(e,t,n){n.r(t),n.d(t,{default:function(){return r}});var a=n(1594),l=n.n(a),s=n(8181),o=n(1725),i=n(8589);class r extends l().PureComponent{constructor(e){super(e),this.handleSendDoc=this.handleSendDoc.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){document.addEventListener(\"keydown\",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener(\"keydown\",this.handleKeyDown)}handleKeyDown(e){e.preventDefault(),\"Escape\"===e.key&&this.props.onClose()}handleSendDoc(e){this.props.onClose(),this.props.onSendMessage(this.props.content.file)}render(){return this.props.content?l().createElement(\"div\",{id:\"image-preview\"},l().createElement(\"div\",{id:\"preview-caption-panel\"},l().createElement(\"span\",null,this.props.content.name),l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onClose()}},l().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))),l().createElement(\"div\",{id:\"image-preview-container\"},l().createElement(\"div\",{className:\"doc-card\"},l().createElement(\"i\",{className:\"material-icons gray\"},function(e){const t={default:\"insert_drive_file\",image:\"image\",text:\"description\",video:\"theaters\"};return t[e]||t[(e||\"\").split(\"/\")[0]]||t.default}(this.props.content.type)),l().createElement(\"div\",null,l().createElement(\"b\",null,l().createElement(s.FormattedMessage,{id:\"label_file_name\",defaultMessage:[{type:0,value:\"File name:\"}]})),\" \",(0,i.Tu)(this.props.content.name,24)||\"-\"),l().createElement(\"div\",null,l().createElement(\"b\",null,l().createElement(s.FormattedMessage,{id:\"label_content_type\",defaultMessage:[{type:0,value:\"Content type:\"}]})),\" \",this.props.content.type||\"application/octet-stream\"),l().createElement(\"div\",null,l().createElement(\"b\",null,l().createElement(s.FormattedMessage,{id:\"label_size\",defaultMessage:[{type:0,value:\"Size:\"}]})),\" \",(0,i.lX)(this.props.content.size)))),l().createElement(o.A,{noInput:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendDoc,onError:this.props.onError})):null}}}}]);\n//# sourceMappingURL=472.prod.js.map"
  },
  {
    "path": "umd/500.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[500],{2500:function(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\\\\n¯∖_(ツ)_/¯\",\"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é\",\"pin_message\":\"Épingler\",\"unpin_message\":\"Détacher\",\"failed_to_init_audio\":\"Échec de l\\'initialisation de l\\'enregistrement audio\",\"password_reset_success\":\"Mot de passe réinitialisé avec succès\",\"scan_qr_code\":\"Scanner le code QR\",\"self_topic_comment\":\"Notes, messages, liens, fichiers sauvegardés\",\"self_topic_name\":\"Messages sauvegardés\",\"message_not_found\":\"message introuvable\",\"message_deleted\":\"message supprimé\",\"alias_editing_placeholder\":\"Alias (facultatif)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(déjà utilisé)\",\"alias_invalid\":\"(invalide)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Sélectionner un pays\",\"text_copied\":\"Copié dans le presse-papiers\",\"color_schema_dark\":\"Sombre\",\"color_schema_light\":\"Clair\",\"color_schema_system\":\"Thème du système\",\"label_color_schema\":\"Thème :\",\"label_text_size\":\"Taille du texte :\",\"incognito_mode_description\":\"Masquer votre statut en ligne et les indicateurs de frappe.\",\"send_command\":\"Envoyer avec {key}\",\"send_command_explained\":\"Appuyez sur Entrée pour une nouvelle ligne\",\"send_plain\":\"Envoyer avec Entrée\",\"send_plain_explained\":\"Appuyez sur Shift + Entrée pour une nouvelle ligne\",\"sidepanel_title_acc_general\":\"Général\",\"label_keyboard\":\"Clavier :\",\"pin_chat\":\"Épingler\",\"unpin_chat\":\"Désépingler\",\"subscriber_count\":\"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}\",\"label_member_count\":\"Membres :\",\"label_subscriber_count\":\"Abonnés :\",\"member_count\":\"{count, plural, one {{count, number} membre} other {{count, number} membres}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"motif\",\"button_restore\":\"Restaurer par défaut\",\"wallpapers\":\"Fonds d\\'écran\",\"label_blur_wallpaper\":\"Flou :\",\"label_scan_id\":\"Scanner mon ID :\",\"unknown_name\":\"Inconnu\",\"save_action\":\"Enregistrer\",\"cannot_parse_vcard\":\"Impossible d\\'analyser le fichier vCard.\",\"chat_now\":\"Discuter\",\"find_user\":\"Rechercher\",\"label_contact_card\":\"Carte de contact\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"ajouter des membres\"}')}}]);"
  },
  {
    "path": "umd/501.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[501],{8169:(t,d,e)=>{e.d(d,{Z:()=>S});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]+)?$/;var l=e(457);function s(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 c(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 c(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 c(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function f(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 h(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?f(Object(e),!0).forEach((function(d){g(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function g(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var m={formatExtension:function(t,d,e){return\"\".concat(t).concat(e.ext()).concat(d)}};function y(t,d,e,r){if(e=e?h(h({},m),e):m,r=new n.ZP(r),t.country&&\"001\"!==t.country){if(!r.hasCountry(t.country))throw new Error(\"Unknown country: \".concat(t.country));r.country(t.country)}else{if(!t.countryCallingCode)return t.phone||\"\";r.selectNumberingPlan(t.countryCallingCode)}var a,i=r.countryCallingCode(),o=e.v2?t.nationalNumber:t.phone;switch(d){case\"NATIONAL\":return o?v(a=p(o,t.carrierCode,\"NATIONAL\",r,e),t.ext,r,e.formatExtension):\"\";case\"INTERNATIONAL\":return o?(a=p(o,null,\"INTERNATIONAL\",r,e),v(a=\"+\".concat(i,\" \").concat(a),t.ext,r,e.formatExtension)):\"+\".concat(i);case\"E.164\":return\"+\".concat(i).concat(o);case\"RFC3966\":return(0,l.Y)({number:\"+\".concat(i).concat(o),ext:t.ext});case\"IDD\":if(!e.fromCountry)return;var $=function(t,d,e,r,a){var i=(0,n.Gg)(r,a.metadata);if(i===e){var o=p(t,d,\"NATIONAL\",a);return\"1\"===e?e+\" \"+o:o}var $=function(t,d,e){var r=new n.ZP(e);return r.selectNumberingPlan(t,d),r.defaultIDDPrefix()?r.defaultIDDPrefix():u.test(r.IDDPrefix())?r.IDDPrefix():void 0}(r,void 0,a.metadata);if($)return\"\".concat($,\" \").concat(e,\" \").concat(p(t,null,\"INTERNATIONAL\",a))}(o,t.carrierCode,i,e.fromCountry,r);return v($,t.ext,r,e.formatExtension);default:throw new Error('Unknown \"format\" argument passed to \"formatNumber()\": \"'.concat(d,'\"'))}}function p(t,d,e,n,r){var i=function(t,d){for(var e,n=s(t);!(e=n()).done;){var r=e.value;if(r.leadingDigitsPatterns().length>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,$.Z)(t,i,{useInternationalFormat:\"INTERNATIONAL\"===e,withNationalPrefix:!i.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!r||!1!==r.nationalPrefix,carrierCode:d,metadata:n}):t}function v(t,d,e,n){return d?n(t,d,e):t}function b(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 C(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?b(Object(e),!0).forEach((function(d){N(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):b(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function N(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function P(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var x=!1,S=function(){function t(d,e,r){if(function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!d)throw new TypeError(\"`country` or `countryCallingCode` not passed\");if(!e)throw new TypeError(\"`nationalNumber` not passed\");if(!r)throw new TypeError(\"`metadata` not passed\");var a=function(t,d){var e,r,a=new n.ZP(d);w(t)?(e=t,a.selectNumberingPlan(e),r=a.countryCallingCode()):(r=t,x&&a.isNonGeographicCallingCode(r)&&(e=\"001\"));return{country:e,countryCallingCode:r}}(d,r),i=a.country,o=a.countryCallingCode;this.country=i,this.countryCallingCode=o,this.nationalNumber=e,this.number=\"+\"+this.countryCallingCode+this.nationalNumber,this.metadata=r}var d,e,$;return d=t,(e=[{key:\"setExt\",value:function(t){this.ext=t}},{key:\"getPossibleCountries\",value:function(){return this.country?[this.country]:o(this.countryCallingCode,this.nationalNumber,this.metadata)}},{key:\"isPossible\",value:function(){return(0,r.Z)(this,{v2:!0},this.metadata)}},{key:\"isValid\",value:function(){return function(t,d,e){if(d=d||{},(e=new n.ZP(e)).selectNumberingPlan(t.country,t.countryCallingCode),e.hasTypes())return void 0!==(0,i.Z)(t,d,e.metadata);var r=d.v2?t.nationalNumber:t.phone;return(0,a.Z)(r,e.nationalNumberPattern())}(this,{v2:!0},this.metadata)}},{key:\"isNonGeographic\",value:function(){return new n.ZP(this.metadata).isNonGeographicCallingCode(this.countryCallingCode)}},{key:\"isEqual\",value:function(t){return this.number===t.number&&this.ext===t.ext}},{key:\"getType\",value:function(){return(0,i.Z)(this,{v2:!0},this.metadata)}},{key:\"format\",value:function(t,d){return y(this,t,d?C(C({},d),{},{v2:!0}):{v2:!0},this.metadata)}},{key:\"formatNational\",value:function(t){return this.format(\"NATIONAL\",t)}},{key:\"formatInternational\",value:function(t){return this.format(\"INTERNATIONAL\",t)}},{key:\"getURI\",value:function(t){return this.format(\"RFC3966\",t)}}])&&P(d.prototype,e),$&&P(d,$),Object.defineProperty(d,\"prototype\",{writable:!1}),t}(),w=function(t){return/^[A-Z]{2}$/.test(t)}},5619:(t,d,e)=>{e.d(d,{ex:()=>n,sJ:()=>r,uv:()=>o,xc:()=>i,xg:()=>a,xy:()=>$});var n=2,r=17,a=3,i=\"0-9０-９٠-٩۰-۹\",o=\"\".concat(\"-‐-―−ー－\").concat(\"／/\").concat(\"．.\").concat(\"  ­​⁠　\").concat(\"()（）［］\\\\[\\\\]\").concat(\"~⁓∼～\"),$=\"+＋\"},457:(t,d,e)=>{e.d(d,{Y:()=>$,m:()=>o});var n=e(3345);function r(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)||a(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 a(t,d){if(t){if(\"string\"==typeof t)return i(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?i(t,d):void 0}}function i(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function o(t){for(var d,e,i,o=function(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=a(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.\")}((t=t.replace(/^tel:/,\"tel=\")).split(\";\"));!(i=o()).done;){var $=r(i.value.split(\"=\"),2),u=$[0],l=$[1];switch(u){case\"tel\":d=l;break;case\"ext\":e=l;break;case\"phone-context\":\"+\"===l[0]&&(d=l+d)}}if(!(0,n.ZP)(d))return{};var s={number:d};return e&&(s.ext=e),s}function $(t){var d=t.number,e=t.ext;if(!d)return\"\";if(\"+\"!==d[0])throw new Error('\"formatRFC3966()\" expects \"number\" to be in E.164 format.');return\"tel:\".concat(d).concat(e?\";ext=\"+e:\"\")}},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<d;e++)n[e]=t[e];return n}function a(t,d){return i(t,void 0,d)}function i(t,d,e){var r=e.type(d),a=r&&r.possibleLengths()||e.possibleLengths();if(!a)return\"IS_POSSIBLE\";if(\"FIXED_LINE_OR_MOBILE\"===d){if(!e.type(\"FIXED_LINE\"))return i(t,\"MOBILE\",e);var o=e.type(\"MOBILE\");o&&(a=function(t,d){for(var e,r=t.slice(),a=n(d);!(e=a()).done;){var i=e.value;t.indexOf(i)<0&&r.push(i)}return r.sort((function(t,d){return t-d}))}(a,o.possibleLengths()))}else if(d&&!r)return\"INVALID_LENGTH\";var $=t.length,u=a[0];return u===$?\"IS_POSSIBLE\":u>$?\"TOO_SHORT\":a[a.length-1]<$?\"TOO_LONG\":a.indexOf($,1)>=0?\"IS_POSSIBLE\":\"INVALID_LENGTH\"}e.d(d,{Z:()=>a})},3878:(t,d,e)=>{e.d(d,{Z:()=>i});var n=e(5619),r=\";ext=\",a=function(t){return\"([\".concat(n.xc,\"]{1,\").concat(t,\"})\")};function i(t){var d=\"[  \\\\t,]*\",e=\"[:\\\\.．]?[  \\\\t,-]*\",n=\"#?\",i=\"[  \\\\t]*\";return r+a(\"20\")+\"|\"+(d+\"(?:e?xt(?:ensi(?:ó?|ó))?n?|ｅ?ｘｔｎ?|доб|anexo)\"+e+a(\"20\")+n)+\"|\"+(d+\"(?:[xｘ#＃~～]|int|ｉｎｔ)\"+e+a(\"9\")+n)+\"|\"+(\"[- ]+\"+a(\"6\")+\"#\")+\"|\"+(i+\"(?:,{2}|;)\"+e+a(\"15\")+n)+\"|\"+(i+\"(?:,)+\"+e+a(\"9\")+n)}},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{};if(\"+\"!==t[0]){var $=(0,n.Z)(t,d,e,o);if(!$||$===t){if(d||e){var u=(0,r.Z)(t,d,e,o),l=u.countryCallingCode,s=u.number;if(l)return{countryCallingCode:l,number:s}}return{number:t}}t=\"+\"+$}if(\"0\"===t[1])return{};o=new a.ZP(o);for(var c=2;c-1<=i.xg&&c<=t.length;){var f=t.slice(1,c);if(o.hasCallingCode(f))return o.selectNumberingPlan(f),{countryCallingCode:f,number:t.slice(c)};c++}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}},465:(t,d,e)=>{e.d(d,{Z:()=>$});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<d;e++)n[e]=t[e];return n}var o=!1;function $(t,d,e){if(o&&e.isNonGeographicCallingCode(t))return\"001\";var i=e.getCountryCodesForCallingCode(t);return i?1===i.length?i[0]:function(t,d,e){e=new n.ZP(e);for(var i,o=a(t);!(i=o()).done;){var $=i.value;if(e.country($),e.leadingDigits()){if(d&&0===d.search(e.leadingDigits()))return $}else if((0,r.Z)({phone:d,country:$},void 0,e.metadata))return $}}(i,d,e.metadata):void 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<d;e++)n[e]=t[e];return n}var o=[\"MOBILE\",\"PREMIUM_RATE\",\"TOLL_FREE\",\"SHARED_COST\",\"VOIP\",\"PERSONAL_NUMBER\",\"PAGER\",\"UAN\",\"VOICEMAIL\"];function $(t,d,e){if(d=d||{},t.country){(e=new n.ZP(e)).selectNumberingPlan(t.country,t.countryCallingCode);var i=d.v2?t.nationalNumber:t.phone;if((0,r.Z)(i,e.nationalNumberPattern())){if(u(i,\"FIXED_LINE\",e))return e.type(\"MOBILE\")&&\"\"===e.type(\"MOBILE\").pattern()?\"FIXED_LINE_OR_MOBILE\":e.type(\"MOBILE\")?u(i,\"MOBILE\",e)?\"FIXED_LINE_OR_MOBILE\":\"FIXED_LINE\":\"FIXED_LINE_OR_MOBILE\";for(var $,l=a(o);!($=l()).done;){var s=$.value;if(u(i,s,e))return s}}}}function u(t,d,e){return!(!(d=e.type(d))||!d.pattern())&&(!(d.possibleLengths()&&d.possibleLengths().indexOf(t.length)<0)&&(0,r.Z)(t,d.pattern()))}},3345:(t,d,e)=>{e.d(d,{ZP:()=>l,ch:()=>s});var n=e(5619),r=e(3878),a=\"[\"+n.xc+\"]{\"+n.ex+\"}\",i=\"[\"+n.xy+\"]{0,1}(?:[\"+n.uv+\"]*[\"+n.xc+\"]){3,}[\"+n.uv+n.xc+\"]*\",o=new RegExp(\"^[\"+n.xy+\"]{0,1}(?:[\"+n.uv+\"]*[\"+n.xc+\"]){1,2}$\",\"i\"),$=i+\"(?:\"+(0,r.Z)()+\")?\",u=new RegExp(\"^\"+a+\"$|^\"+$+\"$\",\"i\");function l(t){return t.length>=n.ex&&u.test(t)}function s(t){return o.test(t)}},1316:(t,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<d;e++)n[e]=t[e];return n}e.d(d,{ZP:()=>o,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\",\"１\":\"1\",\"２\":\"2\",\"３\":\"3\",\"４\":\"4\",\"５\":\"5\",\"６\":\"6\",\"７\":\"7\",\"８\":\"8\",\"９\":\"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]<d[1]?-1:0:!t[1]&&d[1]?1:t[1]&&!d[1]?-1:0}function r(t){return r=\"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},r(t)}function a(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}function i(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,d,e){return d&&i(t.prototype,d),e&&i(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}e.d(d,{ZP:()=>c,Gg:()=>b});var $=\"1.2.0\",u=\"1.7.35\",l=\" ext. \",s=/^\\d+$/,c=function(){function t(d){a(this,t),function(t){if(!t)throw new Error(\"[libphonenumber-js] `metadata` argument not passed. Check your arguments.\");if(!p(t)||!p(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(p(t)?\"an object of shape: { \"+Object.keys(t).join(\", \")+\" }\":\"a \"+v(t)+\": \"+t,\".\"))}(d),this.metadata=d,C.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&&s.test(t)&&(d=t,t=null),t&&\"001\"!==t){if(!this.hasCountry(t))throw new Error(\"Unknown country: \".concat(t));this.numberingPlan=new f(this.getCountryMetadata(t),this)}else if(d){if(!this.hasCallingCode(d))throw new Error(\"Unknown calling code: \".concat(d));this.numberingPlan=new f(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}(),f=function(){function t(d,e){a(this,t),this.globalMetadataObject=e,this.metadata=d,C.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 h(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()&&y(this.types(),t))return new m(y(this.types(),t),this)}},{key:\"ext\",value:function(){return this.v1||this.v2?l:this.metadata[13]||l}}]),t}(),h=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()||g.test(this.nationalPrefixFormattingRule()))}},{key:\"internationalFormat\",value:function(){return this._format[5]||this.format()}}]),t}(),g=/^\\(?\\$1\\)?$/,m=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 y(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 p=function(t){return\"object\"===r(t)},v=function(t){return r(t)};function b(t,d){if((d=new c(d)).hasCountry(t))return d.country(t).countryCallingCode();throw new Error(\"Unknown country: \".concat(t))}function C(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,$)?this.v2=!0:-1===n(d,u)?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]|97\"],\"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\\\\d|606)\\\\d{5}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"525(?:0\\\\d|1[0-4])\\\\d{3}|(?:5[146-8]\\\\d|606)\\\\d{5}\"]]],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,[\"98\\\\d{6,7}|975(?:1\\\\d|77|9[67])\\\\d{4}|9(?:0[1-9]|[1259]\\\\d|7[0679])\\\\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(8169);function i(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var o=function(){function t(d){var e=d.onCountryChange,n=d.onCallingCodeChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.onCountryChange=e,this.onCallingCodeChange=n}var d,e,n;return d=t,(e=[{key:\"reset\",value:function(t){var d=t.country,e=t.callingCode;this.international=!1,this.IDDPrefix=void 0,this.missingPlus=void 0,this.callingCode=void 0,this.digits=\"\",this.resetNationalSignificantNumber(),this.initCountryAndCallingCode(d,e)}},{key:\"resetNationalSignificantNumber\",value:function(){this.nationalSignificantNumber=this.getNationalDigits(),this.nationalSignificantNumberMatchesInput=!0,this.nationalPrefix=void 0,this.carrierCode=void 0,this.complexPrefixBeforeNationalSignificantNumber=void 0}},{key:\"update\",value:function(t){for(var d=0,e=Object.keys(t);d<e.length;d++){var n=e[d];this[n]=t[n]}}},{key:\"initCountryAndCallingCode\",value:function(t,d){this.setCountry(t),this.setCallingCode(d)}},{key:\"setCountry\",value:function(t){this.country=t,this.onCountryChange(t)}},{key:\"setCallingCode\",value:function(t){this.callingCode=t,this.onCallingCodeChange(t,this.country)}},{key:\"startInternationalNumber\",value:function(t,d){this.international=!0,this.initCountryAndCallingCode(t,d)}},{key:\"appendDigits\",value:function(t){this.digits+=t}},{key:\"appendNationalSignificantNumberDigits\",value:function(t){this.nationalSignificantNumber+=t}},{key:\"getNationalDigits\",value:function(){return this.international?this.digits.slice((this.IDDPrefix?this.IDDPrefix.length:0)+(this.callingCode?this.callingCode.length:0)):this.digits}},{key:\"getDigitsWithoutInternationalPrefix\",value:function(){return this.international&&this.IDDPrefix?this.digits.slice(this.IDDPrefix.length):this.digits}}])&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function $(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 u(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 u(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 u(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}var l=\"x\",s=new RegExp(l);function c(t,d){if(d<1)return\"\";for(var e=\"\";d>1;)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;)\"(\"===t[e]?d.push(e):\")\"===t[e]&&d.pop(),e++;var n=0,r=\"\";d.push(t.length);for(var a=0,i=d;a<i.length;a++){var o=i[a];r+=t.slice(n,o),n=o+1}return r}(t.slice(0,d))}var h=e(7856),g=e(9233),m=e(5738);function y(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;if(new RegExp(\"^(?:\".concat(d.pattern(),\")$\")).test(t.nationalSignificantNumber))return function(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;t.nationalSignificantNumber,t.international,t.nationalPrefix,t.carrierCode;if(r(d)){var i=p(t,d,{useNationalPrefixFormattingRule:!0,getSeparatorAfterNationalPrefix:a,metadata:n});if(i)return i}return p(t,d,{useNationalPrefixFormattingRule:!1,getSeparatorAfterNationalPrefix:a,metadata:n})}(t,d,{metadata:n,shouldTryNationalPrefixFormattingRule:r,getSeparatorAfterNationalPrefix:a})}function p(t,d,e){var n=e.metadata,r=e.useNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix,i=(0,m.Z)(t.nationalSignificantNumber,d,{carrierCode:t.carrierCode,useInternationalFormat:t.international,withNationalPrefix:r,metadata:n});if(r||(t.nationalPrefix?i=t.nationalPrefix+a(d)+i:t.complexPrefixBeforeNationalSignificantNumber&&(i=t.complexPrefixBeforeNationalSignificantNumber+\" \"+i)),function(t,d){return(0,g.ZP)(t)===d.getNationalDigits()}(i,t))return i}function v(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var b=function(){function t(){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}var d,e,n;return d=t,(e=[{key:\"parse\",value:function(t){if(this.context=[{or:!0,instructions:[]}],this.parsePattern(t),1!==this.context.length)throw new Error(\"Non-finalized contexts left when pattern parse ended\");var d=this.context[0],e=d.branches,n=d.instructions;if(e)return{op:\"|\",args:e.concat([x(n)])};if(0===n.length)throw new Error(\"Pattern is required\");return 1===n.length?n[0]:n}},{key:\"startContext\",value:function(t){this.context.push(t)}},{key:\"endContext\",value:function(){this.context.pop()}},{key:\"getContext\",value:function(){return this.context[this.context.length-1]}},{key:\"parsePattern\",value:function(t){if(!t)throw new Error(\"Pattern is required\");var d=t.match(P);if(d){var e=d[1],n=t.slice(0,d.index),r=t.slice(d.index+e.length);switch(e){case\"(?:\":n&&this.parsePattern(n),this.startContext({or:!0,instructions:[],branches:[]});break;case\")\":if(!this.getContext().or)throw new Error('\")\" operator must be preceded by \"(?:\" operator');if(n&&this.parsePattern(n),0===this.getContext().instructions.length)throw new Error('No instructions found after \"|\" operator in an \"or\" group');var a=this.getContext().branches;a.push(x(this.getContext().instructions)),this.endContext(),this.getContext().instructions.push({op:\"|\",args:a});break;case\"|\":if(!this.getContext().or)throw new Error('\"|\" operator can only be used inside \"or\" groups');if(n&&this.parsePattern(n),!this.getContext().branches){if(1!==this.context.length)throw new Error('\"branches\" not found in an \"or\" group context');this.getContext().branches=[]}this.getContext().branches.push(x(this.getContext().instructions)),this.getContext().instructions=[];break;case\"[\":n&&this.parsePattern(n),this.startContext({oneOfSet:!0});break;case\"]\":if(!this.getContext().oneOfSet)throw new Error('\"]\" operator must be preceded by \"[\" operator');this.endContext(),this.getContext().instructions.push({op:\"[]\",args:C(n)});break;default:throw new Error(\"Unknown operator: \".concat(e))}r&&this.parsePattern(r)}else{if(N.test(t))throw new Error(\"Illegal characters found in a pattern: \".concat(t));this.getContext().instructions=this.getContext().instructions.concat(t.split(\"\"))}}}])&&v(d.prototype,e),n&&v(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function C(t){for(var d=[],e=0;e<t.length;){if(\"-\"===t[e]){if(0===e||e===t.length-1)throw new Error(\"Couldn't parse a one-of set pattern: \".concat(t));for(var n=t[e-1].charCodeAt(0)+1,r=t[e+1].charCodeAt(0)-1,a=n;a<=r;)d.push(String.fromCharCode(a)),a++}else d.push(t[e]);e++}return d}var N=/[\\(\\)\\[\\]\\?\\:\\|]/,P=new RegExp(\"(\\\\||\\\\(\\\\?\\\\:|\\\\)|\\\\[|\\\\])\");function x(t){return 1===t.length?t[0]:t}function S(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 w(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 w(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 w(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function O(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var I=function(){function t(d){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.matchTree=(new b).parse(d)}var d,e,n;return d=t,e=[{key:\"match\",value:function(t){var d=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error(\"String is required\");var e=A(t.split(\"\"),this.matchTree,!0);if(e&&e.match&&delete e.matchedChars,!e||!e.overflow||d)return e}}],e&&O(d.prototype,e),n&&O(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function A(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<d.length;){var i=A(r,d[a],e&&a===d.length-1);if(!i)return;if(i.overflow)return i;if(!i.match){if(i.partialMatch)return{partialMatch:!0};throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(i,null,2)))}if(0===(r=r.slice(i.matchedChars.length)).length)return a===d.length-1?{match:!0,matchedChars:t}:{partialMatch:!0};a++}return e?{overflow:!0}:{match:!0,matchedChars:t.slice(0,t.length-r.length)}}switch(d.op){case\"|\":for(var o,$,u=S(d.args);!($=u()).done;){var l=A(t,$.value,e);if(l){if(l.overflow)return l;if(l.match)return{match:!0,matchedChars:l.matchedChars};if(!l.partialMatch)throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(l,null,2)));o=!0}}return o?{partialMatch:!0}:void 0;case\"[]\":for(var s,c=S(d.args);!(s=c()).done;){var f=s.value;if(t[0]===f)return 1===t.length?{match:!0,matchedChars:t}:e?{overflow:!0}:{match:!0,matchedChars:[f]}}return;default:throw new Error(\"Unsupported instruction tree: \".concat(d))}}var E=e(5619),T=e(2354);function F(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 M(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 M(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 M(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function k(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var R=c(\"9\",15),D=/[- ]/,j=function(){return/\\[([^\\[\\]])*\\]/g},L=function(){return/\\d(?=[^,}][^,}])/g},Z=new RegExp(\"[\"+E.uv+\"]*\\\\$1[\"+E.uv+\"]*(\\\\$\\\\d[\"+E.uv+\"]*)*$\"),G=function(){function t(d){d.state;var e=d.metadata;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=e,this.resetFormat()}var d,e,n;return d=t,(e=[{key:\"resetFormat\",value:function(){this.chosenFormat=void 0,this.template=void 0,this.nationalNumberTemplate=void 0,this.populatedNationalNumberTemplate=void 0,this.populatedNationalNumberTemplatePosition=-1}},{key:\"reset\",value:function(t,d){this.resetFormat(),t?(this.isNANP=\"1\"===t.callingCode(),this.matchingFormats=t.formats(),d.nationalSignificantNumber&&this.narrowDownMatchingFormats(d)):(this.isNANP=void 0,this.matchingFormats=[])}},{key:\"format\",value:function(t,d){var e,n,r=this;if(e=d.nationalSignificantNumber,n=this.metadata,\"IS_POSSIBLE\"===(0,h.Z)(e,n))for(var a,i=F(this.matchingFormats);!(a=i()).done;){var o=a.value,$=y(d,o,{metadata:this.metadata,shouldTryNationalPrefixFormattingRule:function(t){return r.shouldTryNationalPrefixFormattingRule(t,{international:d.international,nationalPrefix:d.nationalPrefix})},getSeparatorAfterNationalPrefix:function(t){return r.getSeparatorAfterNationalPrefix(t)}});if($)return this.resetFormat(),this.chosenFormat=o,this.setNationalNumberTemplate($.replace(/\\d/g,l),d),this.populatedNationalNumberTemplate=$,this.populatedNationalNumberTemplatePosition=this.template.lastIndexOf(l),$}return this.formatNationalNumberWithNextDigits(t,d)}},{key:\"formatNationalNumberWithNextDigits\",value:function(t,d){var e=this.chosenFormat,n=this.chooseFormat(d);if(n)return n===e?this.formatNextNationalNumberDigits(t):this.formatNextNationalNumberDigits(d.getNationalDigits())}},{key:\"narrowDownMatchingFormats\",value:function(t){var d=this,e=t.nationalSignificantNumber,n=t.nationalPrefix,r=t.international,a=e,i=a.length-3;i<0&&(i=0),this.matchingFormats=this.matchingFormats.filter((function(t){return d.formatSuits(t,r,n)&&d.formatMatches(t,a,i)})),this.chosenFormat&&-1===this.matchingFormats.indexOf(this.chosenFormat)&&this.resetFormat()}},{key:\"formatSuits\",value:function(t,d,e){return!(e&&!t.usesNationalPrefix()&&!t.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!d&&!e&&t.nationalPrefixIsMandatoryWhenFormattingInNationalFormat())}},{key:\"formatMatches\",value:function(t,d,e){var n=t.leadingDigitsPatterns().length;if(0===n)return!0;e=Math.min(e,n-1);var r=t.leadingDigitsPatterns()[e];if(d.length<3)try{return void 0!==new I(r).match(d,{allowOverflow:!0})}catch(t){return console.error(t),!0}return new RegExp(\"^(\".concat(r,\")\")).test(d)}},{key:\"getFormatFormat\",value:function(t,d){return d?t.internationalFormat():t.format()}},{key:\"chooseFormat\",value:function(t){for(var d,e=this,n=function(){var n=d.value;return e.chosenFormat===n?\"break\":Z.test(e.getFormatFormat(n,t.international))?e.createTemplateForFormat(n,t)?(e.chosenFormat=n,\"break\"):(e.matchingFormats=e.matchingFormats.filter((function(t){return t!==n})),\"continue\"):\"continue\"},r=F(this.matchingFormats.slice());!(d=r()).done;){var a=n();if(\"break\"===a)break}return this.chosenFormat||this.resetFormat(),this.chosenFormat}},{key:\"createTemplateForFormat\",value:function(t,d){if(!(t.pattern().indexOf(\"|\")>=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<n.length+t.getDigitsWithoutInternationalPrefix().length;)d=this.template.indexOf(l,d+1),e++;return f(this.template,d+1)}}},{key:\"setNationalNumberTemplate\",value:function(t,d){this.nationalNumberTemplate=t,this.populatedNationalNumberTemplate=t,this.populatedNationalNumberTemplatePosition=-1,d.international?this.template=this.getInternationalPrefixBeforeCountryCallingCode(d).replace(/[\\d\\+]/g,l)+c(l,d.callingCode.length)+\" \"+t:this.template=t}},{key:\"getTemplateForFormat\",value:function(t,d){var e=d.nationalSignificantNumber,n=d.international,r=d.nationalPrefix,a=d.complexPrefixBeforeNationalSignificantNumber,i=t.pattern();i=i.replace(j(),\"\\\\d\").replace(L(),\"\\\\d\");var o=R.match(i)[0];if(!(e.length>o.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<d;e++)n[e]=t[e];return n}function V(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var Y=\"[\"+E.uv+E.xc+\"]+\",J=new RegExp(\"^\"+Y+\"$\",\"i\"),X=\"(?:[\"+E.xy+\"][\"+E.uv+E.xc+\"]*|[\"+E.uv+E.xc+\"]+)\",Q=new RegExp(\"[^\"+E.uv+E.xc+\"]+.*$\"),q=/[^\\d\\[\\]]/,z=function(){function t(d){var e=d.defaultCountry,n=d.defaultCallingCode,r=d.metadata,a=d.onNationalSignificantNumberChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.defaultCountry=e,this.defaultCallingCode=n,this.metadata=r,this.onNationalSignificantNumberChange=a}var d,e,n;return d=t,(e=[{key:\"input\",value:function(t,d){var e,n=function(t){var d=function(t){var d=function(t){var d,e=t.search(X);if(!(e<0))return\"+\"===(t=t.slice(e))[0]&&(d=!0,t=t.slice(\"+\".length)),t=t.replace(Q,\"\"),d&&(t=\"+\"+t),t}(t)||\"\";return\"+\"===d[0]?[d.slice(\"+\".length),!0]:[d]}(t),e=W(d,2),n=e[0],r=e[1];return J.test(n)||(n=\"\"),[n,r]}(t),r=W(n,2),a=r[0],i=r[1],o=(0,g.ZP)(a);return i&&(d.digits||(d.startInternationalNumber(),o||(e=!0))),o&&this.inputDigits(o,d),{digits:o,justLeadingPlus:e}}},{key:\"inputDigits\",value:function(t,d){var e=d.digits,n=e.length<3&&e.length+t.length>=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(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,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 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);e<d;e++)n[e]=t[e];return n}function rt(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var at=function(){function t(d,e){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=new r.ZP(e);var n=et(this.getCountryAndCallingCode(d),2),a=n[0],i=n[1];this.defaultCountry=a,this.defaultCallingCode=i,this.reset()}var d,e,n;return d=t,(e=[{key:\"getCountryAndCallingCode\",value:function(t){var d,e;return t&&(\"object\"===dt(t)?(d=t.defaultCountry,e=t.defaultCallingCode):d=t),d&&!this.metadata.hasCountry(d)&&(d=void 0),[d,e]}},{key:\"input\",value:function(t){var d=this.parser.input(t,this.state),e=d.digits;if(d.justLeadingPlus)this.formattedOutput=\"+\";else if(e){var n;if(this.determineTheCountryIfNeeded(),this.state.nationalSignificantNumber&&this.formatter.narrowDownMatchingFormats(this.state),this.metadata.hasSelectedNumberingPlan()&&(n=this.formatter.format(e,this.state)),void 0===n&&this.parser.reExtractNationalSignificantNumber(this.state)){this.determineTheCountryIfNeeded();var r=this.state.getNationalDigits();r&&(n=this.formatter.format(r,this.state))}this.formattedOutput=n?this.getFullNumber(n):this.getNonFormattedNumber()}return this.formattedOutput}},{key:\"reset\",value:function(){var t=this;return this.state=new o({onCountryChange:function(d){t.country=d},onCallingCodeChange:function(d,e){t.metadata.selectNumberingPlan(e,d),t.formatter.reset(t.metadata.numberingPlan,t.state),t.parser.reset(t.metadata.numberingPlan)}}),this.formatter=new G({state:this.state,metadata:this.metadata}),this.parser=new z({defaultCountry:this.defaultCountry,defaultCallingCode:this.defaultCallingCode,metadata:this.metadata,state:this.state,onNationalSignificantNumberChange:function(){t.determineTheCountryIfNeeded(),t.formatter.reset(t.metadata.numberingPlan,t.state)}}),this.state.reset({country:this.defaultCountry,callingCode:this.defaultCallingCode}),this.formattedOutput=\"\",this}},{key:\"isInternational\",value:function(){return this.state.international}},{key:\"getCallingCode\",value:function(){if(this.isInternational())return this.state.callingCode}},{key:\"getCountryCallingCode\",value:function(){return this.getCallingCode()}},{key:\"getCountry\",value:function(){if(this.state.digits)return this._getCountry()}},{key:\"_getCountry\",value:function(){var t=this.state.country;return t}},{key:\"determineTheCountryIfNeeded\",value:function(){this.state.country&&!this.isCountryCallingCodeAmbiguous()||this.determineTheCountry()}},{key:\"getFullNumber\",value:function(t){var d=this;if(this.isInternational()){var e=function(t){return d.formatter.getInternationalPrefixBeforeCountryCallingCode(d.state,{spacing:!!t})+t},n=this.state.callingCode;return e(n?t?\"\".concat(n,\" \").concat(t):n:\"\".concat(this.state.getDigitsWithoutInternationalPrefix()))}return t}},{key:\"getNonFormattedNationalNumberWithPrefix\",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.complexPrefixBeforeNationalSignificantNumber,n=t.nationalPrefix,r=d,a=e||n;return a&&(r=a+r),r}},{key:\"getNonFormattedNumber\",value:function(){var t=this.state.nationalSignificantNumberMatchesInput;return this.getFullNumber(t?this.getNonFormattedNationalNumberWithPrefix():this.state.getNationalDigits())}},{key:\"getNonFormattedTemplate\",value:function(){var t=this.getNonFormattedNumber();if(t)return t.replace(/[\\+\\d]/g,l)}},{key:\"isCountryCallingCodeAmbiguous\",value:function(){var t=this.state.callingCode,d=this.metadata.getCountryCodesForCallingCode(t);return d&&d.length>1}},{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(8169);function a(t,d,e){if(d[t])return new r.Z(t,d[t],e)}function i(){return(0,n.Z)(a,arguments)}},2610:(t,d,e)=>{e.d(d,{h:()=>V});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<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t){var d=s();return function(){var e,n=f(t);if(d){var r=f(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return function(t,d){if(d&&(\"object\"===a(d)||\"function\"==typeof d))return d;if(void 0!==d)throw new TypeError(\"Derived constructors may only return object or undefined\");return $(t)}(this,e)}}function $(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function u(t){var d=\"function\"==typeof Map?new Map:void 0;return u=function(t){if(null===t||(e=t,-1===Function.toString.call(e).indexOf(\"[native code]\")))return t;var e;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==d){if(d.has(t))return d.get(t);d.set(t,n)}function n(){return l(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},u(t)}function l(t,d,e){return l=s()?Reflect.construct:function(t,d,e){var n=[null];n.push.apply(n,d);var r=new(Function.bind.apply(t,n));return e&&c(r,e.prototype),r},l.apply(null,arguments)}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function c(t,d){return c=Object.setPrototypeOf||function(t,d){return t.__proto__=d,t},c(t,d)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}var h=function(t){!function(t,d){if(\"function\"!=typeof d&&null!==d)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(d&&d.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),d&&c(t,d)}(a,t);var d,e,n,r=o(a);function a(t){var d;return function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,a),d=r.call(this,t),Object.setPrototypeOf($(d),a.prototype),d.name=d.constructor.name,d}return d=a,e&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),d}(u(Error)),g=e(2581),m=e(3345),y=e(3878),p=new RegExp(\"(?:\"+(0,y.Z)()+\")$\",\"i\");var v=e(9233);function b(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 C(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 C(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 C(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function N(t){for(var d,e=\"\",n=b(t.split(\"\"));!(d=n()).done;){e+=P(d.value,e)||\"\"}return e}function P(t,d){if(\"+\"===t){if(d)return;return\"+\"}return(0,v.xh)(t)}var x=e(3499),S=e(457),w=e(8169),O=e(1316),I=e(3661),A=e(7428),E=e(465),T=250,F=new RegExp(\"[\"+r.xy+r.xc+\"]\"),M=new RegExp(\"[^\"+r.xc+\"#]+$\"),k=!1;function R(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){if(t&&0===t.indexOf(\"tel:\"))return(0,S.m)(t);var n=function(t,d,e){if(!t)return;if(t.length>T){if(e)throw new h(\"TOO_LONG\");return}if(!1===d)return t;var n=t.search(F);if(n<0)return;return t.slice(n).replace(M,\"\")}(t,e,d);if(!n)return{};if(!(0,m.ZP)(n))return(0,m.ch)(n)?{error:\"TOO_SHORT\"}:{};var r=function(t){var d=t.search(p);if(d<0)return{};for(var e=t.slice(0,d),n=t.match(p),r=1;r<n.length;){if(n[r])return{number:e,ext:n[r]};r++}}(n);if(r.ext)return r;return{number:n}}(t,d.v2,d.extract),a=n.number,i=n.ext,o=n.error;if(!a){if(d.v2){if(\"TOO_SHORT\"===o)throw new h(\"TOO_SHORT\");throw new h(\"NOT_A_NUMBER\")}return{}}var $=function(t,d,e,n){var r,a=(0,I.Z)(N(t),d,e,n.metadata),i=a.countryCallingCode,o=a.number;if(i)n.selectNumberingPlan(i);else{if(!o||!d&&!e)return{};n.selectNumberingPlan(d,e),d?r=d:k&&n.isNonGeographicCallingCode(e)&&(r=\"001\"),i=e||(0,g.Gg)(d,n.metadata)}if(!o)return{countryCallingCode:i};var $=(0,A.Z)(N(o),n),u=$.nationalNumber,l=$.carrierCode,s=(0,E.Z)(i,u,n);s&&(r=s,\"001\"===s||n.country(r));return{country:r,countryCallingCode:i,nationalNumber:u,carrierCode:l}}(a,d.defaultCountry,d.defaultCallingCode,e),u=$.country,l=$.nationalNumber,s=$.countryCallingCode,c=$.carrierCode;if(!e.hasSelectedNumberingPlan()){if(d.v2)throw new h(\"INVALID_COUNTRY\");return{}}if(!l||l.length<r.ex){if(d.v2)throw new h(\"TOO_SHORT\");return{}}if(l.length>r.sJ){if(d.v2)throw new h(\"TOO_LONG\");return{}}if(d.v2){var f=new w.Z(s,l,e.metadata);return u&&(f.country=u),c&&(f.carrierCode=c),i&&(f.ext=i),f}var y=!!(d.extended?e.hasSelectedNumberingPlan():u)&&(0,O.Z)(l,e.nationalNumberPattern());return d.extended?{country:u,countryCallingCode:s,carrierCode:c,valid:y,possible:!!y||!(!0!==d.extended||!e.possibleLengths()||!(0,x.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 D(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 j(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?D(Object(e),!0).forEach((function(d){L(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):D(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function L(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function Z(t){return Z=\"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},Z(t)}function G(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,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function _(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 U(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 U(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 U(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function K(t){var d,e,n,r=_(Array.prototype.slice.call(t),4),a=r[0],i=r[1],o=r[2],$=r[3];if(\"string\"!=typeof a)throw new TypeError(\"A text for parsing must be a string.\");if(d=a,i&&\"string\"!=typeof i){if(!W(i))throw new Error(\"Invalid second argument: \".concat(i));o?(e=i,n=o):n=i}else $?(e=o,n=$):(e=void 0,n=o),i&&(e=function(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?G(Object(e),!0).forEach((function(d){B(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):G(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}({defaultCountry:i},e));return{text:d,options:e,metadata:n}}var W=function(t){return\"object\"===Z(t)};function H(){var t=K(arguments);return function(t,d,e){return R(t,j(j({},d),{},{v2:!0}),e)}(t.text,t.options,t.metadata)}function V(){return(0,n.Z)(H,arguments)}},2364:(t,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)}}}]);\n//# sourceMappingURL=501.prod.js.map"
  },
  {
    "path": "umd/514.prod.js",
    "content": "\"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<br />¯∖_(ツ)_/¯\",\"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\",\"join_conference\":\"+ Join\"}')}}]);"
  },
  {
    "path": "umd/536.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[536],{2536:function(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\":\"ไม่พบแชท \\\\n¯∖_(ツ)_/¯\",\"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\":\"รหัสยืนยัน\",\"error_invalid_id\":\"ID ไม่ถูกต้อง\",\"file_attachment_too_large\":\"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\"forgot_password_link\":\"ลืมรหัสผ่าน?\",\"full_name_prompt\":\"ชื่อเต็ม, เช่น John Doe\",\"granted_permissions\":\"ยินยอม\",\"group_has_no_members\":\"ไม่มีสมาชิก\",\"group_user_id_prompt\":\"กลุ่ม หรือ ID ผู้ใช้\",\"image_caption_prompt\":\"คำอธิบายภาพ\",\"invalid_content\":\"เนื้อหาไม่ถูกต้อง\",\"invalid_security_token\":\"security token ไม่ถูกต้อง\",\"label_client\":\"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\":\"การแจ้งเตือน (requires 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\":\"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_reply\":\"ตอบกลับ\",\"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\\'s\",\"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_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\":\"รีเซ็ตรหัสผ่านสำเร็จ\",\"scan_qr_code\":\"สแกนรหัส QR\",\"pin_message\":\"พิน\",\"unpin_message\":\"ปลดหมุด\",\"self_topic_comment\":\"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต\",\"self_topic_name\":\"ข้อความที่บันทึกไว้\",\"message_not_found\":\"ไม่พบข้อความ\",\"message_deleted\":\"ข้อความถูกลบ\",\"alias_editing_placeholder\":\"นามแฝง (ไม่บังคับ)\",\"label_alias\":\"นามแฝง:\",\"alias_already_taken\":\"(ใช้ไปแล้ว)\",\"alias_invalid\":\"(ไม่ถูกต้อง)\",\"label_alias_edit\":\"นามแฝง\",\"select_country\":\"เลือกประเทศ\",\"text_copied\":\"คัดลอกไปยังคลิปบอร์ดแล้ว\",\"color_schema_dark\":\"มืด\",\"color_schema_light\":\"สว่าง\",\"color_schema_system\":\"ค่าเริ่มต้นของระบบ\",\"label_color_schema\":\"ธีม:\",\"label_text_size\":\"ขนาดตัวอักษร:\",\"incognito_mode_description\":\"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ\",\"send_command\":\"ส่งด้วย {key}\",\"send_command_explained\":\"กด Enter เพื่อขึ้นบรรทัดใหม่\",\"send_plain\":\"ส่งด้วย Enter\",\"send_plain_explained\":\"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่\",\"sidepanel_title_acc_general\":\"ทั่วไป\",\"label_keyboard\":\"แป้นพิมพ์:\",\"pin_chat\":\"ปักหมุด\",\"unpin_chat\":\"เลิกปักหมุด\",\"subscriber_count\":\"{count, plural, other {{count, number} ผู้ติดตาม}}\",\"label_member_count\":\"สมาชิก:\",\"label_subscriber_count\":\"ผู้ติดตาม:\",\"member_count\":\"{count, plural, other {{count, number} สมาชิก}}\",\"tabtitle_image\":\"รูปภาพ\",\"tabtitle_pattern\":\"ลายลวดลาย\",\"button_restore\":\"คืนค่าเริ่มต้น\",\"wallpapers\":\"วอลเปเปอร์\",\"label_blur_wallpaper\":\"เบลอ:\",\"label_scan_id\":\"สแกน ID ของฉัน:\",\"unknown_name\":\"ไม่ทราบ\",\"save_action\":\"บันทึก\",\"cannot_parse_vcard\":\"ไม่สามารถอ่านไฟล์ vCard ได้\",\"chat_now\":\"แชท\",\"find_user\":\"ค้นหา\",\"label_contact_card\":\"นามบัตร\",\"label_contacts\":\"ผู้ติดต่อ\",\"add_members_prompt\":\"เพิ่มสมาชิก\"}')}}]);"
  },
  {
    "path": "umd/537.prod.js",
    "content": "(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[537],{251:function(e,t){t.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<<s)-1,u=l>>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<<u)-1,f=c>>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<<i|s,u+=i;u>0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*m}},1105:function(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.\"}}},1195: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(7007),a=n(1255),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},1255:function(e,t,n){\"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(5376),i=n(8066),o=n(8287),a=n(4366),s=n(5839);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<t.length;r++){var i=t[r];if(i.name===e){if(\"m\"!==i.type)return void t.splice(r,1);if(i.isEnd){if(-1==n)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));return void t.splice(n,r-n+1)}n=r}}}function c(e,t){for(var n=[],r=-1,i=0;i<t.length;i++){var o=t[i];if(o.name===e){if(\"m\"!==o.type){n.push(t[i]);break}if(o.isEnd){if(-1==r)throw new Error(\"Detected \".concat(e,\" closing element before finding the start\"));n=t.slice(r,i+1);break}r=i}}return n}function f(e){var t=new i.default;return e.reduce(function(e,n){return e.concat(t.encode([n]))},[]).reduce(function(e,t){return e+t.byteLength},0)}function h(e,n,r){var i=r.duration,o=r.clusterPtrs,a=r.cues,s=e.slice(0);if(\"number\"==typeof i){var l=!1;s.forEach(function(e){\"f\"===e.type&&\"Duration\"===e.name&&(l=!0,e.data=g(i,8))}),l||p(s,\"Info\",[{name:\"Duration\",type:\"f\",data:g(i,8)}])}Array.isArray(a)&&p(s,\"Cues\",function(e,t){var n=[];return e.forEach(function(e){var r=e.CueTrack,i=e.CueClusterPosition,o=e.CueTime;n.push({name:\"CuePoint\",type:\"m\",isEnd:!1}),n.push({name:\"CueTime\",type:\"u\",data:m(o)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!1}),n.push({name:\"CueTrack\",type:\"u\",data:m(r)}),n.push({name:\"CueClusterPosition\",type:\"u\",data:m(i+t)}),n.push({name:\"CueTrackPositions\",type:\"m\",isEnd:!0}),n.push({name:\"CuePoint\",type:\"m\",isEnd:!0})}),n}(a,n));var u=[];return Array.isArray(o)&&(console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\"),u=function(e,n){var r=[];return e.forEach(function(e){r.push({name:\"Seek\",type:\"m\",isEnd:!1}),r.push({name:\"SeekID\",type:\"b\",data:new t.Buffer([31,67,182,117])}),r.push({name:\"SeekPosition\",type:\"u\",data:m(e+n)}),r.push({name:\"Seek\",type:\"m\",isEnd:!0})}),r}(o,n)),p(s,\"SeekHead\",u,!0),s}function p(e,t,n,r){void 0===r&&(r=!1);for(var i=-1,o=0;o<e.length;o++){var a=e[o];if(\"m\"===a.type&&a.name===t&&!1===a.isEnd){i=o;break}}i>=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;a<e.length;a++){var s=e[a];if(\"m\"===s.type&&\"Segment\"===s.name){if(r=e.slice(0,a),o=e.slice(a),s.unknownSize){o.shift();break}throw new Error(\"this metadata is not streaming webm file\")}}if(!(o[o.length-1].dataEnd>0))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)}},3517:function(e,t,n){var r=n(5964);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},3537: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]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(5956);t.default=function(e){return r(this,void 0,void 0,function(){var t,n,r,a,s,l,u,c,f,h,p;return i(this,function(i){switch(i.label){case 0:if(!e)throw Error(\"call to fixWebmDuration requires a blob\");t=new o.Decoder,n=new o.Reader,r=e.stream(),a=r.getReader(),i.label=1;case 1:return[4,a.read()];case 2:return s=i.sent(),l=s.done,u=s.value,l?(n.stop(),[3,3]):((c=null==(c=t.decode(u))?void 0:c.filter(function(e){return\"unknown\"!==e.type})).forEach(function(e){n.read(e)}),u=null,[3,1]);case 3:return f=o.tools.makeMetadataSeekable(n.metadatas,n.duration,n.cues),h=new Blob([f],{type:e.type}),p=e.slice(n.metadataSize),[2,new Blob([h,p],{type:e.type})]}})})}},4366: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;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(1255),a=function(){function e(){}return e.readVint=function(t,n){void 0===n&&(n=0);var r=8-Math.floor(Math.log2(t[n]));if(r>8){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<r;a+=1){if(7===a&&o>=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<Math.pow(2,7*t)-1);t+=1);for(var n=o.Buffer.alloc(t),r=e,i=1;i<=t;i+=1){var a=255&r;n[t-i]=a,r-=a,r/=Math.pow(2,8)}return n[0]|=1<<8-t,n},e.concatenate=function(e,t){return e||t?e&&0!==e.byteLength?t&&0!==t.byteLength?o.Buffer.from(i(i([],e,!0),t,!0)):e:t:o.Buffer.from([])},e.readHexString=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=e.byteLength),Array.from(e.slice(t,n)).map(function(e){return Number(e).toString(16)}).reduce(function(e,t){return\"\".concat(e).concat(t.padStart(2,\"0\"))},\"\")},e.readUtf8=function(e){try{return o.Buffer.from(e).toString(\"utf8\")}catch(e){return null}},e.readUnsigned=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return n.getUint8(0);case 2:return n.getUint16(0);case 4:return n.getUint32(0)}return t.byteLength<=6?t.reduce(function(e,t){return 256*e+t},0):e.readHexString(t,0,t.byteLength)},e.readSigned=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 1:return t.getInt8(0);case 2:return t.getInt16(0);case 4:return t.getInt32(0);default:return NaN}},e.readFloat=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return t.getFloat32(0);case 8:return t.getFloat64(0);default:return NaN}},e.readDate=function(t){var n=new DataView(t.buffer,t.byteOffset,t.byteLength);switch(t.byteLength){case 1:return new Date(n.getUint8(0));case 2:return new Date(n.getUint16(0));case 4:return new Date(n.getUint32(0));case 8:return new Date(Number.parseInt(e.readHexString(t),16));default:return new Date(0)}},e.readDataFromTag=function(t,n){var i,o=t.type,a=t.name,s=t.track,l=t.discardable||!1,u=t.keyframe||!1,c=null;switch(o){case\"u\":i=e.readUnsigned(n);break;case\"f\":i=e.readFloat(n);break;case\"i\":i=e.readSigned(n);break;case\"s\":i=String.fromCharCode.apply(String,n);break;case\"8\":i=e.readUtf8(n);break;case\"d\":i=e.readDate(n)}if(\"SimpleBlock\"===a||\"Block\"===a){var f=0,h=e.readVint(n,f),p=h.length;f+=p,s=h.value,i=e.readSigned(n.subarray(f,f+2)),f+=2,\"SimpleBlock\"===a&&(u=Boolean(128&n[p+2]),l=Boolean(1&n[p+2])),f+=1,c=n.subarray(f)}return r(r({},t),{data:n,discardable:l,keyframe:u,payload:c,track:s,value:i})},e}();t.default=a},5376: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<o;){var c=parseInt(n[i++],r);if(!(c>=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<r;)e[t++]=255&n,n/=256}function b(e,t,n){var r=t+8;for(n++;t<r;)e[t++]=255&-n^255,n/=256}u(\"Uint64BE\",!0,!0),u(\"Int64BE\",!0,!1),u(\"Uint64LE\",!1,!0),u(\"Int64LE\",!1,!1)}(\"string\"!=typeof t.nodeName?t:this||{})},5839:function(e,t,n){var r=n(3517);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<o;n++)i.push(e.nextBuffer(r));return i}var a=[];if(1===t)for(n=0;n<o-1;n++){var s;r=0;do{r+=s=e.nextUInt8()}while(255===s);a.push(r)}else if(3===t)for(r=e.nextUIntV(),a.push(r),n=1;n<o-1;n++)r+=e.nextIntV(),a.push(r);for(n=0;n<o-1;n++)i.push(e.nextBuffer(a[n]));return i.push(e.nextBuffer()),i}(n,o),t}},5956: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(7960),t);var o=n(8953);t.Decoder=o.default;var a=n(8066);t.Encoder=a.default;var s=n(1195);t.Reader=s.default;var l=n(1255);t.tools=l},5964:function(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<r;i++){if(7===i&&o>=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}}},7007:function(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;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):d(i,i.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if(\"function\"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function i(o){r.once&&e.removeEventListener(t,i),n(o)})}}Object.defineProperty(o,\"defaultMaxListeners\",{enumerable:!0,get:function(){return a},set:function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");a=e}}),o.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||i(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i=\"error\"===e,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var a;if(t.length>0&&(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<u;++n)r(c[n],this,t)}return!0},o.prototype.addListener=function(e,t){return u(this,e,t,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(e,t){return u(this,e,t,!0)},o.prototype.once=function(e,t){return s(t),this.on(e,f(this,e,t)),this},o.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,f(this,e,t)),this},o.prototype.removeListener=function(e,t){var n,r,i,o,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(\"removeListener\",e,n.listener||t));else if(\"function\"!=typeof n){for(i=-1,o=n.length-1;o>=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<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",e,a||t)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)\"removeListener\"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=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):[]}},7526:function(e,t){\"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<f;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],u[c++]=t>>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,l=r-i;s<l;s+=a)o.push(u(e,s,s+a>l?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;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){return n[e>>18&63]+n[e>>12&63]+n[e>>6&63]+n[63&e]}function u(e,t,n){for(var r,i=[],o=t;o<n;o+=3)r=(e[o]<<16&16711680)+(e[o+1]<<8&65280)+(255&e[o+2]),i.push(l(r));return i.join(\"\")}r[\"-\".charCodeAt(0)]=62,r[\"_\".charCodeAt(0)]=63},7960:function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0})},8066:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1255),i=n(1255),o=n(1105),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;n<t.length;n++){var r=t[n];if(this._schema[r].name===e)return new i.Buffer(r.toString(16),\"hex\")}return null},e.prototype.writeTag=function(e){var t=e.name,n=this.getSchemaInfo(t),i=e.data;if(null==n)throw new Error(\"No schema entry found for \"+t);var o=r.encodeTag(n,i);this._stack.length>0?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},8287:function(e,t,n){\"use strict\";const r=n(7526),i=n(251),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<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function d(e){if(e>=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;o<s;o++)if(u(e,o)===u(t,-1===r?0:o-r)){if(-1===r&&(r=o),o-r+1===l)return r*a}else-1!==r&&(o-=o-r),r=-1}else for(n+l>s&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let r=0;r<l;r++)if(u(e,o+r)!==u(t,r)){n=!1;break}if(n)return o}return-1}function w(e,t,n,r){n=Number(n)||0;const i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;const o=t.length;let a;for(r>o/2&&(r=o/2),a=0;a<r;++a){const r=parseInt(t.substr(2*a,2),16);if(J(r))return a;e[n+a]=r}return a}function k(e,t,n,r){return X(W(t,e.length-n),e,n,r)}function T(e,t,n,r){return X(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function E(e,t,n,r){return X(G(t),e,n,r)}function C(e,t,n,r){return X(function(e,t){let n,r,i;const o=[];for(let a=0;a<e.length&&!((t-=2)<0);++a)n=e.charCodeAt(a),r=n>>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(;i<n;){const t=e[i];let o=null,a=t>239?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(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=I));return n}(r)}t.kMaxLength=a,l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(l.prototype,\"parent\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,\"offset\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return u(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return c(e),e<=0?s(e):void 0!==t?\"string\"==typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return f(e)},l.allocUnsafeSlow=function(e){return f(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),Y(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let i=0,o=Math.min(n,r);i<o;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let i=0;for(n=0;n<e.length;++n){let t=e[n];if(Y(t,Uint8Array))i+t.length>r.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;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?B(this,0,e):y.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e=\"\";const n=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,n).replace(/(.{2})/g,\"$1 \").trim(),this.length>n&&(e+=\" ... \"),\"<Buffer \"+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<s;++e)if(u[e]!==c[e]){o=u[e],a=c[e];break}return o<a?-1:a<o?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r=\"utf8\",n=this.length,t=0;else if(void 0===n&&\"string\"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=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;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function D(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function _(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let i=\"\";for(let r=t;r<n;++r)i+=K[e[r]];return i}function x(e,t,n){const r=e.slice(t,n);let i=\"\";for(let e=0;e<r.length-1;e+=2)i+=String.fromCharCode(r[e]+256*r[e+1]);return i}function P(e,t,n){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>n)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||t<o)throw new RangeError('\"value\" argument is out of bounds');if(n+r>e.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<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=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)<<BigInt(32))}),l.prototype.readBigUInt64BE=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*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)<<BigInt(32))+BigInt(i)}),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o<t&&(i*=256);)r+=this[e+o]*i;return i*=128,r>=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)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)}),l.prototype.readBigInt64BE=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<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)}),l.prototype.readFloatLE=function(e,t){return e>>>=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<n&&(i*=256);)this[t+o]=e/i&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=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=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<n&&(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.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<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=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<r-n&&(r=e.length-t+n);const i=r-n;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),i},l.prototype.fill=function(e,t,n,r){if(\"string\"==typeof e){if(\"string\"==typeof t?(r=t,t=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!l.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===r&&t<128||\"latin1\"===r)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError(\"Out of range index\");if(n<=t)return this;let i;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(i=t;i<n;++i)this[i]=e;else{const o=l.isBuffer(e)?e:l.from(e,r),a=o.length;if(0===a)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<n-t;++i)this[i+t]=o[i%a]}return this};const F={};function V(e,t,n){F[e]=class extends n{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function z(e){let t=\"\",n=e.length;const r=\"-\"===e[0]?1:0;for(;n>=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||e<t){const r=\"bigint\"==typeof t?\"n\":\"\";let i;throw i=o>3?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;a<r;++a){if(n=e.charCodeAt(a),n>55295&&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<r&&!(i+n>=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\")}},8953:function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,i=n(5376),o=n(1255),a=n(1255),s=n(1105);!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&&(this._state!==r.STATE_TAG||this.readTag())&&(this._state!==r.STATE_SIZE||this.readSize())&&(this._state!==r.STATE_CONTENT||this.readContent()););},e.prototype.getSchemaInfo=function(e){return this._schema[e]||{name:\"unknown\",level:-1,type:\"unknown\",description:\"unknown\"}},e.prototype.readTag=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._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.length<this._cursor+e.dataSize)return!1;var n=this._buffer.slice(this._cursor,this._cursor+e.dataSize);switch(this._buffer=this._buffer.slice(this._cursor+e.dataSize),e.data=n,e.type){case\"u\":e.value=n.readUIntBE(0,n.length);break;case\"i\":e.value=n.readIntBE(0,n.length);break;case\"f\":e.value=4===e.dataSize?n.readFloatBE(0):8===e.dataSize?n.readDoubleBE(0):(console.warn(\"cannot read \".concat(e.dataSize,\" octets float. failback to 0\")),0);break;case\"s\":e.value=n.toString(\"ascii\");break;case\"8\":e.value=n.toString(\"utf8\");break;case\"b\":e.value=n;break;case\"d\":e.value=(0,o.convertEBMLDateToJSDate)(new i.Int64BE(n).toNumber())}if(null===e.value)throw new Error(\"unknown tag type:\"+e.type);for(this._result.push(e),this._total+=e.dataSize,this._state=r.STATE_TAG,this._cursor=0,this._tag_stack.pop();this._tag_stack.length>0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total<a.dataEnd)break;if(\"m\"!==a.type)throw new Error(\"parent element is not master element\");t=Object.assign({},a,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0},e}();t.default=l}}]);\n//# sourceMappingURL=537.prod.js.map"
  },
  {
    "path": "umd/552.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[552],{4552:function(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\":\"Чатів немає\\\\n¯∖_(ツ)_/¯\",\"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\":\"Емейл, напр. 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\":\"Надіслати СМС для скидання пароля\",\"mobile_phone_number\":\"Номер мобільного телефону\",\"password_reset_sms_sent\":\"СМС із захисним кодом відправлено.\",\"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\":\"Пароль змінено успішно\",\"scan_qr_code\":\"Відскануйте QR-код\",\"pin_message\":\"закріпити\",\"unpin_message\":\"відкріпити\",\"self_topic_comment\":\"Нотатки, повідомлення, посилання, файли збережені для нащадків\",\"self_topic_name\":\"Збережені повідомлення\",\"message_not_found\":\"повідомлення не знайдено\",\"message_deleted\":\"повідомлення видалено\",\"alias_editing_placeholder\":\"Псевдонім (необов\\'язково)\",\"label_alias\":\"Псевдонім:\",\"alias_already_taken\":\"(вже зайнято)\",\"alias_invalid\":\"(недійсний)\",\"label_alias_edit\":\"Псевдонім\",\"select_country\":\"Виберіть країну\",\"text_copied\":\"Скопійовано в буфер обміну\",\"color_schema_dark\":\"Темна\",\"color_schema_light\":\"Світла\",\"color_schema_system\":\"Системна\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Розмір тексту:\",\"incognito_mode_description\":\"Приховати ваш статус онлайн та індикатори набору тексту.\",\"send_command\":\"Надіслати на {key}\",\"send_command_explained\":\"Натисніть Enter для нового рядка\",\"send_plain\":\"Надіслати на Enter\",\"send_plain_explained\":\"Натисніть Shift + Enter для нового рядка\",\"sidepanel_title_acc_general\":\"Загальні\",\"label_keyboard\":\"Клавіатура:\",\"pin_chat\":\"Закріпити\",\"unpin_chat\":\"Відкріпити\",\"subscriber_count\":\"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}\",\"label_member_count\":\"Учасники:\",\"label_subscriber_count\":\"Підписники:\",\"member_count\":\"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}\",\"tabtitle_image\":\"зображення\",\"tabtitle_pattern\":\"візерунок\",\"button_restore\":\"Відновити типові\",\"wallpapers\":\"Шпалери\",\"label_blur_wallpaper\":\"Розмиття:\",\"label_scan_id\":\"Сканувати мій ID:\",\"unknown_name\":\"Невідомий\",\"save_action\":\"Зберегти\",\"cannot_parse_vcard\":\"Не вдалося обробити файл vCard.\",\"chat_now\":\"Написати\",\"find_user\":\"Знайти\",\"label_contact_card\":\"Картка контакту\",\"label_contacts\":\"Контакти\",\"add_members_prompt\":\"додати учасників\"}')}}]);"
  },
  {
    "path": "umd/553.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[553],{5553:function(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\":\"Чатов нет\\\\n¯∖_(ツ)_/¯\",\"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\":\"занято\",\"pin_message\":\"Закрепить\",\"unpin_message\":\"Открепить\",\"failed_to_init_audio\":\"Не удалось инициализировать аудиозапись\",\"password_reset_success\":\"Пароль успешно изменен\",\"scan_qr_code\":\"Отсканируйте QR код\",\"self_topic_comment\":\"Заметки, сообщения, ссылки, файлы, сохраненные для потомков\",\"self_topic_name\":\"Сохраненные сообщения\",\"message_not_found\":\"сообщение не найдено\",\"message_deleted\":\"сообщение удалено\",\"alias_editing_placeholder\":\"Псевдоним (необязательно)\",\"label_alias\":\"Псевдоним:\",\"alias_already_taken\":\"(уже занято)\",\"alias_invalid\":\"(некорректно)\",\"label_alias_edit\":\"Псевдоним\",\"select_country\":\"Выберите страну\",\"text_copied\":\"Скопировано в буфер обмена\",\"color_schema_dark\":\"Тёмная\",\"color_schema_light\":\"Светлая\",\"color_schema_system\":\"Системная\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Размер текста:\",\"incognito_mode_description\":\"Скрывать онлайн статус и индикаторы набора текста.\",\"send_command\":\"Отправлять на {key}\",\"send_command_explained\":\"Нажмать Enter для новой строки\",\"send_plain\":\"Отправлять на Enter\",\"send_plain_explained\":\"Нажимать Shift + Enter для новой строки\",\"sidepanel_title_acc_general\":\"Основные\",\"label_keyboard\":\"Клавиатура:\",\"pin_chat\":\"Закрепить\",\"unpin_chat\":\"Открепить\",\"subscriber_count\":\"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}\",\"label_member_count\":\"Участники:\",\"label_subscriber_count\":\"Подписчики:\",\"member_count\":\"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}\",\"tabtitle_image\":\"картинка\",\"tabtitle_pattern\":\"узор\",\"button_restore\":\"Восстановить по умолчанию\",\"wallpapers\":\"Обои\",\"label_blur_wallpaper\":\"Размытие:\",\"label_scan_id\":\"Отсканируйте мой ID:\",\"unknown_name\":\"Неизвестный\",\"save_action\":\"Сохранить\",\"cannot_parse_vcard\":\"Не удалось обработать файл vCard.\",\"chat_now\":\"Написать\",\"find_user\":\"Найти\",\"label_contact_card\":\"Карточка контакта\",\"label_contacts\":\"Контакты\",\"add_members_prompt\":\"добавить участников\"}')}}]);"
  },
  {
    "path": "umd/564.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[564],{4564: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\":\"您沒有任何對話<br />¯∖_(ツ)_/¯\",\"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\":\"密碼重置成功\",\"scan_qr_code\":\"掃描二維碼\"}')}}]);"
  },
  {
    "path": "umd/570.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[570],{570:function(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\":\"你尚无会话\\\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置顶消息\",\"unpin_message\":\"取消置顶消息\",\"failed_to_init_audio\":\"初始化录音失败\",\"password_reset_success\":\"密码重置成功\",\"scan_qr_code\":\"扫描二维码\",\"self_topic_comment\":\"为后人保存的注释、消息、链接、文件\",\"self_topic_name\":\"已保存的消息\",\"message_not_found\":\"未找到消息\",\"message_deleted\":\"消息已删除\",\"alias_editing_placeholder\":\"别名（可选）\",\"label_alias\":\"别名：\",\"alias_already_taken\":\"（已占用）\",\"alias_invalid\":\"（无效）\",\"label_alias_edit\":\"别名\",\"select_country\":\"选择国家\",\"text_copied\":\"已复制到剪贴板\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"浅色\",\"color_schema_system\":\"系统默认\",\"label_color_schema\":\"主题：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隐藏您的在线状态和正在输入指示器。\",\"send_command\":\"按 {key} 发送\",\"send_command_explained\":\"按 Enter 换行\",\"send_plain\":\"按 Enter 发送\",\"send_plain_explained\":\"按 Shift + Enter 换行\",\"sidepanel_title_acc_general\":\"常规\",\"label_keyboard\":\"键盘：\",\"pin_chat\":\"置顶\",\"unpin_chat\":\"取消置顶\",\"subscriber_count\":\"{count, plural, other {{count, number} 位订阅者}}\",\"label_member_count\":\"成员：\",\"label_subscriber_count\":\"订阅者：\",\"member_count\":\"{count, plural, other {{count, number} 位成员}}\",\"tabtitle_image\":\"图片\",\"tabtitle_pattern\":\"图案\",\"button_restore\":\"恢复默认\",\"wallpapers\":\"壁纸\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"扫描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"保存\",\"cannot_parse_vcard\":\"无法解析 vCard 文件。\",\"chat_now\":\"聊天\",\"find_user\":\"查找\",\"label_contact_card\":\"联系人卡片\",\"label_contacts\":\"联系人\",\"add_members_prompt\":\"添加成员\"}')}}]);"
  },
  {
    "path": "umd/632.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[632],{1632: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<br />¯∖_(ツ)_/¯\",\"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\",\"scan_qr_code\":\"QR-Code scannen\"}')}}]);"
  },
  {
    "path": "umd/634.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[634],{3634: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\":\"Чатів немає<br />¯∖_(ツ)_/¯\",\"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\":\"Емейл, напр. 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\":\"Надіслати СМС для скидання пароля\",\"mobile_phone_number\":\"Номер мобільного телефону\",\"password_reset_sms_sent\":\"СМС із захисним кодом відправлено.\",\"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\":\"Пароль змінено успішно\",\"scan_qr_code\":\"Відскануйте QR-код\"}')}}]);"
  },
  {
    "path": "umd/64.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[64],{6064:function(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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fijar\",\"unpin_message\":\"Desanclar\",\"failed_to_init_audio\":\"Error al inicializar la grabación de audio\",\"password_reset_success\":\"Restablecimiento de contraseña con éxito\",\"scan_qr_code\":\"Escanear código QR\",\"self_topic_comment\":\"Notas, mensajes, enlaces, archivos guardados para la posteridad\",\"self_topic_name\":\"Mensajes guardados\",\"message_not_found\":\"Mensaje no encontrado\",\"message_deleted\":\"Mensaje eliminado\",\"alias_editing_placeholder\":\"Alias (opcional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(ya tomado)\",\"alias_invalid\":\"(inválido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleccionar país\",\"text_copied\":\"Copiado al portapapeles\",\"color_schema_dark\":\"Oscuro\",\"color_schema_light\":\"Claro\",\"color_schema_system\":\"Predeterminado del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Tamaño del texto:\",\"incognito_mode_description\":\"Ocultar tu estado en línea e indicadores de escritura.\",\"send_command\":\"Enviar con {key}\",\"send_command_explained\":\"Presiona Enter para nueva línea\",\"send_plain\":\"Enviar con Enter\",\"send_plain_explained\":\"Presiona Shift + Enter para nueva línea\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Teclado:\",\"pin_chat\":\"Fijar\",\"unpin_chat\":\"Desfijar\",\"subscriber_count\":\"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}\",\"label_member_count\":\"Miembros:\",\"label_subscriber_count\":\"Suscriptores:\",\"member_count\":\"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}\",\"tabtitle_image\":\"imagen\",\"tabtitle_pattern\":\"patrón\",\"button_restore\":\"Restaurar predeterminado\",\"wallpapers\":\"Fondos de pantalla\",\"label_blur_wallpaper\":\"Desenfoque:\",\"label_scan_id\":\"Escanear mi ID:\",\"unknown_name\":\"Desconocido\",\"save_action\":\"Guardar\",\"cannot_parse_vcard\":\"No se puede analizar el archivo vCard.\",\"chat_now\":\"Chatear\",\"find_user\":\"Buscar\",\"label_contact_card\":\"Tarjeta de contacto\",\"label_contacts\":\"Contactos\",\"add_members_prompt\":\"añadir miembros\"}')}}]);"
  },
  {
    "path": "umd/648.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[648],{3648: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\":\"你尚无会话<br />¯∖_(ツ)_/¯\",\"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\":\"密码重置成功\",\"scan_qr_code\":\"扫描二维码\"}')}}]);"
  },
  {
    "path": "umd/688.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[688],{7300:(t,d,e)=>{e.d(d,{c:()=>P});var n=e(6340),r=e(908),a=e(5184),i=e(7443);function $(t,d,e){var r=new n.cp(e).getCountryCodesForCallingCode(t);return r?r.filter((function(t){return function(t,d,e){var r=new n.cp(e);if(r.selectNumberingPlan(d),r.numberingPlan.possibleLengths().indexOf(t.length)>=0)return!0;return!1}(d,t,e)})):[]}var o=e(40),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 c(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 c(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 c(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function s(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 f(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?s(Object(e),!0).forEach((function(d){h(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function h(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var g={formatExtension:function(t,d,e){return\"\".concat(t).concat(e.ext()).concat(d)}};function m(t,d,e,r){if(e=e?f(f({},g),e):g,r=new n.cp(r),t.country&&\"001\"!==t.country){if(!r.hasCountry(t.country))throw new Error(\"Unknown country: \".concat(t.country));r.country(t.country)}else{if(!t.countryCallingCode)return t.phone||\"\";r.selectNumberingPlan(t.countryCallingCode)}var a,i=r.countryCallingCode(),$=e.v2?t.nationalNumber:t.phone;switch(d){case\"NATIONAL\":return $?p(a=y($,t.carrierCode,\"NATIONAL\",r,e),t.ext,r,e.formatExtension):\"\";case\"INTERNATIONAL\":return $?(a=y($,null,\"INTERNATIONAL\",r,e),p(a=\"+\".concat(i,\" \").concat(a),t.ext,r,e.formatExtension)):\"+\".concat(i);case\"E.164\":return\"+\".concat(i).concat($);case\"RFC3966\":return function(t){var d=t.number,e=t.ext;if(!d)return\"\";if(\"+\"!==d[0])throw new Error('\"formatRFC3966()\" expects \"number\" to be in E.164 format.');return\"tel:\".concat(d).concat(e?\";ext=\"+e:\"\")}({number:\"+\".concat(i).concat($),ext:t.ext});case\"IDD\":if(!e.fromCountry)return;var o=function(t,d,e,r,a){var i=(0,n.i0)(r,a.metadata);if(i===e){var $=y(t,d,\"NATIONAL\",a);return\"1\"===e?e+\" \"+$:$}var o=function(t,d,e){var r=new n.cp(e);return r.selectNumberingPlan(t,d),r.defaultIDDPrefix()?r.defaultIDDPrefix():u.test(r.IDDPrefix())?r.IDDPrefix():void 0}(r,void 0,a.metadata);if(o)return\"\".concat(o,\" \").concat(e,\" \").concat(y(t,null,\"INTERNATIONAL\",a))}($,t.carrierCode,i,e.fromCountry,r);return p(o,t.ext,r,e.formatExtension);default:throw new Error('Unknown \"format\" argument passed to \"formatNumber()\": \"'.concat(d,'\"'))}}function y(t,d,e,n,r){var i=function(t,d){for(var e,n=l(t);!(e=n()).done;){var r=e.value;if(r.leadingDigitsPatterns().length>0){var i=r.leadingDigitsPatterns()[r.leadingDigitsPatterns().length-1];if(0!==d.search(i))continue}if((0,a.c)(d,r.pattern()))return r}}(n.formats(),t);return i?(0,o.c)(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<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?v(Object(e),!0).forEach((function(d){C(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):v(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function C(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function N(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var P=function(){function t(d,e,r){if(function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!d)throw new TypeError(\"`country` or `countryCallingCode` not passed\");if(!e)throw new TypeError(\"`nationalNumber` not passed\");if(!r)throw new TypeError(\"`metadata` not passed\");var a=function(t,d){var e,r,a=new n.cp(d);x(t)?(e=t,a.selectNumberingPlan(e),r=a.countryCallingCode()):r=t;return{country:e,countryCallingCode:r}}(d,r),i=a.country,$=a.countryCallingCode;this.country=i,this.countryCallingCode=$,this.nationalNumber=e,this.number=\"+\"+this.countryCallingCode+this.nationalNumber,this.getMetadata=function(){return r}}var d,e,o;return d=t,(e=[{key:\"setExt\",value:function(t){this.ext=t}},{key:\"getPossibleCountries\",value:function(){return this.country?[this.country]:$(this.countryCallingCode,this.nationalNumber,this.getMetadata())}},{key:\"isPossible\",value:function(){return(0,r.c)(this,{v2:!0},this.getMetadata())}},{key:\"isValid\",value:function(){return function(t,d,e){if(d=d||{},(e=new n.cp(e)).selectNumberingPlan(t.country,t.countryCallingCode),e.hasTypes())return void 0!==(0,i.c)(t,d,e.metadata);var r=d.v2?t.nationalNumber:t.phone;return(0,a.c)(r,e.nationalNumberPattern())}(this,{v2:!0},this.getMetadata())}},{key:\"isNonGeographic\",value:function(){return new n.cp(this.getMetadata()).isNonGeographicCallingCode(this.countryCallingCode)}},{key:\"isEqual\",value:function(t){return this.number===t.number&&this.ext===t.ext}},{key:\"getType\",value:function(){return(0,i.c)(this,{v2:!0},this.getMetadata())}},{key:\"format\",value:function(t,d){return m(this,t,d?b(b({},d),{},{v2:!0}):{v2:!0},this.getMetadata())}},{key:\"formatNational\",value:function(t){return this.format(\"NATIONAL\",t)}},{key:\"formatInternational\",value:function(t){return this.format(\"INTERNATIONAL\",t)}},{key:\"getURI\",value:function(t){return this.format(\"RFC3966\",t)}}])&&N(d.prototype,e),o&&N(d,o),Object.defineProperty(d,\"prototype\",{writable:!1}),t}(),x=function(t){return/^[A-Z]{2}$/.test(t)}},8368:(t,d,e)=>{e.d(d,{GA:()=>i,Gq:()=>r,Qj:()=>o,e6:()=>$,mG:()=>a,oJ:()=>n});var n=2,r=17,a=3,i=\"0-9０-９٠-٩۰-۹\",$=\"\".concat(\"-‐-―−ー－\").concat(\"／/\").concat(\"．.\").concat(\"  ­​⁠　\").concat(\"()（）［］\\\\[\\\\]\").concat(\"~⁓∼～\"),o=\"+＋\"},6576:(t,d,e)=>{e.d(d,{c:()=>r});var n=e(8368);function r(t){return t.replace(new RegExp(\"[\".concat(n.e6,\"]+\"),\"g\"),\" \").trim()}},4408:(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<d;e++)n[e]=t[e];return n}function a(t,d){return i(t,void 0,d)}function i(t,d,e){var r=e.type(d),a=r&&r.possibleLengths()||e.possibleLengths();if(!a)return\"IS_POSSIBLE\";if(\"FIXED_LINE_OR_MOBILE\"===d){if(!e.type(\"FIXED_LINE\"))return i(t,\"MOBILE\",e);var $=e.type(\"MOBILE\");$&&(a=function(t,d){for(var e,r=t.slice(),a=n(d);!(e=a()).done;){var i=e.value;t.indexOf(i)<0&&r.push(i)}return r.sort((function(t,d){return t-d}))}(a,$.possibleLengths()))}else if(d&&!r)return\"INVALID_LENGTH\";var o=t.length,u=a[0];return u===o?\"IS_POSSIBLE\":u>o?\"TOO_SHORT\":a[a.length-1]<o?\"TOO_LONG\":a.indexOf(o,1)>=0?\"IS_POSSIBLE\":\"INVALID_LENGTH\"}e.d(d,{c:()=>a})},2120:(t,d,e)=>{e.d(d,{c:()=>$});var n=e(6811),r=e(3888),a=e(6340),i=e(8368);function $(t,d,e,$){if(!t)return{};var o;if(\"+\"!==t[0]){var u=(0,n.c)(t,d,e,$);if(!u||u===t){if(d||e){var l=(0,r.c)(t,d,e,$),c=l.countryCallingCode,s=l.number;if(c)return{countryCallingCodeSource:\"FROM_NUMBER_WITHOUT_PLUS_SIGN\",countryCallingCode:c,number:s}}return{number:t}}o=!0,t=\"+\"+u}if(\"0\"===t[1])return{};$=new a.cp($);for(var f=2;f-1<=i.mG&&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{}}},3888:(t,d,e)=>{e.d(d,{c:()=>$});var n=e(6340),r=e(5184),a=e(6440),i=e(4408);function $(t,d,e,$){var o=d?(0,n.i0)(d,$):e;if(0===t.indexOf(o)){($=new n.cp($)).selectNumberingPlan(d,e);var u=t.slice(o.length),l=(0,a.c)(u,$).nationalNumber,c=(0,a.c)(t,$).nationalNumber;if(!(0,r.c)(c,$.nationalNumberPattern())&&(0,r.c)(l,$.nationalNumberPattern())||\"TOO_LONG\"===(0,i.c)(c,$))return{countryCallingCode:o,number:u}}return{number:t}}},6440:(t,d,e)=>{e.d(d,{c:()=>i});var n=e(5724),r=e(5184),a=e(4408);function i(t,d){var e=(0,n.c)(t,d),i=e.carrierCode,$=e.nationalNumber;if($!==t){if(!function(t,d,e){if((0,r.c)(t,e.nationalNumberPattern())&&!(0,r.c)(d,e.nationalNumberPattern()))return!1;return!0}(t,$,d))return{nationalNumber:t};if(d.possibleLengths()&&!function(t,d){switch((0,a.c)(t,d)){case\"TOO_SHORT\":case\"INVALID_LENGTH\":return!1;default:return!0}}($,d))return{nationalNumber:t}}return{nationalNumber:$,carrierCode:i}}},5724:(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,{c:()=>n})},40:(t,d,e)=>{e.d(d,{c:()=>a,i:()=>r});var n=e(6576),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.c)($):$}},5784:(t,d,e)=>{e.d(d,{c:()=>a});var n=e(5176),r=!1;function a(t,d){var e=d.nationalNumber,a=d.defaultCountry,i=d.metadata;if(r&&i.isNonGeographicCallingCode(t))return\"001\";var $=i.getCountryCodesForCallingCode(t);return $?1===$.length?$[0]:(0,n.c)(e,{countries:$,defaultCountry:a,metadata:i.metadata}):void 0}},5176:(t,d,e)=>{e.d(d,{c:()=>$});var n=e(6340),r=e(7443);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<d;e++)n[e]=t[e];return n}function $(t,d){var e=d.countries,i=d.defaultCountry,$=d.metadata;$=new n.cp($);for(var o,u=[],l=a(e);!(o=l()).done;){var c=o.value;if($.country(c),$.leadingDigits()){if(t&&0===t.search($.leadingDigits()))return c}else if((0,r.c)({phone:t,country:c},void 0,$.metadata)){if(!i)return c;if(c===i)return c;u.push(c)}}if(u.length>0)return u[0]}},7443:(t,d,e)=>{e.d(d,{c:()=>o});var n=e(6340),r=e(5184);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<d;e++)n[e]=t[e];return n}var $=[\"MOBILE\",\"PREMIUM_RATE\",\"TOLL_FREE\",\"SHARED_COST\",\"VOIP\",\"PERSONAL_NUMBER\",\"PAGER\",\"UAN\",\"VOICEMAIL\"];function o(t,d,e){if(d=d||{},t.country||t.countryCallingCode){(e=new n.cp(e)).selectNumberingPlan(t.country,t.countryCallingCode);var i=d.v2?t.nationalNumber:t.phone;if((0,r.c)(i,e.nationalNumberPattern())){if(u(i,\"FIXED_LINE\",e))return e.type(\"MOBILE\")&&\"\"===e.type(\"MOBILE\").pattern()?\"FIXED_LINE_OR_MOBILE\":e.type(\"MOBILE\")?u(i,\"MOBILE\",e)?\"FIXED_LINE_OR_MOBILE\":\"FIXED_LINE\":\"FIXED_LINE_OR_MOBILE\";for(var o,l=a($);!(o=l()).done;){var c=o.value;if(u(i,c,e))return c}}}}function u(t,d,e){return!(!(d=e.type(d))||!d.pattern())&&(!(d.possibleLengths()&&d.possibleLengths().indexOf(t.length)<0)&&(0,r.c)(t,d.pattern()))}},4348:(t,d,e)=>{e.d(d,{c:()=>r});var n={}.constructor;function r(t){return null!=t&&t.constructor===n}},5184:(t,d,e)=>{function n(t,d){return t=t||\"\",new RegExp(\"^(?:\"+d+\")$\").test(t)}e.d(d,{c:()=>n})},160:(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<d;e++)n[e]=t[e];return n}e.d(d,{UV:()=>i,cp:()=>$});var a={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\",\"۰\":\"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}},6811:(t,d,e)=>{e.d(d,{c:()=>i});var n=e(6340),r=e(8368),a=new RegExp(\"([\"+r.GA+\"])\");function i(t,d,e,r){if(d){var i=new n.cp(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}}}},908:(t,d,e)=>{e.d(d,{M:()=>i,c:()=>a});var n=e(6340),r=e(4408);function a(t,d,e){if(void 0===d&&(d={}),e=new n.cp(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.c)(t,d)}},6340:(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]<d[1]?-1:0:!t[1]&&d[1]?1:t[1]&&!d[1]?-1:0}e.d(d,{cp:()=>c,i0:()=>p});var r=e(4348);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){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}function $(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,d,e){return d&&$(t.prototype,d),e&&$(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}var u=\" ext. \",l=/^\\d+$/,c=function(){function t(d){i(this,t),function(t){if(!t)throw new Error(\"[libphonenumber-js] `metadata` argument not passed. Check your arguments.\");if(!(0,r.c)(t)||!(0,r.c)(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((0,r.c)(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&&l.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){i(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 f(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()&&m(this.types(),t))return new g(m(this.types(),t),this)}},{key:\"ext\",value:function(){return this.v1||this.v2?u:this.metadata[13]||u}}]),t}(),f=function(){function t(d,e){i(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()||h.test(this.nationalPrefixFormattingRule()))}},{key:\"internationalFormat\",value:function(){return this._format[5]||this.format()}}]),t}(),h=/^\\(?\\$1\\)?$/,g=function(){function t(d,e){i(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 m(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 y=function(t){return a(t)};function p(t,d){if((d=new c(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}},6088:(t,d,e)=>{e.d(d,{c:()=>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\"}},9624:(t,d,e)=>{e.d(d,{c:()=>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(?:2(?:657|9(?: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)|920)|3(?:4(?:46|8[27]|92)|541|878))[2-7]\\\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:62|76|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-8]|[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[0-36-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(?:[15]|28|4[14])|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[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\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-7]|[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,[\"441909\\\\d{4}|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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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[0-36-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([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?: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}|63\\\\d{6}|(?: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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|63)\\\\d{6}\",[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[0-36-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,[\"7060\\\\d{5}|(?: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{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|31)\"],\"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\\\\d|310)\\\\d{6}|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(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[236]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-6]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[0167]\\\\d|2[0-2]|5[01]|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,[\"700[1-9]\\\\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{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:1[3-79]|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"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|11|22|33|44|5[05]|77|88|9[09])|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(?:[018]\\\\d|2[0-4])|58[89]|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}|5(?:0(?:0[17]0|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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],GU:[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:510|6\\\\d\\\\d|7(?:[01]\\\\d|2[156]|49))\\\\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[05-9]|6(?:1[0-7]|4[0-57-9]|6[0-4]))|5(?:73[0-6]|95[0-8])|6(?:26[013-8]|66[0-3])|70(?:7[1-6]|8[0-4])|848[0-35-9]|9(?:29[013-9]|39[01]|59[0-4]|899))\\\\d{4}|(?:4(?:4[015-8]|6[02357-9])|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])|70[129]|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|55|77|9[5-7])))\\\\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,[\"55410\\\\d{4}|5(?:(?:[02][02-9]|[149][2-9]|[36]\\\\d|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[34]|5[0-25689]|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(?:[12]\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|69|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})|(?:43|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]|43\"]],[\"(\\\\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[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[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)|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])|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])|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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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,\"(000[259]\\\\d{6})$|(?:(?:003768)0?)|0\",\"$1\",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-9]\\\\d{8}\",[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]|9(?:12|9[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[0-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-469])\\\\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\",\"(?:[245]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|(?:77|88)\\\\d)\\\\d|4(?:240|[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{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)|8(?:0[89]|92)\",\"5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|8(?:0[89]|92)\"],\"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(?:[0167]\\\\d|2[0-2]|5[01]|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[35-8])\\\\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|6[01]|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]|92[039])\\\\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-3]|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|87|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-69]|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[0-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-7]))|(?:[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[047]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[047]|[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\",\"2[0-24-9]\\\\d{8}|[78]\\\\d{10,13}|[7-9]\\\\d{9}|[1-9]\\\\d{7}|[124-7]\\\\d{6}\",[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{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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}|(?:7(?:0[13-689]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\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]|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\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],NZ:[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|6[89]|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[1-38])\\\\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-247]\\\\d|3[0-79]|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\\\\d\\\\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-7])\"],\"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]|7[1-6]|8[1-7]|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(?:[06][0-6]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))\\\\d{4}\"]]],RO:[\"40\",\"00\",\"(?:[236-8]\\\\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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7020\\\\d{5}|(?:6(?:2\\\\d|40)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\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-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-8]|[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,[\"895[0-2]\\\\d{4}|(?:8(?:0[1-8]|[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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|77|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[79]|8[08])\\\\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,[\"[67]\\\\d{7}\",[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,[\"67(?:1[0-8]|2[4-7])\\\\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\",[\"44[02-479]|[34]7\"]],[\"(\\\\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,[\"(?:4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:0[0-57-9]|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-8])\\\\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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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(?:[015-8]\\\\d|20|36|4[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[468])|7302[01]\\\\d)\\\\d{4}|(?:472[24]|505[2-57-9]|983[289])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013569]|3[0-24679]|4[167]|5[0-2]|6[0149]|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]|3[016]|4[0156]|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\\\\d{2,9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",[6,7,8,9,10,11,12,13],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],UZ:[\"998\",\"810\",\"(?:20|33|[5-79]\\\\d|88)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:(?:[25]0|33|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]))|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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\",\"(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])\\\\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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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[0-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}\"]]]}}},9780:(t,d,e)=>{e.d(d,{C:()=>$t});var n=e(9624),r=e(6340),a=e(7300);function i(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var $=function(){function t(d){var e=d.onCountryChange,n=d.onCallingCodeChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.onCountryChange=e,this.onCallingCodeChange=n}var d,e,n;return d=t,(e=[{key:\"reset\",value:function(t){var d=t.country,e=t.callingCode;this.international=!1,this.missingPlus=!1,this.IDDPrefix=void 0,this.callingCode=void 0,this.digits=\"\",this.resetNationalSignificantNumber(),this.initCountryAndCallingCode(d,e)}},{key:\"resetNationalSignificantNumber\",value:function(){this.nationalSignificantNumber=this.getNationalDigits(),this.nationalSignificantNumberMatchesInput=!0,this.nationalPrefix=void 0,this.carrierCode=void 0,this.complexPrefixBeforeNationalSignificantNumber=void 0}},{key:\"update\",value:function(t){for(var d=0,e=Object.keys(t);d<e.length;d++){var n=e[d];this[n]=t[n]}}},{key:\"initCountryAndCallingCode\",value:function(t,d){this.setCountry(t),this.setCallingCode(d)}},{key:\"setCountry\",value:function(t){this.country=t,this.onCountryChange(t)}},{key:\"setCallingCode\",value:function(t){this.callingCode=t,this.onCallingCodeChange(t,this.country)}},{key:\"startInternationalNumber\",value:function(t,d){this.international=!0,this.initCountryAndCallingCode(t,d)}},{key:\"appendDigits\",value:function(t){this.digits+=t}},{key:\"appendNationalSignificantNumberDigits\",value:function(t){this.nationalSignificantNumber+=t}},{key:\"getNationalDigits\",value:function(){return this.international?this.digits.slice((this.IDDPrefix?this.IDDPrefix.length:0)+(this.callingCode?this.callingCode.length:0)):this.digits}},{key:\"getDigitsWithoutInternationalPrefix\",value:function(){return this.international&&this.IDDPrefix?this.digits.slice(this.IDDPrefix.length):this.digits}}])&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function o(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 u(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 u(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 u(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}var l=\"x\",c=new RegExp(l);function s(t,d){if(d<1)return\"\";for(var e=\"\";d>1;)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;)\"(\"===t[e]?d.push(e):\")\"===t[e]&&d.pop(),e++;var n=0,r=\"\";d.push(t.length);for(var a=0,i=d;a<i.length;a++){var $=i[a];r+=t.slice(n,$),n=$+1}return r}(t.slice(0,d))}var h=e(4408),g=e(160),m=e(40);function y(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;if(new RegExp(\"^(?:\".concat(d.pattern(),\")$\")).test(t.nationalSignificantNumber))return function(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix;t.nationalSignificantNumber,t.international,t.nationalPrefix,t.carrierCode;if(r(d)){var i=p(t,d,{useNationalPrefixFormattingRule:!0,getSeparatorAfterNationalPrefix:a,metadata:n});if(i)return i}return p(t,d,{useNationalPrefixFormattingRule:!1,getSeparatorAfterNationalPrefix:a,metadata:n})}(t,d,{metadata:n,shouldTryNationalPrefixFormattingRule:r,getSeparatorAfterNationalPrefix:a})}function p(t,d,e){var n=e.metadata,r=e.useNationalPrefixFormattingRule,a=e.getSeparatorAfterNationalPrefix,i=(0,m.c)(t.nationalSignificantNumber,d,{carrierCode:t.carrierCode,useInternationalFormat:t.international,withNationalPrefix:r,metadata:n});if(r||(t.nationalPrefix?i=t.nationalPrefix+a(d)+i:t.complexPrefixBeforeNationalSignificantNumber&&(i=t.complexPrefixBeforeNationalSignificantNumber+\" \"+i)),function(t,d){return(0,g.cp)(t)===d.getNationalDigits()}(i,t))return i}function v(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var b=function(){function t(){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}var d,e,n;return d=t,(e=[{key:\"parse\",value:function(t){if(this.context=[{or:!0,instructions:[]}],this.parsePattern(t),1!==this.context.length)throw new Error(\"Non-finalized contexts left when pattern parse ended\");var d=this.context[0],e=d.branches,n=d.instructions;if(e)return{op:\"|\",args:e.concat([x(n)])};if(0===n.length)throw new Error(\"Pattern is required\");return 1===n.length?n[0]:n}},{key:\"startContext\",value:function(t){this.context.push(t)}},{key:\"endContext\",value:function(){this.context.pop()}},{key:\"getContext\",value:function(){return this.context[this.context.length-1]}},{key:\"parsePattern\",value:function(t){if(!t)throw new Error(\"Pattern is required\");var d=t.match(P);if(d){var e=d[1],n=t.slice(0,d.index),r=t.slice(d.index+e.length);switch(e){case\"(?:\":n&&this.parsePattern(n),this.startContext({or:!0,instructions:[],branches:[]});break;case\")\":if(!this.getContext().or)throw new Error('\")\" operator must be preceded by \"(?:\" operator');if(n&&this.parsePattern(n),0===this.getContext().instructions.length)throw new Error('No instructions found after \"|\" operator in an \"or\" group');var a=this.getContext().branches;a.push(x(this.getContext().instructions)),this.endContext(),this.getContext().instructions.push({op:\"|\",args:a});break;case\"|\":if(!this.getContext().or)throw new Error('\"|\" operator can only be used inside \"or\" groups');if(n&&this.parsePattern(n),!this.getContext().branches){if(1!==this.context.length)throw new Error('\"branches\" not found in an \"or\" group context');this.getContext().branches=[]}this.getContext().branches.push(x(this.getContext().instructions)),this.getContext().instructions=[];break;case\"[\":n&&this.parsePattern(n),this.startContext({oneOfSet:!0});break;case\"]\":if(!this.getContext().oneOfSet)throw new Error('\"]\" operator must be preceded by \"[\" operator');this.endContext(),this.getContext().instructions.push({op:\"[]\",args:C(n)});break;default:throw new Error(\"Unknown operator: \".concat(e))}r&&this.parsePattern(r)}else{if(N.test(t))throw new Error(\"Illegal characters found in a pattern: \".concat(t));this.getContext().instructions=this.getContext().instructions.concat(t.split(\"\"))}}}])&&v(d.prototype,e),n&&v(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();function C(t){for(var d=[],e=0;e<t.length;){if(\"-\"===t[e]){if(0===e||e===t.length-1)throw new Error(\"Couldn't parse a one-of set pattern: \".concat(t));for(var n=t[e-1].charCodeAt(0)+1,r=t[e+1].charCodeAt(0)-1,a=n;a<=r;)d.push(String.fromCharCode(a)),a++}else d.push(t[e]);e++}return d}var N=/[\\(\\)\\[\\]\\?\\:\\|]/,P=new RegExp(\"(\\\\||\\\\(\\\\?\\\\:|\\\\)|\\\\[|\\\\])\");function x(t){return 1===t.length?t[0]:t}function S(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 O(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 O(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 O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function w(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var I=function(){function t(d){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.matchTree=(new b).parse(d)}var d,e,n;return d=t,e=[{key:\"match\",value:function(t){var d=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error(\"String is required\");var e=A(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 A(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<d.length;){var i=A(r,d[a],e&&a===d.length-1);if(!i)return;if(i.overflow)return i;if(!i.match){if(i.partialMatch)return{partialMatch:!0};throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(i,null,2)))}if(0===(r=r.slice(i.matchedChars.length)).length)return a===d.length-1?{match:!0,matchedChars:t}:{partialMatch:!0};a++}return e?{overflow:!0}:{match:!0,matchedChars:t.slice(0,t.length-r.length)}}switch(d.op){case\"|\":for(var $,o,u=S(d.args);!(o=u()).done;){var l=A(t,o.value,e);if(l){if(l.overflow)return l;if(l.match)return{match:!0,matchedChars:l.matchedChars};if(!l.partialMatch)throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(l,null,2)));$=!0}}return $?{partialMatch:!0}:void 0;case\"[]\":for(var c,s=S(d.args);!(c=s()).done;){var f=c.value;if(t[0]===f)return 1===t.length?{match:!0,matchedChars:t}:e?{overflow:!0}:{match:!0,matchedChars:[f]}}return;default:throw new Error(\"Unsupported instruction tree: \".concat(d))}}var E=e(8368),T=e(6576);function M(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 F(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 F(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 F(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function k(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var R=s(\"9\",15),D=/[- ]/,G=function(){return/\\[([^\\[\\]])*\\]/g},L=function(){return/\\d(?=[^,}][^,}])/g},j=new RegExp(\"[\"+E.e6+\"]*\\\\$1[\"+E.e6+\"]*(\\\\$\\\\d[\"+E.e6+\"]*)*$\"),B=function(){function t(d){d.state;var e=d.metadata;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=e,this.resetFormat()}var d,e,n;return d=t,(e=[{key:\"resetFormat\",value:function(){this.chosenFormat=void 0,this.template=void 0,this.nationalNumberTemplate=void 0,this.populatedNationalNumberTemplate=void 0,this.populatedNationalNumberTemplatePosition=-1}},{key:\"reset\",value:function(t,d){this.resetFormat(),t?(this.isNANP=\"1\"===t.callingCode(),this.matchingFormats=t.formats(),d.nationalSignificantNumber&&this.narrowDownMatchingFormats(d)):(this.isNANP=void 0,this.matchingFormats=[])}},{key:\"format\",value:function(t,d){var e,n,r=this;if(e=d.nationalSignificantNumber,n=this.metadata,\"IS_POSSIBLE\"===(0,h.c)(e,n))for(var a,i=M(this.matchingFormats);!(a=i()).done;){var $=a.value,o=y(d,$,{metadata:this.metadata,shouldTryNationalPrefixFormattingRule:function(t){return r.shouldTryNationalPrefixFormattingRule(t,{international:d.international,nationalPrefix:d.nationalPrefix})},getSeparatorAfterNationalPrefix:function(t){return r.getSeparatorAfterNationalPrefix(t)}});if(o)return this.resetFormat(),this.chosenFormat=$,this.setNationalNumberTemplate(o.replace(/\\d/g,l),d),this.populatedNationalNumberTemplate=o,this.populatedNationalNumberTemplatePosition=this.template.lastIndexOf(l),o}return this.formatNationalNumberWithNextDigits(t,d)}},{key:\"formatNationalNumberWithNextDigits\",value:function(t,d){var e=this.chosenFormat,n=this.chooseFormat(d);if(n)return n===e?this.formatNextNationalNumberDigits(t):this.formatNextNationalNumberDigits(d.getNationalDigits())}},{key:\"narrowDownMatchingFormats\",value:function(t){var d=this,e=t.nationalSignificantNumber,n=t.nationalPrefix,r=t.international,a=e,i=a.length-3;i<0&&(i=0),this.matchingFormats=this.matchingFormats.filter((function(t){return d.formatSuits(t,r,n)&&d.formatMatches(t,a,i)})),this.chosenFormat&&-1===this.matchingFormats.indexOf(this.chosenFormat)&&this.resetFormat()}},{key:\"formatSuits\",value:function(t,d,e){return!(e&&!t.usesNationalPrefix()&&!t.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!d&&!e&&t.nationalPrefixIsMandatoryWhenFormattingInNationalFormat())}},{key:\"formatMatches\",value:function(t,d,e){var n=t.leadingDigitsPatterns().length;if(0===n)return!0;e=Math.min(e,n-1);var r=t.leadingDigitsPatterns()[e];if(d.length<3)try{return void 0!==new I(r).match(d,{allowOverflow:!0})}catch(t){return console.error(t),!0}return new RegExp(\"^(\".concat(r,\")\")).test(d)}},{key:\"getFormatFormat\",value:function(t,d){return d?t.internationalFormat():t.format()}},{key:\"chooseFormat\",value:function(t){for(var d,e=this,n=function(){var n=d.value;return e.chosenFormat===n?\"break\":j.test(e.getFormatFormat(n,t.international))?e.createTemplateForFormat(n,t)?(e.chosenFormat=n,\"break\"):(e.matchingFormats=e.matchingFormats.filter((function(t){return t!==n})),\"continue\"):\"continue\"},r=M(this.matchingFormats.slice());!(d=r()).done;){var a=n();if(\"break\"===a)break}return this.chosenFormat||this.resetFormat(),this.chosenFormat}},{key:\"createTemplateForFormat\",value:function(t,d){if(!(t.pattern().indexOf(\"|\")>=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<n.length+t.getDigitsWithoutInternationalPrefix().length;)d=this.template.indexOf(l,d+1),e++;return f(this.template,d+1)}}},{key:\"setNationalNumberTemplate\",value:function(t,d){this.nationalNumberTemplate=t,this.populatedNationalNumberTemplate=t,this.populatedNationalNumberTemplatePosition=-1,d.international?this.template=this.getInternationalPrefixBeforeCountryCallingCode(d).replace(/[\\d\\+]/g,l)+s(l,d.callingCode.length)+\" \"+t:this.template=t}},{key:\"getTemplateForFormat\",value:function(t,d){var e=d.nationalSignificantNumber,n=d.international,r=d.nationalPrefix,a=d.complexPrefixBeforeNationalSignificantNumber,i=t.pattern();i=i.replace(G(),\"\\\\d\").replace(L(),\"\\\\d\");var $=R.match(i)[0];if(!(e.length>$.length)){var o=new RegExp(\"^\"+i+\"$\"),u=e.replace(/\\d/g,\"9\");o.test(u)&&($=u);var c,f=this.getFormatFormat(t,n);if(this.shouldTryNationalPrefixFormattingRule(t,{international:n,nationalPrefix:r})){var h=f.replace(m.i,t.nationalPrefixFormattingRule());if((0,g.cp)(t.nationalPrefixFormattingRule())===(r||\"\")+(0,g.cp)(\"$1\")&&(f=h,c=!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 c||(a?p=s(l,a.length)+\" \"+p:r&&(p=s(l,r.length)+this.getSeparatorAfterNationalPrefix(t)+p)),n&&(p=(0,T.c)(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(c)<0)return;d=t.search(c),t=t.replace(c,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}(),_=e(2120),U=e(3888),K=e(5724),W=e(6811);function H(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 V(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 V(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 V(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function Z(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var Y=\"[\"+E.e6+E.GA+\"]+\",J=new RegExp(\"^\"+Y+\"$\",\"i\"),X=\"(?:[\"+E.Qj+\"][\"+E.e6+E.GA+\"]*|[\"+E.e6+E.GA+\"]+)\",Q=new RegExp(\"[^\"+E.e6+E.GA+\"]+.*$\"),q=/[^\\d\\[\\]]/,z=function(){function t(d){var e=d.defaultCountry,n=d.defaultCallingCode,r=d.metadata,a=d.onNationalSignificantNumberChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.defaultCountry=e,this.defaultCallingCode=n,this.metadata=r,this.onNationalSignificantNumberChange=a}var d,e,n;return d=t,(e=[{key:\"input\",value:function(t,d){var e,n=function(t){var d=function(t){var d=function(t){var d,e=t.search(X);if(!(e<0))return\"+\"===(t=t.slice(e))[0]&&(d=!0,t=t.slice(1)),t=t.replace(Q,\"\"),d&&(t=\"+\"+t),t}(t)||\"\";return\"+\"===d[0]?[d.slice(1),!0]:[d]}(t),e=H(d,2),n=e[0],r=e[1];return J.test(n)||(n=\"\"),[n,r]}(t),r=H(n,2),a=r[0],i=r[1],$=(0,g.cp)(a);return i&&(d.digits||(d.startInternationalNumber(),$||(e=!0))),$&&this.inputDigits($,d),{digits:$,justLeadingPlus:e}}},{key:\"inputDigits\",value:function(t,d){var e=d.digits,n=e.length<3&&e.length+t.length>=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,_.c)(\"+\"+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,K.c)(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,K.c)(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,W.c)(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,U.c)(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)}))}}])&&Z(d.prototype,e),n&&Z(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),t}();var tt=e(5784),dt=e(5176),et=e(4348);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,$=!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 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);e<d;e++)n[e]=t[e];return n}function at(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var it=function(){function t(d,e){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=new r.cp(e);var n=nt(this.getCountryAndCallingCode(d),2),a=n[0],i=n[1];this.defaultCountry=a,this.defaultCallingCode=i,this.reset()}var d,e,n;return d=t,(e=[{key:\"getCountryAndCallingCode\",value:function(t){var d,e;return t&&((0,et.c)(t)?(d=t.defaultCountry,e=t.defaultCallingCode):d=t),d&&!this.metadata.hasCountry(d)&&(d=void 0),[d,e]}},{key:\"input\",value:function(t){var d=this.parser.input(t,this.state),e=d.digits;if(d.justLeadingPlus)this.formattedOutput=\"+\";else if(e){var n;if(this.determineTheCountryIfNeeded(),this.state.nationalSignificantNumber&&this.formatter.narrowDownMatchingFormats(this.state),this.metadata.hasSelectedNumberingPlan()&&(n=this.formatter.format(e,this.state)),void 0===n&&this.parser.reExtractNationalSignificantNumber(this.state)){this.determineTheCountryIfNeeded();var r=this.state.getNationalDigits();r&&(n=this.formatter.format(r,this.state))}this.formattedOutput=n?this.getFullNumber(n):this.getNonFormattedNumber()}return this.formattedOutput}},{key:\"reset\",value:function(){var t=this;return this.state=new $({onCountryChange:function(d){t.country=d},onCallingCodeChange:function(d,e){t.metadata.selectNumberingPlan(e,d),t.formatter.reset(t.metadata.numberingPlan,t.state),t.parser.reset(t.metadata.numberingPlan)}}),this.formatter=new B({state:this.state,metadata:this.metadata}),this.parser=new z({defaultCountry:this.defaultCountry,defaultCallingCode:this.defaultCallingCode,metadata:this.metadata,state:this.state,onNationalSignificantNumberChange:function(){t.determineTheCountryIfNeeded(),t.formatter.reset(t.metadata.numberingPlan,t.state)}}),this.state.reset({country:this.defaultCountry,callingCode:this.defaultCallingCode}),this.formattedOutput=\"\",this}},{key:\"isInternational\",value:function(){return this.state.international}},{key:\"getCallingCode\",value:function(){if(this.isInternational())return this.state.callingCode}},{key:\"getCountryCallingCode\",value:function(){return this.getCallingCode()}},{key:\"getCountry\",value:function(){if(this.state.digits)return this._getCountry()}},{key:\"_getCountry\",value:function(){var t=this.state.country;return t}},{key:\"determineTheCountryIfNeeded\",value:function(){this.state.country&&!this.isCountryCallingCodeAmbiguous()||this.determineTheCountry()}},{key:\"getFullNumber\",value:function(t){var d=this;if(this.isInternational()){var e=function(t){return d.formatter.getInternationalPrefixBeforeCountryCallingCode(d.state,{spacing:!!t})+t},n=this.state.callingCode;return e(n?t?\"\".concat(n,\" \").concat(t):n:\"\".concat(this.state.getDigitsWithoutInternationalPrefix()))}return t}},{key:\"getNonFormattedNationalNumberWithPrefix\",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.complexPrefixBeforeNationalSignificantNumber,n=t.nationalPrefix,r=d,a=e||n;return a&&(r=a+r),r}},{key:\"getNonFormattedNumber\",value:function(){var t=this.state.nationalSignificantNumberMatchesInput;return this.getFullNumber(t?this.getNonFormattedNationalNumberWithPrefix():this.state.getNationalDigits())}},{key:\"getNonFormattedTemplate\",value:function(){var t=this.getNonFormattedNumber();if(t)return t.replace(/[\\+\\d]/g,l)}},{key:\"isCountryCallingCodeAmbiguous\",value:function(){var t=this.state.callingCode,d=this.metadata.getCountryCodesForCallingCode(t);return d&&d.length>1}},{key:\"determineTheCountry\",value:function(){this.state.setCountry((0,tt.c)(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 $=new r.cp(this.metadata.metadata);$.selectNumberingPlan(i);var o=$.numberingPlan.callingCode(),u=this.metadata.getCountryCodesForCallingCode(o);if(u.length>1){var l=(0,dt.c)(d,{countries:u,defaultCountry:this.defaultCountry,metadata:this.metadata.metadata});l&&(i=l)}}var c=new a.c(i||n,d,this.metadata.metadata);return e&&(c.carrierCode=e),c}}},{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 $t(t){return it.call(this,t,n.c)}$t.prototype=Object.create(it.prototype,{}),$t.prototype.constructor=$t},428:(t,d,e)=>{e.d(d,{M:()=>i});var n=e(2492),r=e(7300);function a(t,d,e){if(d[t])return new r.c(t,d[t],e)}function i(){return(0,n.c)(a,arguments)}},4880:(t,d,e)=>{e.d(d,{_:()=>it});var n=e(2492),r=e(8368);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<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function $(t){var d=c();return function(){var e,n=f(t);if(d){var r=f(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return function(t,d){if(d&&(\"object\"===a(d)||\"function\"==typeof d))return d;if(void 0!==d)throw new TypeError(\"Derived constructors may only return object or undefined\");return o(t)}(this,e)}}function o(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function u(t){var d=\"function\"==typeof Map?new Map:void 0;return u=function(t){if(null===t||(e=t,-1===Function.toString.call(e).indexOf(\"[native code]\")))return t;var e;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==d){if(d.has(t))return d.get(t);d.set(t,n)}function n(){return l(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),s(n,t)},u(t)}function l(t,d,e){return l=c()?Reflect.construct:function(t,d,e){var n=[null];n.push.apply(n,d);var r=new(Function.bind.apply(t,n));return e&&s(r,e.prototype),r},l.apply(null,arguments)}function c(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function s(t,d){return s=Object.setPrototypeOf||function(t,d){return t.__proto__=d,t},s(t,d)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}var h=function(t){!function(t,d){if(\"function\"!=typeof d&&null!==d)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(d&&d.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),d&&s(t,d)}(a,t);var d,e,n,r=$(a);function a(t){var d;return function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,a),d=r.call(this,t),Object.setPrototypeOf(o(d),a.prototype),d.name=d.constructor.name,d}return d=a,e&&i(d.prototype,e),n&&i(d,n),Object.defineProperty(d,\"prototype\",{writable:!1}),d}(u(Error)),g=e(6340),m=function(t){return\"([\".concat(r.GA,\"]{1,\").concat(t,\"})\")};function y(t){var d=\"[  \\\\t,]*\",e=\"[:\\\\.．]?[  \\\\t,-]*\",n=\"#?\",r=\"[  \\\\t]*\";return\";ext=\"+m(\"20\")+\"|\"+(d+\"(?:e?xt(?:ensi(?:ó?|ó))?n?|ｅ?ｘｔｎ?|доб|anexo)\"+e+m(\"20\")+n)+\"|\"+(d+\"(?:[xｘ#＃~～]|int|ｉｎｔ)\"+e+m(\"9\")+n)+\"|\"+(\"[- ]+\"+m(\"6\")+\"#\")+\"|\"+(r+\"(?:,{2}|;)\"+e+m(\"15\")+n)+\"|\"+(r+\"(?:,)+\"+e+m(\"9\")+n)}var p=\"[\"+r.GA+\"]{\"+r.oJ+\"}\",v=\"[\"+r.Qj+\"]{0,1}(?:[\"+r.e6+\"]*[\"+r.GA+\"]){3,}[\"+r.e6+r.GA+\"]*\",b=new RegExp(\"^[\"+r.Qj+\"]{0,1}(?:[\"+r.e6+\"]*[\"+r.GA+\"]){1,2}$\",\"i\"),C=v+\"(?:\"+y()+\")?\",N=new RegExp(\"^\"+p+\"$|^\"+C+\"$\",\"i\");var P=new RegExp(\"(?:\"+y()+\")$\",\"i\");var x=e(160);function S(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 O(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 O(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 O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e<d;e++)n[e]=t[e];return n}function w(t){for(var d,e=\"\",n=S(t.split(\"\"));!(d=n()).done;){e+=I(d.value,e)||\"\"}return e}function I(t,d,e){return\"+\"===t?d?void(\"function\"==typeof e&&e(\"end\")):\"+\":(0,x.UV)(t)}var A=e(908),E=e(7300),T=e(5184),M=e(2120),F=e(6440),k=e(5784),R=\"+\",D=\"([\"+r.GA+\"]|[\\\\-\\\\.\\\\(\\\\)]?)\",G=\"^\\\\\"+R+D+\"*[\"+r.GA+\"]\"+D+\"*$\",L=new RegExp(G,\"g\"),j=r.GA,B=new RegExp(\"^(\"+(\"[\"+j+\"]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.)*\"+(\"[a-zA-Z]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.?$\",\"g\"),_=\"tel:\",U=\";phone-context=\",K=\";isub=\";function W(t,d){var e,n=d.extractFormattedPhoneNumber,r=function(t){var d=t.indexOf(U);if(d<0)return null;var e=d+U.length;if(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&&(L.test(t)||B.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(_);a=i>=0?i+_.length:0;var $=t.indexOf(U);e+=t.substring(a,$)}var o=e.indexOf(K);if(o>0&&(e=e.substring(0,o)),\"\"!==e)return e}var H=250,V=new RegExp(\"[\"+r.Qj+r.GA+\"]\"),Z=new RegExp(\"[^\"+r.GA+\"#]+$\"),Y=!1;function J(t,d,e){if(d=d||{},e=new g.cp(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=W(t,{extractFormattedPhoneNumber:function(t){return function(t,d,e){if(!t)return;if(t.length>H){if(e)throw new h(\"TOO_LONG\");return}if(!1===d)return t;var n=t.search(V);if(n<0)return;return t.slice(n).replace(Z,\"\")}(t,e,d)}});if(!n)return{};if(!function(t){return t.length>=r.oJ&&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;r<n.length;){if(n[r])return{number:e,ext:n[r]};r++}}(n);if(a.ext)return a;return{number:n}}(t,d.v2,d.extract),a=n.number,i=n.ext,$=n.error;if(!a){if(d.v2){if(\"TOO_SHORT\"===$)throw new h(\"TOO_SHORT\");throw new h(\"NOT_A_NUMBER\")}return{}}var o=function(t,d,e,n){var r,a=(0,M.c)(w(t),d,e,n.metadata),i=a.countryCallingCodeSource,$=a.countryCallingCode,o=a.number;if($)n.selectNumberingPlan($);else{if(!o||!d&&!e)return{};n.selectNumberingPlan(d,e),d?r=d:Y&&n.isNonGeographicCallingCode(e)&&(r=\"001\"),$=e||(0,g.i0)(d,n.metadata)}if(!o)return{countryCallingCodeSource:i,countryCallingCode:$};var u=(0,F.c)(w(o),n),l=u.nationalNumber,c=u.carrierCode,s=(0,k.c)($,{nationalNumber:l,defaultCountry:d,metadata:n});s&&(r=s,\"001\"===s||n.country(r));return{country:r,countryCallingCode:$,countryCallingCodeSource:i,nationalNumber:l,carrierCode:c}}(a,d.defaultCountry,d.defaultCallingCode,e),u=o.country,l=o.nationalNumber,c=o.countryCallingCode,s=o.countryCallingCodeSource,f=o.carrierCode;if(!e.hasSelectedNumberingPlan()){if(d.v2)throw new h(\"INVALID_COUNTRY\");return{}}if(!l||l.length<r.oJ){if(d.v2)throw new h(\"TOO_SHORT\");return{}}if(l.length>r.Gq){if(d.v2)throw new h(\"TOO_LONG\");return{}}if(d.v2){var m=new E.c(c,l,e.metadata);return u&&(m.country=u),f&&(m.carrierCode=f),i&&(m.ext=i),m.__countryCallingCodeSource=s,m}var y=!!(d.extended?e.hasSelectedNumberingPlan():u)&&(0,T.c)(l,e.nationalNumberPattern());return d.extended?{country:u,countryCallingCode:c,carrierCode:f,valid:y,possible:!!y||!(!0!==d.extended||!e.possibleLengths()||!(0,A.M)(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;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?X(Object(e),!0).forEach((function(d){q(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):X(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}function q(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var z=e(4348);function tt(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 dt(t,d,e){return d in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,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);e<d;e++)n[e]=t[e];return n}function rt(t){var d,e,n,r=et(Array.prototype.slice.call(t),4),a=r[0],i=r[1],$=r[2],o=r[3];if(\"string\"!=typeof a)throw new TypeError(\"A text for parsing must be a string.\");if(d=a,i&&\"string\"!=typeof i){if(!(0,z.c)(i))throw new Error(\"Invalid second argument: \".concat(i));$?(e=i,n=$):n=i}else o?(e=$,n=o):(e=void 0,n=$),i&&(e=function(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?tt(Object(e),!0).forEach((function(d){dt(t,d,e[d])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):tt(Object(e)).forEach((function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))}))}return t}({defaultCountry:i},e));return{text:d,options:e,metadata:n}}function at(){var t=rt(arguments);return function(t,d,e){return J(t,Q(Q({},d),{},{v2:!0}),e)}(t.text,t.options,t.metadata)}function it(){return(0,n.c)(at,arguments)}},2492:(t,d,e)=>{e.d(d,{c:()=>r});var n=e(9624);function r(t,d){var e=Array.prototype.slice.call(d);return e.push(n.c),t.apply(this,e)}}}]);\n//# sourceMappingURL=688.prod.js.map"
  },
  {
    "path": "umd/700.prod.js",
    "content": "\"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\":\"你尚无会话<br />¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置顶消息\",\"unpin_message\":\"取消置顶消息\",\"failed_to_init_audio\":\"初始化录音失败\",\"calls_conference\":\"电话会议\",\"password_reset_success\":\"密码重置成功\",\"join_conference\":\"+ 加入通话\"}')}}]);"
  },
  {
    "path": "umd/734.prod.js",
    "content": "\"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\":\"Чатов нет<br />¯∖_(ツ)_/¯\",\"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\":\"занято\",\"pin_message\":\"Закрепить\",\"unpin_message\":\"Открепить\",\"failed_to_init_audio\":\"Не удалось инициализировать аудиозапись\",\"calls_conference\":\"Групповой звонок\",\"password_reset_success\":\"Пароль успешно изменен\",\"join_conference\":\"+ Присоединиться\"}')}}]);"
  },
  {
    "path": "umd/744.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[744],{5744:function(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\":\"您沒有任何對話\\\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置頂消息\",\"unpin_message\":\"取消置頂消息\",\"failed_to_init_audio\":\"初始化錄音失敗\",\"password_reset_success\":\"密碼重置成功\",\"scan_qr_code\":\"掃描二維碼\",\"self_topic_comment\":\"為後代所儲存的註解、訊息、連結、檔案\",\"self_topic_name\":\"已儲存的訊息\",\"message_not_found\":\"未找到訊息\",\"message_deleted\":\"訊息已刪除\",\"alias_editing_placeholder\":\"別名（可選）\",\"label_alias\":\"別名：\",\"alias_already_taken\":\"（已採取）\",\"alias_invalid\":\"（無效）\",\"label_alias_edit\":\"別名\",\"select_country\":\"選擇國家\",\"text_copied\":\"已複製到剪貼簿\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"淺色\",\"color_schema_system\":\"系統預設\",\"label_color_schema\":\"主題：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隱藏您的線上狀態和正在輸入指示器。\",\"send_command\":\"按 {key} 傳送\",\"send_command_explained\":\"按 Enter 換行\",\"send_plain\":\"按 Enter 傳送\",\"send_plain_explained\":\"按 Shift + Enter 換行\",\"sidepanel_title_acc_general\":\"一般\",\"label_keyboard\":\"鍵盤：\",\"pin_chat\":\"置頂\",\"unpin_chat\":\"取消置頂\",\"subscriber_count\":\"{count, plural, other {{count, number} 位訂閱者}}\",\"label_member_count\":\"成員：\",\"label_subscriber_count\":\"訂閱者：\",\"member_count\":\"{count, plural, other {{count, number} 位成員}}\",\"tabtitle_image\":\"圖片\",\"tabtitle_pattern\":\"圖案\",\"button_restore\":\"恢復預設\",\"wallpapers\":\"桌布\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"掃描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"儲存\",\"cannot_parse_vcard\":\"無法解析 vCard 檔案。\",\"chat_now\":\"聊天\",\"find_user\":\"尋找\",\"label_contact_card\":\"聯絡人卡片\",\"label_contacts\":\"聯絡人\",\"add_members_prompt\":\"新增成員\"}')}}]);"
  },
  {
    "path": "umd/747.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[747],{6235:function(e,t,s){var a=s(1594),i=s.n(a),n=s(8181),l=s(1166),r=s(6005),o=s(6110);const c=(0,n.defineMessages)({joiner:{id:\"permission_join\",defaultMessage:[{type:0,value:\"Join (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},reader:{id:\"permission_read\",defaultMessage:[{type:0,value:\"Read (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},writer:{id:\"permission_write\",defaultMessage:[{type:0,value:\"Write (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},preser:{id:\"permission_pres\",defaultMessage:[{type:0,value:\"Get notified (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},approver:{id:\"permission_admin\",defaultMessage:[{type:0,value:\"Approve (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},sharer:{id:\"permission_share\",defaultMessage:[{type:0,value:\"Share (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},deleter:{id:\"permission_delete\",defaultMessage:[{type:0,value:\"Delete (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]},owner:{id:\"permission_owner\",defaultMessage:[{type:0,value:\"Owner (\"},{type:1,value:\"val\"},{type:0,value:\")\"}]}});class d extends i().Component{constructor(e){super(e),this.state={mode:(e.mode||\"\").replace(\"N\",\"\")},this.handleChange=this.handleChange.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){let t=this.state.mode;-1==t.indexOf(e)?t+=e:t=t.replace(e,\"\"),this.setState({mode:t})}handleSubmit(){const e=(this.state.mode||\"N\").split(\"\").sort().join(\"\");e!==(this.props.mode||\"N\").split(\"\").sort().join(\"\")?this.props.onSubmit(e):this.props.onCancel()}handleCancel(){this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t=\"JRWPASDO\",s={J:e(c.joiner,{val:\"J\"}),R:e(c.reader,{val:\"R\"}),W:e(c.writer,{val:\"W\"}),P:e(c.preser,{val:\"P\"}),A:e(c.approver,{val:\"A\"}),S:e(c.sharer,{val:\"S\"}),D:e(c.deleter,{val:\"D\"}),O:e(c.owner,{val:\"O\"})};let a=this.props.skip||\"\",d=this.state.mode,p=(this.props.compare||\"\").replace(\"N\",\"\"),h=[];for(let e=0;e<8;e++){let n=t.charAt(e);a.indexOf(n)>=0&&d.indexOf(n)<0||h.push(i().createElement(\"tr\",{key:n},i().createElement(\"td\",null,s[n]),i().createElement(\"td\",{className:\"checkbox\"},a.indexOf(n)<0?i().createElement(l.A,{name:n,checked:d.indexOf(n)>=0,onChange:this.handleChange}):i().createElement(l.A,{name:n,checked:d.indexOf(n)>=0})),this.props.compare?i().createElement(\"td\",{className:\"checkbox\"},i().createElement(l.A,{name:n,checked:p.indexOf(n)>=0})):null))}return i().createElement(\"div\",{className:\"panel-form-column\"},this.props.userTitle?i().createElement(\"ul\",{className:\"contact-box small\"},i().createElement(r.A,{tinode:this.props.tinode,item:this.props.item,title:this.props.userTitle,small:!0,avatar:(0,o.to)(this.props.userAvatar?this.props.userAvatar:null)})):null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"title_permissions\",defaultMessage:[{type:0,value:\"Permissions\"}]})),i().createElement(\"table\",{className:\"permission-editor\"},this.props.compare?i().createElement(\"thead\",null,i().createElement(\"tr\",null,i().createElement(\"th\",null),i().createElement(\"th\",null,this.props.modeTitle),i().createElement(\"th\",null,this.props.compareTitle))):null,i().createElement(\"tbody\",null,h)),i().createElement(\"br\",null),i().createElement(\"div\",{className:\"dialog-buttons\"},i().createElement(\"button\",{className:\"outline\",onClick:this.handleCancel},i().createElement(n.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),i().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},i().createElement(n.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}t.A=(0,n.injectIntl)(d)},7747:function(e,t,s){s.r(t),s.d(t,{default:function(){return A}});var a=s(1594),i=s.n(a),n=s(8181),l=s(4532),r=s(9418),o=s(635),c=s(1166),d=s(4152),p=s(1334),h=s(5874);const m=(0,n.defineMessages)({no_contacts:{id:\"no_contacts\",defaultMessage:[{type:0,value:\"You have no contacts :-(\"}]},contacts_not_found_short:{id:\"contacts_not_found_short\",defaultMessage:[{type:0,value:\"No contacts match '\"},{type:1,value:\"query\"},{type:0,value:\"'\"}]},add_members_prompt:{id:\"add_members_prompt\",defaultMessage:[{type:0,value:\"add members\"}]}});class u extends i().Component{constructor(e){super(e),this.state={members:e.members,index:u.indexMembers(e.members),staticMembers:u.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:\"\",noContactsMessage:e.intl.formatMessage(m.no_contacts),selectedContacts:u.selectedContacts(e.members)},this.handleContactSelected=this.handleContactSelected.bind(this),this.handleMemberRemoved=this.handleMemberRemoved.bind(this),this.handleContactFilter=this.handleContactFilter.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static indexMembers(e){let t={};return e.forEach(e=>{t[e.user]={delta:0,present:!0}}),t}static staticMembers(e,t,s){let a=[];return e.forEach(e=>{(t||e.user==s)&&a.push(e.user)}),a}static selectedContacts(e){let t=[];return e.forEach(e=>{t.push(e.user)}),t}handleContactSelected(e,t){let s=this.state.index[e];if(s){if(s.present)return;s.delta+=1,s.present=!0}else s={delta:1,present:!0};let a=this.state.members.slice();a.push(this.props.contacts[t]);const i=u.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleMemberRemoved(e,t){const s=this.state.index[e];if(!s||!s.present)return;s.present=!1,s.delta-=1;let a=this.state.members.slice();a.splice(t,1);const i=u.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleContactFilter(e){const{formatMessage:t}=this.props.intl,s=e?t(m.contacts_not_found_short,{query:e}):t(m.no_contacts);this.setState({contactFilter:e,noContactsMessage:s})}static doContactFiltering(e,t){if(e){for(let s=0;s<t.length;s++)if(t[s].indexOf(e)>=0)return!0;return!1}return!0}handleSubmit(){const e=[],t=[],s=[];Object.keys(this.state.index).forEach(a=>{this.state.index[a].present&&e.push(a),this.state.index[a].delta>0?t.push(a):this.state.index[a].delta<0&&s.push(a)}),this.props.onSubmit(e,t,s)}handleCancel(){this.props.onCancel()}render(){return i().createElement(\"div\",{id:\"group-manager\"},i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"title_group_members\",defaultMessage:[{type:0,value:\"Group Members\"}]}))),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(h.A,{tinode:this.props.tinode,chips:this.state.members,staticMembers:this.state.staticMembers,prompt:this.props.intl.formatMessage(m.add_members_prompt),filterFunc:this.handleContactFilter,onChipRemoved:this.handleMemberRemoved})),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"title_all_contacts\",defaultMessage:[{type:0,value:\"All Contacts\"}]}))),i().createElement(d.A,{tinode:this.props.tinode,contacts:this.props.contacts,myUserId:this.props.myUserId,topicSelected:this.state.selectedContacts,filter:this.state.contactFilter,filterFunc:u.doContactFiltering,emptyListMessage:this.state.noContactsMessage,showOnline:!1,showUnread:!1,onTopicSelected:this.handleContactSelected}),i().createElement(\"div\",{id:\"group-manager-buttons\",className:\"panel-form-row\"},i().createElement(\"button\",{className:\"secondary\",onClick:this.handleCancel},i().createElement(n.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),i().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},i().createElement(n.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}var v=(0,n.injectIntl)(u),g=s(3913),b=s(6235),f=s(9593),_=s.n(f),E=s(9027);class M extends i().PureComponent{constructor(e){super(e),this.qrCodeRef=i().createRef()}componentDidMount(){new(_())(this.qrCodeRef.current,{text:this.props.uri,width:E.Tn,height:E.Tn})}render(){return i().createElement(\"div\",{className:\"panel-form-column\"},i().createElement(\"br\",null),i().createElement(\"div\",{className:\"qr-code\",ref:this.qrCodeRef}),i().createElement(\"div\",null,i().createElement(\"tt\",null,this.props.uri)),i().createElement(\"div\",{className:\"dialog-buttons\"},i().createElement(\"button\",{className:\"outline\",onClick:this.props.onCancel},i().createElement(n.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}var y=s(8089);const C=(0,n.defineMessages)({clear_messages:{id:\"action_clear_messages\",defaultMessage:[{type:0,value:\"Clear Messages\"}]},clear_messages_warning:{id:\"clear_messages_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to clear all messages? It cannot be undone.\"}]},delete_messages:{id:\"action_delete_messages\",defaultMessage:[{type:0,value:\"Clear Messages for All\"}]},delete_messages_warning:{id:\"delete_messages_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to delete all messages for everyone? It cannot be undone.\"}]},topic_delete:{id:\"topic_delete\",defaultMessage:[{type:0,value:\"Delete Conversation\"}]},topic_delete_warning:{id:\"topic_delete_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to delete this conversation? It cannot be undone.\"}]},leave_chat:{id:\"action_leave_chat\",defaultMessage:[{type:0,value:\"Leave Conversation\"}]},leave_chat_warning:{id:\"leave_chat_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to leave this conversation?\"}]},block_contact:{id:\"action_block_contact\",defaultMessage:[{type:0,value:\"Block Contact\"}]},block_contact_warning:{id:\"block_contact_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to block this contact?\"}]},report_chat:{id:\"action_report_chat\",defaultMessage:[{type:0,value:\"Report Conversation\"}]},report_chat_warning:{id:\"report_chat_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to block and report this conversation?\"}]},other_user:{id:\"label_other_user\",defaultMessage:[{type:0,value:\"Other\"}]}});class N extends i().PureComponent{constructor(e){super(e),this.handleDeleteTopic=this.handleDeleteTopic.bind(this),this.handleDeleteMessages=this.handleDeleteMessages.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleBlock=this.handleBlock.bind(this),this.handleReport=this.handleReport.bind(this)}handleDeleteTopic(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(C.topic_delete),t(C.topic_delete_warning),e=>this.props.onDeleteTopic(this.props.topic),null,!0,null)}handleDeleteMessages(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(this.props.deleter?C.delete_messages:C.clear_messages),t(this.props.deleter?C.delete_messages_warning:C.clear_messages_warning),e=>this.props.onDeleteMessages(this.props.topic),null,!0,null)}handleLeave(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(C.leave_chat),t(C.leave_chat_warning),e=>this.props.onLeaveTopic(this.props.topic),null,!0,null)}handleBlock(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(C.block_contact),t(C.block_contact_warning),e=>this.props.onBlockTopic(this.props.topic),null,!0,null)}handleReport(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(C.report_chat),t(C.report_chat_warning),e=>{this.props.onReportTopic(this.props.topic)},null,!0,null)}render(){const{formatMessage:e}=this.props.intl;return i().createElement(\"div\",{className:\"scrollable-panel\"},i().createElement(\"div\",{className:\"panel-form-column\"},this.props.channel?null:i().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:this.handleDeleteMessages},i().createElement(\"i\",{className:\"material-icons\"},\"delete_outline\"),\"  \",e(this.props.deleter?C.delete_messages:C.clear_messages)),this.props.owner?i().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:this.handleDeleteTopic},i().createElement(\"i\",{className:\"material-icons\"},\"delete\"),\"  \",e(C.topic_delete)):i().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:this.handleLeave},i().createElement(\"i\",{className:\"material-icons\"},\"exit_to_app\"),\"  \",e(C.leave_chat)),this.props.groupTopic?null:i().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:this.handleBlock},i().createElement(\"i\",{className:\"material-icons\"},\"block\"),\"  \",e(C.block_contact)),this.props.owner?null:i().createElement(\"a\",{href:\"#\",className:\"danger flat-button\",onClick:this.handleReport},i().createElement(\"i\",{className:\"material-icons\"},\"report\"),\"  \",e(C.report_chat))),i().createElement(\"div\",{className:\"hr\"}),i().createElement(\"div\",{className:\"panel-form-column\"},this.props.groupTopic?i().createElement(i().Fragment,null,i().createElement(\"div\",{className:\"group\"},i().createElement(\"label\",null,i().createElement(n.FormattedMessage,{id:\"label_your_permissions\",defaultMessage:[{type:0,value:\"Your permissions:\"}]})),\" \",i().createElement(\"tt\",{className:\"clickable\",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor(\"want\")}},this.props.access)),this.props.channel?null:i().createElement(\"div\",{className:\"group\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_default_access_mode\",defaultMessage:[{type:0,value:\"Default access mode:\"}]}))),i().createElement(\"div\",{className:\"quoted\"},i().createElement(\"div\",null,\"Auth: \",i().createElement(\"tt\",{className:this.props.owner?\"clickable\":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor(\"auth\")}},this.props.auth)),i().createElement(\"div\",null,\"Anon: \",i().createElement(\"tt\",{className:this.props.owner?\"clickable\":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor(\"anon\")}},this.props.anon))))):i().createElement(\"div\",{className:\"group\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_permissions\",defaultMessage:[{type:0,value:\"Permissions:\"}]}))),i().createElement(\"div\",{className:\"quoted\"},i().createElement(\"div\",null,i().createElement(n.FormattedMessage,{id:\"label_you\",defaultMessage:[{type:0,value:\"You:\"}]}),\" \",i().createElement(\"tt\",{className:\"clickable\",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor(\"want\")}},this.props.access)),i().createElement(\"div\",null,this.props.fullName?this.props.fullName:e(C.other_user),\":  \",i().createElement(\"tt\",{className:\"clickable\",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor(\"given\")}},this.props.modeGiven2))))))}}var w=(0,n.injectIntl)(N),S=s(6110),k=s(8589);const T=(0,n.defineMessages)({info:{id:\"panel_title_info\",defaultMessage:[{type:0,value:\"Info\"}]},general:{id:\"panel_title_general\",defaultMessage:[{type:0,value:\"General\"}]},security:{id:\"panel_title_security\",defaultMessage:[{type:0,value:\"Security\"}]},members:{id:\"panel_title_members\",defaultMessage:[{type:0,value:\"Members\"}]},crop:{id:\"panel_title_crop\",defaultMessage:[{type:0,value:\"Drag to Adjust\"}]},perm_want:{id:\"requested_permissions\",defaultMessage:[{type:0,value:\"Requested\"}]},perm_given:{id:\"granted_permissions\",defaultMessage:[{type:0,value:\"Granted\"}]},perm_auth:{id:\"permissions_authenticated\",defaultMessage:[{type:0,value:\"Authenticated\"}]},perm_anon:{id:\"permissions_anonymous\",defaultMessage:[{type:0,value:\"Anonymous\"}]},perm_user:{id:\"permissions_user\",defaultMessage:[{type:0,value:\"User's Permissions\"}]},edit_permissions:{id:\"menu_item_edit_permissions\",defaultMessage:[{type:0,value:\"Edit permissions\"}]},qrcode:{id:\"scan_qr_code\",defaultMessage:[{type:0,value:\"Scan QR Code\"}]},text_copied:{id:\"text_copied\",defaultMessage:[{type:0,value:\"Copied to clipboard\"}]},self_topic_name:{id:\"self_topic_name\",defaultMessage:[{type:0,value:\"Saved messages\"}]},self_topic_comment:{id:\"self_topic_comment\",defaultMessage:[{type:0,value:\"Notes, messages, links, files saved for posterity\"}]}});class D extends i().Component{constructor(e){super(e),this.state={topic:null,owner:!1,admin:!1,sharer:!1,deleter:!1,muted:!1,address:null,groupTopic:void 0,isSelf:!1,channel:void 0,fullName:void 0,description:void 0,avatar:null,private:null,selectedContact:null,access:null,modeGiven:null,modeWant:null,modeGiven2:null,modeWant2:null,auth:null,anon:null,contactList:[],trustedBadges:[],previousMetaDesc:void 0,previousSubsUpdated:void 0},this.propsUpdated=this.propsUpdated.bind(this),this.resetSubs=this.resetSubs.bind(this),this.resetDesc=this.resetDesc.bind(this),this.resetTags=this.resetTags.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.onSubsUpdated=this.onSubsUpdated.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleMuted=this.handleMuted.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleShowQRCode=this.handleShowQRCode.bind(this),this.handleCopyToClipboard=this.handleCopyToClipboard.bind(this),this.handleShare=this.handleShare.bind(this),this.handleShowAddMembers=this.handleShowAddMembers.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleMemberSelected=this.handleMemberSelected.bind(this),this.handleContextMenu=this.handleContextMenu.bind(this),this.handleBackNavigate=this.handleBackNavigate.bind(this)}propsUpdated(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc,this.previousSubsUpdated=t.onSubsUpdated,t.onSubsUpdated=this.onSubsUpdated),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e),this.resetSubs(t,e),this.resetTags(t)))}componentDidMount(){this.propsUpdated(this.props)}componentDidUpdate(e){this.propsUpdated(e)}componentWillUnmount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc,e.onSubsUpdated=this.previousSubsUpdated)}resetSubs(e,t){const s={contactList:[]};if(\"p2p\"==e.getType()){const a=e.subscriber(t.topic);a?(s.modeGiven2=a.acs.getGiven(),s.modeWant2=a.acs.getWant()):(s.modeGiven2=E.D3,s.modeWant2=E.D3)}else e.subscribers(e=>{s.contactList.push(e)},this);this.setState(s)}resetDesc(e,t){const s=e.getDefaultAccess()||{},a=e.getAccessMode(),i=[];if(e.trusted)for(const[t,s]of Object.entries(e.trusted))s&&i.push(t);const n=e.isSelfType();this.setState({owner:a&&a.isOwner(),admin:a&&a.isAdmin(),sharer:a&&a.isSharer(),deleter:a&&a.isDeleter(),muted:a&&a.isMuted(),fullName:n?t.intl.formatMessage(T.self_topic_name):(0,k.W5)(e.public&&e.public.fn,E.tS),description:n?t.intl.formatMessage(T.self_topic_comment):(0,k.W5)(e.public&&e.public.note,E.lQ),avatar:(0,S.to)(e.public?e.public.photo:null),trustedBadges:i,private:(0,k.W5)(e.private&&e.private.comment,E.tS),archived:e.isArchived(),address:e.name,groupTopic:e.isGroupType(),isSelf:n,channel:e.isChannelType()||e.chan,access:a?a.getMode():void 0,modeGiven:a?a.getGiven():void 0,modeWant:a?a.getWant():void 0,auth:s.auth,anon:s.anon})}resetTags(e){if(\"grp\"!=e.getType())return;const t=e.getAccessMode();t&&t.isOwner()&&e.getMeta(e.startMetaQuery().withTags().build())}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t,this.props),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}onSubsUpdated(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetSubs(t,this.props),this.previousSubsUpdated&&this.previousSubsUpdated!=this.onSubsUpdated&&this.previousSubsUpdated(e))}handleImageChanged(e,t){this.setState({avatar:t}),this.props.onTopicDescUpdate(this.props.topic,new l.TheCard(null,t||l.Tinode.DEL_CHAR),null)}handleMuted(e,t){this.setState({muted:t}),this.props.onChangePermissions(this.props.topic,t?\"-P\":\"+P\")}handleUnarchive(e,t){this.props.onTopicUnArchive(this.props.topic)}handlePermissionsChanged(e,t){switch(e){case\"auth\":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{auth:t});break;case\"anon\":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{anon:t});break;case\"mode\":case\"want\":this.props.onChangePermissions(this.props.topic,t);break;case\"given\":this.props.onChangePermissions(this.props.topic,t,this.props.topic);break;case\"user\":this.props.onChangePermissions(this.props.topic,t,this.state.userPermissionsEdited)}this.handleBackNavigate()}handleLaunchPermissionsEditor(e,t){const{formatMessage:s}=this.props.intl;let a,i,n,r,o,c,d;switch(e){case\"mode\":a=this.state.access;break;case\"want\":a=this.state.modeWant,i=this.state.modeGiven,this.state.owner?n=\"O\":(n=l.AccessMode.encode(l.AccessMode.diff(\"ASDO\",this.state.modeGiven)),this.state.channel&&(n+=\"W\")),r=s(T.perm_want),o=s(T.perm_given);break;case\"given\":a=this.state.modeGiven2,i=this.state.modeWant2,n=this.state.groupTopic?this.state.owner?\"\":\"O\":\"ASDO\",r=s(T.perm_given),o=s(T.perm_want);break;case\"auth\":a=this.state.auth,n=\"O\";break;case\"anon\":a=this.state.anon,n=\"O\";break;case\"user\":{const e=this.props.tinode.getTopic(this.props.topic);if(!e)return;const l=e.subscriber(t);if(!l||!l.acs)return;a=l.acs.getGiven(),i=l.acs.getWant(),n=this.state.owner?\"\":\"O\",r=s(T.perm_given),o=s(T.perm_want),l.public&&(c=l.public.fn,d=l.public.photo);break}default:return void console.error(\"Unknown permission editing mode '\"+e+\"'\")}this.setState({userPermissionsEdited:t,userPermissionsTitle:c,userPermissionsAvatar:d,editedPermissions:a,immutablePermissions:i,editedPermissionsTitle:r,immutablePermissionsTitle:o,editedPermissionsSkipped:n}),this.props.onNavigate(`perm/${e}`)}handleShowQRCode(e){e.preventDefault(),this.props.onNavigate(\"qrcode\")}handleCopyToClipboard(e,t){e.preventDefault(),navigator.clipboard.writeText(t).then(e=>{this.setState({toast:this.props.intl.formatMessage(T.text_copied)}),setTimeout(e=>{this.setState({toast:\"\"})},E.bn)})}handleShare(e){e.preventDefault();const t=new l.TheCard(this.state.fullName,this.state.avatar,null,this.state.description);l.TheCard.setTinodeID(t,l.Tinode.URI_TOPIC_ID_PREFIX+this.props.topic),this.props.onShareTheCard(t)}handleShowAddMembers(e){e.preventDefault(),this.props.onInitFind(),this.props.onNavigate(\"members\")}handleMemberUpdateRequest(e,t,s){this.props.onMemberUpdateRequest(this.props.topic,t,s),this.props.onNavigate(\"info\")}handleMemberSelected(e){this.setState({selectedContact:e})}handleBackNavigate(){const e=(this.props.panel||\"info\").split(\"/\");\"info\"==e[0]?this.props.onNavigate(null):\"perm\"==e[0]?\"user\"==e[1]?this.props.onNavigate(\"info\"):this.props.onNavigate(\"security\"):this.props.onNavigate(\"info\")}handleContextMenu(e){const{formatMessage:t}=this.props.intl,s=this.props.tinode.getTopic(this.props.topic);if(!s)return;const a=s.subscriber(e.topicName);if(!a||!a.acs)return;const i=this.props.tinode.isMe(e.topicName),n=[{title:t(T.edit_permissions),handler:t=>this.handleLaunchPermissionsEditor(i?\"want\":\"user\",e.topicName)}];i||n.push(\"member_delete\"),n.push(a.acs.isMuted()?\"member_unmute\":\"member_mute\"),i||n.push(a.acs.isJoiner()?\"member_block\":\"member_unblock\"),this.props.showContextMenu({topicName:this.props.topic,x:e.x,y:e.y,user:e.topicName},n)}render(){const e=(this.props.panel||\"info\").split(\"/\"),t=e[0];e.shift();const{formatMessage:s}=this.props.intl,a=s((\"perm\"==t?T[\"perm_\"+e[0]]:T[t])||T.info),h=this.props.tinode.getTopic(this.state.topic),m=h&&h.alias();return i().createElement(\"div\",{id:\"info-view\"},i().createElement(\"div\",{className:\"toast\"+(this.state.toast?\" show\":\"\")},this.state.toast),i().createElement(\"div\",{className:\"caption-panel\",id:\"info-caption-panel\"},i().createElement(\"div\",{className:\"panel-title\",id:\"info-title\"},a),i().createElement(\"div\",null,i().createElement(g.A,{onCancel:this.handleBackNavigate}))),this.props.displayMobile?i().createElement(p.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError}):null,\"members\"==t?i().createElement(v,{tinode:this.props.tinode,members:this.state.contactList,requiredMember:this.props.myUserId,keepInitialMembers:!this.state.admin&&!this.state.owner,myUserId:this.props.myUserId,contacts:this.props.searchableContacts,onCancel:this.handleBackNavigate,onSubmit:this.handleMemberUpdateRequest}):\"perm\"==t&&e.length>0?i().createElement(b.A,{tinode:this.props.tinode,mode:this.state.editedPermissions,compare:this.state.immutablePermissions,skip:this.state.editedPermissionsSkipped,modeTitle:this.state.editedPermissionsTitle,compareTitle:this.state.immutablePermissionsTitle,userTitle:this.state.userPermissionsTitle,item:this.state.userPermissionsEdited,userAvatar:this.state.userPermissionsAvatar,onSubmit:t=>this.handlePermissionsChanged(e[0],t),onCancel:this.handleBackNavigate}):\"general\"==t?i().createElement(y.A,{tinode:this.props.tinode,topic:this.props.topic,reqCredMethod:this.props.reqCredMethod,onCredAdd:this.props.onCredAdd,onUpdateTagsRequest:this.props.onTopicTagsUpdateRequest,onCredConfirm:this.props.onCredConfirm,onCredDelete:this.props.onCredDelete,onUpdateTopicDesc:this.props.onTopicDescUpdateRequest,onError:this.props.onError}):\"security\"==t?i().createElement(w,{topic:this.props.topic,owner:this.state.owner,admin:this.state.admin,sharer:this.state.sharer,deleter:this.state.deleter,muted:this.state.muted,groupTopic:this.state.groupTopic,channel:this.state.channel,access:this.state.access,modeGiven:this.state.modeGiven,modeWant:this.state.modeWant,modeGiven2:this.state.modeGiven2,modeWant2:this.state.modeWant2,auth:this.state.auth,anon:this.state.anon,onShowAlert:this.props.onShowAlert,onDeleteMessages:this.props.onDeleteMessages,onLeaveTopic:this.props.onLeaveTopic,onBlockTopic:this.props.onBlockTopic,onReportTopic:this.props.onReportTopic,onLaunchPermissionsEditor:this.handleLaunchPermissionsEditor,onNavigate:this.props.onNavigate}):\"qrcode\"==t?i().createElement(M,{uri:l.Tinode.URI_TOPIC_ID_PREFIX+this.props.topic,onCancel:this.handleBackNavigate}):i().createElement(\"div\",{id:\"info-view-content\",className:\"scrollable-panel\"},i().createElement(\"div\",{className:\"panel-form-column\"},this.state.isSelf?null:i().createElement(\"a\",{href:\"#\",className:\"flat-button float-right\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"general\")}},i().createElement(\"i\",{className:\"material-icons\"},\"edit\"),\" \",i().createElement(n.FormattedMessage,{id:\"button_edit\",defaultMessage:[{type:0,value:\"Edit\"}]})),i().createElement(\"center\",null,i().createElement(r.A,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.topic,title:this.state.fullName})),i().createElement(\"div\",{className:\"group\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_topic_name\",defaultMessage:[{type:0,value:\"Name\"}]}))),i().createElement(\"div\",{className:\"large ellipsized\"},this.state.fullName,\" \",this.state.channel?i().createElement(\"i\",{className:\"material-icons\"},\"podcasts\"):null)),this.state.private?i().createElement(\"div\",{className:\"group\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_private\",defaultMessage:[{type:0,value:\"Private comment\"}]}))),i().createElement(\"div\",{className:\"large ellipsized\"},this.state.private)):null,this.state.isSelf?null:i().createElement(i().Fragment,null,i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_user_id\",defaultMessage:[{type:0,value:\"ID:\"}]})),\" \",i().createElement(\"tt\",null,this.state.address)),i().createElement(\"div\",{style:{marginLeft:\"auto\"}},\" \",i().createElement(\"a\",{href:\"#\",onClick:e=>{this.handleCopyToClipboard(e,this.state.address)}},i().createElement(\"i\",{className:\"material-icons\"},\"content_copy\")),\"   \",i().createElement(\"a\",{href:\"#\",onClick:this.handleShowQRCode},i().createElement(\"i\",{className:\"material-icons\"},\"qr_code\")),\"   \",i().createElement(\"a\",{href:\"#\",onClick:this.handleShare},i().createElement(\"i\",{className:\"material-icons\"},\"share\")),\" \")),m?i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"div\",null,i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_alias\",defaultMessage:[{type:0,value:\"Alias:\"}]})),\" \",i().createElement(\"tt\",null,m)),i().createElement(\"div\",{style:{marginLeft:\"auto\"}},\" \",i().createElement(\"a\",{href:\"#\",onClick:e=>{this.handleCopyToClipboard(e,m)}},i().createElement(\"i\",{className:\"material-icons\"},\"content_copy\")),\"   \",i().createElement(\"i\",{className:\"material-icons\",style:{opacity:0}},\"qr_code\"),\" \")):null),this.state.trustedBadges.length>0?i().createElement(\"div\",{className:\"group\"},i().createElement(o.A,{trustedBadges:this.state.trustedBadges})):null,this.state.groupTopic&&h.subcnt>0?i().createElement(\"div\",{className:\"group\"},i().createElement(\"label\",{className:\"small\"},this.state.channel?i().createElement(n.FormattedMessage,{id:\"label_subscriber_count\",defaultMessage:[{type:0,value:\"Subscribers:\"}]}):i().createElement(n.FormattedMessage,{id:\"label_member_count\",defaultMessage:[{type:0,value:\"Members:\"}]})),\" \",i().createElement(n.FormattedNumber,{value:h.subcnt})):null,this.state.description?i().createElement(\"div\",{className:\"group\"},i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_description\",defaultMessage:[{type:0,value:\"Description\"}]})),i().createElement(\"div\",null,this.state.description)):null),this.state.isSelf?null:i().createElement(i().Fragment,null,i().createElement(\"div\",{className:\"hr\"}),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"label\",null,i().createElement(n.FormattedMessage,{id:\"label_muting_topic\",defaultMessage:[{type:0,value:\"Muted:\"}]})),i().createElement(c.A,{name:\"P\",checked:this.state.muted,onChange:this.handleMuted}))),this.state.archived?i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"label\",null,i().createElement(n.FormattedMessage,{id:\"label_unarchive_topic\",defaultMessage:[{type:0,value:\"Archived:\"}]})),i().createElement(c.A,{name:\"archived\",checked:!0,onChange:this.handleUnarchive})):null,this.state.isSelf?null:i().createElement(i().Fragment,null,i().createElement(\"div\",{className:\"hr\"}),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.props.onNavigate(\"security\")}},i().createElement(\"i\",{className:\"material-icons\"},\"security\"),\" \",i().createElement(n.FormattedMessage,{id:\"button_security\",defaultMessage:[{type:0,value:\"Security\"}]})))),this.state.groupTopic&&this.state.sharer?i().createElement(i().Fragment,null,i().createElement(\"div\",{className:\"hr\"}),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"label\",{className:\"small\"},i().createElement(n.FormattedMessage,{id:\"label_group_members\",defaultMessage:[{type:0,value:\"Group members:\"}]}))),i().createElement(\"div\",{className:\"panel-form-row\"},i().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:this.handleShowAddMembers},i().createElement(\"i\",{className:\"material-icons\"},\"person_add\"),\"  \",i().createElement(n.FormattedMessage,{id:\"button_add_members\",defaultMessage:[{type:0,value:\"Add members\"}]}))),i().createElement(n.FormattedMessage,{id:\"group_has_no_members\",defaultMessage:[{type:0,value:\"No members\"}]},e=>i().createElement(d.A,{tinode:this.props.tinode,contacts:this.state.contactList,myUserId:this.props.myUserId,emptyListMessage:e,topicSelected:this.state.selectedContact,showOnline:!1,showUnread:!1,showMode:!0,noScroll:!0,onTopicSelected:this.handleMemberSelected,showContextMenu:!!this.state.admin&&this.handleContextMenu}))):null))}}var A=(0,n.injectIntl)(D)}}]);\n//# sourceMappingURL=747.prod.js.map"
  },
  {
    "path": "umd/752.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[752],{2752:(e,a,t)=>{t.r(a),t.d(a,{default:()=>g});var d=t(6376),l=t.n(d),i=t(6648),o=t(4880),s=t(3168),c=t(4144),n=t(1480),r=t(936),m=t(8516);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._)(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.c,{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.Yb),description:E(a.public?a.public.note:void 0,r.aq),avatar:(0,n.Qn)(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._)(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.c,{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.c,{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\"}]}))))}}},8516:(e,a,t)=>{t.d(a,{c:()=>p});var d=t(6376),l=t.n(d),i=t(6648),o=t(9780),s=t(4880),c=t(428),n=t(6088),r=t(7770),m=t(1848);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.C).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._)(`+${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.M)(e,n.c);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.tQ)(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)},7770: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\"}]')}}]);\n//# sourceMappingURL=752.prod.js.map"
  },
  {
    "path": "umd/780.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[780],{8399:function(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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fixați\",\"unpin_message\":\"Anulați fixarea\",\"failed_to_init_audio\":\"Inițializarea înregistrării audio a eșuat\",\"password_reset_success\":\"Resetarea parolei cu succes\",\"scan_qr_code\":\"Scanați codul QR\",\"self_topic_comment\":\"Note, mesaje, linkuri, fișiere salvate pentru posteritate\",\"self_topic_name\":\"Mesaje salvate\",\"message_not_found\":\"mesajul nu a fost găsit\",\"message_deleted\":\"mesaj șters\",\"alias_editing_placeholder\":\"Alias (opțional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(deja luat)\",\"alias_invalid\":\"(nevalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Selectați țara\",\"text_copied\":\"Copiat în clipboard\",\"color_schema_dark\":\"Întunecat\",\"color_schema_light\":\"Luminos\",\"color_schema_system\":\"Implicit sistem\",\"label_color_schema\":\"Temă:\",\"label_text_size\":\"Dimensiune text:\",\"incognito_mode_description\":\"Ascunde statusul tău online și indicatorii de tastare.\",\"send_command\":\"Trimite cu {key}\",\"send_command_explained\":\"Apasă Enter pentru linie nouă\",\"send_plain\":\"Trimite cu Enter\",\"send_plain_explained\":\"Apasă Shift + Enter pentru linie nouă\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Tastatură:\",\"pin_chat\":\"Fixează\",\"unpin_chat\":\"Anulează fixarea\",\"subscriber_count\":\"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Abonați:\",\"member_count\":\"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}\",\"tabtitle_image\":\"imagine\",\"tabtitle_pattern\":\"model\",\"button_restore\":\"Restabilește implicit\",\"wallpapers\":\"Imagini de fundal\",\"label_blur_wallpaper\":\"Estompare:\",\"label_scan_id\":\"Scanează ID-ul meu:\",\"unknown_name\":\"Necunoscut\",\"save_action\":\"Salvează\",\"cannot_parse_vcard\":\"Nu se poate procesa fișierul vCard.\",\"chat_now\":\"Conversație\",\"find_user\":\"Caută\",\"label_contact_card\":\"Card de contact\",\"label_contacts\":\"Contacte\",\"add_members_prompt\":\"adaugă membri\"}')}}]);"
  },
  {
    "path": "umd/817.prod.js",
    "content": "\"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<br />¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fixați\",\"unpin_message\":\"Anulați fixarea\",\"failed_to_init_audio\":\"Inițializarea înregistrării audio a eșuat\",\"calls_conference\":\"Apel de conferinta\",\"password_reset_success\":\"Resetarea parolei cu succes\",\"join_conference\":\"+ Participa\"}')}}]);"
  },
  {
    "path": "umd/827.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[827],{3827:function(e,t,a){a.r(t),a.d(t,{default:function(){return p}});var l=a(1594),s=a.n(l),r=a(8181),n=a(7151),i=a(9027),d=a(3540),c=a(1781);class p extends s().PureComponent{constructor(e){super(e);const t=(0,d.MC)(this.props.wallpaper),a=(0,d.t7)(this.props.wallpaper);this.state={tab:t||i.S.type,selectedType:t||i.S.type,wallpaper:a||c[i.S.type][i.S.index].name,blur:0|this.props.wallpaperBlur},this.blurValues=[0,1,2,4,8,16],this.handleTabClick=this.handleTabClick.bind(this),this.handleWallpaperSelected=this.handleWallpaperSelected.bind(this),this.handleBlurChanged=this.handleBlurChanged.bind(this),this.hasChanged=this.hasChanged.bind(this)}handleTabClick(e){e.preventDefault(),n.A.navigateTo(n.A.addUrlParam(window.location.hash,\"tab\",e.currentTarget.dataset.id)),this.setState({tab:e.currentTarget.dataset.id})}handleWallpaperSelected(e){let t,a,l;if(e)e.preventDefault(),a=this.state.tab,t=e.currentTarget.dataset.id,l=\"patt\"==a?0:this.state.blur;else{if(!this.hasChanged())return;a=i.S.type,t=i.S.index,l=0}const s=c[a][t].name,r=\"patt\"==a?c[a][t].size:0;this.setState({tab:a,wallpaper:s,selectedType:a,blur:l}),this.props.onWallpaperSelected(`../${i.S.path}${s}`,r,this.blurValues[l])}handleBlurChanged(e){e.preventDefault();const t=e.currentTarget.value;this.setState({blur:t}),\"img\"==this.state.selectedType&&this.props.onWallpaperSelected(`../${i.S.path}${this.state.wallpaper}`,0,this.blurValues[t])}hasChanged(){return this.state.selectedType!=i.S.type||this.state.wallpaper!=c[i.S.type][i.S.index].name||0!=this.state.blur}render(){return s().createElement(\"div\",{className:\"flex-column\"},s().createElement(\"div\",{className:\"panel-form-row\"+(this.hasChanged()?\" clean-clickable\":\"\")},s().createElement(\"a\",{className:\"flat-button\"+(this.hasChanged()?\"\":\" disabled\"),onClick:()=>this.handleWallpaperSelected(null)},s().createElement(\"i\",{className:\"material-icons\"},\"undo\"),\" \",s().createElement(r.FormattedMessage,{id:\"button_restore\",defaultMessage:[{type:0,value:\"Restore default\"}]}))),s().createElement(\"ul\",{className:\"tabbar\"},s().createElement(\"li\",{className:\"patt\"===this.state.tab?\"active\":null},s().createElement(\"a\",{href:\"#\",\"data-id\":\"patt\",onClick:this.handleTabClick},s().createElement(r.FormattedMessage,{id:\"tabtitle_pattern\",defaultMessage:[{type:0,value:\"pattern\"}]}))),s().createElement(\"li\",{className:\"img\"===this.state.tab?\"active\":null},s().createElement(\"a\",{href:\"#\",\"data-id\":\"img\",onClick:this.handleTabClick},s().createElement(r.FormattedMessage,{id:\"tabtitle_image\",defaultMessage:[{type:0,value:\"image\"}]})))),s().createElement(\"div\",{id:\"settings-form\",className:\"scrollable-panel\"},\"patt\"===this.state.tab?s().createElement(\"div\",{className:\"image-grid\"},c.patt.map((e,t)=>{const a=this.state.wallpaper===e.name?\" selected\":\"\",l=\"dark\"==this.props.colorSchema?\"inverted\":null;return s().createElement(\"div\",{key:t,\"data-id\":t,className:`image-grid-cell${a}`,onClick:this.handleWallpaperSelected},s().createElement(\"img\",{src:i.S.path+e.name,alt:e.name,className:l,style:{width:`${e.size}px`,height:`${e.size}px`}}))})):s().createElement(s().Fragment,null,s().createElement(\"div\",{className:\"panel-form-column\"},s().createElement(\"div\",{className:\"panel-form-row\"},s().createElement(\"label\",{className:\"small\"},s().createElement(r.FormattedMessage,{id:\"label_blur_wallpaper\",defaultMessage:[{type:0,value:\"Blur:\"}]}))),s().createElement(\"div\",{className:\"panel-form-row\"},s().createElement(\"input\",{type:\"range\",id:\"blur\",name:\"blur\",min:\"0\",max:\"5\",step:\"1\",value:this.state.blur,onChange:this.handleBlurChanged}))),s().createElement(\"div\",{className:\"image-grid\"},c.img.map((e,t)=>{const a=this.state.wallpaper===e.name?\" selected\":\"\";return s().createElement(\"div\",{key:t,\"data-id\":t,className:`image-grid-cell${a}`,onClick:this.handleWallpaperSelected},s().createElement(\"img\",{src:i.S.path+e.pr,alt:e.name,style:{width:\"100%\",height:\"100%\"}}))})))))}}}}]);\n//# sourceMappingURL=827.prod.js.map"
  },
  {
    "path": "umd/836.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[836],{6836:function(e,t,a){a.r(t);var n=a(1594),i=a.n(n),s=a(8181),r=a(6904),o=a(9027),h=a(3832),l=a(8589);const c=new Audio(\"audio/call-out.m4a\");c.loop=!0;const d=new Audio(\"audio/call-end.m4a\");d.loop=!0;const p=new Audio(\"audio/dialing.m4a\"),m=\"video:muted\",g=\"video:unmuted\",C=(0,s.defineMessages)({already_in_call:{id:\"already_in_call\",defaultMessage:[{type:0,value:\"You already in an ongoing call!\"}]}});class u extends i().PureComponent{constructor(e){super(e),this.state={localStream:void 0,remoteStream:void 0,pc:void 0,dataChannel:void 0,previousOnInfo:void 0,waitingForPeer:!1,callInitialSetupComplete:!1,audioOnly:e.callAudioOnly,videoToggleInProgress:!1,remoteVideoLive:!1},this.localStreamConstraints={audio:!0,video:!e.callAudioOnly},this.isOutgoingCall=e.callState==h.No,this.containerRef=i().createRef(),this.localRef=i().createRef(),this.remoteRef=i().createRef(),this.remoteIceCandidatesCache=[],this.onInfo=this.onInfo.bind(this),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.createPeerConnection=this.createPeerConnection.bind(this),this.canSendOffer=this.canSendOffer.bind(this),this.drainRemoteIceCandidatesCache=this.drainRemoteIceCandidatesCache.bind(this),this.handleNegotiationNeededEvent=this.handleNegotiationNeededEvent.bind(this),this.handleICECandidateEvent=this.handleICECandidateEvent.bind(this),this.handleNewICECandidateMsg=this.handleNewICECandidateMsg.bind(this),this.handleICEConnectionStateChangeEvent=this.handleICEConnectionStateChangeEvent.bind(this),this.handleSignalingStateChangeEvent=this.handleSignalingStateChangeEvent.bind(this),this.handleICEGatheringStateChangeEvent=this.handleICEGatheringStateChangeEvent.bind(this),this.handleIceCandidateErrorEvent=this.handleIceCandidateErrorEvent.bind(this),this.handleTrackEvent=this.handleTrackEvent.bind(this),this.handleVideoOfferMsg=this.handleVideoOfferMsg.bind(this),this.handleVideoAnswerMsg=this.handleVideoAnswerMsg.bind(this),this.handleNewICECandidateMsg=this.handleNewICECandidateMsg.bind(this),this.reportError=this.reportError.bind(this),this.handleGetUserMediaError=this.handleGetUserMediaError.bind(this),this.stopTracks=this.stopTracks.bind(this),this.disconnectMedia=this.disconnectMedia.bind(this),this.handleCloseClick=this.handleCloseClick.bind(this),this.handleToggleCameraClick=this.handleToggleCameraClick.bind(this),this.handleToggleMicClick=this.handleToggleMicClick.bind(this),this.handleRemoteHangup=this.handleRemoteHangup.bind(this),this.handleVideoCallAccepted=this.handleVideoCallAccepted.bind(this),this.muteVideo=this.muteVideo.bind(this),this.unmuteVideo=this.unmuteVideo.bind(this),this.emptyVideoTrack=this.emptyVideoTrack.bind(this),this.handleDataChannelEvent=this.handleDataChannelEvent.bind(this),this.handleDataChannelError=this.handleDataChannelError.bind(this),this.handleDataChannelMessage=this.handleDataChannelMessage.bind(this),this.handleDataChannelOpen=this.handleDataChannelOpen.bind(this),this.handleDataChannelClose=this.handleDataChannelClose.bind(this),this.bounds={},this.dragStart=e=>{if(e.target.classList.contains(\"draggable\")&&!window.matchMedia(\"(width<=640px)\")&&this.props.minimized&&this.containerRef){e.stopPropagation(),this.containerRef.current.setPointerCapture(e.pointerId),this.containerRef.current.style.cursor=\"grabbing\",this.bounds.left=this.containerRef.current.offsetLeft,this.bounds.top=this.containerRef.current.offsetTop,this.bounds.width=this.containerRef.current.offsetWidth,this.bounds.height=this.containerRef.current.offsetHeight;const t=this.containerRef.current.offsetParent;this.bounds.maxX=t.offsetWidth,this.bounds.maxY=t.offsetHeight}},this.drag=e=>{e.stopPropagation();const t=this.containerRef.current;this.props.minimized&&this.containerRef&&t.hasPointerCapture(e.pointerId)&&(this.bounds.left=Math.min(Math.max(this.bounds.left+e.movementX,0),this.bounds.maxX-this.bounds.width),this.bounds.top=Math.min(Math.max(this.bounds.top+e.movementY,0),this.bounds.maxY-this.bounds.height),t.style.left=`${this.bounds.left}px`,t.style.top=`${this.bounds.top}px`)},this.dragEnd=e=>{e.stopPropagation(),this.props.minimized&&this.containerRef&&(this.containerRef.current.releasePointerCapture(e.pointerId),this.containerRef.current.style.cursor=\"grab\")}}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);this.previousOnInfo=e.onInfo,e.onInfo=this.onInfo,this.props.callState!=h.No&&this.props.callState!=h.d1||!this.localRef.current||this.start(),this.containerRef&&(this.containerRef.current.addEventListener(\"pointerdown\",this.dragStart),this.containerRef.current.addEventListener(\"pointermove\",this.drag),this.containerRef.current.addEventListener(\"pointerup\",this.dragEnd))}componentWillUnmount(){this.props.tinode.getTopic(this.props.topic).onInfo=this.previousOnInfo,this.stop(),this.containerRef&&(this.containerRef.current.removeEventListener(\"pointerdown\",this.dragStart),this.containerRef.current.removeEventListener(\"pointermove\",this.drag),this.containerRef.current.removeEventListener(\"pointerup\",this.dragEnd))}handleVideoCallAccepted(e){c.pause();const t=this.createPeerConnection(!0),a=this.state.localStream;a.getTracks().forEach(e=>{t.addTrack(e,a),\"video\"==e.kind&&this.state.audioOnly&&(e.enabled=!1,e.stop(),a.removeTrack(e))})}onInfo(e){if(\"call\"==e.what)switch(e.event){case\"accept\":this.handleVideoCallAccepted(e);break;case\"answer\":this.handleVideoAnswerMsg(e);break;case\"ice-candidate\":this.handleNewICECandidateMsg(e);break;case\"hang-up\":this.handleRemoteHangup(e);break;case\"offer\":this.handleVideoOfferMsg(e);break;case\"ringing\":c.play().catch(e=>{});break;default:console.warn(\"Unknown call event\",e.event)}}emptyVideoTrack(){const e=Object.assign(document.createElement(\"canvas\"),{width:640,height:480});e.getContext(\"2d\").fillRect(0,0,640,480);const t=e.captureStream(0);return Object.assign(t.getVideoTracks()[0],{enabled:!1})}start(){this.state.localStream?this.props.onError(this.props.intl.formatMessage(C.already_in_call),\"info\"):this.props.callState!=h.d1?navigator.mediaDevices.getUserMedia(this.localStreamConstraints).then(e=>{this.localStreamConstraints.video||e.addTrack(this.emptyVideoTrack()),this.setState({localStream:e,waitingForPeer:!0}),this.localRef.current.srcObject=e,p.play(),this.props.onInvite(this.props.topic,this.props.seq,this.props.callState,this.props.callAudioOnly)}).catch(this.handleGetUserMediaError):this.props.onInvite(this.props.topic,this.props.seq,h.d1,this.props.callAudioOnly)}stop(){d.pause(),d.currentTime=0,c.pause(),c.currentTime=0,this.stopTracks(this.state.localStream),this.stopTracks(this.state.remoteStream),this.disconnectMedia(this.localRef.current),this.disconnectMedia(this.remoteRef.current),this.state.pc&&(this.state.pc.ontrack=null,this.state.pc.onremovetrack=null,this.state.pc.onremovestream=null,this.state.pc.onicecandidate=null,this.state.pc.oniceconnectionstatechange=null,this.state.pc.onsignalingstatechange=null,this.state.pc.onicegatheringstatechange=null,this.state.pc.onnegotiationneeded=null,this.state.pc.onicecandidateerror=null,this.state.pc.ondatachannel=null,!this.state.dataChannel||\"open\"!=this.state.dataChannel.readyState&&\"connecting\"!=this.state.dataChannel.readyState||this.state.dataChannel.close(),this.state.pc.close()),this.setState({pc:null,waitingForPeer:!1})}disconnectMedia(e){e&&(e.srcObject=null,e.src=\"\")}stopTracks(e){if(!e)return;let t=e.getTracks();t&&t.forEach(e=>{e.stop(),e.enabled=!1})}handleDataChannelError(e){console.error(\"data channel error\",e)}handleDataChannelMessage(e){switch(e.data){case m:this.setState({remoteVideoLive:!1},e=>{this.remoteRef.current.srcObject=this.state.remoteStream});break;case g:this.setState({remoteVideoLive:!0},e=>{this.remoteRef.current.srcObject=this.state.remoteStream})}}handleDataChannelOpen(e){this.state.audioOnly||e.target.send(g)}handleDataChannelClose(e){console.info(\"close data channel:\",e)}handleDataChannelEvent(e){console.info(\"data channel event:\",e);const t=e.channel;t.onerror=this.handleDataChannelError,t.onmessage=this.handleDataChannelMessage,t.onopen=this.handleDataChannelOpen,t.onclose=this.handleDataChannelClose,this.setState({dataChannel:t})}createPeerConnection(e){const t=this.props.tinode.getServerParam(\"iceServers\",null),a=t?new RTCPeerConnection({iceServers:t}):new RTCPeerConnection;a.onicecandidate=this.handleICECandidateEvent,a.oniceconnectionstatechange=this.handleICEConnectionStateChangeEvent,a.onicegatheringstatechange=this.handleICEGatheringStateChangeEvent,a.onsignalingstatechange=this.handleSignalingStateChangeEvent,a.onnegotiationneeded=this.handleNegotiationNeededEvent,a.onicecandidateerror=this.handleIceCandidateErrorEvent,a.ontrack=this.handleTrackEvent,a.ondatachannel=this.handleDataChannelEvent;let n={pc:a,waitingForPeer:!1};if(e){const e=a.createDataChannel(\"events\",{ordered:!0});e.onerror=this.handleDataChannelError,e.onmessage=this.handleDataChannelMessage,e.onopen=this.handleDataChannelOpen,e.onclose=this.handleDataChannelClose,n.dataChannel=e}return this.setState(n),a}handleVideoAnswerMsg(e){const t=new RTCSessionDescription(e.payload);this.state.pc.setRemoteDescription(t).then(e=>{this.setState({callInitialSetupComplete:!0},e=>this.drainRemoteIceCandidatesCache())}).catch(e=>this.reportError(e))}reportError(e){this.props.onError(e.message,\"err\")}canSendOffer(){return this.isOutgoingCall||this.state.callInitialSetupComplete}handleNegotiationNeededEvent(e){const t=e.target;this.canSendOffer()&&t.createOffer().then(e=>t.setLocalDescription(e)).then(e=>{this.props.onSendOffer(this.props.topic,this.props.seq,t.localDescription.toJSON())}).catch(e=>this.reportError(e))}handleIceCandidateErrorEvent(e){console.warn(\"ICE candidate error:\",e)}handleICECandidateEvent(e){e.candidate&&this.props.onIceCandidate(this.props.topic,this.props.seq,e.candidate.toJSON())}handleNewICECandidateMsg(e){const t=new RTCIceCandidate(e.payload);this.state.callInitialSetupComplete?this.state.pc.addIceCandidate(t).catch(e=>{t.candidate&&this.reportError(e),console.warn(\"Error adding new ice candidate\",t,e)}):this.remoteIceCandidatesCache.push(t)}drainRemoteIceCandidatesCache(){this.remoteIceCandidatesCache.forEach(e=>{this.state.pc.addIceCandidate(e).catch(t=>{e.candidate&&this.reportError(t),console.warn(\"Error adding cached ice candidate\",e,t)})}),this.remoteIceCandidatesCache=[]}handleICEConnectionStateChangeEvent(e){switch(e.target.iceConnectionState){case\"closed\":case\"failed\":this.handleCloseClick()}}handleSignalingStateChangeEvent(e){\"closed\"==e.target.signalingState&&this.handleCloseClick()}handleICEGatheringStateChangeEvent(e){}handleTrackEvent(e){this.remoteRef.current.srcObject=e.streams[0],this.setState({remoteStream:e.streams[0]})}handleGetUserMediaError(e){switch(console.error(\"Error opening camera and/or microphone\",e),e.name){case\"NotFoundError\":default:this.reportError(e);case\"SecurityError\":case\"PermissionDeniedError\":}this.handleCloseClick()}handleVideoOfferMsg(e){let t=null;const a=this.state.pc?this.state.pc:this.createPeerConnection(!1),n=new RTCSessionDescription(e.payload);a.setRemoteDescription(n).then(e=>navigator.mediaDevices.getUserMedia(this.localStreamConstraints)).then(e=>{let n;this.localStreamConstraints.video||(n=this.emptyVideoTrack(),e.addTrack(n)),t=e,this.localRef.current.srcObject=e,this.setState({localStream:e}),t.getTracks().forEach(e=>{a.addTrack(e,t)}),n&&(n.enabled=!1,n.stop(),e.removeTrack(n))}).then(e=>a.createAnswer()).then(e=>a.setLocalDescription(e)).then(e=>{this.props.onSendAnswer(this.props.topic,this.props.seq,a.localDescription.toJSON()),this.setState({callInitialSetupComplete:!0},e=>this.drainRemoteIceCandidatesCache())}).catch(this.handleGetUserMediaError)}handleRemoteHangup(){this.state.waitingForPeer?(this.setState({waitingForPeer:!1}),c.pause(),c.currentTime=0,d.loop=!0,d.play().catch(e=>{}),setTimeout(e=>{this.handleCloseClick()},2e3)):this.handleCloseClick()}handleCloseClick(){this.stop(),this.props.onHangup(this.props.topic,this.props.seq)}muteVideo(){if(!this.state.pc||!this.state.dataChannel)return;const e=this.state.localStream,t=e.getVideoTracks()[0];t.enabled=!1,t.stop(),e.removeTrack(t),this.state.dataChannel.send(m),this.setState({videoToggleInProgress:!1})}unmuteVideo(){this.state.pc&&this.state.dataChannel&&navigator.mediaDevices.getUserMedia({video:!0}).then(e=>{this.localRef.current.srcObject=null;const t=this.state.pc.getSenders().find(e=>\"video\"==e.track.kind),a=e.getVideoTracks()[0];return e.removeTrack(a),this.state.localStream.addTrack(a),t.replaceTrack(a)}).then(e=>{this.localRef.current.srcObject=this.state.localStream,this.state.dataChannel.send(g)}).catch(e=>this.handleGetUserMediaError(e)).finally(e=>{this.setState({videoToggleInProgress:!1})})}handleToggleCameraClick(){if(this.state.videoToggleInProgress)return;const e=this.state.localStream.getVideoTracks();this.setState({videoToggleInProgress:!0},t=>{e&&e.length>0&&e[0].enabled&&\"live\"==e[0].readyState?this.muteVideo():this.unmuteVideo(),this.setState({audioOnly:!this.state.audioOnly})})}handleToggleMicClick(){const e=this.state.localStream.getAudioTracks()[0];e.enabled=!e.enabled,this.forceUpdate()}render(){const e=this.state.localStream&&this.state.localStream.getAudioTracks(),t=!this.state.audioOnly&&this.state.localStream&&this.state.localStream.getVideoTracks(),a=!this.state.pc||!this.state.dataChannel||!(e&&e[0]),n=e&&e[0]&&e[0].enabled?\"mic\":\"mic_off\",h=t&&t[0]&&t[0].enabled&&\"live\"==t[0].readyState?\"videocam\":\"videocam_off\",c=(0,l.W5)(this.props.title,o.mu),d=this.state.waitingForPeer?\" pulse\":\"\";let p=!1;if(this.remoteRef.current&&this.remoteRef.current.srcObject&&this.state.remoteVideoLive){const e=this.remoteRef.current.srcObject;if(e.getVideoTracks().length>0){const t=e.getVideoTracks()[0];p=t.enabled&&\"live\"==t.readyState}}const m=this.props.minimized?\"minimized\":null,g=this.props.minimized?\"fullscreen\":\"fullscreen_exit\";return i().createElement(\"div\",{id:\"video-container\",className:m,ref:this.containerRef},i().createElement(\"div\",{id:\"video-container-panel\"},i().createElement(\"div\",{className:\"call-party self\",disabled:this.state.audioOnly||this.props.minimized},i().createElement(\"video\",{ref:this.localRef,autoPlay:!0,muted:!0,playsInline:!0}),i().createElement(\"div\",{className:\"caller-name inactive\"},i().createElement(s.FormattedMessage,{id:\"calls_you_label\",defaultMessage:[{type:0,value:\"You\"}]}))),i().createElement(\"div\",{className:\"call-party peer\",disabled:!p},p?i().createElement(i().Fragment,null,i().createElement(\"video\",{ref:this.remoteRef,autoPlay:!0,playsInline:!0}),i().createElement(\"div\",{className:\"caller-name inactive\"},c)):i().createElement(i().Fragment,null,i().createElement(\"audio\",{ref:this.remoteRef,autoPlay:!0}),i().createElement(\"div\",{className:`caller-card${d} draggable`},i().createElement(\"div\",{className:\"avatar-box\"},i().createElement(r.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:this.props.avatar,topic:this.props.topic,title:this.props.title})),i().createElement(\"div\",{className:\"caller-name\"},c))))),i().createElement(\"button\",{className:\"full-screen\",onClick:this.props.onToggleMinimize},i().createElement(\"i\",{className:\"material-icons\"},g)),i().createElement(\"div\",{id:\"controls\",className:m},i().createElement(\"button\",{className:\"danger\",onClick:this.handleCloseClick},i().createElement(\"i\",{className:\"material-icons\"},\"call_end\")),i().createElement(\"button\",{className:\"secondary\",onClick:this.handleToggleCameraClick,disabled:a},i().createElement(\"i\",{className:\"material-icons\"},h)),i().createElement(\"button\",{className:\"secondary\",onClick:this.handleToggleMicClick,disabled:a},i().createElement(\"i\",{className:\"material-icons\"},n))))}}t.default=(0,s.injectIntl)(u)}}]);\n//# sourceMappingURL=836.prod.js.map"
  },
  {
    "path": "umd/844.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[844],{5844: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<br />¯∖_(ツ)_/¯\",\"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\",\"scan_qr_code\":\"Scanați codul QR\"}')}}]);"
  },
  {
    "path": "umd/864.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[864],{8864: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\":\"ไม่พบแชท <br />¯∖_(ツ)_/¯\",\"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\":\"รหัสยืนยัน\",\"error_invalid_id\":\"ID ไม่ถูกต้อง\",\"file_attachment_too_large\":\"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\"forgot_password_link\":\"ลืมรหัสผ่าน?\",\"full_name_prompt\":\"ชื่อเต็ม, เช่น John Doe\",\"granted_permissions\":\"ยินยอม\",\"group_has_no_members\":\"ไม่มีสมาชิก\",\"group_user_id_prompt\":\"กลุ่ม หรือ ID ผู้ใช้\",\"image_caption_prompt\":\"คำอธิบายภาพ\",\"invalid_content\":\"เนื้อหาไม่ถูกต้อง\",\"invalid_security_token\":\"security token ไม่ถูกต้อง\",\"label_client\":\"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\":\"การแจ้งเตือน (requires 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\":\"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_reply\":\"ตอบกลับ\",\"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\\'s\",\"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_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\":\"รีเซ็ตรหัสผ่านสำเร็จ\",\"scan_qr_code\":\"สแกนรหัส QR\"}')}}]);"
  },
  {
    "path": "umd/868.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[868],{2868:(e,a,d)=>{d.r(a),d.d(a,{default:()=>g});var l=d(6376),t=d.n(l),i=d(6648),o=d(5328),c=d(3168),s=d(9192),n=d(8516),r=d(1636),h=d(7084),m=d(1480),u=d(1256),p=d(936);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.c.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.c.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.QB)(this.state.fn.trim().substring(0,p.Yb),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.cH){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._K)(d).then((e=>this.setState({uploadUrl:(0,m.Qn)({data:e.bits,type:a})}))).finally((e=>this.setState({buttonDisabled:!1})))};d>p.kz||l>p.kz||d!=l?(0,m._k)(a,p.kz,p.kz,p._c,!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.c,{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.c,{placeholder:e,autoComplete:\"new-password\",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),t().createElement(c.c,{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.c,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))):null,t().createElement(\"div\",{className:\"panel-form-row\"},t().createElement(s.c,{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\"}]}))))}}},8516:(e,a,d)=>{d.d(a,{c:()=>p});var l=d(6376),t=d.n(l),i=d(6648),o=d(9780),c=d(4880),s=d(428),n=d(6088),r=d(7770),h=d(1848);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.C).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._)(`+${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.M)(e,n.c);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.tQ)(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)},7770: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\"}]')}}]);\n//# sourceMappingURL=868.prod.js.map"
  },
  {
    "path": "umd/884.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[884],{4264:(d,e,a)=>{a.r(e),a.d(e,{default:()=>n});var c=a(6376),l=a.n(c),o=a(6648),i=a(7770),t=a(1848);class s extends l().PureComponent{constructor(d){super(d),this.countries=[];const{formatDisplayName:e}=d.intl;i.forEach((d=>{d.dial.split(\",\").forEach((a=>{this.countries.push({dial:a.trim(),code:d.code,flag:(0,t.tQ)(d.code),name:e(d.code,{type:\"region\"})})}))})),this.countries.sort(((d,e)=>d.name.localeCompare(e.name)))}componentDidMount(){this.selectedRef&&this.selectedRef.scrollIntoView({block:\"center\",inline:\"nearest\"})}render(){const d=[],e=this.props.selected||\"US\";return this.countries.forEach(((a,c)=>{const o=a.code==e?\"selected \":\"\";d.push(l().createElement(\"li\",{className:o,key:c,ref:d=>{a.code==e&&(this.selectedRef=d)},onClick:d=>this.props.onSubmit(a.code,a.dial)},l().createElement(\"span\",{className:\"country-flag\"},a.flag),l().createElement(\"span\",{className:\"country\"},\" \",a.name),l().createElement(\"span\",{className:\"dial-code\"},\" +\",a.dial)))})),l().createElement(\"div\",{className:\"scrollable-panel\",style:{height:\"30rem\"}},l().createElement(\"ul\",{className:\"phone-country-selector\"},d))}}const n=(0,o.injectIntl)(s)},7770:d=>{d.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\"}]')}}]);\n//# sourceMappingURL=884.prod.js.map"
  },
  {
    "path": "umd/889.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[889],{8889:function(e,t,n){n.r(t),n.d(t,{default:function(){return d}});var s=n(1594),i=n.n(s),a=n(8181),l=n(1725),o=n(9027),r=n(6110),p=n(8589),h=n(3540);class d extends i().PureComponent{constructor(e){super(e),this.state={width:0,height:0},this.handleSendImage=this.handleSendImage.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){document.addEventListener(\"keydown\",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener(\"keydown\",this.handleKeyDown)}handleKeyDown(e){this.props.onSendMessage||(e.preventDefault(),\"Escape\"===e.key&&this.props.onClose())}assignWidth(e){if(e&&!this.state.width){const t=e.getBoundingClientRect();this.setState({width:0|t.width,height:0|t.height})}}handleSendImage(e){this.props.onClose(),this.props.onSendMessage(e,this.props.content.blob)}render(){if(!this.props.content)return null;const e=(0,r.ae)(this.props.content.width,this.props.content.height,this.state.width,this.state.height,!1),t=e?{width:e.dstWidth+\"px\",height:e.dstHeight+\"px\"}:this.props.content.width>this.props.content.height?{width:\"100%\"}:{height:\"100%\"};t.maxWidth=\"100%\",t.maxHeight=\"100%\";const n=Math.max((this.state.width/o.JS/1.5|0)-2,12),s=(0,p.Tu)(this.props.content.filename,n)||\"-\",d=this.props.content.width||\"-\",c=this.props.content.height||\"-\",m=(0,h.FH)(this.props.content.url);return i().createElement(\"div\",{id:\"image-preview\"},i().createElement(\"div\",{id:\"preview-caption-panel\"},this.props.onSendMessage?i().createElement(\"span\",null,s):i().createElement(\"a\",{href:m,download:this.props.content.filename},i().createElement(\"i\",{className:\"material-icons\"},\"file_download\"),\" \",i().createElement(a.FormattedMessage,{id:\"download_action\",defaultMessage:[{type:0,value:\"download\"}]})),i().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onClose()}},i().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))),i().createElement(\"div\",{id:\"image-preview-container\",ref:e=>this.assignWidth(e)},i().createElement(\"img\",{src:this.props.content.url,style:t,className:\"image-preview\",alt:this.props.content.filename})),this.props.onSendMessage?i().createElement(l.A,{messagePrompt:\"add_image_caption\",acceptBlank:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendImage,onError:this.props.onError}):i().createElement(\"div\",{id:\"image-preview-footer\"},i().createElement(\"div\",null,i().createElement(\"div\",null,i().createElement(\"b\",null,i().createElement(a.FormattedMessage,{id:\"label_file_name\",defaultMessage:[{type:0,value:\"File name:\"}]}))),i().createElement(\"div\",null,i().createElement(\"span\",{title:this.props.content.filename},s))),i().createElement(\"div\",null,i().createElement(\"div\",null,i().createElement(\"b\",null,i().createElement(a.FormattedMessage,{id:\"label_content_type\",defaultMessage:[{type:0,value:\"Content type:\"}]}))),i().createElement(\"div\",null,this.props.content.type)),i().createElement(\"div\",null,i().createElement(\"div\",null,i().createElement(\"b\",null,i().createElement(a.FormattedMessage,{id:\"label_size\",defaultMessage:[{type:0,value:\"Size:\"}]}))),i().createElement(\"div\",null,d,\" × \",c,\" px; \",(0,p.lX)(this.props.content.size)))))}}}}]);\n//# sourceMappingURL=889.prod.js.map"
  },
  {
    "path": "umd/892.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[892],{96:function(d,$,t){t.d($,{A:function(){return P}});var n=t(3247),e=t(2582),r=t(4408),o=t(9710);function i(d,$,t){var e=new n.Ay(t).getCountryCodesForCallingCode(d);return e?e.filter(function(d){return function(d,$,t){var e=new n.Ay(t);if(e.selectNumberingPlan($),e.numberingPlan.possibleLengths().indexOf(d.length)>=0)return!0;return!1}($,d,t)}):[]}var a=t(9713),u=t(284),l=t(1528),c=/^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;var f={formatExtension:function(d,$,t){return\"\".concat(d).concat(t.ext()).concat($)}};function s(d,$,t,e){if(t=t?function(){for(var d=1,$=arguments.length,t=new Array($),n=0;n<$;n++)t[n]=arguments[n];for(;d<t.length;){if(t[d])for(var e in t[d])t[0][e]=t[d][e];d++}return t[0]}({},f,t):f,e=new n.Ay(e),d.country&&\"001\"!==d.country){if(!e.hasCountry(d.country))throw new Error(\"Unknown country: \".concat(d.country));e.selectNumberingPlan(d.country)}else{if(!d.countryCallingCode)return d.phone||\"\";e.selectNumberingPlan(d.countryCallingCode)}var r,o=e.countryCallingCode(),i=t.v2?d.nationalNumber:d.phone;switch($){case\"NATIONAL\":return i?h(r=y(i,d.carrierCode,\"NATIONAL\",e,t),d.ext,e,t.formatExtension):\"\";case\"INTERNATIONAL\":return i?(r=y(i,null,\"INTERNATIONAL\",e,t),h(r=\"+\".concat(o,\" \").concat(r),d.ext,e,t.formatExtension)):\"+\".concat(o);case\"E.164\":return\"+\".concat(o).concat(i);case\"RFC3966\":return function(d){var $=d.number,t=d.ext;if(!$)return\"\";if(\"+\"!==$[0])throw new Error('\"formatRFC3966()\" expects \"number\" to be in E.164 format.');return\"tel:\".concat($).concat(t?\";ext=\"+t:\"\")}({number:\"+\".concat(o).concat(i),ext:d.ext});case\"IDD\":if(!t.fromCountry)return;var a=function(d,$,t,e,r){var o=(0,n.Ko)(e,r.metadata);if(o===t){var i=y(d,$,\"NATIONAL\",r);return\"1\"===t?t+\" \"+i:i}var a=function(d,$,t){var e=new n.Ay(t);return e.selectNumberingPlan(d,$),e.defaultIDDPrefix()?e.defaultIDDPrefix():c.test(e.IDDPrefix())?e.IDDPrefix():void 0}(e,void 0,r.metadata);if(a)return\"\".concat(a,\" \").concat(t,\" \").concat(y(d,null,\"INTERNATIONAL\",r))}(i,d.carrierCode,o,t.fromCountry,e);return h(a,d.ext,e,t.formatExtension);default:throw new Error('Unknown \"format\" argument passed to \"formatNumber()\": \"'.concat($,'\"'))}}function y(d,$,t,n,e){var o,i,a=(o=n.formats(),i=d,function(d,$){for(var t=0;t<d.length;){if($(d[t]))return d[t];t++}}(o,function(d){if(d.leadingDigitsPatterns().length>0){var $=d.leadingDigitsPatterns()[d.leadingDigitsPatterns().length-1];if(0!==i.search($))return!1}return(0,r.A)(i,d.pattern())}));return a?(0,l.A)(d,a,{useInternationalFormat:\"INTERNATIONAL\"===t,withNationalPrefix:!a.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!e||!1!==e.nationalPrefix,carrierCode:$,metadata:n}):d}function h(d,$,t,n){return $?n(d,$,t):d}function m(d){return m=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&\"function\"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?\"symbol\":typeof d},m(d)}function g(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function v(d){for(var $=1;$<arguments.length;$++){var t=null!=arguments[$]?arguments[$]:{};$%2?g(Object(t),!0).forEach(function($){b(d,$,t[$])}):Object.getOwnPropertyDescriptors?Object.defineProperties(d,Object.getOwnPropertyDescriptors(t)):g(Object(t)).forEach(function($){Object.defineProperty(d,$,Object.getOwnPropertyDescriptor(t,$))})}return d}function b(d,$,t){return($=C($))in d?Object.defineProperty(d,$,{value:t,enumerable:!0,configurable:!0,writable:!0}):d[$]=t,d}function p(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(d,C(n.key),n)}}function C(d){var $=function(d,$){if(\"object\"!=m(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||\"default\");if(\"object\"!=m(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===$?String:Number)(d)}(d,\"string\");return\"symbol\"==m($)?$:$+\"\"}var P=function(){return d=function d($,t,e){if(function(d,$){if(!(d instanceof $))throw new TypeError(\"Cannot call a class as a function\")}(this,d),!$)throw new TypeError(\"First argument is required\");if(\"string\"!=typeof $)throw new TypeError(\"First argument must be a string\");if(\"+\"===$[0]&&!t)throw new TypeError(\"`metadata` argument not passed\");if((0,u.A)(t)&&(0,u.A)(t.countries)){e=t;var r=$;if(!O.test(r))throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');var o=(0,a.A)(r,void 0,void 0,void 0,e);if($=o.countryCallingCode,!(t=o.number))throw new Error(\"Invalid `number` argument passed: too short\")}if(!t)throw new TypeError(\"`nationalNumber` argument is required\");if(\"string\"!=typeof t)throw new TypeError(\"`nationalNumber` argument must be a string\");(0,n.aR)(e);var i=function(d,$){var t,e,r=new n.Ay($);return A(d)?(t=d,r.selectNumberingPlan(t),e=r.countryCallingCode()):e=d,{country:t,countryCallingCode:e}}($,e),l=i.country,c=i.countryCallingCode;this.country=l,this.countryCallingCode=c,this.nationalNumber=t,this.number=\"+\"+this.countryCallingCode+this.nationalNumber,this.getMetadata=function(){return e}},($=[{key:\"setExt\",value:function(d){this.ext=d}},{key:\"getPossibleCountries\",value:function(){return this.country?[this.country]:i(this.countryCallingCode,this.nationalNumber,this.getMetadata())}},{key:\"isPossible\",value:function(){return(0,e.A)(this,{v2:!0},this.getMetadata())}},{key:\"isValid\",value:function(){return function(d,$,t){if($=$||{},(t=new n.Ay(t)).selectNumberingPlan(d.country,d.countryCallingCode),t.hasTypes())return void 0!==(0,o.A)(d,$,t.metadata);var e=$.v2?d.nationalNumber:d.phone;return(0,r.A)(e,t.nationalNumberPattern())}(this,{v2:!0},this.getMetadata())}},{key:\"isNonGeographic\",value:function(){return new n.Ay(this.getMetadata()).isNonGeographicCallingCode(this.countryCallingCode)}},{key:\"isEqual\",value:function(d){return this.number===d.number&&this.ext===d.ext}},{key:\"getType\",value:function(){return(0,o.A)(this,{v2:!0},this.getMetadata())}},{key:\"format\",value:function(d,$){return s(this,d,$?v(v({},$),{},{v2:!0}):{v2:!0},this.getMetadata())}},{key:\"formatNational\",value:function(d){return this.format(\"NATIONAL\",d)}},{key:\"formatInternational\",value:function(d){return this.format(\"INTERNATIONAL\",d)}},{key:\"getURI\",value:function(d){return this.format(\"RFC3966\",d)}}])&&p(d.prototype,$),t&&p(d,t),Object.defineProperty(d,\"prototype\",{writable:!1}),d;var d,$,t}(),A=function(d){return/^[A-Z]{2}$/.test(d)};var O=/^\\+\\d+$/},283:function(d,$,t){t.d($,{A:function(){return i}});var n=t(3247),e=t(4408),r=t(4573),o=t(1786);function i(d,$,t,i,a){var u=$||t?(0,n.Ko)($||t,a):i;if(0===d.indexOf(u)){(a=new n.Ay(a)).selectNumberingPlan($||t,u);var l=d.slice(u.length),c=(0,r.A)(l,$,a).nationalNumber,f=(0,r.A)(d,$,a).nationalNumber;if(!(0,e.A)(f,a.nationalNumberPattern())&&(0,e.A)(c,a.nationalNumberPattern())||\"TOO_LONG\"===(0,o.A)(f,$,a))return{countryCallingCode:u,number:l}}return{number:d}}},284:function(d,$,t){t.d($,{A:function(){return e}});var n={}.constructor;function e(d){return null!=d&&d.constructor===n}},1135:function(d,$,t){t.d($,{A:function(){return e}});var n=t(6128);function e(d){return d.replace(new RegExp(\"[\".concat(n.uD,\"]+\"),\"g\"),\" \").trim()}},1211:function(d,$){$.A={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-79]\\\\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)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\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-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|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])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[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[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|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(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|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(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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(?:[15]|28|4[14])|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]|2[23]\"],\"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|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\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|6[124-9]|7[125-9])\\\\d{6}\"]]],BJ:[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],BL:[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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]|9[02])\\\\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)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|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-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\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|3[0-4]|[89]9))\\\\d{4}\"]]],BT:[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|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|7[39])|9(?:0[25]|42))[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],CD:[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\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{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],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[02-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,12],[[\"(\\\\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,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],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{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\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(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[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|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|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]))|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|40))\\\\d{6}\",[9]]]],CN:[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|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(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"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])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[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\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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,10,11,12],[[\"(\\\\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,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],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{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"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,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{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[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],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-3])|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(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\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,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?: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,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|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{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"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|180020\",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]|49|5[6-8])|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(?:0(?:0(?:1[09]|70)|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}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],GF:[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|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])|7093[0-3])\\\\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|180020\",\"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,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\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|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],GU:[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-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[478])|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\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[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|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])|70[1-59]|84[0-39]|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\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{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\",[\"6|7[245]\"],\"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-57]\"],\"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|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],HT:[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\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]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\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,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|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|180020\",\"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|8(?:28[235-7]|3))|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])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|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\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[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,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|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])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|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-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|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,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\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]|43\"]],[\"(\\\\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\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],JE:[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\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|427|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\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],JP:[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-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)|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])|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])|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\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[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-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],KG:[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[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]|9(?:12|9[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\",[\"[36]0|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[0-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|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|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,\"33622|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\",[\"3\"],\"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(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,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-6]|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,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\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\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\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\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[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]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",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|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-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{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],MC:[\"377\",\"00\",\"(?:[3489]|[67]\\\\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\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\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|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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-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[35-8])\\\\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-478]\\\\d|6[01])|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[0-3]|[679]\\\\d|8[2-59])\\\\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\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"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,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|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|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"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[67]\\\\d\\\\d|7091[0-3])\\\\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-7]|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]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?: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]|[267][1-9]|3[1-8]|[45]\\\\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-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\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[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\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-7]))|(?:[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,[\"(?:[579]\\\\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[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[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\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\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]|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(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],NR:[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],NU:[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],NZ:[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[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[1-48])\\\\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-247]\\\\d|3[0-79]|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,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],PM:[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\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-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\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(?:[049]\\\\d|3[034]))\\\\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]|78)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-7])\"],\"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]|7[1-6]|8[1-7]|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[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],RE:[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],RO:[\"40\",\"00\",\"(?:[236-8]\\\\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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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,0,[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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],SA:[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[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{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],SB:[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|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]\",\"(?:[2489]\\\\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,12],[[\"(\\\\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-9]|[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,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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[1-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(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\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]|[6-8]\\\\d|90)\\\\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-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-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\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[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-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\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[5-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|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\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[0-29]|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,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],TJ:[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\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|71)\\\\d{6}\",[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\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"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-8])\\\\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,[\"(?:5(?:4[0-5]|5[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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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,[\"(?:6[1-35-9]|7[13-9])\\\\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,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|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,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\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,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|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-57-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]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|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-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],UY:[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],UZ:[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|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])))|7(?:[07]\\\\d{3}|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]))|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}\"]]],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,12],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[246])\\\\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\\\\d|10|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\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-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],XK:[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\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\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"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\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\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)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|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|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\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(?:[1278]\\\\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}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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,[\"348[57]\\\\d{7}\",[11]],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[0-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}\"]]]}}},1459:function(d,$,t){function n(d,$){if(d&&$.numberingPlan.nationalPrefixForParsing()){var t=new RegExp(\"^(?:\"+$.numberingPlan.nationalPrefixForParsing()+\")\"),n=t.exec(d);if(n){var e,r,o,i=n.length-1,a=i>0&&n[i];if($.nationalPrefixTransformRule()&&a)e=d.replace(t,$.nationalPrefixTransformRule()),i>1&&(r=n[1]);else{var u=n[0];e=d.slice(u.length),a&&(r=n[1])}if(a){var l=d.indexOf(n[1]);d.slice(0,l)===$.numberingPlan.nationalPrefix()&&(o=$.numberingPlan.nationalPrefix())}else o=n[0];return{nationalNumber:e,nationalPrefix:o,carrierCode:r}}}return{nationalNumber:d}}t.d($,{A:function(){return n}})},1528:function(d,$,t){t.d($,{A:function(){return r},_:function(){return e}});var n=t(1135),e=/(\\$\\d)/;function r(d,$,t){var r=t.useInternationalFormat,o=t.withNationalPrefix,i=(t.carrierCode,t.metadata,d.replace(new RegExp($.pattern()),r?$.internationalFormat():o&&$.nationalPrefixFormattingRule()?$.format().replace(e,$.nationalPrefixFormattingRule()):$.format()));return r?(0,n.A)(i):i}},1786:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247);function e(d,$){var t=\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if(\"string\"==typeof d)return r(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(d,$):void 0}}(d))||$&&d&&\"number\"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[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(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function o(d,$,t){return i(d,$,void 0,t)}function i(d,$,t,r){$&&(r=new n.Ay(r.metadata)).selectNumberingPlan($);var o=r.type(t),a=o&&o.possibleLengths()||r.possibleLengths();if(!a)return\"IS_POSSIBLE\";if(\"FIXED_LINE_OR_MOBILE\"===t){if(!r.type(\"FIXED_LINE\"))return i(d,$,\"MOBILE\",r);var u=r.type(\"MOBILE\");u&&(a=function(d,$){for(var t,n=d.slice(),r=e($);!(t=r()).done;){var o=t.value;d.indexOf(o)<0&&n.push(o)}return n.sort(function(d,$){return d-$})}(a,u.possibleLengths()))}else if(t&&!o)return\"INVALID_LENGTH\";var l=d.length,c=a[0];return c===l?\"IS_POSSIBLE\":c>l?\"TOO_SHORT\":a[a.length-1]<l?\"TOO_LONG\":a.indexOf(l,1)>=0?\"IS_POSSIBLE\":\"INVALID_LENGTH\"}},2582:function(d,$,t){t.d($,{A:function(){return r},x:function(){return o}});var n=t(3247),e=t(1786);function r(d,$,t){if(void 0===$&&($={}),t=new n.Ay(t),$.v2){if(!d.countryCallingCode)throw new Error(\"Invalid phone number object passed\");t.selectNumberingPlan(d.countryCallingCode)}else{if(!d.phone)return!1;if(d.country){if(!t.hasCountry(d.country))throw new Error(\"Unknown country: \".concat(d.country));t.selectNumberingPlan(d.country)}else{if(!d.countryCallingCode)throw new Error(\"Invalid phone number object passed\");t.selectNumberingPlan(d.countryCallingCode)}}if(t.possibleLengths())return o(d.phone||d.nationalNumber,d.country,t);if(d.countryCallingCode&&t.isNonGeographicCallingCode(d.countryCallingCode))return!0;throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.')}function o(d,$,t){return\"IS_POSSIBLE\"===(0,e.A)(d,$,t)}},3247:function(d,$,t){function n(d,$){d=d.split(\"-\"),$=$.split(\"-\");for(var t=d[0].split(\".\"),n=$[0].split(\".\"),e=0;e<3;e++){var r=Number(t[e]),o=Number(n[e]);if(r>o)return 1;if(o>r)return-1;if(!isNaN(r)&&isNaN(o))return 1;if(isNaN(r)&&!isNaN(o))return-1}return d[1]&&$[1]?d[1]>$[1]?1:d[1]<$[1]?-1:0:!d[1]&&$[1]?1:d[1]&&!$[1]?-1:0}t.d($,{Ay:function(){return f},Ko:function(){return p},aR:function(){return v}});var e=t(284);function r(d){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&\"function\"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?\"symbol\":typeof d},r(d)}function o(d,$){if(!(d instanceof $))throw new TypeError(\"Cannot call a class as a function\")}function i(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(d,u(n.key),n)}}function a(d,$,t){return $&&i(d.prototype,$),t&&i(d,t),Object.defineProperty(d,\"prototype\",{writable:!1}),d}function u(d){var $=function(d,$){if(\"object\"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||\"default\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===$?String:Number)(d)}(d,\"string\");return\"symbol\"==r($)?$:$+\"\"}var l=\" ext. \",c=/^\\d+$/,f=function(){return a(function d($){o(this,d),v($),this.metadata=$,C.call(this,$)},[{key:\"getCountries\",value:function(){return Object.keys(this.metadata.countries).filter(function(d){return\"001\"!==d})}},{key:\"getCountryMetadata\",value:function(d){return this.metadata.countries[d]}},{key:\"nonGeographic\",value:function(){if(!(this.v1||this.v2||this.v3))return this.metadata.nonGeographic||this.metadata.nonGeographical}},{key:\"hasCountry\",value:function(d){return void 0!==this.getCountryMetadata(d)}},{key:\"hasCallingCode\",value:function(d){if(this.getCountryCodesForCallingCode(d))return!0;if(this.nonGeographic()){if(this.nonGeographic()[d])return!0}else{var $=this.countryCallingCodes()[d];if($&&1===$.length&&\"001\"===$[0])return!0}}},{key:\"isNonGeographicCallingCode\",value:function(d){return this.nonGeographic()?!!this.nonGeographic()[d]:!this.getCountryCodesForCallingCode(d)}},{key:\"country\",value:function(d){return this.selectNumberingPlan(d)}},{key:\"selectNumberingPlan\",value:function(d,$){if(d&&c.test(d)&&($=d,d=null),d&&\"001\"!==d){if(!this.hasCountry(d))throw new Error(\"Unknown country: \".concat(d));this.numberingPlan=new s(this.getCountryMetadata(d),this)}else if($){if(!this.hasCallingCode($))throw new Error(\"Unknown calling code: \".concat($));this.numberingPlan=new s(this.getNumberingPlanMetadata($),this)}else this.numberingPlan=void 0;return this}},{key:\"getCountryCodesForCallingCode\",value:function(d){var $=this.countryCallingCodes()[d];if($){if(1===$.length&&3===$[0].length)return;return $}}},{key:\"getCountryCodeForCallingCode\",value:function(d){var $=this.getCountryCodesForCallingCode(d);if($)return $[0]}},{key:\"getNumberingPlanMetadata\",value:function(d){var $=this.getCountryCodeForCallingCode(d);if($)return this.getCountryMetadata($);if(this.nonGeographic()){var t=this.nonGeographic()[d];if(t)return t}else{var n=this.countryCallingCodes()[d];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(d){return this.numberingPlan.type(d)}},{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(d){return this.selectNumberingPlan(d)}},{key:\"hasSelectedNumberingPlan\",value:function(){return void 0!==this.numberingPlan}}])}(),s=function(){return a(function d($,t){o(this,d),this.globalMetadataObject=t,this.metadata=$,C.call(this,t.metadata)},[{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(d){return d[this.v1?2:this.v2?3:4]}},{key:\"formats\",value:function(){var d=this,$=this._getFormats(this.metadata)||this._getFormats(this.getDefaultCountryMetadataForRegion())||[];return $.map(function($){return new y($,d)})}},{key:\"nationalPrefix\",value:function(){return this.metadata[this.v1?3:this.v2?4:5]}},{key:\"_getNationalPrefixFormattingRule\",value:function(d){return d[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(d){if(this.hasTypes()&&g(this.types(),d))return new m(g(this.types(),d),this)}},{key:\"ext\",value:function(){return this.v1||this.v2?l:this.metadata[13]||l}}])}(),y=function(){return a(function d($,t){o(this,d),this._format=$,this.metadata=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()||h.test(this.nationalPrefixFormattingRule()))}},{key:\"internationalFormat\",value:function(){return this._format[5]||this.format()}}])}(),h=/^\\(?\\$1\\)?$/,m=function(){return a(function d($,t){o(this,d),this.type=$,this.metadata=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()}}])}();function g(d,$){switch($){case\"FIXED_LINE\":return d[0];case\"MOBILE\":return d[1];case\"TOLL_FREE\":return d[2];case\"PREMIUM_RATE\":return d[3];case\"PERSONAL_NUMBER\":return d[4];case\"VOICEMAIL\":return d[5];case\"UAN\":return d[6];case\"PAGER\":return d[7];case\"VOIP\":return d[8];case\"SHARED_COST\":return d[9]}}function v(d){if(!d)throw new Error(\"[libphonenumber-js] `metadata` argument not passed. Check your arguments.\");if(!(0,e.A)(d)||!(0,e.A)(d.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((0,e.A)(d)?\"an object of shape: { \"+Object.keys(d).join(\", \")+\" }\":\"a \"+b(d)+\": \"+d,\".\"))}var b=function(d){return r(d)};function p(d,$){if(($=new f($)).hasCountry(d))return $.selectNumberingPlan(d).countryCallingCode();throw new Error(\"Unknown country: \".concat(d))}function C(d){var $=d.version;\"number\"==typeof $?(this.v1=1===$,this.v2=2===$,this.v3=3===$,this.v4=4===$):$?-1===n($,\"1.2.0\")?this.v2=!0:-1===n($,\"1.7.35\")?this.v3=!0:this.v4=!0:this.v1=!0}},3578:function(d,$,t){function n(d,$){var t=\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if(\"string\"==typeof d)return e(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(d,$):void 0}}(d))||$&&d&&\"number\"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[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 e(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}t.d($,{Ay:function(){return i},ZW:function(){return o}});var r={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\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\"};function o(d){return r[d]}function i(d){for(var $,t=\"\",e=n(d.split(\"\"));!($=e()).done;){var r=o($.value);r&&(t+=r)}return t}},4408:function(d,$,t){function n(d,$){return d=d||\"\",new RegExp(\"^(?:\"+$+\")$\").test(d)}t.d($,{A:function(){return n}})},4573:function(d,$,t){t.d($,{A:function(){return i}});var n=t(1459),e=t(4408),r=t(1786),o=t(9495);function i(d,$,t){var i=(0,n.A)(d,t),a=i.carrierCode,u=i.nationalNumber;if(u!==d){if(!function(d,$,t){if((0,e.A)(d,t.nationalNumberPattern())&&!(0,e.A)($,t.nationalNumberPattern()))return!1;return!0}(d,u,t))return{nationalNumber:d};if(t.numberingPlan.possibleLengths()&&($||($=(0,o.A)(t.numberingPlan.callingCode(),{nationalNumber:u,metadata:t})),!function(d,$,t){switch((0,r.A)(d,$,t)){case\"TOO_SHORT\":case\"INVALID_LENGTH\":return!1;default:return!0}}(u,$,t)))return{nationalNumber:d}}return{nationalNumber:u,carrierCode:a}}},5693:function(d,$,t){t.d($,{A:function(){return e}});var n=t(1211);function e(d,$){var t=Array.prototype.slice.call($);return t.push(n.A),d.apply(this,t)}},6111:function(d,$,t){t.d($,{A:function(){return i}});var n=t(3247),e=t(9710);function r(d,$){var t=\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if(\"string\"==typeof d)return o(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(d,$):void 0}}(d))||$&&d&&\"number\"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[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(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function i(d,$){var t=$.countries,o=$.metadata;o=new n.Ay(o);for(var i,a=r(t);!(i=a()).done;){var u=i.value;if(o.selectNumberingPlan(u),o.leadingDigits()){if(d&&0===d.search(o.leadingDigits()))return u}else if((0,e.A)({phone:d,country:u},void 0,o.metadata))return u}}},6128:function(d,$,t){t.d($,{Cb:function(){return e},Jq:function(){return r},OA:function(){return o},c7:function(){return n},tz:function(){return a},uD:function(){return i}});var n=2,e=17,r=3,o=\"0-9０-９٠-٩۰-۹\",i=\"\".concat(\"-‐-―−ー－\").concat(\"／/\").concat(\"．.\").concat(\"  ­​⁠　\").concat(\"()（）［］\\\\[\\\\]\").concat(\"~⁓∼～\"),a=\"+＋\"},6890:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247),e=t(6128),r=new RegExp(\"([\"+e.OA+\"])\");function o(d,$,t,e){if($){var o=new n.Ay(e);o.selectNumberingPlan($,t);var i=new RegExp(o.IDDPrefix());if(0===d.search(i)){var a=(d=d.slice(d.match(i)[0].length)).match(r);if(!(a&&null!=a[1]&&a[1].length>0&&\"0\"===a[1]))return d}}}},8892:function(d,$,t){t.d($,{L:function(){return id}});var n=t(5693),e=t(6128);function r(d){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&\"function\"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?\"symbol\":typeof d},r(d)}function o(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(d,i(n.key),n)}}function i(d){var $=function(d,$){if(\"object\"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||\"default\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===$?String:Number)(d)}(d,\"string\");return\"symbol\"==r($)?$:$+\"\"}function a(d,$,t){return $=f($),function(d,$){if($&&(\"object\"==r($)||\"function\"==typeof $))return $;if(void 0!==$)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(d){if(void 0===d)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return d}(d)}(d,l()?Reflect.construct($,t||[],f(d).constructor):$.apply(d,t))}function u(d){var $=\"function\"==typeof Map?new Map:void 0;return u=function(d){if(null===d||!function(d){try{return-1!==Function.toString.call(d).indexOf(\"[native code]\")}catch($){return\"function\"==typeof d}}(d))return d;if(\"function\"!=typeof d)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==$){if($.has(d))return $.get(d);$.set(d,t)}function t(){return function(d,$,t){if(l())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,$);var e=new(d.bind.apply(d,n));return t&&c(e,t.prototype),e}(d,arguments,f(this).constructor)}return t.prototype=Object.create(d.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),c(t,d)},u(d)}function l(){try{var d=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(d){}return(l=function(){return!!d})()}function c(d,$){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(d,$){return d.__proto__=$,d},c(d,$)}function f(d){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(d){return d.__proto__||Object.getPrototypeOf(d)},f(d)}var s=function(d){function $(d){var t;return function(d,$){if(!(d instanceof $))throw new TypeError(\"Cannot call a class as a function\")}(this,$),t=a(this,$,[d]),Object.setPrototypeOf(t,$.prototype),t.name=t.constructor.name,t}return function(d,$){if(\"function\"!=typeof $&&null!==$)throw new TypeError(\"Super expression must either be null or a function\");d.prototype=Object.create($&&$.prototype,{constructor:{value:d,writable:!0,configurable:!0}}),Object.defineProperty(d,\"prototype\",{writable:!1}),$&&c(d,$)}($,d),t=$,n&&o(t.prototype,n),e&&o(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,e}(u(Error)),y=t(3247),h=function(d){return\"([\".concat(e.OA,\"]{1,\").concat(d,\"})\")};function m(d){var $=\"[  \\\\t,]*\",t=\"[:\\\\.．]?[  \\\\t,-]*\",n=\"#?\",e=\"[  \\\\t]*\";return\";ext=\"+h(\"20\")+\"|\"+($+\"(?:e?xt(?:ensi(?:ó?|ó))?n?|ｅ?ｘｔｎ?|доб|anexo)\"+t+h(\"20\")+n)+\"|\"+($+\"(?:[xｘ#＃~～]|int|ｉｎｔ)\"+t+h(\"9\")+n)+\"|\"+(\"[- ]+\"+h(\"6\")+\"#\")+\"|\"+(e+\"(?:,{2}|;)\"+t+h(\"15\")+n)+\"|\"+(e+\"(?:,)+\"+t+h(\"9\")+n)}var g=\"[\"+e.OA+\"]{\"+e.c7+\"}\",v=\"[\"+e.tz+\"]{0,1}(?:[\"+e.uD+\"]*[\"+e.OA+\"]){3,}[\"+e.uD+e.OA+\"]*\",b=new RegExp(\"^[\"+e.tz+\"]{0,1}(?:[\"+e.uD+\"]*[\"+e.OA+\"]){1,2}$\",\"i\"),p=v+\"(?:\"+m()+\")?\",C=new RegExp(\"^\"+g+\"$|^\"+p+\"$\",\"i\");var P=new RegExp(\"(?:\"+m()+\")$\",\"i\");var A=t(3578);function O(d,$){var t=\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if(\"string\"==typeof d)return N(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?N(d,$):void 0}}(d))||$&&d&&\"number\"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[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 N(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function w(d){for(var $,t=\"\",n=O(d.split(\"\"));!($=n()).done;){t+=E($.value,t)||\"\"}return t}function E(d,$,t){return\"+\"===d?$?void(\"function\"==typeof t&&t(\"end\")):\"+\":(0,A.ZW)(d)}var S=t(2582),I=t(96),T=t(4408),M=t(9713),x=t(4573),R=t(9495),L=\"+\",F=\"([\"+e.OA+\"]|[\\\\-\\\\.\\\\(\\\\)]?)\",D=\"^\\\\\"+L+F+\"*[\"+e.OA+\"]\"+F+\"*$\",_=new RegExp(D,\"g\"),G=e.OA,j=new RegExp(\"^(\"+(\"[\"+G+\"]+((\\\\-)*[\"+G+\"])*\")+\"\\\\.)*\"+(\"[a-zA-Z]+((\\\\-)*[\"+G+\"])*\")+\"\\\\.?$\",\"g\"),k=\"tel:\",B=\";phone-context=\",U=\";isub=\";function K(d,$){var t,n=$.extractFormattedPhoneNumber,e=function(d){var $=d.indexOf(B);if($<0)return null;var t=$+B.length;if(t>=d.length)return\"\";var n=d.indexOf(\";\",t);return n>=0?d.substring(t,n):d.substring(t)}(d);if(!function(d){return null===d||0!==d.length&&(_.test(d)||j.test(d))}(e))throw new s(\"NOT_A_NUMBER\");if(null===e)t=n(d)||\"\";else{t=\"\",e.charAt(0)===L&&(t+=e);var r,o=d.indexOf(k);r=o>=0?o+k.length:0;var i=d.indexOf(B);t+=d.substring(r,i)}var a=t.indexOf(U);if(a>0&&(t=t.substring(0,a)),\"\"!==t)return t}var H=250,W=new RegExp(\"[\"+e.tz+e.OA+\"]\"),V=new RegExp(\"[^\"+e.OA+\"#]+$\"),Z=!1;function Y(d,$,t){if($=$||{},t=new y.Ay(t),$.defaultCountry&&!t.hasCountry($.defaultCountry)){if($.v2)throw new s(\"INVALID_COUNTRY\");throw new Error(\"Unknown country: \".concat($.defaultCountry))}var n=function(d,$,t){var n=K(d,{extractFormattedPhoneNumber:function(d){return function(d,$,t){if(!d)return;if(d.length>H){if(t)throw new s(\"TOO_LONG\");return}if(!1===$)return d;var n=d.search(W);if(n<0)return;return d.slice(n).replace(V,\"\")}(d,t,$)}});if(!n)return{};if(!function(d){return d.length>=e.c7&&C.test(d)}(n))return function(d){return b.test(d)}(n)?{error:\"TOO_SHORT\"}:{};var r=function(d){var $=d.search(P);if($<0)return{};for(var t=d.slice(0,$),n=d.match(P),e=1;e<n.length;){if(n[e])return{number:t,ext:n[e]};e++}}(n);if(r.ext)return r;return{number:n}}(d,$.v2,$.extract),r=n.number,o=n.ext,i=n.error;if(!r){if($.v2){if(\"TOO_SHORT\"===i)throw new s(\"TOO_SHORT\");throw new s(\"NOT_A_NUMBER\")}return{}}var a=function(d,$,t,n){var e,r=(0,M.A)(w(d),void 0,$,t,n.metadata),o=r.countryCallingCodeSource,i=r.countryCallingCode,a=r.number;if(i)n.selectNumberingPlan(i);else{if(!a||!$&&!t)return{};n.selectNumberingPlan($,t),$?e=$:Z&&n.isNonGeographicCallingCode(t)&&(e=\"001\"),i=t||(0,y.Ko)($,n.metadata)}if(!a)return{countryCallingCodeSource:o,countryCallingCode:i};var u=(0,x.A)(w(a),e,n),l=u.nationalNumber,c=u.carrierCode,f=(0,R.A)(i,{nationalNumber:l,metadata:n});f&&(e=f,\"001\"===f||n.selectNumberingPlan(e));return{country:e,countryCallingCode:i,countryCallingCodeSource:o,nationalNumber:l,carrierCode:c}}(r,$.defaultCountry,$.defaultCallingCode,t),u=a.country,l=a.nationalNumber,c=a.countryCallingCode,f=a.countryCallingCodeSource,h=a.carrierCode;if(!t.hasSelectedNumberingPlan()){if($.v2)throw new s(\"INVALID_COUNTRY\");return{}}if(!l||l.length<e.c7){if($.v2)throw new s(\"TOO_SHORT\");return{}}if(l.length>e.Cb){if($.v2)throw new s(\"TOO_LONG\");return{}}if($.v2){var m=new I.A(c,l,t.metadata);return u&&(m.country=u),h&&(m.carrierCode=h),o&&(m.ext=o),m.__countryCallingCodeSource=f,m}var g=!!($.extended?t.hasSelectedNumberingPlan():u)&&(0,T.A)(l,t.nationalNumberPattern());return $.extended?{country:u,countryCallingCode:c,carrierCode:h,valid:g,possible:!!g||!(!0!==$.extended||!t.possibleLengths()||!(0,S.x)(l,u,t)),phone:l,ext:o}:g?function(d,$,t){var n={country:d,phone:$};t&&(n.ext=t);return n}(u,l,o):{}}function J(d){return J=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&\"function\"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?\"symbol\":typeof d},J(d)}function X(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function Q(d){for(var $=1;$<arguments.length;$++){var t=null!=arguments[$]?arguments[$]:{};$%2?X(Object(t),!0).forEach(function($){q(d,$,t[$])}):Object.getOwnPropertyDescriptors?Object.defineProperties(d,Object.getOwnPropertyDescriptors(t)):X(Object(t)).forEach(function($){Object.defineProperty(d,$,Object.getOwnPropertyDescriptor(t,$))})}return d}function q(d,$,t){return($=function(d){var $=function(d,$){if(\"object\"!=J(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||\"default\");if(\"object\"!=J(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===$?String:Number)(d)}(d,\"string\");return\"symbol\"==J($)?$:$+\"\"}($))in d?Object.defineProperty(d,$,{value:t,enumerable:!0,configurable:!0,writable:!0}):d[$]=t,d}var z=t(284);function dd(d){return dd=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&\"function\"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?\"symbol\":typeof d},dd(d)}function $d(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function td(d,$,t){return($=function(d){var $=function(d,$){if(\"object\"!=dd(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||\"default\");if(\"object\"!=dd(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===$?String:Number)(d)}(d,\"string\");return\"symbol\"==dd($)?$:$+\"\"}($))in d?Object.defineProperty(d,$,{value:t,enumerable:!0,configurable:!0,writable:!0}):d[$]=t,d}function nd(d,$){return function(d){if(Array.isArray(d))return d}(d)||function(d,$){var t=null==d?null:\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(null!=t){var n,e,r,o,i=[],a=!0,u=!1;try{if(r=(t=t.call(d)).next,0===$){if(Object(t)!==t)return;a=!1}else for(;!(a=(n=r.call(t)).done)&&(i.push(n.value),i.length!==$);a=!0);}catch(d){u=!0,e=d}finally{try{if(!a&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(u)throw e}}return i}}(d,$)||function(d,$){if(d){if(\"string\"==typeof d)return ed(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?ed(d,$):void 0}}(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 ed(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function rd(d){var $,t,n,e=nd(Array.prototype.slice.call(d),4),r=e[0],o=e[1],i=e[2],a=e[3];if(\"string\"!=typeof r)throw new TypeError(\"A text for parsing must be a string.\");if($=r,o&&\"string\"!=typeof o){if(!(0,z.A)(o))throw new Error(\"Invalid second argument: \".concat(o));i?(t=o,n=i):n=o}else a?(t=i,n=a):(t=void 0,n=i),o&&(t=function(d){for(var $=1;$<arguments.length;$++){var t=null!=arguments[$]?arguments[$]:{};$%2?$d(Object(t),!0).forEach(function($){td(d,$,t[$])}):Object.getOwnPropertyDescriptors?Object.defineProperties(d,Object.getOwnPropertyDescriptors(t)):$d(Object(t)).forEach(function($){Object.defineProperty(d,$,Object.getOwnPropertyDescriptor(t,$))})}return d}({defaultCountry:o},t));return{text:$,options:t,metadata:n}}function od(){var d=rd(arguments);return function(d,$,t){return Y(d,Q(Q({},$),{},{v2:!0}),t)}(d.text,d.options,d.metadata)}function id(){return(0,n.A)(od,arguments)}},9495:function(d,$,t){t.d($,{A:function(){return r}});var n=t(6111),e=!1;function r(d,$){var t=$.nationalNumber,r=$.metadata;if(e&&r.isNonGeographicCallingCode(d))return\"001\";var o=r.getCountryCodesForCallingCode(d);return o?1===o.length?o[0]:(0,n.A)(t,{countries:o,metadata:r.metadata}):void 0}},9710:function(d,$,t){t.d($,{A:function(){return a}});var n=t(3247),e=t(4408);function r(d,$){var t=\"undefined\"!=typeof Symbol&&d[Symbol.iterator]||d[\"@@iterator\"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if(\"string\"==typeof d)return o(d,$);var t={}.toString.call(d).slice(8,-1);return\"Object\"===t&&d.constructor&&(t=d.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(d):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(d,$):void 0}}(d))||$&&d&&\"number\"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[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(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}var i=[\"MOBILE\",\"PREMIUM_RATE\",\"TOLL_FREE\",\"SHARED_COST\",\"VOIP\",\"PERSONAL_NUMBER\",\"PAGER\",\"UAN\",\"VOICEMAIL\"];function a(d,$,t){if($=$||{},d.country||d.countryCallingCode){(t=new n.Ay(t)).selectNumberingPlan(d.country,d.countryCallingCode);var o=$.v2?d.nationalNumber:d.phone;if((0,e.A)(o,t.nationalNumberPattern())){if(u(o,\"FIXED_LINE\",t))return t.type(\"MOBILE\")&&\"\"===t.type(\"MOBILE\").pattern()?\"FIXED_LINE_OR_MOBILE\":t.type(\"MOBILE\")?u(o,\"MOBILE\",t)?\"FIXED_LINE_OR_MOBILE\":\"FIXED_LINE\":\"FIXED_LINE_OR_MOBILE\";for(var a,l=r(i);!(a=l()).done;){var c=a.value;if(u(o,c,t))return c}}}}function u(d,$,t){return!(!($=t.type($))||!$.pattern())&&(!($.possibleLengths()&&$.possibleLengths().indexOf(d.length)<0)&&(0,e.A)(d,$.pattern()))}},9713:function(d,$,t){t.d($,{A:function(){return i}});var n=t(6890),e=t(283),r=t(3247),o=t(6128);function i(d,$,t,i,a){if(!d)return{};var u;if(\"+\"!==d[0]){var l=(0,n.A)(d,$||t,i,a);if(!l||l===d){if($||t||i){var c=(0,e.A)(d,$,t,i,a),f=c.countryCallingCode,s=c.number;if(f)return{countryCallingCodeSource:\"FROM_NUMBER_WITHOUT_PLUS_SIGN\",countryCallingCode:f,number:s}}return{number:d}}u=!0,d=\"+\"+l}if(\"0\"===d[1])return{};a=new r.Ay(a);for(var y=2;y-1<=o.Jq&&y<=d.length;){var h=d.slice(1,y);if(a.hasCallingCode(h))return a.selectNumberingPlan(h),{countryCallingCodeSource:u?\"FROM_NUMBER_WITH_IDD\":\"FROM_NUMBER_WITH_PLUS_SIGN\",countryCallingCode:h,number:d.slice(y)};y++}return{}}}}]);\n//# sourceMappingURL=892.prod.js.map"
  },
  {
    "path": "umd/898.prod.js",
    "content": "\"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\":\"채팅이없습니다<br/>¯∖_(ツ)_/¯\",\"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\":\"바쁘다\",\"pin_message\":\"고정\",\"unpin_message\":\"고정 해제\",\"failed_to_init_audio\":\"오디오 녹음 초기화 실패\",\"calls_conference\":\"전화 회의\",\"password_reset_success\":\"비밀번호 재설정 성공\",\"join_conference\":\"+ 통화에 참여\"}')}}]);"
  },
  {
    "path": "umd/92.prod.js",
    "content": "\"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<br />¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Anpinnen\",\"unpin_message\":\"Lösen\",\"calls_conference\":\"Telefonkonferenz\",\"password_reset_success\":\"Passwort erfolgreich zurückgesetzt\",\"join_conference\":\"+ Mitmachen\"}')}}]);"
  },
  {
    "path": "umd/932.prod.js",
    "content": "\"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<br />¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fijar\",\"unpin_message\":\"Desanclar\",\"failed_to_init_audio\":\"Error al inicializar la grabación de audio\",\"calls_conference\":\"Conferencia\",\"password_reset_success\":\"Restablecimiento de contraseña con éxito\",\"join_conference\":\"+ Unirse\"}')}}]);"
  },
  {
    "path": "umd/936.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[936],{1936: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<br />¯∖_(ツ)_/¯\",\"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\",\"scan_qr_code\":\"Scanner le code QR\"}')}}]);"
  },
  {
    "path": "umd/942.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[942],{8942:function(e,t,a){a.r(t),a.d(t,{default:function(){return p}});var n=a(1594),l=a.n(n),s=a(8181),r=a(8892),o=a(1725),c=a(6904),d=a(4532),i=a(6110);const m=(0,s.defineMessages)({unknown_name:{id:\"unknown_name\",defaultMessage:[{type:0,value:\"Unknown\"}]}});class p extends l().PureComponent{constructor(e){super(e),this.state={content:e.content.object},e.content.object||(0,i.QJ)(e.content.file).then(e=>{this.setState({content:e})}),this.handleSendCard=this.handleSendCard.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){document.addEventListener(\"keydown\",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener(\"keydown\",this.handleKeyDown)}handleKeyDown(e){e.preventDefault(),\"Escape\"===e.key&&this.props.onClose()}handleSendCard(){this.props.onClose(),this.props.onSendMessage(this.props.content)}render(){const e=this.state.content,t=d.TheCard.getFn(e),a=d.TheCard.getPhotoUrl(e)||null,n=e?.note,i=d.TheCard.getOrg(e),p=d.TheCard.getComm(e,\"email\")||[],u=d.TheCard.getComm(e,\"tel\")||[],h=d.TheCard.getComm(e,\"tinode\")||[],E=d.TheCard.getComm(e,\"http\")||[],v=[];return p.forEach((e,t)=>{const a=Array.isArray(e.des)?e.des.join(\", \"):\"\";v.push(l().createElement(\"div\",{className:\"group quoted\",key:`email-${t}`},l().createElement(\"tt\",null,e.value),l().createElement(\"span\",{className:\"small gray\"},\" \",a?`(${a})`:\"\")))}),u.forEach((e,t)=>{let a=e.value;try{const t=(0,r.L)(e.value);a=t?t.formatInternational():e.value}catch(e){}const n=Array.isArray(e.des)?e.des.join(\", \"):\"\";v.push(l().createElement(\"div\",{className:\"group quoted\",key:`tel-${t}`},l().createElement(\"tt\",null,a),l().createElement(\"span\",{className:\"small gray\"},\" \",n?`(${n})`:\"\")))}),h.forEach((e,t)=>{const a=Array.isArray(e.des)?e.des.join(\", \"):\"\";v.push(l().createElement(\"div\",{className:\"group quoted\",key:`tinode-${t}`},l().createElement(\"tt\",null,e.value),l().createElement(\"span\",{className:\"small gray\"},\" \",a?`(${a})`:\"\")))}),E.forEach((e,t)=>{const a=Array.isArray(e.des)?e.des.join(\", \"):\"\";v.push(l().createElement(\"div\",{className:\"group quoted\",key:`url-${t}`},l().createElement(\"tt\",null,e.value),l().createElement(\"span\",{className:\"small gray\"},\" \",a?`(${a})`:\"\")))}),l().createElement(\"div\",{id:\"image-preview\"},l().createElement(\"div\",{id:\"preview-caption-panel\"},l().createElement(\"span\",null,l().createElement(s.FormattedMessage,{id:\"label_contact_card\",defaultMessage:[{type:0,value:\"Contact Card\"}]})),l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onClose()}},l().createElement(\"i\",{className:\"material-icons gray\"},\"close\"))),l().createElement(\"div\",{id:\"image-preview-container\"},l().createElement(\"div\",{className:\"doc-card\"},l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"center\",null,l().createElement(\"div\",{className:\"avatar-box\"},l().createElement(c.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:a||!0,topic:\"usrXXX123\",title:t}))),l().createElement(\"div\",{className:\"group\"},l().createElement(\"div\",{className:\"large ellipsized\"},t||l().createElement(s.FormattedMessage,m.unknown_name))),i?l().createElement(\"div\",{className:\"group\"},l().createElement(\"div\",null,i)):null,n?l().createElement(\"div\",{className:\"group\"},l().createElement(\"label\",{className:\"small\"},l().createElement(s.FormattedMessage,{id:\"label_description\",defaultMessage:[{type:0,value:\"Description\"}]})),l().createElement(\"div\",{className:\"quoted\"},n)):null,v.length>0?l().createElement(\"div\",{className:\"group\"},l().createElement(\"label\",{className:\"small\"},l().createElement(s.FormattedMessage,{id:\"label_contacts\",defaultMessage:[{type:0,value:\"Contacts\"}]})),v):null))),l().createElement(o.A,{noInput:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendCard,onError:this.props.onError}))}}}}]);\n//# sourceMappingURL=942.prod.js.map"
  },
  {
    "path": "umd/952.prod.js",
    "content": "\"use strict\";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[952],{952: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\":\"채팅이없습니다<br/>¯∖_(ツ)_/¯\",\"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\":\"비밀번호 재설정 성공\",\"scan_qr_code\":\"QR 코드 스캔\"}')}}]);"
  },
  {
    "path": "umd/961.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[961],{96:function(t,d,e){e.d(d,{A:function(){return N}});var n=e(3247),r=e(2582),i=e(4408),a=e(9710);function o(t,d,e){var r=new n.Ay(e).getCountryCodesForCallingCode(t);return r?r.filter(function(t){return function(t,d,e){var r=new n.Ay(e);if(r.selectNumberingPlan(d),r.numberingPlan.possibleLengths().indexOf(t.length)>=0)return!0;return!1}(d,t,e)}):[]}var $=e(9713),u=e(284),l=e(1528),c=/^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;var s={formatExtension:function(t,d,e){return\"\".concat(t).concat(e.ext()).concat(d)}};function f(t,d,e,r){if(e=e?function(){for(var t=1,d=arguments.length,e=new Array(d),n=0;n<d;n++)e[n]=arguments[n];for(;t<e.length;){if(e[t])for(var r in e[t])e[0][r]=e[t][r];t++}return e[0]}({},s,e):s,r=new n.Ay(r),t.country&&\"001\"!==t.country){if(!r.hasCountry(t.country))throw new Error(\"Unknown country: \".concat(t.country));r.selectNumberingPlan(t.country)}else{if(!t.countryCallingCode)return t.phone||\"\";r.selectNumberingPlan(t.countryCallingCode)}var i,a=r.countryCallingCode(),o=e.v2?t.nationalNumber:t.phone;switch(d){case\"NATIONAL\":return o?m(i=h(o,t.carrierCode,\"NATIONAL\",r,e),t.ext,r,e.formatExtension):\"\";case\"INTERNATIONAL\":return o?(i=h(o,null,\"INTERNATIONAL\",r,e),m(i=\"+\".concat(a,\" \").concat(i),t.ext,r,e.formatExtension)):\"+\".concat(a);case\"E.164\":return\"+\".concat(a).concat(o);case\"RFC3966\":return function(t){var d=t.number,e=t.ext;if(!d)return\"\";if(\"+\"!==d[0])throw new Error('\"formatRFC3966()\" expects \"number\" to be in E.164 format.');return\"tel:\".concat(d).concat(e?\";ext=\"+e:\"\")}({number:\"+\".concat(a).concat(o),ext:t.ext});case\"IDD\":if(!e.fromCountry)return;var $=function(t,d,e,r,i){var a=(0,n.Ko)(r,i.metadata);if(a===e){var o=h(t,d,\"NATIONAL\",i);return\"1\"===e?e+\" \"+o:o}var $=function(t,d,e){var r=new n.Ay(e);return r.selectNumberingPlan(t,d),r.defaultIDDPrefix()?r.defaultIDDPrefix():c.test(r.IDDPrefix())?r.IDDPrefix():void 0}(r,void 0,i.metadata);if($)return\"\".concat($,\" \").concat(e,\" \").concat(h(t,null,\"INTERNATIONAL\",i))}(o,t.carrierCode,a,e.fromCountry,r);return m($,t.ext,r,e.formatExtension);default:throw new Error('Unknown \"format\" argument passed to \"formatNumber()\": \"'.concat(d,'\"'))}}function h(t,d,e,n,r){var a,o,$=(a=n.formats(),o=t,function(t,d){for(var e=0;e<t.length;){if(d(t[e]))return t[e];e++}}(a,function(t){if(t.leadingDigitsPatterns().length>0){var d=t.leadingDigitsPatterns()[t.leadingDigitsPatterns().length-1];if(0!==o.search(d))return!1}return(0,i.A)(o,t.pattern())}));return $?(0,l.A)(t,$,{useInternationalFormat:\"INTERNATIONAL\"===e,withNationalPrefix:!$.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!r||!1!==r.nationalPrefix,carrierCode:d,metadata:n}):t}function m(t,d,e,n){return d?n(t,d,e):t}function g(t){return g=\"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},g(t)}function y(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 v(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?y(Object(e),!0).forEach(function(d){b(t,d,e[d])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):y(Object(e)).forEach(function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))})}return t}function b(t,d,e){return(d=C(d))in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}function p(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}function C(t){var d=function(t,d){if(\"object\"!=g(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=g(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==g(d)?d:d+\"\"}var N=function(){return t=function t(d,e,r){if(function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!d)throw new TypeError(\"First argument is required\");if(\"string\"!=typeof d)throw new TypeError(\"First argument must be a string\");if(\"+\"===d[0]&&!e)throw new TypeError(\"`metadata` argument not passed\");if((0,u.A)(e)&&(0,u.A)(e.countries)){r=e;var i=d;if(!S.test(i))throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');var a=(0,$.A)(i,void 0,void 0,void 0,r);if(d=a.countryCallingCode,!(e=a.number))throw new Error(\"Invalid `number` argument passed: too short\")}if(!e)throw new TypeError(\"`nationalNumber` argument is required\");if(\"string\"!=typeof e)throw new TypeError(\"`nationalNumber` argument must be a string\");(0,n.aR)(r);var o=function(t,d){var e,r,i=new n.Ay(d);return P(t)?(e=t,i.selectNumberingPlan(e),r=i.countryCallingCode()):r=t,{country:e,countryCallingCode:r}}(d,r),l=o.country,c=o.countryCallingCode;this.country=l,this.countryCallingCode=c,this.nationalNumber=e,this.number=\"+\"+this.countryCallingCode+this.nationalNumber,this.getMetadata=function(){return r}},(d=[{key:\"setExt\",value:function(t){this.ext=t}},{key:\"getPossibleCountries\",value:function(){return this.country?[this.country]:o(this.countryCallingCode,this.nationalNumber,this.getMetadata())}},{key:\"isPossible\",value:function(){return(0,r.A)(this,{v2:!0},this.getMetadata())}},{key:\"isValid\",value:function(){return function(t,d,e){if(d=d||{},(e=new n.Ay(e)).selectNumberingPlan(t.country,t.countryCallingCode),e.hasTypes())return void 0!==(0,a.A)(t,d,e.metadata);var r=d.v2?t.nationalNumber:t.phone;return(0,i.A)(r,e.nationalNumberPattern())}(this,{v2:!0},this.getMetadata())}},{key:\"isNonGeographic\",value:function(){return new n.Ay(this.getMetadata()).isNonGeographicCallingCode(this.countryCallingCode)}},{key:\"isEqual\",value:function(t){return this.number===t.number&&this.ext===t.ext}},{key:\"getType\",value:function(){return(0,a.A)(this,{v2:!0},this.getMetadata())}},{key:\"format\",value:function(t,d){return f(this,t,d?v(v({},d),{},{v2:!0}):{v2:!0},this.getMetadata())}},{key:\"formatNational\",value:function(t){return this.format(\"NATIONAL\",t)}},{key:\"formatInternational\",value:function(t){return this.format(\"INTERNATIONAL\",t)}},{key:\"getURI\",value:function(t){return this.format(\"RFC3966\",t)}}])&&p(t.prototype,d),e&&p(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}(),P=function(t){return/^[A-Z]{2}$/.test(t)};var S=/^\\+\\d+$/},283:function(t,d,e){e.d(d,{A:function(){return o}});var n=e(3247),r=e(4408),i=e(4573),a=e(1786);function o(t,d,e,o,$){var u=d||e?(0,n.Ko)(d||e,$):o;if(0===t.indexOf(u)){($=new n.Ay($)).selectNumberingPlan(d||e,u);var l=t.slice(u.length),c=(0,i.A)(l,d,$).nationalNumber,s=(0,i.A)(t,d,$).nationalNumber;if(!(0,r.A)(s,$.nationalNumberPattern())&&(0,r.A)(c,$.nationalNumberPattern())||\"TOO_LONG\"===(0,a.A)(s,d,$))return{countryCallingCode:u,number:l}}return{number:t}}},284:function(t,d,e){e.d(d,{A:function(){return r}});var n={}.constructor;function r(t){return null!=t&&t.constructor===n}},1135:function(t,d,e){e.d(d,{A:function(){return r}});var n=e(6128);function r(t){return t.replace(new RegExp(\"[\".concat(n.uD,\"]+\"),\"g\"),\" \").trim()}},1211:function(t,d){d.A={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-79]\\\\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)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\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-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|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])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[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[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|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(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|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(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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(?:[15]|28|4[14])|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]|2[23]\"],\"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|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\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|6[124-9]|7[125-9])\\\\d{6}\"]]],BJ:[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],BL:[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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]|9[02])\\\\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)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|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-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\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|3[0-4]|[89]9))\\\\d{4}\"]]],BT:[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|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|7[39])|9(?:0[25]|42))[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],CD:[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\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{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],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[02-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,12],[[\"(\\\\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,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],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{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\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(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[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)|2\\\\d{3}|3(?:(?:2\\\\d|50)\\\\d|3(?:[03467]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389]|9[0-8])|600)|646[59])|(?:(?:3[2-5]|[47][1-35]|5[1-3578]|6[13-57])\\\\d|8(?:0[1-8]|[1-9]\\\\d))\\\\d\\\\d|9(?:(?:10[01]|(?:[2458]\\\\d|7[1-9])\\\\d)\\\\d|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]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}\",[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|40))\\\\d{6}\",[9]]]],CN:[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|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(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"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])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[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\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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,10,11,12],[[\"(\\\\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,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],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{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"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,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{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[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],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-3])|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(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\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,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?: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,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|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{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"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|180020\",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]|49|5[6-8])|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(?:0(?:0(?:1[09]|70)|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}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-4])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],GF:[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|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])|7093[0-3])\\\\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|180020\",\"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,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\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|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],GU:[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-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[478])|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-39]|70))\\\\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[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:3[0-4]|4[0-48]|6[0-5]))|5(?:35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-25])|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])|70[1-59]|84[0-39]|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\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{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\",[\"6|7[245]\"],\"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-57]\"],\"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|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],HT:[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\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]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\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,[\"55(?:4(?:0[0-2]|[16]0|5[0-7])|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[34]|5[0-25689]|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|180020\",\"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|8(?:28[235-7]|3))|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])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|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,[\"(?:6(?:1279|828[01489])|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])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|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-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|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,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\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]|43\"]],[\"(\\\\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\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],JE:[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\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|427|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\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],JP:[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-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)|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])|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])|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\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[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-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],KG:[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[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]|9(?:12|9[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\",[\"[36]0|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[0-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|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|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,\"33622|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\",[\"3\"],\"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(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,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-6]|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,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\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\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\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\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[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]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",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|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-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{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],MC:[\"377\",\"00\",\"(?:[3489]|[67]\\\\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\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\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|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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-46-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[35-8])\\\\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-478]\\\\d|6[01])|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[0-3]|[679]\\\\d|8[2-59])\\\\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\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"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,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|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|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"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[67]\\\\d\\\\d|7091[0-3])\\\\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-6]|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]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?: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]|[267][1-9]|3[1-8]|[45]\\\\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-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\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[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\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-7]))|(?:[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,[\"(?:[579]\\\\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[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[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\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\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]|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(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],NR:[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],NU:[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],NZ:[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[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[1-48])\\\\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-247]\\\\d|3[0-79]|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,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],PM:[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\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-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\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(?:[049]\\\\d|3[034]))\\\\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]|78)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-7])\"],\"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]|7[1-6]|8[1-7]|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[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],RE:[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],RO:[\"40\",\"00\",\"(?:[236-8]\\\\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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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,0,[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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],SA:[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[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{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],SB:[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|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]\",\"(?:[2489]\\\\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,12],[[\"(\\\\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-9]|[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,[\"89(?:8[02-9]|90)\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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[1-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(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\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]|[6-8]\\\\d|90)\\\\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-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-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\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:00[0-4]|100)|[67]\\\\d{3})\\\\d{4}\",[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-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\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[5-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|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[56])\\\\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[0-29]|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,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],TJ:[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\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|71)\\\\d{6}\",[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\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"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-8])\\\\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,[\"(?:5(?:4[0-5]|5[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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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,[\"(?:6[125-9]|7[13-9])\\\\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,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|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,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|36|9[0-2589])\\\\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,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|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-57-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]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|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-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],UY:[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],UZ:[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[78]|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])))|7(?:[07]\\\\d{3}|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]))|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}\"]]],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,12],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[246])\\\\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\\\\d|10|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\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-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],XK:[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\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\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"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\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\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)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|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|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\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(?:[1278]\\\\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}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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,[\"348[57]\\\\d{7}\",[11]],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[0-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}\"]]]}}},1459:function(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,i,a,o=n.length-1,$=o>0&&n[o];if(d.nationalPrefixTransformRule()&&$)r=t.replace(e,d.nationalPrefixTransformRule()),o>1&&(i=n[1]);else{var u=n[0];r=t.slice(u.length),$&&(i=n[1])}if($){var l=t.indexOf(n[1]);t.slice(0,l)===d.numberingPlan.nationalPrefix()&&(a=d.numberingPlan.nationalPrefix())}else a=n[0];return{nationalNumber:r,nationalPrefix:a,carrierCode:i}}}return{nationalNumber:t}}e.d(d,{A:function(){return n}})},1528:function(t,d,e){e.d(d,{A:function(){return i},_:function(){return r}});var n=e(1135),r=/(\\$\\d)/;function i(t,d,e){var i=e.useInternationalFormat,a=e.withNationalPrefix,o=(e.carrierCode,e.metadata,t.replace(new RegExp(d.pattern()),i?d.internationalFormat():a&&d.nationalPrefixFormattingRule()?d.format().replace(r,d.nationalPrefixFormattingRule()):d.format()));return i?(0,n.A)(o):o}},1786:function(t,d,e){e.d(d,{A:function(){return a}});var n=e(3247);function r(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){if(\"string\"==typeof t)return i(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?i(t,d):void 0}}(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=Array(d);e<d;e++)n[e]=t[e];return n}function a(t,d,e){return o(t,d,void 0,e)}function o(t,d,e,i){d&&(i=new n.Ay(i.metadata)).selectNumberingPlan(d);var a=i.type(e),$=a&&a.possibleLengths()||i.possibleLengths();if(!$)return\"IS_POSSIBLE\";if(\"FIXED_LINE_OR_MOBILE\"===e){if(!i.type(\"FIXED_LINE\"))return o(t,d,\"MOBILE\",i);var u=i.type(\"MOBILE\");u&&($=function(t,d){for(var e,n=t.slice(),i=r(d);!(e=i()).done;){var a=e.value;t.indexOf(a)<0&&n.push(a)}return n.sort(function(t,d){return t-d})}($,u.possibleLengths()))}else if(e&&!a)return\"INVALID_LENGTH\";var l=t.length,c=$[0];return c===l?\"IS_POSSIBLE\":c>l?\"TOO_SHORT\":$[$.length-1]<l?\"TOO_LONG\":$.indexOf(l,1)>=0?\"IS_POSSIBLE\":\"INVALID_LENGTH\"}},2582:function(t,d,e){e.d(d,{A:function(){return i},x:function(){return a}});var n=e(3247),r=e(1786);function i(t,d,e){if(void 0===d&&(d={}),e=new n.Ay(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.selectNumberingPlan(t.country)}else{if(!t.countryCallingCode)throw new Error(\"Invalid phone number object passed\");e.selectNumberingPlan(t.countryCallingCode)}}if(e.possibleLengths())return a(t.phone||t.nationalNumber,t.country,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 a(t,d,e){return\"IS_POSSIBLE\"===(0,r.A)(t,d,e)}},3247:function(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 i=Number(e[r]),a=Number(n[r]);if(i>a)return 1;if(a>i)return-1;if(!isNaN(i)&&isNaN(a))return 1;if(isNaN(i)&&!isNaN(a))return-1}return t[1]&&d[1]?t[1]>d[1]?1:t[1]<d[1]?-1:0:!t[1]&&d[1]?1:t[1]&&!d[1]?-1:0}e.d(d,{Ay:function(){return s},Ko:function(){return p},aR:function(){return v}});var r=e(284);function i(t){return i=\"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},i(t)}function a(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}function o(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,u(n.key),n)}}function $(t,d,e){return d&&o(t.prototype,d),e&&o(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}function u(t){var d=function(t,d){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==i(d)?d:d+\"\"}var l=\" ext. \",c=/^\\d+$/,s=function(){return $(function t(d){a(this,t),v(d),this.metadata=d,C.call(this,d)},[{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&&c.test(t)&&(d=t,t=null),t&&\"001\"!==t){if(!this.hasCountry(t))throw new Error(\"Unknown country: \".concat(t));this.numberingPlan=new f(this.getCountryMetadata(t),this)}else if(d){if(!this.hasCallingCode(d))throw new Error(\"Unknown calling code: \".concat(d));this.numberingPlan=new f(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}}])}(),f=function(){return $(function t(d,e){a(this,t),this.globalMetadataObject=e,this.metadata=d,C.call(this,e.metadata)},[{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 h(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()&&y(this.types(),t))return new g(y(this.types(),t),this)}},{key:\"ext\",value:function(){return this.v1||this.v2?l:this.metadata[13]||l}}])}(),h=function(){return $(function t(d,e){a(this,t),this._format=d,this.metadata=e},[{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()||m.test(this.nationalPrefixFormattingRule()))}},{key:\"internationalFormat\",value:function(){return this._format[5]||this.format()}}])}(),m=/^\\(?\\$1\\)?$/,g=function(){return $(function t(d,e){a(this,t),this.type=d,this.metadata=e},[{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()}}])}();function y(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]}}function v(t){if(!t)throw new Error(\"[libphonenumber-js] `metadata` argument not passed. Check your arguments.\");if(!(0,r.A)(t)||!(0,r.A)(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((0,r.A)(t)?\"an object of shape: { \"+Object.keys(t).join(\", \")+\" }\":\"a \"+b(t)+\": \"+t,\".\"))}var b=function(t){return i(t)};function p(t,d){if((d=new s(d)).hasCountry(t))return d.selectNumberingPlan(t).countryCallingCode();throw new Error(\"Unknown country: \".concat(t))}function C(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}},3578:function(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){if(\"string\"==typeof t)return r(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(t,d):void 0}}(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=Array(d);e<d;e++)n[e]=t[e];return n}e.d(d,{Ay:function(){return o},ZW:function(){return a}});var i={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\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\"};function a(t){return i[t]}function o(t){for(var d,e=\"\",r=n(t.split(\"\"));!(d=r()).done;){var i=a(d.value);i&&(e+=i)}return e}},4408:function(t,d,e){function n(t,d){return t=t||\"\",new RegExp(\"^(?:\"+d+\")$\").test(t)}e.d(d,{A:function(){return n}})},4573:function(t,d,e){e.d(d,{A:function(){return o}});var n=e(1459),r=e(4408),i=e(1786),a=e(9495);function o(t,d,e){var o=(0,n.A)(t,e),$=o.carrierCode,u=o.nationalNumber;if(u!==t){if(!function(t,d,e){if((0,r.A)(t,e.nationalNumberPattern())&&!(0,r.A)(d,e.nationalNumberPattern()))return!1;return!0}(t,u,e))return{nationalNumber:t};if(e.numberingPlan.possibleLengths()&&(d||(d=(0,a.A)(e.numberingPlan.callingCode(),{nationalNumber:u,metadata:e})),!function(t,d,e){switch((0,i.A)(t,d,e)){case\"TOO_SHORT\":case\"INVALID_LENGTH\":return!1;default:return!0}}(u,d,e)))return{nationalNumber:t}}return{nationalNumber:u,carrierCode:$}}},4701:function(t,d){d.A={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:\"0195123456\",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:\"34412345\",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:\"60123456\",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:\"2221234567\",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\"}},4724:function(t,d,e){e.d(d,{Q:function(){return bt}});var n=e(1211),r=e(3247),i=e(96);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 o(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,$(n.key),n)}}function $(t){var d=function(t,d){if(\"object\"!=a(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==a(d)?d:d+\"\"}var u=function(){return t=function t(d){var e=d.onCountryChange,n=d.onCallingCodeChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.onCountryChange=e,this.onCallingCodeChange=n},(d=[{key:\"reset\",value:function(t){var d=t.country,e=t.callingCode;this.international=!1,this.missingPlus=!1,this.IDDPrefix=void 0,this.callingCode=void 0,this.digits=\"\",this.resetNationalSignificantNumber(),this.initCountryAndCallingCode(d,e)}},{key:\"resetNationalSignificantNumber\",value:function(){this.nationalSignificantNumber=this.getNationalDigits(),this.nationalSignificantNumberIsModified=!1,this.nationalPrefix=void 0,this.carrierCode=void 0,this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix=void 0}},{key:\"update\",value:function(t){for(var d=0,e=Object.keys(t);d<e.length;d++){var n=e[d];this[n]=t[n]}}},{key:\"initCountryAndCallingCode\",value:function(t,d){this.setCountry(t),this.setCallingCode(d)}},{key:\"setCountry\",value:function(t){this.country=t,this.onCountryChange(t)}},{key:\"setCallingCode\",value:function(t){this.callingCode=t,this.onCallingCodeChange(t,this.country)}},{key:\"startInternationalNumber\",value:function(t,d){this.international=!0,this.initCountryAndCallingCode(t,d)}},{key:\"appendDigits\",value:function(t){this.digits+=t}},{key:\"appendNationalSignificantNumberDigits\",value:function(t){this.nationalSignificantNumber+=t}},{key:\"getNationalDigits\",value:function(){return this.international?this.digits.slice((this.IDDPrefix?this.IDDPrefix.length:0)+(this.callingCode?this.callingCode.length:0)):this.digits}},{key:\"getDigitsWithoutInternationalPrefix\",value:function(){return this.international&&this.IDDPrefix?this.digits.slice(this.IDDPrefix.length):this.digits}}])&&o(t.prototype,d),e&&o(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}();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){if(\"string\"==typeof t)return c(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?c(t,d):void 0}}(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 c(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}var s=\"x\",f=new RegExp(s);function h(t,d){if(d<1)return\"\";for(var e=\"\";d>1;)1&d&&(e+=t),d>>=1,t+=t;return e+t}function m(t,d){return\")\"===t[d]&&d++,function(t){var d=[],e=0;for(;e<t.length;)\"(\"===t[e]?d.push(e):\")\"===t[e]&&d.pop(),e++;var n=0,r=\"\";d.push(t.length);for(var i=0,a=d;i<a.length;i++){var o=a[i];r+=t.slice(n,o),n=o+1}return r}(t.slice(0,d))}var g=e(1786),y=e(3578),v=e(1528);function b(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,i=e.getSeparatorAfterNationalPrefix;if(new RegExp(\"^(?:\".concat(d.pattern(),\")$\")).test(t.nationalSignificantNumber))return function(t,d,e){var n=e.metadata,r=e.shouldTryNationalPrefixFormattingRule,i=e.getSeparatorAfterNationalPrefix;t.nationalSignificantNumber,t.international,t.nationalPrefix,t.carrierCode;if(r(d)){var a=p(t,d,{useNationalPrefixFormattingRule:!0,getSeparatorAfterNationalPrefix:i,metadata:n});if(a)return a}return p(t,d,{useNationalPrefixFormattingRule:!1,getSeparatorAfterNationalPrefix:i,metadata:n})}(t,d,{metadata:n,shouldTryNationalPrefixFormattingRule:r,getSeparatorAfterNationalPrefix:i})}function p(t,d,e){var n=e.metadata,r=e.useNationalPrefixFormattingRule,i=e.getSeparatorAfterNationalPrefix,a=(0,v.A)(t.nationalSignificantNumber,d,{carrierCode:t.carrierCode,useInternationalFormat:t.international,withNationalPrefix:r,metadata:n});if(r||(t.nationalPrefix?a=t.nationalPrefix+i(d)+a:t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix&&(a=t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix+\" \"+a)),function(t,d){return(0,y.Ay)(t)===d.getNationalDigits()}(a,t))return a}function C(t){return C=\"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},C(t)}function N(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,P(n.key),n)}}function P(t){var d=function(t,d){if(\"object\"!=C(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=C(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==C(d)?d:d+\"\"}var S=function(){return t=function t(){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t)},(d=[{key:\"parse\",value:function(t){if(this.context=[{or:!0,instructions:[]}],this.parsePattern(t),1!==this.context.length)throw new Error(\"Non-finalized contexts left when pattern parse ended\");var d=this.context[0],e=d.branches,n=d.instructions;if(e)return{op:\"|\",args:e.concat([O(n)])};if(0===n.length)throw new Error(\"Pattern is required\");return 1===n.length?n[0]:n}},{key:\"startContext\",value:function(t){this.context.push(t)}},{key:\"endContext\",value:function(){this.context.pop()}},{key:\"getContext\",value:function(){return this.context[this.context.length-1]}},{key:\"parsePattern\",value:function(t){if(!t)throw new Error(\"Pattern is required\");var d=t.match(x);if(d){var e=d[1],n=t.slice(0,d.index),r=t.slice(d.index+e.length);switch(e){case\"(?:\":n&&this.parsePattern(n),this.startContext({or:!0,instructions:[],branches:[]});break;case\")\":if(!this.getContext().or)throw new Error('\")\" operator must be preceded by \"(?:\" operator');if(n&&this.parsePattern(n),0===this.getContext().instructions.length)throw new Error('No instructions found after \"|\" operator in an \"or\" group');var i=this.getContext().branches;i.push(O(this.getContext().instructions)),this.endContext(),this.getContext().instructions.push({op:\"|\",args:i});break;case\"|\":if(!this.getContext().or)throw new Error('\"|\" operator can only be used inside \"or\" groups');if(n&&this.parsePattern(n),!this.getContext().branches){if(1!==this.context.length)throw new Error('\"branches\" not found in an \"or\" group context');this.getContext().branches=[]}this.getContext().branches.push(O(this.getContext().instructions)),this.getContext().instructions=[];break;case\"[\":n&&this.parsePattern(n),this.startContext({oneOfSet:!0});break;case\"]\":if(!this.getContext().oneOfSet)throw new Error('\"]\" operator must be preceded by \"[\" operator');this.endContext(),this.getContext().instructions.push({op:\"[]\",args:A(n)});break;default:throw new Error(\"Unknown operator: \".concat(e))}r&&this.parsePattern(r)}else{if(w.test(t))throw new Error(\"Illegal characters found in a pattern: \".concat(t));this.getContext().instructions=this.getContext().instructions.concat(t.split(\"\"))}}}])&&N(t.prototype,d),e&&N(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}();function A(t){for(var d=[],e=0;e<t.length;){if(\"-\"===t[e]){if(0===e||e===t.length-1)throw new Error(\"Couldn't parse a one-of set pattern: \".concat(t));for(var n=t[e-1].charCodeAt(0)+1,r=t[e+1].charCodeAt(0)-1,i=n;i<=r;)d.push(String.fromCharCode(i)),i++}else d.push(t[e]);e++}return d}var w=/[\\(\\)\\[\\]\\?\\:\\|]/,x=new RegExp(\"(\\\\||\\\\(\\\\?\\\\:|\\\\)|\\\\[|\\\\])\");function O(t){return 1===t.length?t[0]:t}function I(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){if(\"string\"==typeof t)return E(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?E(t,d):void 0}}(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 E(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function T(t){return T=\"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},T(t)}function F(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,M(n.key),n)}}function M(t){var d=function(t,d){if(\"object\"!=T(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=T(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==T(d)?d:d+\"\"}var k=function(){return t=function t(d){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.matchTree=(new S).parse(d)},d=[{key:\"match\",value:function(t){var d=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error(\"String is required\");var e=D(t.split(\"\"),this.matchTree,!0);if(e&&e.match&&delete e.matchedChars,!e||!e.overflow||d)return e}}],d&&F(t.prototype,d),e&&F(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}();function D(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(),i=0;i<d.length;){var a=D(r,d[i],e&&i===d.length-1);if(!a)return;if(a.overflow)return a;if(!a.match){if(a.partialMatch)return{partialMatch:!0};throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(a,null,2)))}if(0===(r=r.slice(a.matchedChars.length)).length)return i===d.length-1?{match:!0,matchedChars:t}:{partialMatch:!0};i++}return e?{overflow:!0}:{match:!0,matchedChars:t.slice(0,t.length-r.length)}}switch(d.op){case\"|\":for(var o,$,u=I(d.args);!($=u()).done;){var l=D(t,$.value,e);if(l){if(l.overflow)return l;if(l.match)return{match:!0,matchedChars:l.matchedChars};if(!l.partialMatch)throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(l,null,2)));o=!0}}return o?{partialMatch:!0}:void 0;case\"[]\":for(var c,s=I(d.args);!(c=s()).done;){var f=c.value;if(t[0]===f)return 1===t.length?{match:!0,matchedChars:t}:e?{overflow:!0}:{match:!0,matchedChars:[f]}}return;default:throw new Error(\"Unsupported instruction tree: \".concat(d))}}var R=e(6128),L=e(1135);function j(t){return j=\"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},j(t)}function G(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){if(\"string\"==typeof t)return B(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?B(t,d):void 0}}(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 B(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function _(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,U(n.key),n)}}function U(t){var d=function(t,d){if(\"object\"!=j(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=j(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==j(d)?d:d+\"\"}var K=h(\"9\",15),W=/[- ]/,H=function(){return/\\[([^\\[\\]])*\\]/g},V=function(){return/\\d(?=[^,}][^,}])/g},Z=new RegExp(\"[\"+R.uD+\"]*\\\\$1[\"+R.uD+\"]*(\\\\$\\\\d[\"+R.uD+\"]*)*$\"),Y=function(){return t=function t(d){d.state;var e=d.metadata;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=e,this.resetFormat()},(d=[{key:\"resetFormat\",value:function(){this.chosenFormat=void 0,this.template=void 0,this.nationalNumberTemplate=void 0,this.populatedNationalNumberTemplate=void 0,this.populatedNationalNumberTemplatePosition=-1}},{key:\"reset\",value:function(t,d){this.resetFormat(),t?(this.isNANP=\"1\"===t.callingCode(),this.matchingFormats=t.formats(),d.nationalSignificantNumber&&this.narrowDownMatchingFormats(d)):(this.isNANP=void 0,this.matchingFormats=[])}},{key:\"format\",value:function(t,d){var e,n,r,i=this;if(e=d.nationalSignificantNumber,n=d.country,r=this.metadata,\"IS_POSSIBLE\"===(0,g.A)(e,n,r))for(var a,o=G(this.matchingFormats);!(a=o()).done;){var $=a.value,u=b(d,$,{metadata:this.metadata,shouldTryNationalPrefixFormattingRule:function(t){return i.shouldTryNationalPrefixFormattingRule(t,{international:d.international,nationalPrefix:d.nationalPrefix})},getSeparatorAfterNationalPrefix:function(t){return i.getSeparatorAfterNationalPrefix(t)}});if(u)return this.resetFormat(),this.chosenFormat=$,this.setNationalNumberTemplate(u.replace(/\\d/g,s),d),this.populatedNationalNumberTemplate=u,this.populatedNationalNumberTemplatePosition=this.template.lastIndexOf(s),u}return this.formatNationalNumberWithNextDigits(t,d)}},{key:\"formatNationalNumberWithNextDigits\",value:function(t,d){var e=this.chosenFormat,n=this.chooseFormat(d);if(n)return n===e?this.formatNextNationalNumberDigits(t):this.formatNextNationalNumberDigits(d.getNationalDigits())}},{key:\"narrowDownMatchingFormats\",value:function(t){var d=this,e=t.nationalSignificantNumber,n=t.nationalPrefix,r=t.international,i=e,a=i.length-3;a<0&&(a=0),this.matchingFormats=this.matchingFormats.filter(function(t){return d.formatSuits(t,r,n)&&d.formatMatches(t,i,a)}),this.chosenFormat&&-1===this.matchingFormats.indexOf(this.chosenFormat)&&this.resetFormat()}},{key:\"formatSuits\",value:function(t,d,e){return!(e&&!t.usesNationalPrefix()&&!t.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!d&&!e&&t.nationalPrefixIsMandatoryWhenFormattingInNationalFormat())}},{key:\"formatMatches\",value:function(t,d,e){var n=t.leadingDigitsPatterns().length;if(0===n)return!0;e=Math.min(e,n-1);var r=t.leadingDigitsPatterns()[e];if(d.length<3)try{return void 0!==new k(r).match(d,{allowOverflow:!0})}catch(t){return console.error(t),!0}return new RegExp(\"^(\".concat(r,\")\")).test(d)}},{key:\"getFormatFormat\",value:function(t,d){return d?t.internationalFormat():t.format()}},{key:\"chooseFormat\",value:function(t){for(var d,e=this,n=function(){var n=d.value;return e.chosenFormat===n?0:Z.test(e.getFormatFormat(n,t.international))?e.createTemplateForFormat(n,t)?(e.chosenFormat=n,0):(e.matchingFormats=e.matchingFormats.filter(function(t){return t!==n}),1):1},r=G(this.matchingFormats.slice());!(d=r()).done&&0!==n(););return this.chosenFormat||this.resetFormat(),this.chosenFormat}},{key:\"createTemplateForFormat\",value:function(t,d){if(!(t.pattern().indexOf(\"|\")>=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()&&W.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<n.length+t.getDigitsWithoutInternationalPrefix().length;)d=this.template.indexOf(s,d+1),e++;return m(this.template,d+1)}}},{key:\"setNationalNumberTemplate\",value:function(t,d){this.nationalNumberTemplate=t,this.populatedNationalNumberTemplate=t,this.populatedNationalNumberTemplatePosition=-1,d.international?this.template=this.getInternationalPrefixBeforeCountryCallingCode(d).replace(/[\\d\\+]/g,s)+h(s,d.callingCode.length)+\" \"+t:this.template=t}},{key:\"getTemplateForFormat\",value:function(t,d){var e=d.nationalSignificantNumber,n=d.international,r=d.nationalPrefix,i=d.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,a=t.pattern();a=a.replace(H(),\"\\\\d\").replace(V(),\"\\\\d\");var o=K.match(a)[0];if(!(e.length>o.length)){var $=new RegExp(\"^\"+a+\"$\"),u=e.replace(/\\d/g,\"9\");$.test(u)&&(o=u);var l,c=this.getFormatFormat(t,n);if(this.shouldTryNationalPrefixFormattingRule(t,{international:n,nationalPrefix:r})){var f=c.replace(v._,t.nationalPrefixFormattingRule());if((0,y.Ay)(t.nationalPrefixFormattingRule())===(r||\"\")+(0,y.Ay)(\"$1\")&&(c=f,l=!0,r))for(var m=r.length;m>0;)c=c.replace(/\\d/,s),m--}var g=o.replace(new RegExp(a),c).replace(new RegExp(\"9\",\"g\"),s);return l||(i?g=h(s,i.length)+\" \"+g:r&&(g=h(s,r.length)+this.getSeparatorAfterNationalPrefix(t)+g)),n&&(g=(0,L.A)(g)),g}}},{key:\"formatNextNationalNumberDigits\",value:function(t){var d=function(t,d,e){for(var n,r=l(e.split(\"\"));!(n=r()).done;){var i=n.value;if(t.slice(d+1).search(f)<0)return;d=t.search(f),t=t.replace(f,i)}return[t,d]}(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition,t);if(d)return this.populatedNationalNumberTemplate=d[0],this.populatedNationalNumberTemplatePosition=d[1],m(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}}}])&&_(t.prototype,d),e&&_(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}(),J=e(9713),X=e(283),Q=e(1459),q=e(6890);function z(t){return z=\"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},z(t)}function tt(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){var n,r,i,a,o=[],$=!0,u=!1;try{if(i=(e=e.call(t)).next,0===d){if(Object(e)!==e)return;$=!1}else for(;!($=(n=i.call(e)).done)&&(o.push(n.value),o.length!==d);$=!0);}catch(t){u=!0,r=t}finally{try{if(!$&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(u)throw r}}return o}}(t,d)||function(t,d){if(t){if(\"string\"==typeof t)return dt(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?dt(t,d):void 0}}(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 dt(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function et(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,nt(n.key),n)}}function nt(t){var d=function(t,d){if(\"object\"!=z(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=z(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==z(d)?d:d+\"\"}var rt=\"[\"+R.uD+R.OA+\"]+\",it=new RegExp(\"^\"+rt+\"$\",\"i\"),at=\"(?:[\"+R.tz+\"][\"+R.uD+R.OA+\"]*|[\"+R.uD+R.OA+\"]+)\",ot=new RegExp(\"[^\"+R.uD+R.OA+\"]+.*$\"),$t=/[^\\d\\[\\]]/,ut=function(){return t=function t(d){var e=d.defaultCountry,n=d.defaultCallingCode,r=d.metadata,i=d.onNationalSignificantNumberChange;!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.defaultCountry=e,this.defaultCallingCode=n,this.metadata=r,this.onNationalSignificantNumberChange=i},(d=[{key:\"input\",value:function(t,d){var e,n=function(t){var d=function(t){var d=function(t){var d,e=t.search(at);if(!(e<0))return\"+\"===(t=t.slice(e))[0]&&(d=!0,t=t.slice(1)),t=t.replace(ot,\"\"),d&&(t=\"+\"+t),t}(t)||\"\";return\"+\"===d[0]?[d.slice(1),!0]:[d]}(t),e=tt(d,2),n=e[0],r=e[1];return it.test(n)||(n=\"\"),[n,r]}(t),r=tt(n,2),i=r[0],a=r[1],o=(0,y.Ay)(i);return a&&(d.digits||(d.startInternationalNumber(void 0,void 0),o||(e=!0))),o&&this.inputDigits(o,d),{digits:o,justLeadingPlus:e}}},{key:\"inputDigits\",value:function(t,d){var e=d.digits,n=e.length<3&&e.length+t.length>=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,J.A)(\"+\"+t.getDigitsWithoutInternationalPrefix(),t.country,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&&$t.test(d)}else this.hasSelectedNumberingPlan=void 0,this.couldPossiblyExtractAnotherNationalSignificantNumber=void 0}},{key:\"extractNationalSignificantNumber\",value:function(t,d){if(this.hasSelectedNumberingPlan){var e=(0,Q.A)(t,this.metadata),n=e.nationalPrefix,r=e.nationalNumber,i=e.carrierCode;if(r!==t)return this.onExtractedNationalNumber(n,i,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,Q.A)(t,this.metadata),r=n.nationalPrefix,i=n.nationalNumber,a=n.carrierCode;if(i!==d)return this.onExtractedNationalNumber(r,a,i,t,e),!0}}},{key:\"onExtractedNationalNumber\",value:function(t,d,e,n,r){var i,a=!1,o=n.lastIndexOf(e);if(o<0||o!==n.length-e.length)a=!0;else{var $=n.slice(0,o);$&&$!==t&&(i=$)}r({nationalPrefix:t,carrierCode:d,nationalSignificantNumber:e,nationalSignificantNumberIsModified:a,prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix:i}),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,q.A)(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,X.A)(t.digits,t.country,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata).countryCallingCode;if(d)return t.update({missingPlus:!0}),this.startInternationalNumber(t,{country:t.country,callingCode:d}),!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)})}}])&&et(t.prototype,d),e&&et(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}();var lt=e(9495),ct=e(6111),st=e(284);function ft(t){return ft=\"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},ft(t)}function ht(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){var n,r,i,a,o=[],$=!0,u=!1;try{if(i=(e=e.call(t)).next,0===d){if(Object(e)!==e)return;$=!1}else for(;!($=(n=i.call(e)).done)&&(o.push(n.value),o.length!==d);$=!0);}catch(t){u=!0,r=t}finally{try{if(!$&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(u)throw r}}return o}}(t,d)||function(t,d){if(t){if(\"string\"==typeof t)return mt(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?mt(t,d):void 0}}(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 mt(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function gt(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,yt(n.key),n)}}function yt(t){var d=function(t,d){if(\"object\"!=ft(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=ft(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==ft(d)?d:d+\"\"}var vt=function(){return t=function t(d,e){!function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.metadata=new r.Ay(e);var n=ht(this.getCountryAndCallingCode(d),2),i=n[0],a=n[1];this.defaultCountry=i,this.defaultCallingCode=a,this.reset()},(d=[{key:\"getCountryAndCallingCode\",value:function(t){var d,e;return t&&((0,st.A)(t)?(d=t.defaultCountry,e=t.defaultCallingCode):d=t),d&&!this.metadata.hasCountry(d)&&(d=void 0),[d,e]}},{key:\"input\",value:function(t){var d=this.parser.input(t,this.state),e=d.digits;if(d.justLeadingPlus)this.formattedOutput=\"+\";else if(e){var n;if(this.determineTheCountryIfNeeded(),this.state.nationalSignificantNumber&&this.formatter.narrowDownMatchingFormats(this.state),this.metadata.hasSelectedNumberingPlan()&&(n=this.formatter.format(e,this.state)),void 0===n&&this.parser.reExtractNationalSignificantNumber(this.state)){this.determineTheCountryIfNeeded();var r=this.state.getNationalDigits();r&&(n=this.formatter.format(r,this.state))}this.formattedOutput=n?this.getFullNumber(n):this.getNonFormattedNumber()}return this.formattedOutput}},{key:\"reset\",value:function(){var t=this;return this.state=new u({onCountryChange:function(d){t.country=d},onCallingCodeChange:function(d,e){t.metadata.selectNumberingPlan(e,d),t.formatter.reset(t.metadata.numberingPlan,t.state),t.parser.reset(t.metadata.numberingPlan)}}),this.formatter=new Y({state:this.state,metadata:this.metadata}),this.parser=new ut({defaultCountry:this.defaultCountry,defaultCallingCode:this.defaultCallingCode,metadata:this.metadata,state:this.state,onNationalSignificantNumberChange:function(){t.determineTheCountryIfNeeded(),t.formatter.reset(t.metadata.numberingPlan,t.state)}}),this.state.reset({country:this.defaultCountry,callingCode:this.defaultCallingCode}),this.formattedOutput=\"\",this}},{key:\"isInternational\",value:function(){return this.state.international}},{key:\"getCallingCode\",value:function(){if(this.isInternational())return this.state.callingCode}},{key:\"getCountryCallingCode\",value:function(){return this.getCallingCode()}},{key:\"getCountry\",value:function(){if(this.state.digits)return this._getCountry()}},{key:\"_getCountry\",value:function(){var t=this.state.country;return t}},{key:\"determineTheCountryIfNeeded\",value:function(){this.state.country&&!this.isCountryCallingCodeAmbiguous()||this.determineTheCountry()}},{key:\"getFullNumber\",value:function(t){var d=this;if(this.isInternational()){var e=function(t){return d.formatter.getInternationalPrefixBeforeCountryCallingCode(d.state,{spacing:!!t})+t},n=this.state.callingCode;return e(n?t?\"\".concat(n,\" \").concat(t):n:\"\".concat(this.state.getDigitsWithoutInternationalPrefix()))}return t}},{key:\"getNonFormattedNationalNumberWithPrefix\",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,n=t.nationalPrefix,r=d,i=e||n;return i&&(r=i+r),r}},{key:\"getNonFormattedNumber\",value:function(){var t=this.state.nationalSignificantNumberIsModified;return this.getFullNumber(t?this.state.getNationalDigits():this.getNonFormattedNationalNumberWithPrefix())}},{key:\"getNonFormattedTemplate\",value:function(){var t=this.getNonFormattedNumber();if(t)return t.replace(/[\\+\\d]/g,s)}},{key:\"isCountryCallingCodeAmbiguous\",value:function(){var t=this.state.callingCode,d=this.metadata.getCountryCodesForCallingCode(t);return d&&d.length>1}},{key:\"determineTheCountry\",value:function(){this.state.setCountry((0,lt.A)(this.isInternational()?this.state.callingCode:this.defaultCallingCode,{nationalNumber:this.state.nationalSignificantNumber,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,a=this._getCountry();if(d&&(a||n)){if(a&&a===this.defaultCountry){var o=new r.Ay(this.metadata.metadata);o.selectNumberingPlan(a);var $=o.numberingPlan.callingCode(),u=this.metadata.getCountryCodesForCallingCode($);if(u.length>1){var l=(0,ct.A)(d,{countries:u,metadata:this.metadata.metadata});l&&(a=l)}}var c=new i.A(a||n,d,this.metadata.metadata);return e&&(c.carrierCode=e),c}}},{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()||\"\"}}])&&gt(t.prototype,d),e&&gt(t,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,d,e}();function bt(t){return vt.call(this,t,n.A)}bt.prototype=Object.create(vt.prototype,{}),bt.prototype.constructor=bt},5693:function(t,d,e){e.d(d,{A:function(){return r}});var n=e(1211);function r(t,d){var e=Array.prototype.slice.call(d);return e.push(n.A),t.apply(this,e)}},6111:function(t,d,e){e.d(d,{A:function(){return o}});var n=e(3247),r=e(9710);function i(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){if(\"string\"==typeof t)return a(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(t,d):void 0}}(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 a(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function o(t,d){var e=d.countries,a=d.metadata;a=new n.Ay(a);for(var o,$=i(e);!(o=$()).done;){var u=o.value;if(a.selectNumberingPlan(u),a.leadingDigits()){if(t&&0===t.search(a.leadingDigits()))return u}else if((0,r.A)({phone:t,country:u},void 0,a.metadata))return u}}},6128:function(t,d,e){e.d(d,{Cb:function(){return r},Jq:function(){return i},OA:function(){return a},c7:function(){return n},tz:function(){return $},uD:function(){return o}});var n=2,r=17,i=3,a=\"0-9０-９٠-٩۰-۹\",o=\"\".concat(\"-‐-―−ー－\").concat(\"／/\").concat(\"．.\").concat(\"  ­​⁠　\").concat(\"()（）［］\\\\[\\\\]\").concat(\"~⁓∼～\"),$=\"+＋\"},6187:function(t,d,e){e.d(d,{a:function(){return a}});var n=e(5693),r=e(96);function i(t,d,e){if(d[t])return new r.A(t,d[t],e)}function a(){return(0,n.A)(i,arguments)}},6890:function(t,d,e){e.d(d,{A:function(){return a}});var n=e(3247),r=e(6128),i=new RegExp(\"([\"+r.OA+\"])\");function a(t,d,e,r){if(d){var a=new n.Ay(r);a.selectNumberingPlan(d,e);var o=new RegExp(a.IDDPrefix());if(0===t.search(o)){var $=(t=t.slice(t.match(o)[0].length)).match(i);if(!($&&null!=$[1]&&$[1].length>0&&\"0\"===$[1]))return t}}}},8892:function(t,d,e){e.d(d,{L:function(){return ot}});var n=e(5693),r=e(6128);function i(t){return i=\"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},i(t)}function a(t,d){for(var e=0;e<d.length;e++){var n=d[e];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,o(n.key),n)}}function o(t){var d=function(t,d){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==i(d)?d:d+\"\"}function $(t,d,e){return d=s(d),function(t,d){if(d&&(\"object\"==i(d)||\"function\"==typeof d))return d;if(void 0!==d)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(t,l()?Reflect.construct(d,e||[],s(t).constructor):d.apply(t,e))}function u(t){var d=\"function\"==typeof Map?new Map:void 0;return u=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf(\"[native code]\")}catch(d){return\"function\"==typeof t}}(t))return t;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==d){if(d.has(t))return d.get(t);d.set(t,e)}function e(){return function(t,d,e){if(l())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,d);var r=new(t.bind.apply(t,n));return e&&c(r,e.prototype),r}(t,arguments,s(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),c(e,t)},u(t)}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function c(t,d){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,d){return t.__proto__=d,t},c(t,d)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}var f=function(t){function d(t){var e;return function(t,d){if(!(t instanceof d))throw new TypeError(\"Cannot call a class as a function\")}(this,d),e=$(this,d,[t]),Object.setPrototypeOf(e,d.prototype),e.name=e.constructor.name,e}return function(t,d){if(\"function\"!=typeof d&&null!==d)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(d&&d.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),d&&c(t,d)}(d,t),e=d,n&&a(e.prototype,n),r&&a(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,n,r}(u(Error)),h=e(3247),m=function(t){return\"([\".concat(r.OA,\"]{1,\").concat(t,\"})\")};function g(t){var d=\"[  \\\\t,]*\",e=\"[:\\\\.．]?[  \\\\t,-]*\",n=\"#?\",r=\"[  \\\\t]*\";return\";ext=\"+m(\"20\")+\"|\"+(d+\"(?:e?xt(?:ensi(?:ó?|ó))?n?|ｅ?ｘｔｎ?|доб|anexo)\"+e+m(\"20\")+n)+\"|\"+(d+\"(?:[xｘ#＃~～]|int|ｉｎｔ)\"+e+m(\"9\")+n)+\"|\"+(\"[- ]+\"+m(\"6\")+\"#\")+\"|\"+(r+\"(?:,{2}|;)\"+e+m(\"15\")+n)+\"|\"+(r+\"(?:,)+\"+e+m(\"9\")+n)}var y=\"[\"+r.OA+\"]{\"+r.c7+\"}\",v=\"[\"+r.tz+\"]{0,1}(?:[\"+r.uD+\"]*[\"+r.OA+\"]){3,}[\"+r.uD+r.OA+\"]*\",b=new RegExp(\"^[\"+r.tz+\"]{0,1}(?:[\"+r.uD+\"]*[\"+r.OA+\"]){1,2}$\",\"i\"),p=v+\"(?:\"+g()+\")?\",C=new RegExp(\"^\"+y+\"$|^\"+p+\"$\",\"i\");var N=new RegExp(\"(?:\"+g()+\")$\",\"i\");var P=e(3578);function S(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){if(\"string\"==typeof t)return A(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?A(t,d):void 0}}(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 A(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}function w(t){for(var d,e=\"\",n=S(t.split(\"\"));!(d=n()).done;){e+=x(d.value,e)||\"\"}return e}function x(t,d,e){return\"+\"===t?d?void(\"function\"==typeof e&&e(\"end\")):\"+\":(0,P.ZW)(t)}var O=e(2582),I=e(96),E=e(4408),T=e(9713),F=e(4573),M=e(9495),k=\"+\",D=\"([\"+r.OA+\"]|[\\\\-\\\\.\\\\(\\\\)]?)\",R=\"^\\\\\"+k+D+\"*[\"+r.OA+\"]\"+D+\"*$\",L=new RegExp(R,\"g\"),j=r.OA,G=new RegExp(\"^(\"+(\"[\"+j+\"]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.)*\"+(\"[a-zA-Z]+((\\\\-)*[\"+j+\"])*\")+\"\\\\.?$\",\"g\"),B=\"tel:\",_=\";phone-context=\",U=\";isub=\";function K(t,d){var e,n=d.extractFormattedPhoneNumber,r=function(t){var d=t.indexOf(_);if(d<0)return null;var e=d+_.length;if(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&&(L.test(t)||G.test(t))}(r))throw new f(\"NOT_A_NUMBER\");if(null===r)e=n(t)||\"\";else{e=\"\",r.charAt(0)===k&&(e+=r);var i,a=t.indexOf(B);i=a>=0?a+B.length:0;var o=t.indexOf(_);e+=t.substring(i,o)}var $=e.indexOf(U);if($>0&&(e=e.substring(0,$)),\"\"!==e)return e}var W=250,H=new RegExp(\"[\"+r.tz+r.OA+\"]\"),V=new RegExp(\"[^\"+r.OA+\"#]+$\"),Z=!1;function Y(t,d,e){if(d=d||{},e=new h.Ay(e),d.defaultCountry&&!e.hasCountry(d.defaultCountry)){if(d.v2)throw new f(\"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 f(\"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.c7&&C.test(t)}(n))return function(t){return b.test(t)}(n)?{error:\"TOO_SHORT\"}:{};var i=function(t){var d=t.search(N);if(d<0)return{};for(var e=t.slice(0,d),n=t.match(N),r=1;r<n.length;){if(n[r])return{number:e,ext:n[r]};r++}}(n);if(i.ext)return i;return{number:n}}(t,d.v2,d.extract),i=n.number,a=n.ext,o=n.error;if(!i){if(d.v2){if(\"TOO_SHORT\"===o)throw new f(\"TOO_SHORT\");throw new f(\"NOT_A_NUMBER\")}return{}}var $=function(t,d,e,n){var r,i=(0,T.A)(w(t),void 0,d,e,n.metadata),a=i.countryCallingCodeSource,o=i.countryCallingCode,$=i.number;if(o)n.selectNumberingPlan(o);else{if(!$||!d&&!e)return{};n.selectNumberingPlan(d,e),d?r=d:Z&&n.isNonGeographicCallingCode(e)&&(r=\"001\"),o=e||(0,h.Ko)(d,n.metadata)}if(!$)return{countryCallingCodeSource:a,countryCallingCode:o};var u=(0,F.A)(w($),r,n),l=u.nationalNumber,c=u.carrierCode,s=(0,M.A)(o,{nationalNumber:l,metadata:n});s&&(r=s,\"001\"===s||n.selectNumberingPlan(r));return{country:r,countryCallingCode:o,countryCallingCodeSource:a,nationalNumber:l,carrierCode:c}}(i,d.defaultCountry,d.defaultCallingCode,e),u=$.country,l=$.nationalNumber,c=$.countryCallingCode,s=$.countryCallingCodeSource,m=$.carrierCode;if(!e.hasSelectedNumberingPlan()){if(d.v2)throw new f(\"INVALID_COUNTRY\");return{}}if(!l||l.length<r.c7){if(d.v2)throw new f(\"TOO_SHORT\");return{}}if(l.length>r.Cb){if(d.v2)throw new f(\"TOO_LONG\");return{}}if(d.v2){var g=new I.A(c,l,e.metadata);return u&&(g.country=u),m&&(g.carrierCode=m),a&&(g.ext=a),g.__countryCallingCodeSource=s,g}var y=!!(d.extended?e.hasSelectedNumberingPlan():u)&&(0,E.A)(l,e.nationalNumberPattern());return d.extended?{country:u,countryCallingCode:c,carrierCode:m,valid:y,possible:!!y||!(!0!==d.extended||!e.possibleLengths()||!(0,O.x)(l,u,e)),phone:l,ext:a}:y?function(t,d,e){var n={country:t,phone:d};e&&(n.ext=e);return n}(u,l,a):{}}function J(t){return J=\"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},J(t)}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;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?X(Object(e),!0).forEach(function(d){q(t,d,e[d])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):X(Object(e)).forEach(function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))})}return t}function q(t,d,e){return(d=function(t){var d=function(t,d){if(\"object\"!=J(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=J(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==J(d)?d:d+\"\"}(d))in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,t}var z=e(284);function tt(t){return tt=\"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},tt(t)}function dt(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 et(t,d,e){return(d=function(t){var d=function(t,d){if(\"object\"!=tt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,d||\"default\");if(\"object\"!=tt(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===d?String:Number)(t)}(t,\"string\");return\"symbol\"==tt(d)?d:d+\"\"}(d))in t?Object.defineProperty(t,d,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[d]=e,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){var n,r,i,a,o=[],$=!0,u=!1;try{if(i=(e=e.call(t)).next,0===d){if(Object(e)!==e)return;$=!1}else for(;!($=(n=i.call(e)).done)&&(o.push(n.value),o.length!==d);$=!0);}catch(t){u=!0,r=t}finally{try{if(!$&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(u)throw r}}return o}}(t,d)||function(t,d){if(t){if(\"string\"==typeof t)return rt(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?rt(t,d):void 0}}(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=Array(d);e<d;e++)n[e]=t[e];return n}function it(t){var d,e,n,r=nt(Array.prototype.slice.call(t),4),i=r[0],a=r[1],o=r[2],$=r[3];if(\"string\"!=typeof i)throw new TypeError(\"A text for parsing must be a string.\");if(d=i,a&&\"string\"!=typeof a){if(!(0,z.A)(a))throw new Error(\"Invalid second argument: \".concat(a));o?(e=a,n=o):n=a}else $?(e=o,n=$):(e=void 0,n=o),a&&(e=function(t){for(var d=1;d<arguments.length;d++){var e=null!=arguments[d]?arguments[d]:{};d%2?dt(Object(e),!0).forEach(function(d){et(t,d,e[d])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):dt(Object(e)).forEach(function(d){Object.defineProperty(t,d,Object.getOwnPropertyDescriptor(e,d))})}return t}({defaultCountry:a},e));return{text:d,options:e,metadata:n}}function at(){var t=it(arguments);return function(t,d,e){return Y(t,Q(Q({},d),{},{v2:!0}),e)}(t.text,t.options,t.metadata)}function ot(){return(0,n.A)(at,arguments)}},9495:function(t,d,e){e.d(d,{A:function(){return i}});var n=e(6111),r=!1;function i(t,d){var e=d.nationalNumber,i=d.metadata;if(r&&i.isNonGeographicCallingCode(t))return\"001\";var a=i.getCountryCodesForCallingCode(t);return a?1===a.length?a[0]:(0,n.A)(e,{countries:a,metadata:i.metadata}):void 0}},9710:function(t,d,e){e.d(d,{A:function(){return $}});var n=e(3247),r=e(4408);function i(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){if(\"string\"==typeof t)return a(t,d);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(t,d):void 0}}(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 a(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=Array(d);e<d;e++)n[e]=t[e];return n}var o=[\"MOBILE\",\"PREMIUM_RATE\",\"TOLL_FREE\",\"SHARED_COST\",\"VOIP\",\"PERSONAL_NUMBER\",\"PAGER\",\"UAN\",\"VOICEMAIL\"];function $(t,d,e){if(d=d||{},t.country||t.countryCallingCode){(e=new n.Ay(e)).selectNumberingPlan(t.country,t.countryCallingCode);var a=d.v2?t.nationalNumber:t.phone;if((0,r.A)(a,e.nationalNumberPattern())){if(u(a,\"FIXED_LINE\",e))return e.type(\"MOBILE\")&&\"\"===e.type(\"MOBILE\").pattern()?\"FIXED_LINE_OR_MOBILE\":e.type(\"MOBILE\")?u(a,\"MOBILE\",e)?\"FIXED_LINE_OR_MOBILE\":\"FIXED_LINE\":\"FIXED_LINE_OR_MOBILE\";for(var $,l=i(o);!($=l()).done;){var c=$.value;if(u(a,c,e))return c}}}}function u(t,d,e){return!(!(d=e.type(d))||!d.pattern())&&(!(d.possibleLengths()&&d.possibleLengths().indexOf(t.length)<0)&&(0,r.A)(t,d.pattern()))}},9713:function(t,d,e){e.d(d,{A:function(){return o}});var n=e(6890),r=e(283),i=e(3247),a=e(6128);function o(t,d,e,o,$){if(!t)return{};var u;if(\"+\"!==t[0]){var l=(0,n.A)(t,d||e,o,$);if(!l||l===t){if(d||e||o){var c=(0,r.A)(t,d,e,o,$),s=c.countryCallingCode,f=c.number;if(s)return{countryCallingCodeSource:\"FROM_NUMBER_WITHOUT_PLUS_SIGN\",countryCallingCode:s,number:f}}return{number:t}}u=!0,t=\"+\"+l}if(\"0\"===t[1])return{};$=new i.Ay($);for(var h=2;h-1<=a.Jq&&h<=t.length;){var m=t.slice(1,h);if($.hasCallingCode(m))return $.selectNumberingPlan(m),{countryCallingCodeSource:u?\"FROM_NUMBER_WITH_IDD\":\"FROM_NUMBER_WITH_PLUS_SIGN\",countryCallingCode:m,number:t.slice(h)};h++}return{}}}}]);\n//# sourceMappingURL=961.prod.js.map"
  },
  {
    "path": "umd/978.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[978],{3978:function(e,a,t){t.r(a),t.d(a,{default:function(){return m}});var l=t(1594),p=t.n(l),n=t(8181),r=t(7151),s=t(9027),i=JSON.parse('{\"patt\":[{\"name\":\"a00.png\",\"size\":200},{\"name\":\"a01.jpg\",\"size\":384},{\"name\":\"a02.jpg\",\"size\":384},{\"name\":\"a03.jpg\",\"size\":384},{\"name\":\"a04.png\",\"size\":400},{\"name\":\"a05.jpg\",\"size\":400},{\"name\":\"a06.jpg\",\"size\":256},{\"name\":\"a07.jpg\",\"size\":384},{\"name\":\"a08.jpg\",\"size\":384},{\"name\":\"a09.jpg\",\"size\":400},{\"name\":\"a10.jpg\",\"size\":256},{\"name\":\"a11.png\",\"size\":200}],\"img\":[{\"name\":\"w01.jpg\",\"pr\":\"p01.jpg\"},{\"name\":\"w02.jpg\",\"pr\":\"p02.jpg\"},{\"name\":\"w03.jpg\",\"pr\":\"p03.jpg\"},{\"name\":\"w04.jpg\",\"pr\":\"p04.jpg\"},{\"name\":\"w05.jpg\",\"pr\":\"p05.jpg\"},{\"name\":\"w06.jpg\",\"pr\":\"p06.jpg\"},{\"name\":\"w07.jpg\",\"pr\":\"p07.jpg\"},{\"name\":\"w08.jpg\",\"pr\":\"p08.jpg\"},{\"name\":\"w09.jpg\",\"pr\":\"p09.jpg\"},{\"name\":\"w10.jpg\",\"pr\":\"p10.jpg\"},{\"name\":\"w11.jpg\",\"pr\":\"p11.jpg\"},{\"name\":\"w12.jpg\",\"pr\":\"p12.jpg\"},{\"name\":\"w13.jpg\",\"pr\":\"p13.jpg\"},{\"name\":\"w14.jpg\",\"pr\":\"p14.jpg\"},{\"name\":\"w15.jpg\",\"pr\":\"p15.jpg\"},{\"name\":\"w16.jpg\",\"pr\":\"p16.jpg\"},{\"name\":\"w17.jpg\",\"pr\":\"p17.jpg\"},{\"name\":\"w18.jpg\",\"pr\":\"p18.jpg\"},{\"name\":\"w19.jpg\",\"pr\":\"p19.jpg\"},{\"name\":\"w20.jpg\",\"pr\":\"p20.jpg\"},{\"name\":\"w21.jpg\",\"pr\":\"p21.jpg\"},{\"name\":\"w22.jpg\",\"pr\":\"p22.jpg\"},{\"name\":\"w23.jpg\",\"pr\":\"p23.jpg\"},{\"name\":\"w24.jpg\",\"pr\":\"p24.jpg\"}]}');class m extends p().PureComponent{constructor(e){super(e),this.state={tab:s.Vn.type,wallpaper:i[s.Vn.type][s.Vn.index].name,blur:0},this.blurValues=[0,1,2,4,8,16],this.handleTabClick=this.handleTabClick.bind(this),this.handleWallpaperSelected=this.handleWallpaperSelected.bind(this),this.handleBlurChanged=this.handleBlurChanged.bind(this)}handleTabClick(e){e.preventDefault(),r.A.navigateTo(r.A.addUrlParam(window.location.hash,\"tab\",e.currentTarget.dataset.id)),this.setState({tab:e.currentTarget.dataset.id})}handleWallpaperSelected(e){let a,t,l;e?(e.preventDefault(),t=this.state.tab,a=e.currentTarget.dataset.id,l=this.state.blur):(t=s.Vn.type,a=s.Vn.index,l=0);const p=i[t][a].name,n=\"patt\"==t?i[t][a].size:0;this.setState({tab:t,wallpaper:p,blur:0}),this.props.onWallpaperSelected(`../${s.nH}${p}`,n,this.blurValues[l])}handleBlurChanged(e){e.preventDefault();const a=e.currentTarget.value;this.setState({blur:a}),this.props.onWallpaperSelected(`../${s.nH}${this.state.wallpaper}`,0,this.blurValues[a])}render(){return p().createElement(\"div\",{className:\"flex-column\"},p().createElement(\"div\",{className:\"panel-form-row clean-clickable\"},p().createElement(\"a\",{className:\"flat-button\",onClick:()=>this.handleWallpaperSelected(null)},p().createElement(\"i\",{className:\"material-icons\"},\"undo\"),\" \",p().createElement(n.FormattedMessage,{id:\"button_restore\",defaultMessage:[{type:0,value:\"Restore default\"}]}))),p().createElement(\"ul\",{className:\"tabbar\"},p().createElement(\"li\",{className:\"patt\"===this.state.tab?\"active\":null},p().createElement(\"a\",{href:\"#\",\"data-id\":\"patt\",onClick:this.handleTabClick},p().createElement(n.FormattedMessage,{id:\"tabtitle_pattern\",defaultMessage:[{type:0,value:\"pattern\"}]}))),p().createElement(\"li\",{className:\"img\"===this.state.tab?\"active\":null},p().createElement(\"a\",{href:\"#\",\"data-id\":\"img\",onClick:this.handleTabClick},p().createElement(n.FormattedMessage,{id:\"tabtitle_image\",defaultMessage:[{type:0,value:\"image\"}]})))),p().createElement(\"div\",{id:\"settings-form\",className:\"scrollable-panel\"},\"patt\"===this.state.tab?p().createElement(\"div\",{className:\"image-grid\"},i.patt.map((e,a)=>{const t=this.state.wallpaper===e.name?\" selected\":\"\";return p().createElement(\"div\",{key:a,\"data-id\":a,className:`image-grid-cell${t}`,onClick:this.handleWallpaperSelected},p().createElement(\"img\",{src:s.nH+e.name,alt:e.name,style:{width:`${e.size}px`,height:`${e.size}px`}}))})):p().createElement(p().Fragment,null,p().createElement(\"div\",{className:\"panel-form-column\"},p().createElement(\"div\",{className:\"panel-form-row\"},p().createElement(\"label\",{className:\"small\"},p().createElement(n.FormattedMessage,{id:\"label_blur_wallpaper\",defaultMessage:[{type:0,value:\"Blur:\"}]}))),p().createElement(\"div\",{className:\"panel-form-row\"},p().createElement(\"input\",{type:\"range\",id:\"blur\",name:\"blur\",min:\"0\",max:\"5\",step:\"1\",value:this.state.blur,onChange:this.handleBlurChanged}))),p().createElement(\"div\",{className:\"image-grid\"},i.img.map((e,a)=>{const t=this.state.wallpaper===e.name?\" selected\":\"\";return p().createElement(\"div\",{key:a,\"data-id\":a,className:`image-grid-cell${t}`,onClick:this.handleWallpaperSelected},p().createElement(\"img\",{src:s.nH+e.pr,alt:e.name,style:{width:\"100%\",height:\"100%\"}}))})))))}}}}]);\n//# sourceMappingURL=978.prod.js.map"
  },
  {
    "path": "umd/993.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[993],{111:function(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\"}]')},3993:function(e,d,a){a.r(d);var t=a(1594),l=a.n(t),o=a(8181),i=a(4956),s=a(6789),c=a(7151);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.A.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.A,{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.A,{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\"}]}))))}}d.default=(0,o.injectIntl)(n)},4956:function(e,d,a){var t=a(1594),l=a.n(t),o=a(8181),i=a(8892),s=a(4724),c=a(6187),r=a(4701),n=a(111),h=a(8589);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 s.Q).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,i.L)(`+${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.a)(e,r.A);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.lb)(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}))}}d.A=(0,o.injectIntl)(u)}}]);\n//# sourceMappingURL=993.prod.js.map"
  },
  {
    "path": "umd/996.prod.js",
    "content": "\"use strict\";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[996],{111:function(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\"}]')},3996:function(e,a,d){d.r(a),d.d(a,{default:function(){return C}});var t=d(1594),l=d.n(t),i=d(8181),o=d(221),c=d(9418),n=d(1166),s=d(4956),r=d(6789),h=d(8262),m=d(6110),u=d(3540),p=d(8589),g=d(9027);class C extends l().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.A.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}),a||this.setState({imageUrl:null,uploadUrl:null})}handleToggleSaveToken(){h.A.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.k6)((0,p.W5)(this.state.fn.trim(),g.tS),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,t){a&&URL.createObjectURL(a);this.setState({newAvatar:null,newAvatarMime:null}),a&&this.uploadAvatar(e,a,d,t)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,a,d,t){const l=e=>{let{mime:a,blob:d}=e;if(this.setState({imageUrl:URL.createObjectURL(d),buttonDisabled:!0}),d.size>g.Z7){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.Sk)(d).then(e=>this.setState({uploadUrl:(0,m.to)({data:e.bits,type:a})})).finally(e=>this.setState({buttonDisabled:!1}))};d>g.eQ||t>g.eQ||d!=t?(0,m.ag)(a,g.eQ,g.eQ,g.qy,!0).then(e=>l(e)).catch(e=>this.props.onError(e.message,\"err\")):l({mime:e,blob:a,width:d,height:t})}render(){if(this.state.newAvatar)return l().createElement(o.A,{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\"),l().createElement(\"form\",{className:\"panel-form-column\",onSubmit:this.handleSubmit},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"div\",{className:\"umn\"},l().createElement(i.FormattedMessage,{id:\"login_prompt\",defaultMessage:[{type:0,value:\"Login\"}]},e=>l().createElement(\"input\",{type:\"text\",placeholder:e,autoComplete:\"user-name\",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0})),l().createElement(i.FormattedMessage,{id:\"password_prompt\",defaultMessage:[{type:0,value:\"Password\"}]},e=>l().createElement(r.A,{placeholder:e,autoComplete:\"new-password\",value:this.state.password,onFinished:this.handlePasswordChange,required:!0}))),l().createElement(c.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError})),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(i.FormattedMessage,{id:\"full_name_prompt\",defaultMessage:[{type:0,value:\"Full name, e.g. John Doe\"}]},e=>l().createElement(\"input\",{type:\"text\",placeholder:e,autoComplete:\"name\",value:this.state.fn,onChange:this.handleFnChange,required:!0}))),\"email\"==this.props.reqCredMethod?l().createElement(\"div\",{className:\"panel-form-row\"},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}))):\"tel\"==this.props.reqCredMethod?l().createElement(l().Fragment,null,l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small gray\"},l().createElement(i.FormattedMessage,{id:\"mobile_phone_number\",defaultMessage:[{type:0,value:\"Mobile phone number\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(s.A,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))):null,l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(n.A,{id:\"save-token\",name:\"save-token\",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),l().createElement(i.FormattedMessage,{id:\"stay_logged_in\",defaultMessage:[{type:0,value:\"Stay logged in\"}]},e=>l().createElement(\"label\",{htmlFor:\"save-token\"},\" \",e))),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:e,type:\"submit\",disabled:this.state.buttonDisabled},l().createElement(i.FormattedMessage,{id:\"button_sign_up\",defaultMessage:[{type:0,value:\"Sign up\"}]}))))}}},4956:function(e,a,d){var t=d(1594),l=d.n(t),i=d(8181),o=d(8892),c=d(4724),n=d(6187),s=d(4701),r=d(111),h=d(8589);const m=(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\",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 c.Q).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,o.L)(`+${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,n.a)(e,s.A);return d?d.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,h.lb)(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}))}}a.A=(0,i.injectIntl)(u)}}]);\n//# sourceMappingURL=996.prod.js.map"
  },
  {
    "path": "umd/index.dev.js",
    "content": "/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./img/bkg/index.json\":\n/*!****************************!*\\\n  !*** ./img/bkg/index.json ***!\n  \\****************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/JSON.parse('{\"patt\":[{\"name\":\"a00.png\",\"size\":200},{\"name\":\"a01.jpg\",\"size\":384},{\"name\":\"a02.jpg\",\"size\":384},{\"name\":\"a03.jpg\",\"size\":384},{\"name\":\"a04.png\",\"size\":400},{\"name\":\"a05.jpg\",\"size\":400},{\"name\":\"a06.jpg\",\"size\":256},{\"name\":\"a07.jpg\",\"size\":384},{\"name\":\"a08.jpg\",\"size\":384},{\"name\":\"a09.jpg\",\"size\":400},{\"name\":\"a10.jpg\",\"size\":256},{\"name\":\"a11.png\",\"size\":200}],\"img\":[{\"name\":\"w01.jpg\",\"pr\":\"p01.jpg\"},{\"name\":\"w02.jpg\",\"pr\":\"p02.jpg\"},{\"name\":\"w03.jpg\",\"pr\":\"p03.jpg\"},{\"name\":\"w04.jpg\",\"pr\":\"p04.jpg\"},{\"name\":\"w05.jpg\",\"pr\":\"p05.jpg\"},{\"name\":\"w06.jpg\",\"pr\":\"p06.jpg\"},{\"name\":\"w07.jpg\",\"pr\":\"p07.jpg\"},{\"name\":\"w08.jpg\",\"pr\":\"p08.jpg\"},{\"name\":\"w09.jpg\",\"pr\":\"p09.jpg\"},{\"name\":\"w10.jpg\",\"pr\":\"p10.jpg\"},{\"name\":\"w11.jpg\",\"pr\":\"p11.jpg\"},{\"name\":\"w12.jpg\",\"pr\":\"p12.jpg\"},{\"name\":\"w13.jpg\",\"pr\":\"p13.jpg\"},{\"name\":\"w14.jpg\",\"pr\":\"p14.jpg\"},{\"name\":\"w15.jpg\",\"pr\":\"p15.jpg\"},{\"name\":\"w16.jpg\",\"pr\":\"p16.jpg\"},{\"name\":\"w17.jpg\",\"pr\":\"p17.jpg\"},{\"name\":\"w18.jpg\",\"pr\":\"p18.jpg\"},{\"name\":\"w19.jpg\",\"pr\":\"p19.jpg\"},{\"name\":\"w20.jpg\",\"pr\":\"p20.jpg\"},{\"name\":\"w21.jpg\",\"pr\":\"p21.jpg\"},{\"name\":\"w22.jpg\",\"pr\":\"p22.jpg\"},{\"name\":\"w23.jpg\",\"pr\":\"p23.jpg\"},{\"name\":\"w24.jpg\",\"pr\":\"p24.jpg\"}]}');\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/app/dist/esm/index.esm2017.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/@firebase/app/dist/esm/index.esm2017.js ***!\n  \\**************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FirebaseError: function() { return /* reexport safe */ _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError; },\n/* harmony export */   SDK_VERSION: function() { return /* binding */ SDK_VERSION; },\n/* harmony export */   _DEFAULT_ENTRY_NAME: function() { return /* binding */ DEFAULT_ENTRY_NAME; },\n/* harmony export */   _addComponent: function() { return /* binding */ _addComponent; },\n/* harmony export */   _addOrOverwriteComponent: function() { return /* binding */ _addOrOverwriteComponent; },\n/* harmony export */   _apps: function() { return /* binding */ _apps; },\n/* harmony export */   _clearComponents: function() { return /* binding */ _clearComponents; },\n/* harmony export */   _components: function() { return /* binding */ _components; },\n/* harmony export */   _getProvider: function() { return /* binding */ _getProvider; },\n/* harmony export */   _isFirebaseApp: function() { return /* binding */ _isFirebaseApp; },\n/* harmony export */   _isFirebaseServerApp: function() { return /* binding */ _isFirebaseServerApp; },\n/* harmony export */   _registerComponent: function() { return /* binding */ _registerComponent; },\n/* harmony export */   _removeServiceInstance: function() { return /* binding */ _removeServiceInstance; },\n/* harmony export */   _serverApps: function() { return /* binding */ _serverApps; },\n/* harmony export */   deleteApp: function() { return /* binding */ deleteApp; },\n/* harmony export */   getApp: function() { return /* binding */ getApp; },\n/* harmony export */   getApps: function() { return /* binding */ getApps; },\n/* harmony export */   initializeApp: function() { return /* binding */ initializeApp; },\n/* harmony export */   initializeServerApp: function() { return /* binding */ initializeServerApp; },\n/* harmony export */   onLog: function() { return /* binding */ onLog; },\n/* harmony export */   registerVersion: function() { return /* binding */ registerVersion; },\n/* harmony export */   setLogLevel: function() { return /* binding */ setLogLevel; }\n/* harmony export */ });\n/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/component */ \"./node_modules/@firebase/component/dist/esm/index.esm2017.js\");\n/* harmony import */ var _firebase_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/logger */ \"./node_modules/@firebase/logger/dist/esm/index.esm2017.js\");\n/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @firebase/util */ \"./node_modules/@firebase/util/dist/index.esm2017.js\");\n/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! idb */ \"./node_modules/idb/build/index.js\");\n\n\n\n\n\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass PlatformLoggerServiceImpl {\n    constructor(container) {\n        this.container = container;\n    }\n    // In initial implementation, this will be called by installations on\n    // auth token refresh, and installations will send this string.\n    getPlatformInfoString() {\n        const providers = this.container.getProviders();\n        // Loop through providers and get library/version pairs from any that are\n        // version components.\n        return providers\n            .map(provider => {\n            if (isVersionServiceProvider(provider)) {\n                const service = provider.getImmediate();\n                return `${service.library}/${service.version}`;\n            }\n            else {\n                return null;\n            }\n        })\n            .filter(logString => logString)\n            .join(' ');\n    }\n}\n/**\n *\n * @param provider check if this provider provides a VersionService\n *\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\n * provides VersionService. The provider is not necessarily a 'app-version'\n * provider.\n */\nfunction isVersionServiceProvider(provider) {\n    const component = provider.getComponent();\n    return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.13.2\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logger = new _firebase_logger__WEBPACK_IMPORTED_MODULE_1__.Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/ai\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"11.10.0\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default app name\n *\n * @internal\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\nconst PLATFORM_LOG_STRING = {\n    [name$q]: 'fire-core',\n    [name$p]: 'fire-core-compat',\n    [name$n]: 'fire-analytics',\n    [name$o]: 'fire-analytics-compat',\n    [name$l]: 'fire-app-check',\n    [name$m]: 'fire-app-check-compat',\n    [name$k]: 'fire-auth',\n    [name$j]: 'fire-auth-compat',\n    [name$i]: 'fire-rtdb',\n    [name$h]: 'fire-data-connect',\n    [name$g]: 'fire-rtdb-compat',\n    [name$f]: 'fire-fn',\n    [name$e]: 'fire-fn-compat',\n    [name$d]: 'fire-iid',\n    [name$c]: 'fire-iid-compat',\n    [name$b]: 'fire-fcm',\n    [name$a]: 'fire-fcm-compat',\n    [name$9]: 'fire-perf',\n    [name$8]: 'fire-perf-compat',\n    [name$7]: 'fire-rc',\n    [name$6]: 'fire-rc-compat',\n    [name$5]: 'fire-gcs',\n    [name$4]: 'fire-gcs-compat',\n    [name$3]: 'fire-fst',\n    [name$1]: 'fire-fst-compat',\n    [name$2]: 'fire-vertex',\n    'fire-js': 'fire-js', // Platform identifier for JS SDK.\n    [name]: 'fire-js-all'\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @internal\n */\nconst _apps = new Map();\n/**\n * @internal\n */\nconst _serverApps = new Map();\n/**\n * Registered components.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _components = new Map();\n/**\n * @param component - the component being added to this app's container\n *\n * @internal\n */\nfunction _addComponent(app, component) {\n    try {\n        app.container.addComponent(component);\n    }\n    catch (e) {\n        logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\n    }\n}\n/**\n *\n * @internal\n */\nfunction _addOrOverwriteComponent(app, component) {\n    app.container.addOrOverwriteComponent(component);\n}\n/**\n *\n * @param component - the component to register\n * @returns whether or not the component is registered successfully\n *\n * @internal\n */\nfunction _registerComponent(component) {\n    const componentName = component.name;\n    if (_components.has(componentName)) {\n        logger.debug(`There were multiple attempts to register component ${componentName}.`);\n        return false;\n    }\n    _components.set(componentName, component);\n    // add the component to existing app instances\n    for (const app of _apps.values()) {\n        _addComponent(app, component);\n    }\n    for (const serverApp of _serverApps.values()) {\n        _addComponent(serverApp, component);\n    }\n    return true;\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n *\n * @returns the provider for the service with the matching name\n *\n * @internal\n */\nfunction _getProvider(app, name) {\n    const heartbeatController = app.container\n        .getProvider('heartbeat')\n        .getImmediate({ optional: true });\n    if (heartbeatController) {\n        void heartbeatController.triggerHeartbeat();\n    }\n    return app.container.getProvider(name);\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\n *\n * @internal\n */\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\n    _getProvider(app, name).clearInstance(instanceIdentifier);\n}\n/**\n *\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\n *\n * @returns true if the provide object is of type FirebaseApp.\n *\n * @internal\n */\nfunction _isFirebaseApp(obj) {\n    return obj.options !== undefined;\n}\n/**\n *\n * @param obj - an object of type FirebaseApp.\n *\n * @returns true if the provided object is of type FirebaseServerAppImpl.\n *\n * @internal\n */\nfunction _isFirebaseServerApp(obj) {\n    if (obj === null || obj === undefined) {\n        return false;\n    }\n    return obj.settings !== undefined;\n}\n/**\n * Test only\n *\n * @internal\n */\nfunction _clearComponents() {\n    _components.clear();\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERRORS = {\n    [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\n        'call initializeApp() first',\n    [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\n    [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\n    [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\n    [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\n    [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\n    [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\n        'Firebase App instance.',\n    [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\n    [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\n    [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\n};\nconst ERROR_FACTORY = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__.ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FirebaseAppImpl {\n    constructor(options, config, container) {\n        this._isDeleted = false;\n        this._options = Object.assign({}, options);\n        this._config = Object.assign({}, config);\n        this._name = config.name;\n        this._automaticDataCollectionEnabled =\n            config.automaticDataCollectionEnabled;\n        this._container = container;\n        this.container.addComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    }\n    get automaticDataCollectionEnabled() {\n        this.checkDestroyed();\n        return this._automaticDataCollectionEnabled;\n    }\n    set automaticDataCollectionEnabled(val) {\n        this.checkDestroyed();\n        this._automaticDataCollectionEnabled = val;\n    }\n    get name() {\n        this.checkDestroyed();\n        return this._name;\n    }\n    get options() {\n        this.checkDestroyed();\n        return this._options;\n    }\n    get config() {\n        this.checkDestroyed();\n        return this._config;\n    }\n    get container() {\n        return this._container;\n    }\n    get isDeleted() {\n        return this._isDeleted;\n    }\n    set isDeleted(val) {\n        this._isDeleted = val;\n    }\n    /**\n     * This function will throw an Error if the App has already been deleted -\n     * use before performing API actions on the App.\n     */\n    checkDestroyed() {\n        if (this.isDeleted) {\n            throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Parse the token and check to see if the `exp` claim is in the future.\n// Reports an error to the console if the token or claim could not be parsed, or if `exp` is in\n// the past.\nfunction validateTokenTTL(base64Token, tokenName) {\n    const secondPart = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.base64Decode)(base64Token.split('.')[1]);\n    if (secondPart === null) {\n        console.error(`FirebaseServerApp ${tokenName} is invalid: second part could not be parsed.`);\n        return;\n    }\n    const expClaim = JSON.parse(secondPart).exp;\n    if (expClaim === undefined) {\n        console.error(`FirebaseServerApp ${tokenName} is invalid: expiration claim could not be parsed`);\n        return;\n    }\n    const exp = JSON.parse(secondPart).exp * 1000;\n    const now = new Date().getTime();\n    const diff = exp - now;\n    if (diff <= 0) {\n        console.error(`FirebaseServerApp ${tokenName} is invalid: the token has expired.`);\n    }\n}\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\n    constructor(options, serverConfig, name, container) {\n        // Build configuration parameters for the FirebaseAppImpl base class.\n        const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\n            ? serverConfig.automaticDataCollectionEnabled\n            : true;\n        // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\n        const config = {\n            name,\n            automaticDataCollectionEnabled\n        };\n        if (options.apiKey !== undefined) {\n            // Construct the parent FirebaseAppImp object.\n            super(options, config, container);\n        }\n        else {\n            const appImpl = options;\n            super(appImpl.options, config, container);\n        }\n        // Now construct the data for the FirebaseServerAppImpl.\n        this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\n        // Ensure that the current time is within the `authIdtoken` window of validity.\n        if (this._serverConfig.authIdToken) {\n            validateTokenTTL(this._serverConfig.authIdToken, 'authIdToken');\n        }\n        // Ensure that the current time is within the `appCheckToken` window of validity.\n        if (this._serverConfig.appCheckToken) {\n            validateTokenTTL(this._serverConfig.appCheckToken, 'appCheckToken');\n        }\n        this._finalizationRegistry = null;\n        if (typeof FinalizationRegistry !== 'undefined') {\n            this._finalizationRegistry = new FinalizationRegistry(() => {\n                this.automaticCleanup();\n            });\n        }\n        this._refCount = 0;\n        this.incRefCount(this._serverConfig.releaseOnDeref);\n        // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\n        // will never trigger.\n        this._serverConfig.releaseOnDeref = undefined;\n        serverConfig.releaseOnDeref = undefined;\n        registerVersion(name$q, version$1, 'serverapp');\n    }\n    toJSON() {\n        return undefined;\n    }\n    get refCount() {\n        return this._refCount;\n    }\n    // Increment the reference count of this server app. If an object is provided, register it\n    // with the finalization registry.\n    incRefCount(obj) {\n        if (this.isDeleted) {\n            return;\n        }\n        this._refCount++;\n        if (obj !== undefined && this._finalizationRegistry !== null) {\n            this._finalizationRegistry.register(obj, this);\n        }\n    }\n    // Decrement the reference count.\n    decRefCount() {\n        if (this.isDeleted) {\n            return 0;\n        }\n        return --this._refCount;\n    }\n    // Invoked by the FinalizationRegistry callback to note that this app should go through its\n    // reference counts and delete itself if no reference count remain. The coordinating logic that\n    // handles this is in deleteApp(...).\n    automaticCleanup() {\n        void deleteApp(this);\n    }\n    get settings() {\n        this.checkDestroyed();\n        return this._serverConfig;\n    }\n    /**\n     * This function will throw an Error if the App has already been deleted -\n     * use before performing API actions on the App.\n     */\n    checkDestroyed() {\n        if (this.isDeleted) {\n            throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The current SDK version.\n *\n * @public\n */\nconst SDK_VERSION = version;\nfunction initializeApp(_options, rawConfig = {}) {\n    let options = _options;\n    if (typeof rawConfig !== 'object') {\n        const name = rawConfig;\n        rawConfig = { name };\n    }\n    const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: true }, rawConfig);\n    const name = config.name;\n    if (typeof name !== 'string' || !name) {\n        throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\n            appName: String(name)\n        });\n    }\n    options || (options = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.getDefaultAppConfig)());\n    if (!options) {\n        throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\n    }\n    const existingApp = _apps.get(name);\n    if (existingApp) {\n        // return the existing app if options and config deep equal the ones in the existing app.\n        if ((0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.deepEqual)(options, existingApp.options) &&\n            (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.deepEqual)(config, existingApp.config)) {\n            return existingApp;\n        }\n        else {\n            throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\n        }\n    }\n    const container = new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.ComponentContainer(name);\n    for (const component of _components.values()) {\n        container.addComponent(component);\n    }\n    const newApp = new FirebaseAppImpl(options, config, container);\n    _apps.set(name, newApp);\n    return newApp;\n}\nfunction initializeServerApp(_options, _serverAppConfig) {\n    if ((0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.isBrowser)() && !(0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.isWebWorker)()) {\n        // FirebaseServerApp isn't designed to be run in browsers.\n        throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\n    }\n    if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\n        _serverAppConfig.automaticDataCollectionEnabled = true;\n    }\n    let appOptions;\n    if (_isFirebaseApp(_options)) {\n        appOptions = _options.options;\n    }\n    else {\n        appOptions = _options;\n    }\n    // Build an app name based on a hash of the configuration options.\n    const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\n    // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\n    // construction of FirebaseServerApp instances. For example, if the object is the request headers.\n    if (nameObj.releaseOnDeref !== undefined) {\n        delete nameObj.releaseOnDeref;\n    }\n    const hashCode = (s) => {\n        return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\n    };\n    if (_serverAppConfig.releaseOnDeref !== undefined) {\n        if (typeof FinalizationRegistry === 'undefined') {\n            throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\n        }\n    }\n    const nameString = '' + hashCode(JSON.stringify(nameObj));\n    const existingApp = _serverApps.get(nameString);\n    if (existingApp) {\n        existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\n        return existingApp;\n    }\n    const container = new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.ComponentContainer(nameString);\n    for (const component of _components.values()) {\n        container.addComponent(component);\n    }\n    const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\n    _serverApps.set(nameString, newApp);\n    return newApp;\n}\n/**\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\n *\n * When called with no arguments, the default app is returned. When an app name\n * is provided, the app corresponding to that name is returned.\n *\n * An exception is thrown if the app being retrieved has not yet been\n * initialized.\n *\n * @example\n * ```javascript\n * // Return the default app\n * const app = getApp();\n * ```\n *\n * @example\n * ```javascript\n * // Return a named app\n * const otherApp = getApp(\"otherApp\");\n * ```\n *\n * @param name - Optional name of the app to return. If no name is\n *   provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The app corresponding to the provided app name.\n *   If no app name is provided, the default app is returned.\n *\n * @public\n */\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\n    const app = _apps.get(name);\n    if (!app && name === DEFAULT_ENTRY_NAME && (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.getDefaultAppConfig)()) {\n        return initializeApp();\n    }\n    if (!app) {\n        throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\n    }\n    return app;\n}\n/**\n * A (read-only) array of all initialized apps.\n * @public\n */\nfunction getApps() {\n    return Array.from(_apps.values());\n}\n/**\n * Renders this app unusable and frees the resources of all associated\n * services.\n *\n * @example\n * ```javascript\n * deleteApp(app)\n *   .then(function() {\n *     console.log(\"App deleted successfully\");\n *   })\n *   .catch(function(error) {\n *     console.log(\"Error deleting app:\", error);\n *   });\n * ```\n *\n * @public\n */\nasync function deleteApp(app) {\n    let cleanupProviders = false;\n    const name = app.name;\n    if (_apps.has(name)) {\n        cleanupProviders = true;\n        _apps.delete(name);\n    }\n    else if (_serverApps.has(name)) {\n        const firebaseServerApp = app;\n        if (firebaseServerApp.decRefCount() <= 0) {\n            _serverApps.delete(name);\n            cleanupProviders = true;\n        }\n    }\n    if (cleanupProviders) {\n        await Promise.all(app.container\n            .getProviders()\n            .map(provider => provider.delete()));\n        app.isDeleted = true;\n    }\n}\n/**\n * Registers a library's name and version for platform logging purposes.\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\n * @param version - Current version of that library.\n * @param variant - Bundle variant, e.g., node, rn, etc.\n *\n * @public\n */\nfunction registerVersion(libraryKeyOrName, version, variant) {\n    var _a;\n    // TODO: We can use this check to whitelist strings when/if we set up\n    // a good whitelist system.\n    let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\n    if (variant) {\n        library += `-${variant}`;\n    }\n    const libraryMismatch = library.match(/\\s|\\//);\n    const versionMismatch = version.match(/\\s|\\//);\n    if (libraryMismatch || versionMismatch) {\n        const warning = [\n            `Unable to register library \"${library}\" with version \"${version}\":`\n        ];\n        if (libraryMismatch) {\n            warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\n        }\n        if (libraryMismatch && versionMismatch) {\n            warning.push('and');\n        }\n        if (versionMismatch) {\n            warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\n        }\n        logger.warn(warning.join(' '));\n        return;\n    }\n    _registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\n}\n/**\n * Sets log handler for all Firebase SDKs.\n * @param logCallback - An optional custom log handler that executes user code whenever\n * the Firebase SDK makes a logging call.\n *\n * @public\n */\nfunction onLog(logCallback, options) {\n    if (logCallback !== null && typeof logCallback !== 'function') {\n        throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\n    }\n    (0,_firebase_logger__WEBPACK_IMPORTED_MODULE_1__.setUserLogHandler)(logCallback, options);\n}\n/**\n * Sets log level for all Firebase SDKs.\n *\n * All of the log types above the current log level are captured (i.e. if\n * you set the log level to `info`, errors are logged, but `debug` and\n * `verbose` logs are not).\n *\n * @public\n */\nfunction setLogLevel(logLevel) {\n    (0,_firebase_logger__WEBPACK_IMPORTED_MODULE_1__.setLogLevel)(logLevel);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DB_NAME = 'firebase-heartbeat-database';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'firebase-heartbeat-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = (0,idb__WEBPACK_IMPORTED_MODULE_3__.openDB)(DB_NAME, DB_VERSION, {\n            upgrade: (db, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through\n                // behavior is what we want, because if there are multiple versions between\n                // the old version and the current version, we want ALL the migrations\n                // that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        try {\n                            db.createObjectStore(STORE_NAME);\n                        }\n                        catch (e) {\n                            // Safari/iOS browsers throw occasional exceptions on\n                            // db.createObjectStore() that may be a bug. Avoid blocking\n                            // the rest of the app functionality.\n                            console.warn(e);\n                        }\n                }\n            }\n        }).catch(e => {\n            throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\n                originalErrorMessage: e.message\n            });\n        });\n    }\n    return dbPromise;\n}\nasync function readHeartbeatsFromIndexedDB(app) {\n    try {\n        const db = await getDbPromise();\n        const tx = db.transaction(STORE_NAME);\n        const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\n        // We already have the value but tx.done can throw,\n        // so we need to await it here to catch errors\n        await tx.done;\n        return result;\n    }\n    catch (e) {\n        if (e instanceof _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError) {\n            logger.warn(e.message);\n        }\n        else {\n            const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\n                originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n            });\n            logger.warn(idbGetError.message);\n        }\n    }\n}\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\n    try {\n        const db = await getDbPromise();\n        const tx = db.transaction(STORE_NAME, 'readwrite');\n        const objectStore = tx.objectStore(STORE_NAME);\n        await objectStore.put(heartbeatObject, computeKey(app));\n        await tx.done;\n    }\n    catch (e) {\n        if (e instanceof _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError) {\n            logger.warn(e.message);\n        }\n        else {\n            const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\n                originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n            });\n            logger.warn(idbGetError.message);\n        }\n    }\n}\nfunction computeKey(app) {\n    return `${app.name}!${app.options.appId}`;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst MAX_HEADER_BYTES = 1024;\nconst MAX_NUM_STORED_HEARTBEATS = 30;\nclass HeartbeatServiceImpl {\n    constructor(container) {\n        this.container = container;\n        /**\n         * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\n         * the header string.\n         * Stores one record per date. This will be consolidated into the standard\n         * format of one record per user agent string before being sent as a header.\n         * Populated from indexedDB when the controller is instantiated and should\n         * be kept in sync with indexedDB.\n         * Leave public for easier testing.\n         */\n        this._heartbeatsCache = null;\n        const app = this.container.getProvider('app').getImmediate();\n        this._storage = new HeartbeatStorageImpl(app);\n        this._heartbeatsCachePromise = this._storage.read().then(result => {\n            this._heartbeatsCache = result;\n            return result;\n        });\n    }\n    /**\n     * Called to report a heartbeat. The function will generate\n     * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\n     * to IndexedDB.\n     * Note that we only store one heartbeat per day. So if a heartbeat for today is\n     * already logged, subsequent calls to this function in the same day will be ignored.\n     */\n    async triggerHeartbeat() {\n        var _a, _b;\n        try {\n            const platformLogger = this.container\n                .getProvider('platform-logger')\n                .getImmediate();\n            // This is the \"Firebase user agent\" string from the platform logger\n            // service, not the browser user agent.\n            const agent = platformLogger.getPlatformInfoString();\n            const date = getUTCDateString();\n            if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\n                this._heartbeatsCache = await this._heartbeatsCachePromise;\n                // If we failed to construct a heartbeats cache, then return immediately.\n                if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\n                    return;\n                }\n            }\n            // Do not store a heartbeat if one is already stored for this day\n            // or if a header has already been sent today.\n            if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\n                this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\n                return;\n            }\n            else {\n                // There is no entry for this date. Create one.\n                this._heartbeatsCache.heartbeats.push({ date, agent });\n                // If the number of stored heartbeats exceeds the maximum number of stored heartbeats, remove the heartbeat with the earliest date.\n                // Since this is executed each time a heartbeat is pushed, the limit can only be exceeded by one, so only one needs to be removed.\n                if (this._heartbeatsCache.heartbeats.length > MAX_NUM_STORED_HEARTBEATS) {\n                    const earliestHeartbeatIdx = getEarliestHeartbeatIdx(this._heartbeatsCache.heartbeats);\n                    this._heartbeatsCache.heartbeats.splice(earliestHeartbeatIdx, 1);\n                }\n            }\n            return this._storage.overwrite(this._heartbeatsCache);\n        }\n        catch (e) {\n            logger.warn(e);\n        }\n    }\n    /**\n     * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\n     * It also clears all heartbeats from memory as well as in IndexedDB.\n     *\n     * NOTE: Consuming product SDKs should not send the header if this method\n     * returns an empty string.\n     */\n    async getHeartbeatsHeader() {\n        var _a;\n        try {\n            if (this._heartbeatsCache === null) {\n                await this._heartbeatsCachePromise;\n            }\n            // If it's still null or the array is empty, there is no data to send.\n            if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\n                this._heartbeatsCache.heartbeats.length === 0) {\n                return '';\n            }\n            const date = getUTCDateString();\n            // Extract as many heartbeats from the cache as will fit under the size limit.\n            const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\n            const headerString = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.base64urlEncodeWithoutPadding)(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\n            // Store last sent date to prevent another being logged/sent for the same day.\n            this._heartbeatsCache.lastSentHeartbeatDate = date;\n            if (unsentEntries.length > 0) {\n                // Store any unsent entries if they exist.\n                this._heartbeatsCache.heartbeats = unsentEntries;\n                // This seems more likely than emptying the array (below) to lead to some odd state\n                // since the cache isn't empty and this will be called again on the next request,\n                // and is probably safest if we await it.\n                await this._storage.overwrite(this._heartbeatsCache);\n            }\n            else {\n                this._heartbeatsCache.heartbeats = [];\n                // Do not wait for this, to reduce latency.\n                void this._storage.overwrite(this._heartbeatsCache);\n            }\n            return headerString;\n        }\n        catch (e) {\n            logger.warn(e);\n            return '';\n        }\n    }\n}\nfunction getUTCDateString() {\n    const today = new Date();\n    // Returns date format 'YYYY-MM-DD'\n    return today.toISOString().substring(0, 10);\n}\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\n    // Heartbeats grouped by user agent in the standard format to be sent in\n    // the header.\n    const heartbeatsToSend = [];\n    // Single date format heartbeats that are not sent.\n    let unsentEntries = heartbeatsCache.slice();\n    for (const singleDateHeartbeat of heartbeatsCache) {\n        // Look for an existing entry with the same user agent.\n        const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\n        if (!heartbeatEntry) {\n            // If no entry for this user agent exists, create one.\n            heartbeatsToSend.push({\n                agent: singleDateHeartbeat.agent,\n                dates: [singleDateHeartbeat.date]\n            });\n            if (countBytes(heartbeatsToSend) > maxSize) {\n                // If the header would exceed max size, remove the added heartbeat\n                // entry and stop adding to the header.\n                heartbeatsToSend.pop();\n                break;\n            }\n        }\n        else {\n            heartbeatEntry.dates.push(singleDateHeartbeat.date);\n            // If the header would exceed max size, remove the added date\n            // and stop adding to the header.\n            if (countBytes(heartbeatsToSend) > maxSize) {\n                heartbeatEntry.dates.pop();\n                break;\n            }\n        }\n        // Pop unsent entry from queue. (Skipped if adding the entry exceeded\n        // quota and the loop breaks early.)\n        unsentEntries = unsentEntries.slice(1);\n    }\n    return {\n        heartbeatsToSend,\n        unsentEntries\n    };\n}\nclass HeartbeatStorageImpl {\n    constructor(app) {\n        this.app = app;\n        this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\n    }\n    async runIndexedDBEnvironmentCheck() {\n        if (!(0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.isIndexedDBAvailable)()) {\n            return false;\n        }\n        else {\n            return (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.validateIndexedDBOpenable)()\n                .then(() => true)\n                .catch(() => false);\n        }\n    }\n    /**\n     * Read all heartbeats.\n     */\n    async read() {\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return { heartbeats: [] };\n        }\n        else {\n            const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\n            if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\n                return idbHeartbeatObject;\n            }\n            else {\n                return { heartbeats: [] };\n            }\n        }\n    }\n    // overwrite the storage with the provided heartbeats\n    async overwrite(heartbeatsObject) {\n        var _a;\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return;\n        }\n        else {\n            const existingHeartbeatsObject = await this.read();\n            return writeHeartbeatsToIndexedDB(this.app, {\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n                heartbeats: heartbeatsObject.heartbeats\n            });\n        }\n    }\n    // add heartbeats\n    async add(heartbeatsObject) {\n        var _a;\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return;\n        }\n        else {\n            const existingHeartbeatsObject = await this.read();\n            return writeHeartbeatsToIndexedDB(this.app, {\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n                heartbeats: [\n                    ...existingHeartbeatsObject.heartbeats,\n                    ...heartbeatsObject.heartbeats\n                ]\n            });\n        }\n    }\n}\n/**\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\n * in a platform logging header JSON object, stringified, and converted\n * to base 64.\n */\nfunction countBytes(heartbeatsCache) {\n    // base64 has a restricted set of characters, all of which should be 1 byte.\n    return (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.base64urlEncodeWithoutPadding)(\n    // heartbeatsCache wrapper properties\n    JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\n}\n/**\n * Returns the index of the heartbeat with the earliest date.\n * If the heartbeats array is empty, -1 is returned.\n */\nfunction getEarliestHeartbeatIdx(heartbeats) {\n    if (heartbeats.length === 0) {\n        return -1;\n    }\n    let earliestHeartbeatIdx = 0;\n    let earliestHeartbeatDate = heartbeats[0].date;\n    for (let i = 1; i < heartbeats.length; i++) {\n        if (heartbeats[i].date < earliestHeartbeatDate) {\n            earliestHeartbeatDate = heartbeats[i].date;\n            earliestHeartbeatIdx = i;\n        }\n    }\n    return earliestHeartbeatIdx;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction registerCoreComponents(variant) {\n    _registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n    _registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_0__.Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n    // Register `app` package.\n    registerVersion(name$q, version$1, variant);\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    registerVersion(name$q, version$1, 'esm2017');\n    // Register platform SDK identifier (no version).\n    registerVersion('fire-js', '');\n}\n\n/**\n * Firebase App\n *\n * @remarks This package coordinates the communication between the different Firebase components\n * @packageDocumentation\n */\nregisterCoreComponents('');\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/component/dist/esm/index.esm2017.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@firebase/component/dist/esm/index.esm2017.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Component: function() { return /* binding */ Component; },\n/* harmony export */   ComponentContainer: function() { return /* binding */ ComponentContainer; },\n/* harmony export */   Provider: function() { return /* binding */ Provider; }\n/* harmony export */ });\n/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/util */ \"./node_modules/@firebase/util/dist/index.esm2017.js\");\n\n\n/**\n * Component for service name T, e.g. `auth`, `auth-internal`\n */\nclass Component {\n    /**\n     *\n     * @param name The public service name, e.g. app, auth, firestore, database\n     * @param instanceFactory Service factory responsible for creating the public interface\n     * @param type whether the service provided by the component is public or private\n     */\n    constructor(name, instanceFactory, type) {\n        this.name = name;\n        this.instanceFactory = instanceFactory;\n        this.type = type;\n        this.multipleInstances = false;\n        /**\n         * Properties to be added to the service namespace\n         */\n        this.serviceProps = {};\n        this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\n        this.onInstanceCreated = null;\n    }\n    setInstantiationMode(mode) {\n        this.instantiationMode = mode;\n        return this;\n    }\n    setMultipleInstances(multipleInstances) {\n        this.multipleInstances = multipleInstances;\n        return this;\n    }\n    setServiceProps(props) {\n        this.serviceProps = props;\n        return this;\n    }\n    setInstanceCreatedCallback(callback) {\n        this.onInstanceCreated = callback;\n        return this;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\n * NameServiceMapping[T] is an alias for the type of the instance\n */\nclass Provider {\n    constructor(name, container) {\n        this.name = name;\n        this.container = container;\n        this.component = null;\n        this.instances = new Map();\n        this.instancesDeferred = new Map();\n        this.instancesOptions = new Map();\n        this.onInitCallbacks = new Map();\n    }\n    /**\n     * @param identifier A provider can provide multiple instances of a service\n     * if this.component.multipleInstances is true.\n     */\n    get(identifier) {\n        // if multipleInstances is not supported, use the default name\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n        if (!this.instancesDeferred.has(normalizedIdentifier)) {\n            const deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_0__.Deferred();\n            this.instancesDeferred.set(normalizedIdentifier, deferred);\n            if (this.isInitialized(normalizedIdentifier) ||\n                this.shouldAutoInitialize()) {\n                // initialize the service if it can be auto-initialized\n                try {\n                    const instance = this.getOrInitializeService({\n                        instanceIdentifier: normalizedIdentifier\n                    });\n                    if (instance) {\n                        deferred.resolve(instance);\n                    }\n                }\n                catch (e) {\n                    // when the instance factory throws an exception during get(), it should not cause\n                    // a fatal error. We just return the unresolved promise in this case.\n                }\n            }\n        }\n        return this.instancesDeferred.get(normalizedIdentifier).promise;\n    }\n    getImmediate(options) {\n        var _a;\n        // if multipleInstances is not supported, use the default name\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\n        const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\n        if (this.isInitialized(normalizedIdentifier) ||\n            this.shouldAutoInitialize()) {\n            try {\n                return this.getOrInitializeService({\n                    instanceIdentifier: normalizedIdentifier\n                });\n            }\n            catch (e) {\n                if (optional) {\n                    return null;\n                }\n                else {\n                    throw e;\n                }\n            }\n        }\n        else {\n            // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\n            if (optional) {\n                return null;\n            }\n            else {\n                throw Error(`Service ${this.name} is not available`);\n            }\n        }\n    }\n    getComponent() {\n        return this.component;\n    }\n    setComponent(component) {\n        if (component.name !== this.name) {\n            throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\n        }\n        if (this.component) {\n            throw Error(`Component for ${this.name} has already been provided`);\n        }\n        this.component = component;\n        // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\n        if (!this.shouldAutoInitialize()) {\n            return;\n        }\n        // if the service is eager, initialize the default instance\n        if (isComponentEager(component)) {\n            try {\n                this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\n            }\n            catch (e) {\n                // when the instance factory for an eager Component throws an exception during the eager\n                // initialization, it should not cause a fatal error.\n                // TODO: Investigate if we need to make it configurable, because some component may want to cause\n                // a fatal error in this case?\n            }\n        }\n        // Create service instances for the pending promises and resolve them\n        // NOTE: if this.multipleInstances is false, only the default instance will be created\n        // and all promises with resolve with it regardless of the identifier.\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n            const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n            try {\n                // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\n                const instance = this.getOrInitializeService({\n                    instanceIdentifier: normalizedIdentifier\n                });\n                instanceDeferred.resolve(instance);\n            }\n            catch (e) {\n                // when the instance factory throws an exception, it should not cause\n                // a fatal error. We just leave the promise unresolved.\n            }\n        }\n    }\n    clearInstance(identifier = DEFAULT_ENTRY_NAME) {\n        this.instancesDeferred.delete(identifier);\n        this.instancesOptions.delete(identifier);\n        this.instances.delete(identifier);\n    }\n    // app.delete() will call this method on every provider to delete the services\n    // TODO: should we mark the provider as deleted?\n    async delete() {\n        const services = Array.from(this.instances.values());\n        await Promise.all([\n            ...services\n                .filter(service => 'INTERNAL' in service) // legacy services\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                .map(service => service.INTERNAL.delete()),\n            ...services\n                .filter(service => '_delete' in service) // modularized services\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                .map(service => service._delete())\n        ]);\n    }\n    isComponentSet() {\n        return this.component != null;\n    }\n    isInitialized(identifier = DEFAULT_ENTRY_NAME) {\n        return this.instances.has(identifier);\n    }\n    getOptions(identifier = DEFAULT_ENTRY_NAME) {\n        return this.instancesOptions.get(identifier) || {};\n    }\n    initialize(opts = {}) {\n        const { options = {} } = opts;\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\n        if (this.isInitialized(normalizedIdentifier)) {\n            throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\n        }\n        if (!this.isComponentSet()) {\n            throw Error(`Component ${this.name} has not been registered yet`);\n        }\n        const instance = this.getOrInitializeService({\n            instanceIdentifier: normalizedIdentifier,\n            options\n        });\n        // resolve any pending promise waiting for the service instance\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n            const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n            if (normalizedIdentifier === normalizedDeferredIdentifier) {\n                instanceDeferred.resolve(instance);\n            }\n        }\n        return instance;\n    }\n    /**\n     *\n     * @param callback - a function that will be invoked  after the provider has been initialized by calling provider.initialize().\n     * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\n     *\n     * @param identifier An optional instance identifier\n     * @returns a function to unregister the callback\n     */\n    onInit(callback, identifier) {\n        var _a;\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n        const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\n        existingCallbacks.add(callback);\n        this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\n        const existingInstance = this.instances.get(normalizedIdentifier);\n        if (existingInstance) {\n            callback(existingInstance, normalizedIdentifier);\n        }\n        return () => {\n            existingCallbacks.delete(callback);\n        };\n    }\n    /**\n     * Invoke onInit callbacks synchronously\n     * @param instance the service instance`\n     */\n    invokeOnInitCallbacks(instance, identifier) {\n        const callbacks = this.onInitCallbacks.get(identifier);\n        if (!callbacks) {\n            return;\n        }\n        for (const callback of callbacks) {\n            try {\n                callback(instance, identifier);\n            }\n            catch (_a) {\n                // ignore errors in the onInit callback\n            }\n        }\n    }\n    getOrInitializeService({ instanceIdentifier, options = {} }) {\n        let instance = this.instances.get(instanceIdentifier);\n        if (!instance && this.component) {\n            instance = this.component.instanceFactory(this.container, {\n                instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\n                options\n            });\n            this.instances.set(instanceIdentifier, instance);\n            this.instancesOptions.set(instanceIdentifier, options);\n            /**\n             * Invoke onInit listeners.\n             * Note this.component.onInstanceCreated is different, which is used by the component creator,\n             * while onInit listeners are registered by consumers of the provider.\n             */\n            this.invokeOnInitCallbacks(instance, instanceIdentifier);\n            /**\n             * Order is important\n             * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\n             * makes `isInitialized()` return true.\n             */\n            if (this.component.onInstanceCreated) {\n                try {\n                    this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\n                }\n                catch (_a) {\n                    // ignore errors in the onInstanceCreatedCallback\n                }\n            }\n        }\n        return instance || null;\n    }\n    normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\n        if (this.component) {\n            return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\n        }\n        else {\n            return identifier; // assume multiple instances are supported before the component is provided.\n        }\n    }\n    shouldAutoInitialize() {\n        return (!!this.component &&\n            this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\n    }\n}\n// undefined should be passed to the service factory for the default instance\nfunction normalizeIdentifierForFactory(identifier) {\n    return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\n}\nfunction isComponentEager(component) {\n    return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\n */\nclass ComponentContainer {\n    constructor(name) {\n        this.name = name;\n        this.providers = new Map();\n    }\n    /**\n     *\n     * @param component Component being added\n     * @param overwrite When a component with the same name has already been registered,\n     * if overwrite is true: overwrite the existing component with the new component and create a new\n     * provider with the new component. It can be useful in tests where you want to use different mocks\n     * for different tests.\n     * if overwrite is false: throw an exception\n     */\n    addComponent(component) {\n        const provider = this.getProvider(component.name);\n        if (provider.isComponentSet()) {\n            throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\n        }\n        provider.setComponent(component);\n    }\n    addOrOverwriteComponent(component) {\n        const provider = this.getProvider(component.name);\n        if (provider.isComponentSet()) {\n            // delete the existing provider from the container, so we can register the new component\n            this.providers.delete(component.name);\n        }\n        this.addComponent(component);\n    }\n    /**\n     * getProvider provides a type safe interface where it can only be called with a field name\n     * present in NameServiceMapping interface.\n     *\n     * Firebase SDKs providing services should extend NameServiceMapping interface to register\n     * themselves.\n     */\n    getProvider(name) {\n        if (this.providers.has(name)) {\n            return this.providers.get(name);\n        }\n        // create a Provider for a service that hasn't registered with Firebase\n        const provider = new Provider(name, this);\n        this.providers.set(name, provider);\n        return provider;\n    }\n    getProviders() {\n        return Array.from(this.providers.values());\n    }\n}\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/installations/dist/esm/index.esm2017.js\":\n/*!************************************************************************!*\\\n  !*** ./node_modules/@firebase/installations/dist/esm/index.esm2017.js ***!\n  \\************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deleteInstallations: function() { return /* binding */ deleteInstallations; },\n/* harmony export */   getId: function() { return /* binding */ getId; },\n/* harmony export */   getInstallations: function() { return /* binding */ getInstallations; },\n/* harmony export */   getToken: function() { return /* binding */ getToken; },\n/* harmony export */   onIdChange: function() { return /* binding */ onIdChange; }\n/* harmony export */ });\n/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/app */ \"./node_modules/@firebase/app/dist/esm/index.esm2017.js\");\n/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/component */ \"./node_modules/@firebase/component/dist/esm/index.esm2017.js\");\n/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @firebase/util */ \"./node_modules/@firebase/util/dist/index.esm2017.js\");\n/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! idb */ \"./node_modules/idb/build/index.js\");\n\n\n\n\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.18\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PENDING_TIMEOUT_MS = 10000;\nconst PACKAGE_VERSION = `w:${version}`;\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\nconst SERVICE = 'installations';\nconst SERVICE_NAME = 'Installations';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_DESCRIPTION_MAP = {\n    [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n    [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\n    [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\n    [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\n    [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\n    [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\n};\nconst ERROR_FACTORY = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__.ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\nfunction isServerError(error) {\n    return (error instanceof _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError &&\n        error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getInstallationsEndpoint({ projectId }) {\n    return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\n}\nfunction extractAuthTokenInfoFromResponse(response) {\n    return {\n        token: response.token,\n        requestStatus: 2 /* RequestStatus.COMPLETED */,\n        expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\n        creationTime: Date.now()\n    };\n}\nasync function getErrorFromResponse(requestName, response) {\n    const responseJson = await response.json();\n    const errorData = responseJson.error;\n    return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\n        requestName,\n        serverCode: errorData.code,\n        serverMessage: errorData.message,\n        serverStatus: errorData.status\n    });\n}\nfunction getHeaders({ apiKey }) {\n    return new Headers({\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'x-goog-api-key': apiKey\n    });\n}\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\n    const headers = getHeaders(appConfig);\n    headers.append('Authorization', getAuthorizationHeader(refreshToken));\n    return headers;\n}\n/**\n * Calls the passed in fetch wrapper and returns the response.\n * If the returned response has a status of 5xx, re-runs the function once and\n * returns the response.\n */\nasync function retryIfServerError(fn) {\n    const result = await fn();\n    if (result.status >= 500 && result.status < 600) {\n        // Internal Server Error. Retry request.\n        return fn();\n    }\n    return result;\n}\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\n    // This works because the server will never respond with fractions of a second.\n    return Number(responseExpiresIn.replace('s', '000'));\n}\nfunction getAuthorizationHeader(refreshToken) {\n    return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\n    const endpoint = getInstallationsEndpoint(appConfig);\n    const headers = getHeaders(appConfig);\n    // If heartbeat service exists, add the heartbeat string to the header.\n    const heartbeatService = heartbeatServiceProvider.getImmediate({\n        optional: true\n    });\n    if (heartbeatService) {\n        const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n        if (heartbeatsHeader) {\n            headers.append('x-firebase-client', heartbeatsHeader);\n        }\n    }\n    const body = {\n        fid,\n        authVersion: INTERNAL_AUTH_VERSION,\n        appId: appConfig.appId,\n        sdkVersion: PACKAGE_VERSION\n    };\n    const request = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (response.ok) {\n        const responseValue = await response.json();\n        const registeredInstallationEntry = {\n            fid: responseValue.fid || fid,\n            registrationStatus: 2 /* RequestStatus.COMPLETED */,\n            refreshToken: responseValue.refreshToken,\n            authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\n        };\n        return registeredInstallationEntry;\n    }\n    else {\n        throw await getErrorFromResponse('Create Installation', response);\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a promise that resolves after given time passes. */\nfunction sleep(ms) {\n    return new Promise(resolve => {\n        setTimeout(resolve, ms);\n    });\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction bufferToBase64UrlSafe(array) {\n    const b64 = btoa(String.fromCharCode(...array));\n    return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\nconst INVALID_FID = '';\n/**\n * Generates a new FID using random values from Web Crypto API.\n * Returns an empty string if FID generation fails for any reason.\n */\nfunction generateFid() {\n    try {\n        // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\n        // bytes. our implementation generates a 17 byte array instead.\n        const fidByteArray = new Uint8Array(17);\n        const crypto = self.crypto || self.msCrypto;\n        crypto.getRandomValues(fidByteArray);\n        // Replace the first 4 random bits with the constant FID header of 0b0111.\n        fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\n        const fid = encode(fidByteArray);\n        return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\n    }\n    catch (_a) {\n        // FID generation errored\n        return INVALID_FID;\n    }\n}\n/** Converts a FID Uint8Array to a base64 string representation. */\nfunction encode(fidByteArray) {\n    const b64String = bufferToBase64UrlSafe(fidByteArray);\n    // Remove the 23rd character that was added because of the extra 4 bits at the\n    // end of our 17 byte array, and the '=' padding.\n    return b64String.substr(0, 22);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a string key that can be used to identify the app. */\nfunction getKey(appConfig) {\n    return `${appConfig.appName}!${appConfig.appId}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst fidChangeCallbacks = new Map();\n/**\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\n * change to other tabs.\n */\nfunction fidChanged(appConfig, fid) {\n    const key = getKey(appConfig);\n    callFidChangeCallbacks(key, fid);\n    broadcastFidChange(key, fid);\n}\nfunction addCallback(appConfig, callback) {\n    // Open the broadcast channel if it's not already open,\n    // to be able to listen to change events from other tabs.\n    getBroadcastChannel();\n    const key = getKey(appConfig);\n    let callbackSet = fidChangeCallbacks.get(key);\n    if (!callbackSet) {\n        callbackSet = new Set();\n        fidChangeCallbacks.set(key, callbackSet);\n    }\n    callbackSet.add(callback);\n}\nfunction removeCallback(appConfig, callback) {\n    const key = getKey(appConfig);\n    const callbackSet = fidChangeCallbacks.get(key);\n    if (!callbackSet) {\n        return;\n    }\n    callbackSet.delete(callback);\n    if (callbackSet.size === 0) {\n        fidChangeCallbacks.delete(key);\n    }\n    // Close broadcast channel if there are no more callbacks.\n    closeBroadcastChannel();\n}\nfunction callFidChangeCallbacks(key, fid) {\n    const callbacks = fidChangeCallbacks.get(key);\n    if (!callbacks) {\n        return;\n    }\n    for (const callback of callbacks) {\n        callback(fid);\n    }\n}\nfunction broadcastFidChange(key, fid) {\n    const channel = getBroadcastChannel();\n    if (channel) {\n        channel.postMessage({ key, fid });\n    }\n    closeBroadcastChannel();\n}\nlet broadcastChannel = null;\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\nfunction getBroadcastChannel() {\n    if (!broadcastChannel && 'BroadcastChannel' in self) {\n        broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\n        broadcastChannel.onmessage = e => {\n            callFidChangeCallbacks(e.data.key, e.data.fid);\n        };\n    }\n    return broadcastChannel;\n}\nfunction closeBroadcastChannel() {\n    if (fidChangeCallbacks.size === 0 && broadcastChannel) {\n        broadcastChannel.close();\n        broadcastChannel = null;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DATABASE_NAME = 'firebase-installations-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = (0,idb__WEBPACK_IMPORTED_MODULE_3__.openDB)(DATABASE_NAME, DATABASE_VERSION, {\n            upgrade: (db, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through\n                // behavior is what we want, because if there are multiple versions between\n                // the old version and the current version, we want ALL the migrations\n                // that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        db.createObjectStore(OBJECT_STORE_NAME);\n                }\n            }\n        });\n    }\n    return dbPromise;\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function set(appConfig, value) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    const objectStore = tx.objectStore(OBJECT_STORE_NAME);\n    const oldValue = (await objectStore.get(key));\n    await objectStore.put(value, key);\n    await tx.done;\n    if (!oldValue || oldValue.fid !== value.fid) {\n        fidChanged(appConfig, value.fid);\n    }\n    return value;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function remove(appConfig) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n    await tx.done;\n}\n/**\n * Atomically updates a record with the result of updateFn, which gets\n * called with the current value. If newValue is undefined, the record is\n * deleted instead.\n * @return Updated value\n */\nasync function update(appConfig, updateFn) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    const store = tx.objectStore(OBJECT_STORE_NAME);\n    const oldValue = (await store.get(key));\n    const newValue = updateFn(oldValue);\n    if (newValue === undefined) {\n        await store.delete(key);\n    }\n    else {\n        await store.put(newValue, key);\n    }\n    await tx.done;\n    if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\n        fidChanged(appConfig, newValue.fid);\n    }\n    return newValue;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates and returns the InstallationEntry from the database.\n * Also triggers a registration request if it is necessary and possible.\n */\nasync function getInstallationEntry(installations) {\n    let registrationPromise;\n    const installationEntry = await update(installations.appConfig, oldEntry => {\n        const installationEntry = updateOrCreateInstallationEntry(oldEntry);\n        const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\n        registrationPromise = entryWithPromise.registrationPromise;\n        return entryWithPromise.installationEntry;\n    });\n    if (installationEntry.fid === INVALID_FID) {\n        // FID generation failed. Waiting for the FID from the server.\n        return { installationEntry: await registrationPromise };\n    }\n    return {\n        installationEntry,\n        registrationPromise\n    };\n}\n/**\n * Creates a new Installation Entry if one does not exist.\n * Also clears timed out pending requests.\n */\nfunction updateOrCreateInstallationEntry(oldEntry) {\n    const entry = oldEntry || {\n        fid: generateFid(),\n        registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n    };\n    return clearTimedOutRequest(entry);\n}\n/**\n * If the Firebase Installation is not registered yet, this will trigger the\n * registration and return an InProgressInstallationEntry.\n *\n * If registrationPromise does not exist, the installationEntry is guaranteed\n * to be registered.\n */\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\n    if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        if (!navigator.onLine) {\n            // Registration required but app is offline.\n            const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\n            return {\n                installationEntry,\n                registrationPromise: registrationPromiseWithError\n            };\n        }\n        // Try registering. Change status to IN_PROGRESS.\n        const inProgressEntry = {\n            fid: installationEntry.fid,\n            registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\n            registrationTime: Date.now()\n        };\n        const registrationPromise = registerInstallation(installations, inProgressEntry);\n        return { installationEntry: inProgressEntry, registrationPromise };\n    }\n    else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        return {\n            installationEntry,\n            registrationPromise: waitUntilFidRegistration(installations)\n        };\n    }\n    else {\n        return { installationEntry };\n    }\n}\n/** This will be executed only once for each new Firebase Installation. */\nasync function registerInstallation(installations, installationEntry) {\n    try {\n        const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\n        return set(installations.appConfig, registeredInstallationEntry);\n    }\n    catch (e) {\n        if (isServerError(e) && e.customData.serverCode === 409) {\n            // Server returned a \"FID cannot be used\" error.\n            // Generate a new ID next time.\n            await remove(installations.appConfig);\n        }\n        else {\n            // Registration failed. Set FID as not registered.\n            await set(installations.appConfig, {\n                fid: installationEntry.fid,\n                registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n            });\n        }\n        throw e;\n    }\n}\n/** Call if FID registration is pending in another request. */\nasync function waitUntilFidRegistration(installations) {\n    // Unfortunately, there is no way of reliably observing when a value in\n    // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n    // so we need to poll.\n    let entry = await updateInstallationRequest(installations.appConfig);\n    while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        // createInstallation request still in progress.\n        await sleep(100);\n        entry = await updateInstallationRequest(installations.appConfig);\n    }\n    if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        // The request timed out or failed in a different call. Try again.\n        const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\n        if (registrationPromise) {\n            return registrationPromise;\n        }\n        else {\n            // if there is no registrationPromise, entry is registered.\n            return installationEntry;\n        }\n    }\n    return entry;\n}\n/**\n * Called only if there is a CreateInstallation request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * CreateInstallation request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateInstallationRequest(appConfig) {\n    return update(appConfig, oldEntry => {\n        if (!oldEntry) {\n            throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\n        }\n        return clearTimedOutRequest(oldEntry);\n    });\n}\nfunction clearTimedOutRequest(entry) {\n    if (hasInstallationRequestTimedOut(entry)) {\n        return {\n            fid: entry.fid,\n            registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n        };\n    }\n    return entry;\n}\nfunction hasInstallationRequestTimedOut(installationEntry) {\n    return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n        installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\n    const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\n    const headers = getHeadersWithAuth(appConfig, installationEntry);\n    // If heartbeat service exists, add the heartbeat string to the header.\n    const heartbeatService = heartbeatServiceProvider.getImmediate({\n        optional: true\n    });\n    if (heartbeatService) {\n        const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n        if (heartbeatsHeader) {\n            headers.append('x-firebase-client', heartbeatsHeader);\n        }\n    }\n    const body = {\n        installation: {\n            sdkVersion: PACKAGE_VERSION,\n            appId: appConfig.appId\n        }\n    };\n    const request = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (response.ok) {\n        const responseValue = await response.json();\n        const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\n        return completedAuthToken;\n    }\n    else {\n        throw await getErrorFromResponse('Generate Auth Token', response);\n    }\n}\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\n    return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a valid authentication token for the installation. Generates a new\n * token if one doesn't exist, is expired or about to expire.\n *\n * Should only be called if the Firebase Installation is registered.\n */\nasync function refreshAuthToken(installations, forceRefresh = false) {\n    let tokenPromise;\n    const entry = await update(installations.appConfig, oldEntry => {\n        if (!isEntryRegistered(oldEntry)) {\n            throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n        }\n        const oldAuthToken = oldEntry.authToken;\n        if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\n            // There is a valid token in the DB.\n            return oldEntry;\n        }\n        else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n            // There already is a token request in progress.\n            tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\n            return oldEntry;\n        }\n        else {\n            // No token or token expired.\n            if (!navigator.onLine) {\n                throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n            }\n            const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\n            tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\n            return inProgressEntry;\n        }\n    });\n    const authToken = tokenPromise\n        ? await tokenPromise\n        : entry.authToken;\n    return authToken;\n}\n/**\n * Call only if FID is registered and Auth Token request is in progress.\n *\n * Waits until the current pending request finishes. If the request times out,\n * tries once in this thread as well.\n */\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\n    // Unfortunately, there is no way of reliably observing when a value in\n    // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n    // so we need to poll.\n    let entry = await updateAuthTokenRequest(installations.appConfig);\n    while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        // generateAuthToken still in progress.\n        await sleep(100);\n        entry = await updateAuthTokenRequest(installations.appConfig);\n    }\n    const authToken = entry.authToken;\n    if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        // The request timed out or failed in a different call. Try again.\n        return refreshAuthToken(installations, forceRefresh);\n    }\n    else {\n        return authToken;\n    }\n}\n/**\n * Called only if there is a GenerateAuthToken request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * GenerateAuthToken request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateAuthTokenRequest(appConfig) {\n    return update(appConfig, oldEntry => {\n        if (!isEntryRegistered(oldEntry)) {\n            throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n        }\n        const oldAuthToken = oldEntry.authToken;\n        if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\n            return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n        }\n        return oldEntry;\n    });\n}\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\n    try {\n        const authToken = await generateAuthTokenRequest(installations, installationEntry);\n        const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\n        await set(installations.appConfig, updatedInstallationEntry);\n        return authToken;\n    }\n    catch (e) {\n        if (isServerError(e) &&\n            (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\n            // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\n            // Generate a new ID next time.\n            await remove(installations.appConfig);\n        }\n        else {\n            const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n            await set(installations.appConfig, updatedInstallationEntry);\n        }\n        throw e;\n    }\n}\nfunction isEntryRegistered(installationEntry) {\n    return (installationEntry !== undefined &&\n        installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\n}\nfunction isAuthTokenValid(authToken) {\n    return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\n        !isAuthTokenExpired(authToken));\n}\nfunction isAuthTokenExpired(authToken) {\n    const now = Date.now();\n    return (now < authToken.creationTime ||\n        authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\n}\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\n    const inProgressAuthToken = {\n        requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\n        requestTime: Date.now()\n    };\n    return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\n}\nfunction hasAuthTokenRequestTimedOut(authToken) {\n    return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n        authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a Firebase Installation if there isn't one for the app and\n * returns the Installation ID.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function getId(installations) {\n    const installationsImpl = installations;\n    const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\n    if (registrationPromise) {\n        registrationPromise.catch(console.error);\n    }\n    else {\n        // If the installation is already registered, update the authentication\n        // token if needed.\n        refreshAuthToken(installationsImpl).catch(console.error);\n    }\n    return installationEntry.fid;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a Firebase Installations auth token, identifying the current\n * Firebase Installation.\n * @param installations - The `Installations` instance.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nasync function getToken(installations, forceRefresh = false) {\n    const installationsImpl = installations;\n    await completeInstallationRegistration(installationsImpl);\n    // At this point we either have a Registered Installation in the DB, or we've\n    // already thrown an error.\n    const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\n    return authToken.token;\n}\nasync function completeInstallationRegistration(installations) {\n    const { registrationPromise } = await getInstallationEntry(installations);\n    if (registrationPromise) {\n        // A createInstallation request is in progress. Wait until it finishes.\n        await registrationPromise;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteInstallationRequest(appConfig, installationEntry) {\n    const endpoint = getDeleteEndpoint(appConfig, installationEntry);\n    const headers = getHeadersWithAuth(appConfig, installationEntry);\n    const request = {\n        method: 'DELETE',\n        headers\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (!response.ok) {\n        throw await getErrorFromResponse('Delete Installation', response);\n    }\n}\nfunction getDeleteEndpoint(appConfig, { fid }) {\n    return `${getInstallationsEndpoint(appConfig)}/${fid}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Deletes the Firebase Installation and all associated data.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function deleteInstallations(installations) {\n    const { appConfig } = installations;\n    const entry = await update(appConfig, oldEntry => {\n        if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n            // Delete the unregistered entry without sending a deleteInstallation request.\n            return undefined;\n        }\n        return oldEntry;\n    });\n    if (entry) {\n        if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n            // Can't delete while trying to register.\n            throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\n        }\n        else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\n            if (!navigator.onLine) {\n                throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n            }\n            else {\n                await deleteInstallationRequest(appConfig, entry);\n                await remove(appConfig);\n            }\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Sets a new callback that will get called when Installation ID changes.\n * Returns an unsubscribe function that will remove the callback when called.\n * @param installations - The `Installations` instance.\n * @param callback - The callback function that is invoked when FID changes.\n * @returns A function that can be called to unsubscribe.\n *\n * @public\n */\nfunction onIdChange(installations, callback) {\n    const { appConfig } = installations;\n    addCallback(appConfig, callback);\n    return () => {\n        removeCallback(appConfig, callback);\n    };\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns an instance of {@link Installations} associated with the given\n * {@link @firebase/app#FirebaseApp} instance.\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\n *\n * @public\n */\nfunction getInstallations(app = (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApp)()) {\n    const installationsImpl = (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider)(app, 'installations').getImmediate();\n    return installationsImpl;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n    if (!app || !app.options) {\n        throw getMissingValueError('App Configuration');\n    }\n    if (!app.name) {\n        throw getMissingValueError('App Name');\n    }\n    // Required app config keys\n    const configKeys = [\n        'projectId',\n        'apiKey',\n        'appId'\n    ];\n    for (const keyName of configKeys) {\n        if (!app.options[keyName]) {\n            throw getMissingValueError(keyName);\n        }\n    }\n    return {\n        appName: app.name,\n        projectId: app.options.projectId,\n        apiKey: app.options.apiKey,\n        appId: app.options.appId\n    };\n}\nfunction getMissingValueError(valueName) {\n    return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n        valueName\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst INSTALLATIONS_NAME = 'installations';\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\nconst publicFactory = (container) => {\n    const app = container.getProvider('app').getImmediate();\n    // Throws if app isn't configured properly.\n    const appConfig = extractAppConfig(app);\n    const heartbeatServiceProvider = (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider)(app, 'heartbeat');\n    const installationsImpl = {\n        app,\n        appConfig,\n        heartbeatServiceProvider,\n        _delete: () => Promise.resolve()\n    };\n    return installationsImpl;\n};\nconst internalFactory = (container) => {\n    const app = container.getProvider('app').getImmediate();\n    // Internal FIS instance relies on public FIS instance.\n    const installations = (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider)(app, INSTALLATIONS_NAME).getImmediate();\n    const installationsInternal = {\n        getId: () => getId(installations),\n        getToken: (forceRefresh) => getToken(installations, forceRefresh)\n    };\n    return installationsInternal;\n};\nfunction registerInstallations() {\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__._registerComponent)(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__.Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__._registerComponent)(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__.Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n}\n\n/**\n * The Firebase Installations Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterInstallations();\n(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version);\n// BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version, 'esm2017');\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/logger/dist/esm/index.esm2017.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@firebase/logger/dist/esm/index.esm2017.js ***!\n  \\*****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   LogLevel: function() { return /* binding */ LogLevel; },\n/* harmony export */   Logger: function() { return /* binding */ Logger; },\n/* harmony export */   setLogLevel: function() { return /* binding */ setLogLevel; },\n/* harmony export */   setUserLogHandler: function() { return /* binding */ setUserLogHandler; }\n/* harmony export */ });\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A container for all of the Logger instances\n */\nconst instances = [];\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nvar LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n    LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\n    LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\n    LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\n    LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\n    LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nconst levelStringToEnum = {\n    'debug': LogLevel.DEBUG,\n    'verbose': LogLevel.VERBOSE,\n    'info': LogLevel.INFO,\n    'warn': LogLevel.WARN,\n    'error': LogLevel.ERROR,\n    'silent': LogLevel.SILENT\n};\n/**\n * The default log level\n */\nconst defaultLogLevel = LogLevel.INFO;\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n    [LogLevel.DEBUG]: 'log',\n    [LogLevel.VERBOSE]: 'log',\n    [LogLevel.INFO]: 'info',\n    [LogLevel.WARN]: 'warn',\n    [LogLevel.ERROR]: 'error'\n};\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler = (instance, logType, ...args) => {\n    if (logType < instance.logLevel) {\n        return;\n    }\n    const now = new Date().toISOString();\n    const method = ConsoleMethod[logType];\n    if (method) {\n        console[method](`[${now}]  ${instance.name}:`, ...args);\n    }\n    else {\n        throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\n    }\n};\nclass Logger {\n    /**\n     * Gives you an instance of a Logger to capture messages according to\n     * Firebase's logging scheme.\n     *\n     * @param name The name that the logs will be associated with\n     */\n    constructor(name) {\n        this.name = name;\n        /**\n         * The log level of the given Logger instance.\n         */\n        this._logLevel = defaultLogLevel;\n        /**\n         * The main (internal) log handler for the Logger instance.\n         * Can be set to a new function in internal package code but not by user.\n         */\n        this._logHandler = defaultLogHandler;\n        /**\n         * The optional, additional, user-defined log handler for the Logger instance.\n         */\n        this._userLogHandler = null;\n        /**\n         * Capture the current instance for later use\n         */\n        instances.push(this);\n    }\n    get logLevel() {\n        return this._logLevel;\n    }\n    set logLevel(val) {\n        if (!(val in LogLevel)) {\n            throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n        }\n        this._logLevel = val;\n    }\n    // Workaround for setter/getter having to be the same type.\n    setLogLevel(val) {\n        this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n    }\n    get logHandler() {\n        return this._logHandler;\n    }\n    set logHandler(val) {\n        if (typeof val !== 'function') {\n            throw new TypeError('Value assigned to `logHandler` must be a function');\n        }\n        this._logHandler = val;\n    }\n    get userLogHandler() {\n        return this._userLogHandler;\n    }\n    set userLogHandler(val) {\n        this._userLogHandler = val;\n    }\n    /**\n     * The functions below are all based on the `console` interface\n     */\n    debug(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n        this._logHandler(this, LogLevel.DEBUG, ...args);\n    }\n    log(...args) {\n        this._userLogHandler &&\n            this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n        this._logHandler(this, LogLevel.VERBOSE, ...args);\n    }\n    info(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n        this._logHandler(this, LogLevel.INFO, ...args);\n    }\n    warn(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n        this._logHandler(this, LogLevel.WARN, ...args);\n    }\n    error(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n        this._logHandler(this, LogLevel.ERROR, ...args);\n    }\n}\nfunction setLogLevel(level) {\n    instances.forEach(inst => {\n        inst.setLogLevel(level);\n    });\n}\nfunction setUserLogHandler(logCallback, options) {\n    for (const instance of instances) {\n        let customLogLevel = null;\n        if (options && options.level) {\n            customLogLevel = levelStringToEnum[options.level];\n        }\n        if (logCallback === null) {\n            instance.userLogHandler = null;\n        }\n        else {\n            instance.userLogHandler = (instance, level, ...args) => {\n                const message = args\n                    .map(arg => {\n                    if (arg == null) {\n                        return null;\n                    }\n                    else if (typeof arg === 'string') {\n                        return arg;\n                    }\n                    else if (typeof arg === 'number' || typeof arg === 'boolean') {\n                        return arg.toString();\n                    }\n                    else if (arg instanceof Error) {\n                        return arg.message;\n                    }\n                    else {\n                        try {\n                            return JSON.stringify(arg);\n                        }\n                        catch (ignored) {\n                            return null;\n                        }\n                    }\n                })\n                    .filter(arg => arg)\n                    .join(' ');\n                if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\n                    logCallback({\n                        level: LogLevel[level].toLowerCase(),\n                        message,\n                        args,\n                        type: instance.name\n                    });\n                }\n            };\n        }\n    }\n}\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/messaging/dist/esm/index.esm2017.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@firebase/messaging/dist/esm/index.esm2017.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deleteToken: function() { return /* binding */ deleteToken; },\n/* harmony export */   getMessaging: function() { return /* binding */ getMessagingInWindow; },\n/* harmony export */   getToken: function() { return /* binding */ getToken; },\n/* harmony export */   isSupported: function() { return /* binding */ isWindowSupported; },\n/* harmony export */   onMessage: function() { return /* binding */ onMessage; }\n/* harmony export */ });\n/* harmony import */ var _firebase_installations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/installations */ \"./node_modules/@firebase/installations/dist/esm/index.esm2017.js\");\n/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/component */ \"./node_modules/@firebase/component/dist/esm/index.esm2017.js\");\n/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! idb */ \"./node_modules/idb/build/index.js\");\n/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @firebase/util */ \"./node_modules/@firebase/util/dist/index.esm2017.js\");\n/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @firebase/app */ \"./node_modules/@firebase/app/dist/esm/index.esm2017.js\");\n\n\n\n\n\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nconst DEFAULT_REGISTRATION_TIMEOUT = 10000;\nvar MessageType$1;\n(function (MessageType) {\n    MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\n    MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\nvar MessageType;\n(function (MessageType) {\n    MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\n    MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\n})(MessageType || (MessageType = {}));\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction arrayToBase64(array) {\n    const uint8Array = new Uint8Array(array);\n    const base64String = btoa(String.fromCharCode(...uint8Array));\n    return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nfunction base64ToArray(base64String) {\n    const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n    const base64 = (base64String + padding)\n        .replace(/\\-/g, '+')\n        .replace(/_/g, '/');\n    const rawData = atob(base64);\n    const outputArray = new Uint8Array(rawData.length);\n    for (let i = 0; i < rawData.length; ++i) {\n        outputArray[i] = rawData.charCodeAt(i);\n    }\n    return outputArray;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\nasync function migrateOldDatabase(senderId) {\n    if ('databases' in indexedDB) {\n        // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n        // typecast when it lands in TS types.\n        const databases = await indexedDB.databases();\n        const dbNames = databases.map(db => db.name);\n        if (!dbNames.includes(OLD_DB_NAME)) {\n            // old DB didn't exist, no need to open.\n            return null;\n        }\n    }\n    let tokenDetails = null;\n    const db = await (0,idb__WEBPACK_IMPORTED_MODULE_2__.openDB)(OLD_DB_NAME, OLD_DB_VERSION, {\n        upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n            var _a;\n            if (oldVersion < 2) {\n                // Database too old, skip migration.\n                return;\n            }\n            if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n                // Database did not exist. Nothing to do.\n                return;\n            }\n            const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n            const value = await objectStore.index('fcmSenderId').get(senderId);\n            await objectStore.clear();\n            if (!value) {\n                // No entry in the database, nothing to migrate.\n                return;\n            }\n            if (oldVersion === 2) {\n                const oldDetails = value;\n                if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n                    return;\n                }\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\n                    subscriptionOptions: {\n                        auth: oldDetails.auth,\n                        p256dh: oldDetails.p256dh,\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: typeof oldDetails.vapidKey === 'string'\n                            ? oldDetails.vapidKey\n                            : arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n            else if (oldVersion === 3) {\n                const oldDetails = value;\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: oldDetails.createTime,\n                    subscriptionOptions: {\n                        auth: arrayToBase64(oldDetails.auth),\n                        p256dh: arrayToBase64(oldDetails.p256dh),\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n            else if (oldVersion === 4) {\n                const oldDetails = value;\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: oldDetails.createTime,\n                    subscriptionOptions: {\n                        auth: arrayToBase64(oldDetails.auth),\n                        p256dh: arrayToBase64(oldDetails.p256dh),\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n        }\n    });\n    db.close();\n    // Delete all old databases.\n    await (0,idb__WEBPACK_IMPORTED_MODULE_2__.deleteDB)(OLD_DB_NAME);\n    await (0,idb__WEBPACK_IMPORTED_MODULE_2__.deleteDB)('fcm_vapid_details_db');\n    await (0,idb__WEBPACK_IMPORTED_MODULE_2__.deleteDB)('undefined');\n    return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\nfunction checkTokenDetails(tokenDetails) {\n    if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n        return false;\n    }\n    const { subscriptionOptions } = tokenDetails;\n    return (typeof tokenDetails.createTime === 'number' &&\n        tokenDetails.createTime > 0 &&\n        typeof tokenDetails.token === 'string' &&\n        tokenDetails.token.length > 0 &&\n        typeof subscriptionOptions.auth === 'string' &&\n        subscriptionOptions.auth.length > 0 &&\n        typeof subscriptionOptions.p256dh === 'string' &&\n        subscriptionOptions.p256dh.length > 0 &&\n        typeof subscriptionOptions.endpoint === 'string' &&\n        subscriptionOptions.endpoint.length > 0 &&\n        typeof subscriptionOptions.swScope === 'string' &&\n        subscriptionOptions.swScope.length > 0 &&\n        typeof subscriptionOptions.vapidKey === 'string' &&\n        subscriptionOptions.vapidKey.length > 0);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Exported for tests.\nconst DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = (0,idb__WEBPACK_IMPORTED_MODULE_2__.openDB)(DATABASE_NAME, DATABASE_VERSION, {\n            upgrade: (upgradeDb, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n                // because if there are multiple versions between the old version and the current version, we\n                // want ALL the migrations that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n                }\n            }\n        });\n    }\n    return dbPromise;\n}\n/** Gets record(s) from the objectStore that match the given key. */\nasync function dbGet(firebaseDependencies) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tokenDetails = (await db\n        .transaction(OBJECT_STORE_NAME)\n        .objectStore(OBJECT_STORE_NAME)\n        .get(key));\n    if (tokenDetails) {\n        return tokenDetails;\n    }\n    else {\n        // Check if there is a tokenDetails object in the old DB.\n        const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\n        if (oldTokenDetails) {\n            await dbSet(firebaseDependencies, oldTokenDetails);\n            return oldTokenDetails;\n        }\n    }\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function dbSet(firebaseDependencies, tokenDetails) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n    await tx.done;\n    return tokenDetails;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function dbRemove(firebaseDependencies) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n    await tx.done;\n}\nfunction getKey({ appConfig }) {\n    return appConfig.appId;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_MAP = {\n    [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n    [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\n    [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\n    [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\n    [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\n    [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\n    [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n    [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\n    [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n    [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\n    [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\n        'user from FCM: {$errorInfo}',\n    [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\n    [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\n    [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\n        'called before calling getToken() to ensure your service worker is used.',\n    [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n    [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\n    [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\n    [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\n        'called before calling getToken() to ensure your VAPID key is used.'\n};\nconst ERROR_FACTORY = new _firebase_util__WEBPACK_IMPORTED_MODULE_3__.ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\n    const headers = await getHeaders(firebaseDependencies);\n    const body = getBody(subscriptionOptions);\n    const subscribeOptions = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    let responseData;\n    try {\n        const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\n        responseData = await response.json();\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n    if (responseData.error) {\n        const message = responseData.error.message;\n        throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n            errorInfo: message\n        });\n    }\n    if (!responseData.token) {\n        throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\n    }\n    return responseData.token;\n}\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\n    const headers = await getHeaders(firebaseDependencies);\n    const body = getBody(tokenDetails.subscriptionOptions);\n    const updateOptions = {\n        method: 'PATCH',\n        headers,\n        body: JSON.stringify(body)\n    };\n    let responseData;\n    try {\n        const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\n        responseData = await response.json();\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n    if (responseData.error) {\n        const message = responseData.error.message;\n        throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n            errorInfo: message\n        });\n    }\n    if (!responseData.token) {\n        throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\n    }\n    return responseData.token;\n}\nasync function requestDeleteToken(firebaseDependencies, token) {\n    const headers = await getHeaders(firebaseDependencies);\n    const unsubscribeOptions = {\n        method: 'DELETE',\n        headers\n    };\n    try {\n        const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\n        const responseData = await response.json();\n        if (responseData.error) {\n            const message = responseData.error.message;\n            throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n                errorInfo: message\n            });\n        }\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n}\nfunction getEndpoint({ projectId }) {\n    return `${ENDPOINT}/projects/${projectId}/registrations`;\n}\nasync function getHeaders({ appConfig, installations }) {\n    const authToken = await installations.getToken();\n    return new Headers({\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'x-goog-api-key': appConfig.apiKey,\n        'x-goog-firebase-installations-auth': `FIS ${authToken}`\n    });\n}\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\n    const body = {\n        web: {\n            endpoint,\n            auth,\n            p256dh\n        }\n    };\n    if (vapidKey !== DEFAULT_VAPID_KEY) {\n        body.web.applicationPubKey = vapidKey;\n    }\n    return body;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\nasync function getTokenInternal(messaging) {\n    const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\n    const subscriptionOptions = {\n        vapidKey: messaging.vapidKey,\n        swScope: messaging.swRegistration.scope,\n        endpoint: pushSubscription.endpoint,\n        auth: arrayToBase64(pushSubscription.getKey('auth')),\n        p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\n    };\n    const tokenDetails = await dbGet(messaging.firebaseDependencies);\n    if (!tokenDetails) {\n        // No token, get a new one.\n        return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n    }\n    else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\n        // Invalid token, get a new one.\n        try {\n            await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n        }\n        catch (e) {\n            // Suppress errors because of #2364\n            console.warn(e);\n        }\n        return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n    }\n    else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n        // Weekly token refresh\n        return updateToken(messaging, {\n            token: tokenDetails.token,\n            createTime: Date.now(),\n            subscriptionOptions\n        });\n    }\n    else {\n        // Valid token, nothing to do.\n        return tokenDetails.token;\n    }\n}\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nasync function deleteTokenInternal(messaging) {\n    const tokenDetails = await dbGet(messaging.firebaseDependencies);\n    if (tokenDetails) {\n        await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n        await dbRemove(messaging.firebaseDependencies);\n    }\n    // Unsubscribe from the push subscription.\n    const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\n    if (pushSubscription) {\n        return pushSubscription.unsubscribe();\n    }\n    // If there's no SW, consider it a success.\n    return true;\n}\nasync function updateToken(messaging, tokenDetails) {\n    try {\n        const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\n        const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\n        await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n        return updatedToken;\n    }\n    catch (e) {\n        throw e;\n    }\n}\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\n    const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\n    const tokenDetails = {\n        token,\n        createTime: Date.now(),\n        subscriptionOptions\n    };\n    await dbSet(firebaseDependencies, tokenDetails);\n    return tokenDetails.token;\n}\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(swRegistration, vapidKey) {\n    const subscription = await swRegistration.pushManager.getSubscription();\n    if (subscription) {\n        return subscription;\n    }\n    return swRegistration.pushManager.subscribe({\n        userVisibleOnly: true,\n        // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n        // submitted to pushManager#subscribe must be of type Uint8Array.\n        applicationServerKey: base64ToArray(vapidKey)\n    });\n}\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(dbOptions, currentOptions) {\n    const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n    const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n    const isAuthEqual = currentOptions.auth === dbOptions.auth;\n    const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n    return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction externalizePayload(internalPayload) {\n    const payload = {\n        from: internalPayload.from,\n        // eslint-disable-next-line camelcase\n        collapseKey: internalPayload.collapse_key,\n        // eslint-disable-next-line camelcase\n        messageId: internalPayload.fcmMessageId\n    };\n    propagateNotificationPayload(payload, internalPayload);\n    propagateDataPayload(payload, internalPayload);\n    propagateFcmOptions(payload, internalPayload);\n    return payload;\n}\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\n    if (!messagePayloadInternal.notification) {\n        return;\n    }\n    payload.notification = {};\n    const title = messagePayloadInternal.notification.title;\n    if (!!title) {\n        payload.notification.title = title;\n    }\n    const body = messagePayloadInternal.notification.body;\n    if (!!body) {\n        payload.notification.body = body;\n    }\n    const image = messagePayloadInternal.notification.image;\n    if (!!image) {\n        payload.notification.image = image;\n    }\n    const icon = messagePayloadInternal.notification.icon;\n    if (!!icon) {\n        payload.notification.icon = icon;\n    }\n}\nfunction propagateDataPayload(payload, messagePayloadInternal) {\n    if (!messagePayloadInternal.data) {\n        return;\n    }\n    payload.data = messagePayloadInternal.data;\n}\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\n    var _a, _b, _c, _d, _e;\n    // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n    if (!messagePayloadInternal.fcmOptions &&\n        !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\n        return;\n    }\n    payload.fcmOptions = {};\n    const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\n    if (!!link) {\n        payload.fcmOptions.link = link;\n    }\n    // eslint-disable-next-line camelcase\n    const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\n    if (!!analyticsLabel) {\n        payload.fcmOptions.analyticsLabel = analyticsLabel;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isConsoleMessage(data) {\n    // This message has a campaign ID, meaning it was sent using the Firebase Console.\n    return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\nfunction _mergeStrings(s1, s2) {\n    const resultArray = [];\n    for (let i = 0; i < s1.length; i++) {\n        resultArray.push(s1.charAt(i));\n        if (i < s2.length) {\n            resultArray.push(s2.charAt(i));\n        }\n    }\n    return resultArray.join('');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n    if (!app || !app.options) {\n        throw getMissingValueError('App Configuration Object');\n    }\n    if (!app.name) {\n        throw getMissingValueError('App Name');\n    }\n    // Required app config keys\n    const configKeys = [\n        'projectId',\n        'apiKey',\n        'appId',\n        'messagingSenderId'\n    ];\n    const { options } = app;\n    for (const keyName of configKeys) {\n        if (!options[keyName]) {\n            throw getMissingValueError(keyName);\n        }\n    }\n    return {\n        appName: app.name,\n        projectId: options.projectId,\n        apiKey: options.apiKey,\n        appId: options.appId,\n        senderId: options.messagingSenderId\n    };\n}\nfunction getMissingValueError(valueName) {\n    return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n        valueName\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MessagingService {\n    constructor(app, installations, analyticsProvider) {\n        // logging is only done with end user consent. Default to false.\n        this.deliveryMetricsExportedToBigQueryEnabled = false;\n        this.onBackgroundMessageHandler = null;\n        this.onMessageHandler = null;\n        this.logEvents = [];\n        this.isLogServiceStarted = false;\n        const appConfig = extractAppConfig(app);\n        this.firebaseDependencies = {\n            app,\n            appConfig,\n            installations,\n            analyticsProvider\n        };\n    }\n    _delete() {\n        return Promise.resolve();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function registerDefaultSw(messaging) {\n    try {\n        messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\n            scope: DEFAULT_SW_SCOPE\n        });\n        // The timing when browser updates sw when sw has an update is unreliable from experiment. It\n        // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\n        // is stuck with the old version. For example,\n        // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\n        // sw if there was an update.\n        messaging.swRegistration.update().catch(() => {\n            /* it is non blocking and we don't care if it failed */\n        });\n        await waitForRegistrationActive(messaging.swRegistration);\n    }\n    catch (e) {\n        throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\n            browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\n        });\n    }\n}\n/**\n * Waits for registration to become active. MDN documentation claims that\n * a service worker registration should be ready to use after awaiting\n * navigator.serviceWorker.register() but that doesn't seem to be the case in\n * practice, causing the SDK to throw errors when calling\n * swRegistration.pushManager.subscribe() too soon after register(). The only\n * solution seems to be waiting for the service worker registration `state`\n * to become \"active\".\n */\nasync function waitForRegistrationActive(registration) {\n    return new Promise((resolve, reject) => {\n        const rejectTimeout = setTimeout(() => reject(new Error(`Service worker not registered after ${DEFAULT_REGISTRATION_TIMEOUT} ms`)), DEFAULT_REGISTRATION_TIMEOUT);\n        const incomingSw = registration.installing || registration.waiting;\n        if (registration.active) {\n            clearTimeout(rejectTimeout);\n            resolve();\n        }\n        else if (incomingSw) {\n            incomingSw.onstatechange = ev => {\n                var _a;\n                if (((_a = ev.target) === null || _a === void 0 ? void 0 : _a.state) === 'activated') {\n                    incomingSw.onstatechange = null;\n                    clearTimeout(rejectTimeout);\n                    resolve();\n                }\n            };\n        }\n        else {\n            clearTimeout(rejectTimeout);\n            reject(new Error('No incoming service worker found.'));\n        }\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateSwReg(messaging, swRegistration) {\n    if (!swRegistration && !messaging.swRegistration) {\n        await registerDefaultSw(messaging);\n    }\n    if (!swRegistration && !!messaging.swRegistration) {\n        return;\n    }\n    if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n        throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\n    }\n    messaging.swRegistration = swRegistration;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateVapidKey(messaging, vapidKey) {\n    if (!!vapidKey) {\n        messaging.vapidKey = vapidKey;\n    }\n    else if (!messaging.vapidKey) {\n        messaging.vapidKey = DEFAULT_VAPID_KEY;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function getToken$1(messaging, options) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    if (Notification.permission === 'default') {\n        await Notification.requestPermission();\n    }\n    if (Notification.permission !== 'granted') {\n        throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\n    }\n    await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\n    await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\n    return getTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function logToScion(messaging, messageType, data) {\n    const eventType = getEventType(messageType);\n    const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\n    analytics.logEvent(eventType, {\n        /* eslint-disable camelcase */\n        message_id: data[CONSOLE_CAMPAIGN_ID],\n        message_name: data[CONSOLE_CAMPAIGN_NAME],\n        message_time: data[CONSOLE_CAMPAIGN_TIME],\n        message_device_time: Math.floor(Date.now() / 1000)\n        /* eslint-enable camelcase */\n    });\n}\nfunction getEventType(messageType) {\n    switch (messageType) {\n        case MessageType.NOTIFICATION_CLICKED:\n            return 'notification_open';\n        case MessageType.PUSH_RECEIVED:\n            return 'notification_foreground';\n        default:\n            throw new Error();\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function messageEventListener(messaging, event) {\n    const internalPayload = event.data;\n    if (!internalPayload.isFirebaseMessaging) {\n        return;\n    }\n    if (messaging.onMessageHandler &&\n        internalPayload.messageType === MessageType.PUSH_RECEIVED) {\n        if (typeof messaging.onMessageHandler === 'function') {\n            messaging.onMessageHandler(externalizePayload(internalPayload));\n        }\n        else {\n            messaging.onMessageHandler.next(externalizePayload(internalPayload));\n        }\n    }\n    // Log to Scion if applicable\n    const dataPayload = internalPayload.data;\n    if (isConsoleMessage(dataPayload) &&\n        dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\n        await logToScion(messaging, internalPayload.messageType, dataPayload);\n    }\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.22\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst WindowMessagingFactory = (container) => {\n    const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\n    navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\n    return messaging;\n};\nconst WindowMessagingInternalFactory = (container) => {\n    const messaging = container\n        .getProvider('messaging')\n        .getImmediate();\n    const messagingInternal = {\n        getToken: (options) => getToken$1(messaging, options)\n    };\n    return messagingInternal;\n};\nfunction registerMessagingInWindow() {\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__._registerComponent)(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__.Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__._registerComponent)(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__.Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__.registerVersion)(name, version);\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__.registerVersion)(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nasync function isWindowSupported() {\n    try {\n        // This throws if open() is unsupported, so adding it to the conditional\n        // statement below can cause an uncaught error.\n        await (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.validateIndexedDBOpenable)();\n    }\n    catch (e) {\n        return false;\n    }\n    // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n    // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n    // instantiating phase, informing the developers to import/call isSupported for special handling.\n    return (typeof window !== 'undefined' &&\n        (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.isIndexedDBAvailable)() &&\n        (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.areCookiesEnabled)() &&\n        'serviceWorker' in navigator &&\n        'PushManager' in window &&\n        'Notification' in window &&\n        'fetch' in window &&\n        ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n        PushSubscription.prototype.hasOwnProperty('getKey'));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteToken$1(messaging) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    if (!messaging.swRegistration) {\n        await registerDefaultSw(messaging);\n    }\n    return deleteTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction onMessage$1(messaging, nextOrObserver) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    messaging.onMessageHandler = nextOrObserver;\n    return () => {\n        messaging.onMessageHandler = null;\n    };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nfunction getMessagingInWindow(app = (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__.getApp)()) {\n    // Conscious decision to make this async check non-blocking during the messaging instance\n    // initialization phase for performance consideration. An error would be thrown latter for\n    // developer's information. Developers can then choose to import and call `isSupported` for\n    // special handling.\n    isWindowSupported().then(isSupported => {\n        // If `isWindowSupported()` resolved, but returned false.\n        if (!isSupported) {\n            throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\n        }\n    }, _ => {\n        // If `isWindowSupported()` rejected.\n        throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\n    });\n    return (0,_firebase_app__WEBPACK_IMPORTED_MODULE_4__._getProvider)((0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.getModularInstance)(app), 'messaging').getImmediate();\n}\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nasync function getToken(messaging, options) {\n    messaging = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.getModularInstance)(messaging);\n    return getToken$1(messaging, options);\n}\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nfunction deleteToken(messaging) {\n    messaging = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.getModularInstance)(messaging);\n    return deleteToken$1(messaging);\n}\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n *     is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nfunction onMessage(messaging, nextOrObserver) {\n    messaging = (0,_firebase_util__WEBPACK_IMPORTED_MODULE_3__.getModularInstance)(messaging);\n    return onMessage$1(messaging, nextOrObserver);\n}\n\n/**\n * The Firebase Cloud Messaging Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterMessagingInWindow();\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/util/dist/index.esm2017.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/@firebase/util/dist/index.esm2017.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CONSTANTS: function() { return /* binding */ CONSTANTS; },\n/* harmony export */   DecodeBase64StringError: function() { return /* binding */ DecodeBase64StringError; },\n/* harmony export */   Deferred: function() { return /* binding */ Deferred; },\n/* harmony export */   ErrorFactory: function() { return /* binding */ ErrorFactory; },\n/* harmony export */   FirebaseError: function() { return /* binding */ FirebaseError; },\n/* harmony export */   MAX_VALUE_MILLIS: function() { return /* binding */ MAX_VALUE_MILLIS; },\n/* harmony export */   RANDOM_FACTOR: function() { return /* binding */ RANDOM_FACTOR; },\n/* harmony export */   Sha1: function() { return /* binding */ Sha1; },\n/* harmony export */   areCookiesEnabled: function() { return /* binding */ areCookiesEnabled; },\n/* harmony export */   assert: function() { return /* binding */ assert; },\n/* harmony export */   assertionError: function() { return /* binding */ assertionError; },\n/* harmony export */   async: function() { return /* binding */ async; },\n/* harmony export */   base64: function() { return /* binding */ base64; },\n/* harmony export */   base64Decode: function() { return /* binding */ base64Decode; },\n/* harmony export */   base64Encode: function() { return /* binding */ base64Encode; },\n/* harmony export */   base64urlEncodeWithoutPadding: function() { return /* binding */ base64urlEncodeWithoutPadding; },\n/* harmony export */   calculateBackoffMillis: function() { return /* binding */ calculateBackoffMillis; },\n/* harmony export */   contains: function() { return /* binding */ contains; },\n/* harmony export */   createMockUserToken: function() { return /* binding */ createMockUserToken; },\n/* harmony export */   createSubscribe: function() { return /* binding */ createSubscribe; },\n/* harmony export */   decode: function() { return /* binding */ decode; },\n/* harmony export */   deepCopy: function() { return /* binding */ deepCopy; },\n/* harmony export */   deepEqual: function() { return /* binding */ deepEqual; },\n/* harmony export */   deepExtend: function() { return /* binding */ deepExtend; },\n/* harmony export */   errorPrefix: function() { return /* binding */ errorPrefix; },\n/* harmony export */   extractQuerystring: function() { return /* binding */ extractQuerystring; },\n/* harmony export */   getDefaultAppConfig: function() { return /* binding */ getDefaultAppConfig; },\n/* harmony export */   getDefaultEmulatorHost: function() { return /* binding */ getDefaultEmulatorHost; },\n/* harmony export */   getDefaultEmulatorHostnameAndPort: function() { return /* binding */ getDefaultEmulatorHostnameAndPort; },\n/* harmony export */   getDefaults: function() { return /* binding */ getDefaults; },\n/* harmony export */   getExperimentalSetting: function() { return /* binding */ getExperimentalSetting; },\n/* harmony export */   getGlobal: function() { return /* binding */ getGlobal; },\n/* harmony export */   getModularInstance: function() { return /* binding */ getModularInstance; },\n/* harmony export */   getUA: function() { return /* binding */ getUA; },\n/* harmony export */   isAdmin: function() { return /* binding */ isAdmin; },\n/* harmony export */   isBrowser: function() { return /* binding */ isBrowser; },\n/* harmony export */   isBrowserExtension: function() { return /* binding */ isBrowserExtension; },\n/* harmony export */   isCloudWorkstation: function() { return /* binding */ isCloudWorkstation; },\n/* harmony export */   isCloudflareWorker: function() { return /* binding */ isCloudflareWorker; },\n/* harmony export */   isElectron: function() { return /* binding */ isElectron; },\n/* harmony export */   isEmpty: function() { return /* binding */ isEmpty; },\n/* harmony export */   isIE: function() { return /* binding */ isIE; },\n/* harmony export */   isIndexedDBAvailable: function() { return /* binding */ isIndexedDBAvailable; },\n/* harmony export */   isMobileCordova: function() { return /* binding */ isMobileCordova; },\n/* harmony export */   isNode: function() { return /* binding */ isNode; },\n/* harmony export */   isNodeSdk: function() { return /* binding */ isNodeSdk; },\n/* harmony export */   isReactNative: function() { return /* binding */ isReactNative; },\n/* harmony export */   isSafari: function() { return /* binding */ isSafari; },\n/* harmony export */   isSafariOrWebkit: function() { return /* binding */ isSafariOrWebkit; },\n/* harmony export */   isUWP: function() { return /* binding */ isUWP; },\n/* harmony export */   isValidFormat: function() { return /* binding */ isValidFormat; },\n/* harmony export */   isValidTimestamp: function() { return /* binding */ isValidTimestamp; },\n/* harmony export */   isWebWorker: function() { return /* binding */ isWebWorker; },\n/* harmony export */   issuedAtTime: function() { return /* binding */ issuedAtTime; },\n/* harmony export */   jsonEval: function() { return /* binding */ jsonEval; },\n/* harmony export */   map: function() { return /* binding */ map; },\n/* harmony export */   ordinal: function() { return /* binding */ ordinal; },\n/* harmony export */   pingServer: function() { return /* binding */ pingServer; },\n/* harmony export */   promiseWithTimeout: function() { return /* binding */ promiseWithTimeout; },\n/* harmony export */   querystring: function() { return /* binding */ querystring; },\n/* harmony export */   querystringDecode: function() { return /* binding */ querystringDecode; },\n/* harmony export */   safeGet: function() { return /* binding */ safeGet; },\n/* harmony export */   stringLength: function() { return /* binding */ stringLength; },\n/* harmony export */   stringToByteArray: function() { return /* binding */ stringToByteArray; },\n/* harmony export */   stringify: function() { return /* binding */ stringify; },\n/* harmony export */   updateEmulatorBanner: function() { return /* binding */ updateEmulatorBanner; },\n/* harmony export */   validateArgCount: function() { return /* binding */ validateArgCount; },\n/* harmony export */   validateCallback: function() { return /* binding */ validateCallback; },\n/* harmony export */   validateContextObject: function() { return /* binding */ validateContextObject; },\n/* harmony export */   validateIndexedDBOpenable: function() { return /* binding */ validateIndexedDBOpenable; },\n/* harmony export */   validateNamespace: function() { return /* binding */ validateNamespace; }\n/* harmony export */ });\n/* harmony import */ var _postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./postinstall.mjs */ \"./node_modules/@firebase/util/dist/postinstall.mjs\");\n\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.\n */\nconst CONSTANTS = {\n    /**\n     * @define {boolean} Whether this is the client Node.js SDK.\n     */\n    NODE_CLIENT: false,\n    /**\n     * @define {boolean} Whether this is the Admin Node.js SDK.\n     */\n    NODE_ADMIN: false,\n    /**\n     * Firebase SDK Version\n     */\n    SDK_VERSION: '${JSCORE_VERSION}'\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Throws an error if the provided assertion is falsy\n */\nconst assert = function (assertion, message) {\n    if (!assertion) {\n        throw assertionError(message);\n    }\n};\n/**\n * Returns an Error object suitable for throwing.\n */\nconst assertionError = function (message) {\n    return new Error('Firebase Database (' +\n        CONSTANTS.SDK_VERSION +\n        ') INTERNAL ASSERT FAILED: ' +\n        message);\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst stringToByteArray$1 = function (str) {\n    // TODO(user): Use native implementations if/when available\n    const out = [];\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        let c = str.charCodeAt(i);\n        if (c < 128) {\n            out[p++] = c;\n        }\n        else if (c < 2048) {\n            out[p++] = (c >> 6) | 192;\n            out[p++] = (c & 63) | 128;\n        }\n        else if ((c & 0xfc00) === 0xd800 &&\n            i + 1 < str.length &&\n            (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            // Surrogate Pair\n            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n            out[p++] = (c >> 18) | 240;\n            out[p++] = ((c >> 12) & 63) | 128;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n        else {\n            out[p++] = (c >> 12) | 224;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n    }\n    return out;\n};\n/**\n * Turns an array of numbers into the string given by the concatenation of the\n * characters to which the numbers correspond.\n * @param bytes Array of numbers representing characters.\n * @return Stringification of the array.\n */\nconst byteArrayToString = function (bytes) {\n    // TODO(user): Use native implementations if/when available\n    const out = [];\n    let pos = 0, c = 0;\n    while (pos < bytes.length) {\n        const c1 = bytes[pos++];\n        if (c1 < 128) {\n            out[c++] = String.fromCharCode(c1);\n        }\n        else if (c1 > 191 && c1 < 224) {\n            const c2 = bytes[pos++];\n            out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\n        }\n        else if (c1 > 239 && c1 < 365) {\n            // Surrogate Pair\n            const c2 = bytes[pos++];\n            const c3 = bytes[pos++];\n            const c4 = bytes[pos++];\n            const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\n                0x10000;\n            out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n        }\n        else {\n            const c2 = bytes[pos++];\n            const c3 = bytes[pos++];\n            out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n        }\n    }\n    return out.join('');\n};\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\n// Static lookup maps, lazily populated by init_()\n// TODO(dlarocque): Define this as a class, since we no longer target ES5.\nconst base64 = {\n    /**\n     * Maps bytes to characters.\n     */\n    byteToCharMap_: null,\n    /**\n     * Maps characters to bytes.\n     */\n    charToByteMap_: null,\n    /**\n     * Maps bytes to websafe characters.\n     * @private\n     */\n    byteToCharMapWebSafe_: null,\n    /**\n     * Maps websafe characters to bytes.\n     * @private\n     */\n    charToByteMapWebSafe_: null,\n    /**\n     * Our default alphabet, shared between\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n     */\n    ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\n    /**\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n     */\n    get ENCODED_VALS() {\n        return this.ENCODED_VALS_BASE + '+/=';\n    },\n    /**\n     * Our websafe alphabet.\n     */\n    get ENCODED_VALS_WEBSAFE() {\n        return this.ENCODED_VALS_BASE + '-_.';\n    },\n    /**\n     * Whether this browser supports the atob and btoa functions. This extension\n     * started at Mozilla but is now implemented by many browsers. We use the\n     * ASSUME_* variables to avoid pulling in the full useragent detection library\n     * but still allowing the standard per-browser compilations.\n     *\n     */\n    HAS_NATIVE_SUPPORT: typeof atob === 'function',\n    /**\n     * Base64-encode an array of bytes.\n     *\n     * @param input An array of bytes (numbers with\n     *     value in [0, 255]) to encode.\n     * @param webSafe Boolean indicating we should use the\n     *     alternative alphabet.\n     * @return The base64 encoded string.\n     */\n    encodeByteArray(input, webSafe) {\n        if (!Array.isArray(input)) {\n            throw Error('encodeByteArray takes an array as a parameter');\n        }\n        this.init_();\n        const byteToCharMap = webSafe\n            ? this.byteToCharMapWebSafe_\n            : this.byteToCharMap_;\n        const output = [];\n        for (let i = 0; i < input.length; i += 3) {\n            const byte1 = input[i];\n            const haveByte2 = i + 1 < input.length;\n            const byte2 = haveByte2 ? input[i + 1] : 0;\n            const haveByte3 = i + 2 < input.length;\n            const byte3 = haveByte3 ? input[i + 2] : 0;\n            const outByte1 = byte1 >> 2;\n            const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n            let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\n            let outByte4 = byte3 & 0x3f;\n            if (!haveByte3) {\n                outByte4 = 64;\n                if (!haveByte2) {\n                    outByte3 = 64;\n                }\n            }\n            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\n        }\n        return output.join('');\n    },\n    /**\n     * Base64-encode a string.\n     *\n     * @param input A string to encode.\n     * @param webSafe If true, we should use the\n     *     alternative alphabet.\n     * @return The base64 encoded string.\n     */\n    encodeString(input, webSafe) {\n        // Shortcut for Mozilla browsers that implement\n        // a native base64 encoder in the form of \"btoa/atob\"\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n            return btoa(input);\n        }\n        return this.encodeByteArray(stringToByteArray$1(input), webSafe);\n    },\n    /**\n     * Base64-decode a string.\n     *\n     * @param input to decode.\n     * @param webSafe True if we should use the\n     *     alternative alphabet.\n     * @return string representing the decoded value.\n     */\n    decodeString(input, webSafe) {\n        // Shortcut for Mozilla browsers that implement\n        // a native base64 encoder in the form of \"btoa/atob\"\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n            return atob(input);\n        }\n        return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\n    },\n    /**\n     * Base64-decode a string.\n     *\n     * In base-64 decoding, groups of four characters are converted into three\n     * bytes.  If the encoder did not apply padding, the input length may not\n     * be a multiple of 4.\n     *\n     * In this case, the last group will have fewer than 4 characters, and\n     * padding will be inferred.  If the group has one or two characters, it decodes\n     * to one byte.  If the group has three characters, it decodes to two bytes.\n     *\n     * @param input Input to decode.\n     * @param webSafe True if we should use the web-safe alphabet.\n     * @return bytes representing the decoded value.\n     */\n    decodeStringToByteArray(input, webSafe) {\n        this.init_();\n        const charToByteMap = webSafe\n            ? this.charToByteMapWebSafe_\n            : this.charToByteMap_;\n        const output = [];\n        for (let i = 0; i < input.length;) {\n            const byte1 = charToByteMap[input.charAt(i++)];\n            const haveByte2 = i < input.length;\n            const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n            ++i;\n            const haveByte3 = i < input.length;\n            const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\n            ++i;\n            const haveByte4 = i < input.length;\n            const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\n            ++i;\n            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\n                throw new DecodeBase64StringError();\n            }\n            const outByte1 = (byte1 << 2) | (byte2 >> 4);\n            output.push(outByte1);\n            if (byte3 !== 64) {\n                const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\n                output.push(outByte2);\n                if (byte4 !== 64) {\n                    const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\n                    output.push(outByte3);\n                }\n            }\n        }\n        return output;\n    },\n    /**\n     * Lazy static initialization function. Called before\n     * accessing any of the static map variables.\n     * @private\n     */\n    init_() {\n        if (!this.byteToCharMap_) {\n            this.byteToCharMap_ = {};\n            this.charToByteMap_ = {};\n            this.byteToCharMapWebSafe_ = {};\n            this.charToByteMapWebSafe_ = {};\n            // We want quick mappings back and forth, so we precompute two maps.\n            for (let i = 0; i < this.ENCODED_VALS.length; i++) {\n                this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\n                this.charToByteMap_[this.byteToCharMap_[i]] = i;\n                this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\n                this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\n                // Be forgiving when decoding and correctly decode both encodings.\n                if (i >= this.ENCODED_VALS_BASE.length) {\n                    this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\n                    this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\n                }\n            }\n        }\n    }\n};\n/**\n * An error encountered while decoding base64 string.\n */\nclass DecodeBase64StringError extends Error {\n    constructor() {\n        super(...arguments);\n        this.name = 'DecodeBase64StringError';\n    }\n}\n/**\n * URL-safe base64 encoding\n */\nconst base64Encode = function (str) {\n    const utf8Bytes = stringToByteArray$1(str);\n    return base64.encodeByteArray(utf8Bytes, true);\n};\n/**\n * URL-safe base64 encoding (without \".\" padding in the end).\n * e.g. Used in JSON Web Token (JWT) parts.\n */\nconst base64urlEncodeWithoutPadding = function (str) {\n    // Use base64url encoding and remove padding in the end (dot characters).\n    return base64Encode(str).replace(/\\./g, '');\n};\n/**\n * URL-safe base64 decoding\n *\n * NOTE: DO NOT use the global atob() function - it does NOT support the\n * base64Url variant encoding.\n *\n * @param str To be decoded\n * @return Decoded result, if possible\n */\nconst base64Decode = function (str) {\n    try {\n        return base64.decodeString(str, true);\n    }\n    catch (e) {\n        console.error('base64Decode failed: ', e);\n    }\n    return null;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do a deep-copy of basic JavaScript Objects or Arrays.\n */\nfunction deepCopy(value) {\n    return deepExtend(undefined, value);\n}\n/**\n * Copy properties from source to target (recursively allows extension\n * of Objects and Arrays).  Scalar values in the target are over-written.\n * If target is undefined, an object of the appropriate type will be created\n * (and returned).\n *\n * We recursively copy all child properties of plain Objects in the source- so\n * that namespace- like dictionaries are merged.\n *\n * Note that the target can be a function, in which case the properties in\n * the source Object are copied onto it as static properties of the Function.\n *\n * Note: we don't merge __proto__ to prevent prototype pollution\n */\nfunction deepExtend(target, source) {\n    if (!(source instanceof Object)) {\n        return source;\n    }\n    switch (source.constructor) {\n        case Date:\n            // Treat Dates like scalars; if the target date object had any child\n            // properties - they will be lost!\n            const dateValue = source;\n            return new Date(dateValue.getTime());\n        case Object:\n            if (target === undefined) {\n                target = {};\n            }\n            break;\n        case Array:\n            // Always copy the array source and overwrite the target.\n            target = [];\n            break;\n        default:\n            // Not a plain Object - treat it as a scalar.\n            return source;\n    }\n    for (const prop in source) {\n        // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\n        if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\n            continue;\n        }\n        target[prop] = deepExtend(target[prop], source[prop]);\n    }\n    return target;\n}\nfunction isValidKey(key) {\n    return key !== '__proto__';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Polyfill for `globalThis` object.\n * @returns the `globalThis` object for the given environment.\n * @public\n */\nfunction getGlobal() {\n    if (typeof self !== 'undefined') {\n        return self;\n    }\n    if (typeof window !== 'undefined') {\n        return window;\n    }\n    if (typeof __webpack_require__.g !== 'undefined') {\n        return __webpack_require__.g;\n    }\n    throw new Error('Unable to locate global object.');\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\n/**\n * Attempt to read defaults from a JSON string provided to\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\n * The dots are in parens because certain compilers (Vite?) cannot\n * handle seeing that variable in comments.\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\n */\nconst getDefaultsFromEnvVariable = () => {\n    if (typeof process === 'undefined' || typeof process.env === 'undefined') {\n        return;\n    }\n    const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\n    if (defaultsJsonString) {\n        return JSON.parse(defaultsJsonString);\n    }\n};\nconst getDefaultsFromCookie = () => {\n    if (typeof document === 'undefined') {\n        return;\n    }\n    let match;\n    try {\n        match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\n    }\n    catch (e) {\n        // Some environments such as Angular Universal SSR have a\n        // `document` object but error on accessing `document.cookie`.\n        return;\n    }\n    const decoded = match && base64Decode(match[1]);\n    return decoded && JSON.parse(decoded);\n};\n/**\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\n * (1) if such an object exists as a property of `globalThis`\n * (2) if such an object was provided on a shell environment variable\n * (3) if such an object exists in a cookie\n * @public\n */\nconst getDefaults = () => {\n    try {\n        return ((0,_postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__.getDefaultsFromPostinstall)() ||\n            getDefaultsFromGlobal() ||\n            getDefaultsFromEnvVariable() ||\n            getDefaultsFromCookie());\n    }\n    catch (e) {\n        /**\n         * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\n         * to any environment case we have not accounted for. Log to\n         * info instead of swallowing so we can find these unknown cases\n         * and add paths for them if needed.\n         */\n        console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\n        return;\n    }\n};\n/**\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\n * @public\n */\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]; };\n/**\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\n * @public\n */\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\n    const host = getDefaultEmulatorHost(productName);\n    if (!host) {\n        return undefined;\n    }\n    const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\n    if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\n        throw new Error(`Invalid host ${host} with no separate hostname and port!`);\n    }\n    // eslint-disable-next-line no-restricted-globals\n    const port = parseInt(host.substring(separatorIndex + 1), 10);\n    if (host[0] === '[') {\n        // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\n        return [host.substring(1, separatorIndex - 1), port];\n    }\n    else {\n        return [host.substring(0, separatorIndex), port];\n    }\n};\n/**\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\n * @public\n */\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\n/**\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\n * prefixed by \"_\")\n * @public\n */\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Deferred {\n    constructor() {\n        this.reject = () => { };\n        this.resolve = () => { };\n        this.promise = new Promise((resolve, reject) => {\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n    /**\n     * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around\n     * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n     * and returns a node-style callback which will resolve or reject the Deferred's promise.\n     */\n    wrapCallback(callback) {\n        return (error, value) => {\n            if (error) {\n                this.reject(error);\n            }\n            else {\n                this.resolve(value);\n            }\n            if (typeof callback === 'function') {\n                // Attaching noop handler just in case developer wasn't expecting\n                // promises\n                this.promise.catch(() => { });\n                // Some of our callbacks don't expect a value and our own tests\n                // assert that the parameter length is 1\n                if (callback.length === 1) {\n                    callback(error);\n                }\n                else {\n                    callback(error, value);\n                }\n            }\n        };\n    }\n}\n\n/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks whether host is a cloud workstation or not.\n * @public\n */\nfunction isCloudWorkstation(url) {\n    // `isCloudWorkstation` is called without protocol in certain connect*Emulator functions\n    // In HTTP request builders, it's called with the protocol.\n    // If called with protocol prefix, it's a valid URL, so we extract the hostname\n    // If called without, we assume the string is the hostname.\n    try {\n        const host = url.startsWith('http://') || url.startsWith('https://')\n            ? new URL(url).hostname\n            : url;\n        return host.endsWith('.cloudworkstations.dev');\n    }\n    catch (_a) {\n        return false;\n    }\n}\n/**\n * Makes a fetch request to the given server.\n * Mostly used for forwarding cookies in Firebase Studio.\n * @public\n */\nasync function pingServer(endpoint) {\n    const result = await fetch(endpoint, {\n        credentials: 'include'\n    });\n    return result.ok;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction createMockUserToken(token, projectId) {\n    if (token.uid) {\n        throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\n    }\n    // Unsecured JWTs use \"none\" as the algorithm.\n    const header = {\n        alg: 'none',\n        type: 'JWT'\n    };\n    const project = projectId || 'demo-project';\n    const iat = token.iat || 0;\n    const sub = token.sub || token.user_id;\n    if (!sub) {\n        throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\n    }\n    const payload = Object.assign({ \n        // Set all required fields to decent defaults\n        iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\n            sign_in_provider: 'custom',\n            identities: {}\n        } }, token);\n    // Unsecured JWTs use the empty string as a signature.\n    const signature = '';\n    return [\n        base64urlEncodeWithoutPadding(JSON.stringify(header)),\n        base64urlEncodeWithoutPadding(JSON.stringify(payload)),\n        signature\n    ].join('.');\n}\nconst emulatorStatus = {};\n// Checks whether any products are running on an emulator\nfunction getEmulatorSummary() {\n    const summary = {\n        prod: [],\n        emulator: []\n    };\n    for (const key of Object.keys(emulatorStatus)) {\n        if (emulatorStatus[key]) {\n            summary.emulator.push(key);\n        }\n        else {\n            summary.prod.push(key);\n        }\n    }\n    return summary;\n}\nfunction getOrCreateEl(id) {\n    let parentDiv = document.getElementById(id);\n    let created = false;\n    if (!parentDiv) {\n        parentDiv = document.createElement('div');\n        parentDiv.setAttribute('id', id);\n        created = true;\n    }\n    return { created, element: parentDiv };\n}\nlet previouslyDismissed = false;\n/**\n * Updates Emulator Banner. Primarily used for Firebase Studio\n * @param name\n * @param isRunningEmulator\n * @public\n */\nfunction updateEmulatorBanner(name, isRunningEmulator) {\n    if (typeof window === 'undefined' ||\n        typeof document === 'undefined' ||\n        !isCloudWorkstation(window.location.host) ||\n        emulatorStatus[name] === isRunningEmulator ||\n        emulatorStatus[name] || // If already set to use emulator, can't go back to prod.\n        previouslyDismissed) {\n        return;\n    }\n    emulatorStatus[name] = isRunningEmulator;\n    function prefixedId(id) {\n        return `__firebase__banner__${id}`;\n    }\n    const bannerId = '__firebase__banner';\n    const summary = getEmulatorSummary();\n    const showError = summary.prod.length > 0;\n    function tearDown() {\n        const element = document.getElementById(bannerId);\n        if (element) {\n            element.remove();\n        }\n    }\n    function setupBannerStyles(bannerEl) {\n        bannerEl.style.display = 'flex';\n        bannerEl.style.background = '#7faaf0';\n        bannerEl.style.position = 'fixed';\n        bannerEl.style.bottom = '5px';\n        bannerEl.style.left = '5px';\n        bannerEl.style.padding = '.5em';\n        bannerEl.style.borderRadius = '5px';\n        bannerEl.style.alignItems = 'center';\n    }\n    function setupIconStyles(prependIcon, iconId) {\n        prependIcon.setAttribute('width', '24');\n        prependIcon.setAttribute('id', iconId);\n        prependIcon.setAttribute('height', '24');\n        prependIcon.setAttribute('viewBox', '0 0 24 24');\n        prependIcon.setAttribute('fill', 'none');\n        prependIcon.style.marginLeft = '-6px';\n    }\n    function setupCloseBtn() {\n        const closeBtn = document.createElement('span');\n        closeBtn.style.cursor = 'pointer';\n        closeBtn.style.marginLeft = '16px';\n        closeBtn.style.fontSize = '24px';\n        closeBtn.innerHTML = ' &times;';\n        closeBtn.onclick = () => {\n            previouslyDismissed = true;\n            tearDown();\n        };\n        return closeBtn;\n    }\n    function setupLinkStyles(learnMoreLink, learnMoreId) {\n        learnMoreLink.setAttribute('id', learnMoreId);\n        learnMoreLink.innerText = 'Learn more';\n        learnMoreLink.href =\n            'https://firebase.google.com/docs/studio/preview-apps#preview-backend';\n        learnMoreLink.setAttribute('target', '__blank');\n        learnMoreLink.style.paddingLeft = '5px';\n        learnMoreLink.style.textDecoration = 'underline';\n    }\n    function setupDom() {\n        const banner = getOrCreateEl(bannerId);\n        const firebaseTextId = prefixedId('text');\n        const firebaseText = document.getElementById(firebaseTextId) || document.createElement('span');\n        const learnMoreId = prefixedId('learnmore');\n        const learnMoreLink = document.getElementById(learnMoreId) ||\n            document.createElement('a');\n        const prependIconId = prefixedId('preprendIcon');\n        const prependIcon = document.getElementById(prependIconId) ||\n            document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n        if (banner.created) {\n            // update styles\n            const bannerEl = banner.element;\n            setupBannerStyles(bannerEl);\n            setupLinkStyles(learnMoreLink, learnMoreId);\n            const closeBtn = setupCloseBtn();\n            setupIconStyles(prependIcon, prependIconId);\n            bannerEl.append(prependIcon, firebaseText, learnMoreLink, closeBtn);\n            document.body.appendChild(bannerEl);\n        }\n        if (showError) {\n            firebaseText.innerText = `Preview backend disconnected.`;\n            prependIcon.innerHTML = `<g clip-path=\"url(#clip0_6013_33858)\">\n<path d=\"M4.8 17.6L12 5.6L19.2 17.6H4.8ZM6.91667 16.4H17.0833L12 7.93333L6.91667 16.4ZM12 15.6C12.1667 15.6 12.3056 15.5444 12.4167 15.4333C12.5389 15.3111 12.6 15.1667 12.6 15C12.6 14.8333 12.5389 14.6944 12.4167 14.5833C12.3056 14.4611 12.1667 14.4 12 14.4C11.8333 14.4 11.6889 14.4611 11.5667 14.5833C11.4556 14.6944 11.4 14.8333 11.4 15C11.4 15.1667 11.4556 15.3111 11.5667 15.4333C11.6889 15.5444 11.8333 15.6 12 15.6ZM11.4 13.6H12.6V10.4H11.4V13.6Z\" fill=\"#212121\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_6013_33858\">\n<rect width=\"24\" height=\"24\" fill=\"white\"/>\n</clipPath>\n</defs>`;\n        }\n        else {\n            prependIcon.innerHTML = `<g clip-path=\"url(#clip0_6083_34804)\">\n<path d=\"M11.4 15.2H12.6V11.2H11.4V15.2ZM12 10C12.1667 10 12.3056 9.94444 12.4167 9.83333C12.5389 9.71111 12.6 9.56667 12.6 9.4C12.6 9.23333 12.5389 9.09444 12.4167 8.98333C12.3056 8.86111 12.1667 8.8 12 8.8C11.8333 8.8 11.6889 8.86111 11.5667 8.98333C11.4556 9.09444 11.4 9.23333 11.4 9.4C11.4 9.56667 11.4556 9.71111 11.5667 9.83333C11.6889 9.94444 11.8333 10 12 10ZM12 18.4C11.1222 18.4 10.2944 18.2333 9.51667 17.9C8.73889 17.5667 8.05556 17.1111 7.46667 16.5333C6.88889 15.9444 6.43333 15.2611 6.1 14.4833C5.76667 13.7056 5.6 12.8778 5.6 12C5.6 11.1111 5.76667 10.2833 6.1 9.51667C6.43333 8.73889 6.88889 8.06111 7.46667 7.48333C8.05556 6.89444 8.73889 6.43333 9.51667 6.1C10.2944 5.76667 11.1222 5.6 12 5.6C12.8889 5.6 13.7167 5.76667 14.4833 6.1C15.2611 6.43333 15.9389 6.89444 16.5167 7.48333C17.1056 8.06111 17.5667 8.73889 17.9 9.51667C18.2333 10.2833 18.4 11.1111 18.4 12C18.4 12.8778 18.2333 13.7056 17.9 14.4833C17.5667 15.2611 17.1056 15.9444 16.5167 16.5333C15.9389 17.1111 15.2611 17.5667 14.4833 17.9C13.7167 18.2333 12.8889 18.4 12 18.4ZM12 17.2C13.4444 17.2 14.6722 16.6944 15.6833 15.6833C16.6944 14.6722 17.2 13.4444 17.2 12C17.2 10.5556 16.6944 9.32778 15.6833 8.31667C14.6722 7.30555 13.4444 6.8 12 6.8C10.5556 6.8 9.32778 7.30555 8.31667 8.31667C7.30556 9.32778 6.8 10.5556 6.8 12C6.8 13.4444 7.30556 14.6722 8.31667 15.6833C9.32778 16.6944 10.5556 17.2 12 17.2Z\" fill=\"#212121\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_6083_34804\">\n<rect width=\"24\" height=\"24\" fill=\"white\"/>\n</clipPath>\n</defs>`;\n            firebaseText.innerText = 'Preview backend running in this workspace.';\n        }\n        firebaseText.setAttribute('id', firebaseTextId);\n    }\n    if (document.readyState === 'loading') {\n        window.addEventListener('DOMContentLoaded', setupDom);\n    }\n    else {\n        setupDom();\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return user agent string\n */\nfunction getUA() {\n    if (typeof navigator !== 'undefined' &&\n        typeof navigator['userAgent'] === 'string') {\n        return navigator['userAgent'];\n    }\n    else {\n        return '';\n    }\n}\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\n * wait for a callback.\n */\nfunction isMobileCordova() {\n    return (typeof window !== 'undefined' &&\n        // @ts-ignore Setting up an broadly applicable index signature for Window\n        // just to deal with this case would probably be a bad idea.\n        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n        /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\n}\n/**\n * Detect Node.js.\n *\n * @return true if Node.js environment is detected or specified.\n */\n// Node detection logic from: https://github.com/iliakan/detect-node/\nfunction isNode() {\n    var _a;\n    const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\n    if (forceEnvironment === 'node') {\n        return true;\n    }\n    else if (forceEnvironment === 'browser') {\n        return false;\n    }\n    try {\n        return (Object.prototype.toString.call(__webpack_require__.g.process) === '[object process]');\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Detect Browser Environment.\n * Note: This will return true for certain test frameworks that are incompletely\n * mimicking a browser, and should not lead to assuming all browser APIs are\n * available.\n */\nfunction isBrowser() {\n    return typeof window !== 'undefined' || isWebWorker();\n}\n/**\n * Detect Web Worker context.\n */\nfunction isWebWorker() {\n    return (typeof WorkerGlobalScope !== 'undefined' &&\n        typeof self !== 'undefined' &&\n        self instanceof WorkerGlobalScope);\n}\n/**\n * Detect Cloudflare Worker context.\n */\nfunction isCloudflareWorker() {\n    return (typeof navigator !== 'undefined' &&\n        navigator.userAgent === 'Cloudflare-Workers');\n}\nfunction isBrowserExtension() {\n    const runtime = typeof chrome === 'object'\n        ? chrome.runtime\n        : typeof browser === 'object'\n            ? browser.runtime\n            : undefined;\n    return typeof runtime === 'object' && runtime.id !== undefined;\n}\n/**\n * Detect React Native.\n *\n * @return true if ReactNative environment is detected.\n */\nfunction isReactNative() {\n    return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\n}\n/** Detects Electron apps. */\nfunction isElectron() {\n    return getUA().indexOf('Electron/') >= 0;\n}\n/** Detects Internet Explorer. */\nfunction isIE() {\n    const ua = getUA();\n    return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n}\n/** Detects Universal Windows Platform apps. */\nfunction isUWP() {\n    return getUA().indexOf('MSAppHost/') >= 0;\n}\n/**\n * Detect whether the current SDK build is the Node version.\n *\n * @return true if it's the Node SDK build.\n */\nfunction isNodeSdk() {\n    return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\n}\n/** Returns true if we are running in Safari. */\nfunction isSafari() {\n    return (!isNode() &&\n        !!navigator.userAgent &&\n        navigator.userAgent.includes('Safari') &&\n        !navigator.userAgent.includes('Chrome'));\n}\n/** Returns true if we are running in Safari or WebKit */\nfunction isSafariOrWebkit() {\n    return (!isNode() &&\n        !!navigator.userAgent &&\n        (navigator.userAgent.includes('Safari') ||\n            navigator.userAgent.includes('WebKit')) &&\n        !navigator.userAgent.includes('Chrome'));\n}\n/**\n * This method checks if indexedDB is supported by current browser/service worker context\n * @return true if indexedDB is supported by current browser/service worker context\n */\nfunction isIndexedDBAvailable() {\n    try {\n        return typeof indexedDB === 'object';\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\n * if errors occur during the database open operation.\n *\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\n * private browsing)\n */\nfunction validateIndexedDBOpenable() {\n    return new Promise((resolve, reject) => {\n        try {\n            let preExist = true;\n            const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\n            const request = self.indexedDB.open(DB_CHECK_NAME);\n            request.onsuccess = () => {\n                request.result.close();\n                // delete database only when it doesn't pre-exist\n                if (!preExist) {\n                    self.indexedDB.deleteDatabase(DB_CHECK_NAME);\n                }\n                resolve(true);\n            };\n            request.onupgradeneeded = () => {\n                preExist = false;\n            };\n            request.onerror = () => {\n                var _a;\n                reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\n            };\n        }\n        catch (error) {\n            reject(error);\n        }\n    });\n}\n/**\n *\n * This method checks whether cookie is enabled within current browser\n * @return true if cookie is enabled within current browser\n */\nfunction areCookiesEnabled() {\n    if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\n        return false;\n    }\n    return true;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Standardized Firebase Error.\n *\n * Usage:\n *\n *   // TypeScript string literals for type-safe codes\n *   type Err =\n *     'unknown' |\n *     'object-not-found'\n *     ;\n *\n *   // Closure enum for type-safe error codes\n *   // at-enum {string}\n *   var Err = {\n *     UNKNOWN: 'unknown',\n *     OBJECT_NOT_FOUND: 'object-not-found',\n *   }\n *\n *   let errors: Map<Err, string> = {\n *     'generic-error': \"Unknown error\",\n *     'file-not-found': \"Could not find file: {$file}\",\n *   };\n *\n *   // Type-safe function - must pass a valid error code as param.\n *   let error = new ErrorFactory<Err>('service', 'Service', errors);\n *\n *   ...\n *   throw error.create(Err.GENERIC);\n *   ...\n *   throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\n *   ...\n *   // Service: Could not file file: foo.txt (service/file-not-found).\n *\n *   catch (e) {\n *     assert(e.message === \"Could not find file: foo.txt.\");\n *     if ((e as FirebaseError)?.code === 'service/file-not-found') {\n *       console.log(\"Could not read file: \" + e['file']);\n *     }\n *   }\n */\nconst ERROR_NAME = 'FirebaseError';\n// Based on code from:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\nclass FirebaseError extends Error {\n    constructor(\n    /** The error code for this error. */\n    code, message, \n    /** Custom data for this error. */\n    customData) {\n        super(message);\n        this.code = code;\n        this.customData = customData;\n        /** The custom name for all FirebaseErrors. */\n        this.name = ERROR_NAME;\n        // Fix For ES5\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n        //                   which we can now use since we no longer target ES5.\n        Object.setPrototypeOf(this, FirebaseError.prototype);\n        // Maintains proper stack trace for where our error was thrown.\n        // Only available on V8.\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, ErrorFactory.prototype.create);\n        }\n    }\n}\nclass ErrorFactory {\n    constructor(service, serviceName, errors) {\n        this.service = service;\n        this.serviceName = serviceName;\n        this.errors = errors;\n    }\n    create(code, ...data) {\n        const customData = data[0] || {};\n        const fullCode = `${this.service}/${code}`;\n        const template = this.errors[code];\n        const message = template ? replaceTemplate(template, customData) : 'Error';\n        // Service Name: Error message (service/code).\n        const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\n        const error = new FirebaseError(fullCode, fullMessage, customData);\n        return error;\n    }\n}\nfunction replaceTemplate(template, data) {\n    return template.replace(PATTERN, (_, key) => {\n        const value = data[key];\n        return value != null ? String(value) : `<${key}?>`;\n    });\n}\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Evaluates a JSON string into a javascript object.\n *\n * @param {string} str A string containing JSON.\n * @return {*} The javascript object representing the specified JSON.\n */\nfunction jsonEval(str) {\n    return JSON.parse(str);\n}\n/**\n * Returns JSON representing a javascript object.\n * @param {*} data JavaScript object to be stringified.\n * @return {string} The JSON contents of the object.\n */\nfunction stringify(data) {\n    return JSON.stringify(data);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Decodes a Firebase auth. token into constituent parts.\n *\n * Notes:\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst decode = function (token) {\n    let header = {}, claims = {}, data = {}, signature = '';\n    try {\n        const parts = token.split('.');\n        header = jsonEval(base64Decode(parts[0]) || '');\n        claims = jsonEval(base64Decode(parts[1]) || '');\n        signature = parts[2];\n        data = claims['d'] || {};\n        delete claims['d'];\n    }\n    catch (e) { }\n    return {\n        header,\n        claims,\n        data,\n        signature\n    };\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidTimestamp = function (token) {\n    const claims = decode(token).claims;\n    const now = Math.floor(new Date().getTime() / 1000);\n    let validSince = 0, validUntil = 0;\n    if (typeof claims === 'object') {\n        if (claims.hasOwnProperty('nbf')) {\n            validSince = claims['nbf'];\n        }\n        else if (claims.hasOwnProperty('iat')) {\n            validSince = claims['iat'];\n        }\n        if (claims.hasOwnProperty('exp')) {\n            validUntil = claims['exp'];\n        }\n        else {\n            // token will expire after 24h by default\n            validUntil = validSince + 86400;\n        }\n    }\n    return (!!now &&\n        !!validSince &&\n        !!validUntil &&\n        now >= validSince &&\n        now <= validUntil);\n};\n/**\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\n *\n * Notes:\n * - May return null if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst issuedAtTime = function (token) {\n    const claims = decode(token).claims;\n    if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\n        return claims['iat'];\n    }\n    return null;\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidFormat = function (token) {\n    const decoded = decode(token), claims = decoded.claims;\n    return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\n};\n/**\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isAdmin = function (token) {\n    const claims = decode(token).claims;\n    return typeof claims === 'object' && claims['admin'] === true;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction contains(obj, key) {\n    return Object.prototype.hasOwnProperty.call(obj, key);\n}\nfunction safeGet(obj, key) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        return obj[key];\n    }\n    else {\n        return undefined;\n    }\n}\nfunction isEmpty(obj) {\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction map(obj, fn, contextObj) {\n    const res = {};\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            res[key] = fn.call(contextObj, obj[key], key, obj);\n        }\n    }\n    return res;\n}\n/**\n * Deep equal two objects. Support Arrays and Objects.\n */\nfunction deepEqual(a, b) {\n    if (a === b) {\n        return true;\n    }\n    const aKeys = Object.keys(a);\n    const bKeys = Object.keys(b);\n    for (const k of aKeys) {\n        if (!bKeys.includes(k)) {\n            return false;\n        }\n        const aProp = a[k];\n        const bProp = b[k];\n        if (isObject(aProp) && isObject(bProp)) {\n            if (!deepEqual(aProp, bProp)) {\n                return false;\n            }\n        }\n        else if (aProp !== bProp) {\n            return false;\n        }\n    }\n    for (const k of bKeys) {\n        if (!aKeys.includes(k)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isObject(thing) {\n    return thing !== null && typeof thing === 'object';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\n * @internal\n */\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\n    const deferredPromise = new Deferred();\n    setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\n    promise.then(deferredPromise.resolve, deferredPromise.reject);\n    return deferredPromise.promise;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\n * params object (e.g. {arg: 'val', arg2: 'val2'})\n * Note: You must prepend it with ? when adding it to a URL.\n */\nfunction querystring(querystringParams) {\n    const params = [];\n    for (const [key, value] of Object.entries(querystringParams)) {\n        if (Array.isArray(value)) {\n            value.forEach(arrayVal => {\n                params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\n            });\n        }\n        else {\n            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n        }\n    }\n    return params.length ? '&' + params.join('&') : '';\n}\n/**\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\n * (e.g. {arg: 'val', arg2: 'val2'})\n */\nfunction querystringDecode(querystring) {\n    const obj = {};\n    const tokens = querystring.replace(/^\\?/, '').split('&');\n    tokens.forEach(token => {\n        if (token) {\n            const [key, value] = token.split('=');\n            obj[decodeURIComponent(key)] = decodeURIComponent(value);\n        }\n    });\n    return obj;\n}\n/**\n * Extract the query string part of a URL, including the leading question mark (if present).\n */\nfunction extractQuerystring(url) {\n    const queryStart = url.indexOf('?');\n    if (!queryStart) {\n        return '';\n    }\n    const fragmentStart = url.indexOf('#', queryStart);\n    return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview SHA-1 cryptographic hash.\n * Variable names follow the notation in FIPS PUB 180-3:\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\n *\n * Usage:\n *   var sha1 = new sha1();\n *   sha1.update(bytes);\n *   var hash = sha1.digest();\n *\n * Performance:\n *   Chrome 23:   ~400 Mbit/s\n *   Firefox 16:  ~250 Mbit/s\n *\n */\n/**\n * SHA-1 cryptographic hash constructor.\n *\n * The properties declared here are discussed in the above algorithm document.\n * @constructor\n * @final\n * @struct\n */\nclass Sha1 {\n    constructor() {\n        /**\n         * Holds the previous values of accumulated variables a-e in the compress_\n         * function.\n         * @private\n         */\n        this.chain_ = [];\n        /**\n         * A buffer holding the partially computed hash result.\n         * @private\n         */\n        this.buf_ = [];\n        /**\n         * An array of 80 bytes, each a part of the message to be hashed.  Referred to\n         * as the message schedule in the docs.\n         * @private\n         */\n        this.W_ = [];\n        /**\n         * Contains data needed to pad messages less than 64 bytes.\n         * @private\n         */\n        this.pad_ = [];\n        /**\n         * @private {number}\n         */\n        this.inbuf_ = 0;\n        /**\n         * @private {number}\n         */\n        this.total_ = 0;\n        this.blockSize = 512 / 8;\n        this.pad_[0] = 128;\n        for (let i = 1; i < this.blockSize; ++i) {\n            this.pad_[i] = 0;\n        }\n        this.reset();\n    }\n    reset() {\n        this.chain_[0] = 0x67452301;\n        this.chain_[1] = 0xefcdab89;\n        this.chain_[2] = 0x98badcfe;\n        this.chain_[3] = 0x10325476;\n        this.chain_[4] = 0xc3d2e1f0;\n        this.inbuf_ = 0;\n        this.total_ = 0;\n    }\n    /**\n     * Internal compress helper function.\n     * @param buf Block to compress.\n     * @param offset Offset of the block in the buffer.\n     * @private\n     */\n    compress_(buf, offset) {\n        if (!offset) {\n            offset = 0;\n        }\n        const W = this.W_;\n        // get 16 big endian words\n        if (typeof buf === 'string') {\n            for (let i = 0; i < 16; i++) {\n                // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\n                // have a bug that turns the post-increment ++ operator into pre-increment\n                // during JIT compilation.  We have code that depends heavily on SHA-1 for\n                // correctness and which is affected by this bug, so I've removed all uses\n                // of post-increment ++ in which the result value is used.  We can revert\n                // this change once the Safari bug\n                // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\n                // most clients have been updated.\n                W[i] =\n                    (buf.charCodeAt(offset) << 24) |\n                        (buf.charCodeAt(offset + 1) << 16) |\n                        (buf.charCodeAt(offset + 2) << 8) |\n                        buf.charCodeAt(offset + 3);\n                offset += 4;\n            }\n        }\n        else {\n            for (let i = 0; i < 16; i++) {\n                W[i] =\n                    (buf[offset] << 24) |\n                        (buf[offset + 1] << 16) |\n                        (buf[offset + 2] << 8) |\n                        buf[offset + 3];\n                offset += 4;\n            }\n        }\n        // expand to 80 words\n        for (let i = 16; i < 80; i++) {\n            const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n            W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\n        }\n        let a = this.chain_[0];\n        let b = this.chain_[1];\n        let c = this.chain_[2];\n        let d = this.chain_[3];\n        let e = this.chain_[4];\n        let f, k;\n        // TODO(user): Try to unroll this loop to speed up the computation.\n        for (let i = 0; i < 80; i++) {\n            if (i < 40) {\n                if (i < 20) {\n                    f = d ^ (b & (c ^ d));\n                    k = 0x5a827999;\n                }\n                else {\n                    f = b ^ c ^ d;\n                    k = 0x6ed9eba1;\n                }\n            }\n            else {\n                if (i < 60) {\n                    f = (b & c) | (d & (b | c));\n                    k = 0x8f1bbcdc;\n                }\n                else {\n                    f = b ^ c ^ d;\n                    k = 0xca62c1d6;\n                }\n            }\n            const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\n            e = d;\n            d = c;\n            c = ((b << 30) | (b >>> 2)) & 0xffffffff;\n            b = a;\n            a = t;\n        }\n        this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\n        this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\n        this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\n        this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\n        this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\n    }\n    update(bytes, length) {\n        // TODO(johnlenz): tighten the function signature and remove this check\n        if (bytes == null) {\n            return;\n        }\n        if (length === undefined) {\n            length = bytes.length;\n        }\n        const lengthMinusBlock = length - this.blockSize;\n        let n = 0;\n        // Using local instead of member variables gives ~5% speedup on Firefox 16.\n        const buf = this.buf_;\n        let inbuf = this.inbuf_;\n        // The outer while loop should execute at most twice.\n        while (n < length) {\n            // When we have no data in the block to top up, we can directly process the\n            // input buffer (assuming it contains sufficient data). This gives ~25%\n            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\n            // the data is provided in large chunks (or in multiples of 64 bytes).\n            if (inbuf === 0) {\n                while (n <= lengthMinusBlock) {\n                    this.compress_(bytes, n);\n                    n += this.blockSize;\n                }\n            }\n            if (typeof bytes === 'string') {\n                while (n < length) {\n                    buf[inbuf] = bytes.charCodeAt(n);\n                    ++inbuf;\n                    ++n;\n                    if (inbuf === this.blockSize) {\n                        this.compress_(buf);\n                        inbuf = 0;\n                        // Jump to the outer loop so we use the full-block optimization.\n                        break;\n                    }\n                }\n            }\n            else {\n                while (n < length) {\n                    buf[inbuf] = bytes[n];\n                    ++inbuf;\n                    ++n;\n                    if (inbuf === this.blockSize) {\n                        this.compress_(buf);\n                        inbuf = 0;\n                        // Jump to the outer loop so we use the full-block optimization.\n                        break;\n                    }\n                }\n            }\n        }\n        this.inbuf_ = inbuf;\n        this.total_ += length;\n    }\n    /** @override */\n    digest() {\n        const digest = [];\n        let totalBits = this.total_ * 8;\n        // Add pad 0x80 0x00*.\n        if (this.inbuf_ < 56) {\n            this.update(this.pad_, 56 - this.inbuf_);\n        }\n        else {\n            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\n        }\n        // Add # bits.\n        for (let i = this.blockSize - 1; i >= 56; i--) {\n            this.buf_[i] = totalBits & 255;\n            totalBits /= 256; // Don't use bit-shifting here!\n        }\n        this.compress_(this.buf_);\n        let n = 0;\n        for (let i = 0; i < 5; i++) {\n            for (let j = 24; j >= 0; j -= 8) {\n                digest[n] = (this.chain_[i] >> j) & 255;\n                ++n;\n            }\n        }\n        return digest;\n    }\n}\n\n/**\n * Helper to make a Subscribe function (just like Promise helps make a\n * Thenable).\n *\n * @param executor Function which can make calls to a single Observer\n *     as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\nfunction createSubscribe(executor, onNoObservers) {\n    const proxy = new ObserverProxy(executor, onNoObservers);\n    return proxy.subscribe.bind(proxy);\n}\n/**\n * Implement fan-out for any number of Observers attached via a subscribe\n * function.\n */\nclass ObserverProxy {\n    /**\n     * @param executor Function which can make calls to a single Observer\n     *     as a proxy.\n     * @param onNoObservers Callback when count of Observers goes to zero.\n     */\n    constructor(executor, onNoObservers) {\n        this.observers = [];\n        this.unsubscribes = [];\n        this.observerCount = 0;\n        // Micro-task scheduling by calling task.then().\n        this.task = Promise.resolve();\n        this.finalized = false;\n        this.onNoObservers = onNoObservers;\n        // Call the executor asynchronously so subscribers that are called\n        // synchronously after the creation of the subscribe function\n        // can still receive the very first value generated in the executor.\n        this.task\n            .then(() => {\n            executor(this);\n        })\n            .catch(e => {\n            this.error(e);\n        });\n    }\n    next(value) {\n        this.forEachObserver((observer) => {\n            observer.next(value);\n        });\n    }\n    error(error) {\n        this.forEachObserver((observer) => {\n            observer.error(error);\n        });\n        this.close(error);\n    }\n    complete() {\n        this.forEachObserver((observer) => {\n            observer.complete();\n        });\n        this.close();\n    }\n    /**\n     * Subscribe function that can be used to add an Observer to the fan-out list.\n     *\n     * - We require that no event is sent to a subscriber synchronously to their\n     *   call to subscribe().\n     */\n    subscribe(nextOrObserver, error, complete) {\n        let observer;\n        if (nextOrObserver === undefined &&\n            error === undefined &&\n            complete === undefined) {\n            throw new Error('Missing Observer.');\n        }\n        // Assemble an Observer object when passed as callback functions.\n        if (implementsAnyMethods(nextOrObserver, [\n            'next',\n            'error',\n            'complete'\n        ])) {\n            observer = nextOrObserver;\n        }\n        else {\n            observer = {\n                next: nextOrObserver,\n                error,\n                complete\n            };\n        }\n        if (observer.next === undefined) {\n            observer.next = noop;\n        }\n        if (observer.error === undefined) {\n            observer.error = noop;\n        }\n        if (observer.complete === undefined) {\n            observer.complete = noop;\n        }\n        const unsub = this.unsubscribeOne.bind(this, this.observers.length);\n        // Attempt to subscribe to a terminated Observable - we\n        // just respond to the Observer with the final error or complete\n        // event.\n        if (this.finalized) {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            this.task.then(() => {\n                try {\n                    if (this.finalError) {\n                        observer.error(this.finalError);\n                    }\n                    else {\n                        observer.complete();\n                    }\n                }\n                catch (e) {\n                    // nothing\n                }\n                return;\n            });\n        }\n        this.observers.push(observer);\n        return unsub;\n    }\n    // Unsubscribe is synchronous - we guarantee that no events are sent to\n    // any unsubscribed Observer.\n    unsubscribeOne(i) {\n        if (this.observers === undefined || this.observers[i] === undefined) {\n            return;\n        }\n        delete this.observers[i];\n        this.observerCount -= 1;\n        if (this.observerCount === 0 && this.onNoObservers !== undefined) {\n            this.onNoObservers(this);\n        }\n    }\n    forEachObserver(fn) {\n        if (this.finalized) {\n            // Already closed by previous event....just eat the additional values.\n            return;\n        }\n        // Since sendOne calls asynchronously - there is no chance that\n        // this.observers will become undefined.\n        for (let i = 0; i < this.observers.length; i++) {\n            this.sendOne(i, fn);\n        }\n    }\n    // Call the Observer via one of it's callback function. We are careful to\n    // confirm that the observe has not been unsubscribed since this asynchronous\n    // function had been queued.\n    sendOne(i, fn) {\n        // Execute the callback asynchronously\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        this.task.then(() => {\n            if (this.observers !== undefined && this.observers[i] !== undefined) {\n                try {\n                    fn(this.observers[i]);\n                }\n                catch (e) {\n                    // Ignore exceptions raised in Observers or missing methods of an\n                    // Observer.\n                    // Log error to console. b/31404806\n                    if (typeof console !== 'undefined' && console.error) {\n                        console.error(e);\n                    }\n                }\n            }\n        });\n    }\n    close(err) {\n        if (this.finalized) {\n            return;\n        }\n        this.finalized = true;\n        if (err !== undefined) {\n            this.finalError = err;\n        }\n        // Proxy is no longer needed - garbage collect references\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        this.task.then(() => {\n            this.observers = undefined;\n            this.onNoObservers = undefined;\n        });\n    }\n}\n/** Turn synchronous function into one called asynchronously. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction async(fn, onError) {\n    return (...args) => {\n        Promise.resolve(true)\n            .then(() => {\n            fn(...args);\n        })\n            .catch((error) => {\n            if (onError) {\n                onError(error);\n            }\n        });\n    };\n}\n/**\n * Return true if the object passed in implements any of the named methods.\n */\nfunction implementsAnyMethods(obj, methods) {\n    if (typeof obj !== 'object' || obj === null) {\n        return false;\n    }\n    for (const method of methods) {\n        if (method in obj && typeof obj[method] === 'function') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction noop() {\n    // do nothing\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Check to make sure the appropriate number of arguments are provided for a public function.\n * Throws an error if it fails.\n *\n * @param fnName The function name\n * @param minCount The minimum number of arguments to allow for the function call\n * @param maxCount The maximum number of argument to allow for the function call\n * @param argCount The actual number of arguments provided.\n */\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\n    let argError;\n    if (argCount < minCount) {\n        argError = 'at least ' + minCount;\n    }\n    else if (argCount > maxCount) {\n        argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\n    }\n    if (argError) {\n        const error = fnName +\n            ' failed: Was called with ' +\n            argCount +\n            (argCount === 1 ? ' argument.' : ' arguments.') +\n            ' Expects ' +\n            argError +\n            '.';\n        throw new Error(error);\n    }\n};\n/**\n * Generates a string to prefix an error message about failed argument validation\n *\n * @param fnName The function name\n * @param argName The name of the argument\n * @return The prefix to add to the error thrown for validation.\n */\nfunction errorPrefix(fnName, argName) {\n    return `${fnName} failed: ${argName} argument `;\n}\n/**\n * @param fnName\n * @param argumentNumber\n * @param namespace\n * @param optional\n */\nfunction validateNamespace(fnName, namespace, optional) {\n    if (optional && !namespace) {\n        return;\n    }\n    if (typeof namespace !== 'string') {\n        //TODO: I should do more validation here. We only allow certain chars in namespaces.\n        throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\n    }\n}\nfunction validateCallback(fnName, argumentName, \n// eslint-disable-next-line @typescript-eslint/ban-types\ncallback, optional) {\n    if (optional && !callback) {\n        return;\n    }\n    if (typeof callback !== 'function') {\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\n    }\n}\nfunction validateContextObject(fnName, argumentName, context, optional) {\n    if (optional && !context) {\n        return;\n    }\n    if (typeof context !== 'object' || context === null) {\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in JavaScript.  All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n/**\n * @param {string} str\n * @return {Array}\n */\nconst stringToByteArray = function (str) {\n    const out = [];\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        let c = str.charCodeAt(i);\n        // Is this the lead surrogate in a surrogate pair?\n        if (c >= 0xd800 && c <= 0xdbff) {\n            const high = c - 0xd800; // the high 10 bits.\n            i++;\n            assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n            const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n            c = 0x10000 + (high << 10) + low;\n        }\n        if (c < 128) {\n            out[p++] = c;\n        }\n        else if (c < 2048) {\n            out[p++] = (c >> 6) | 192;\n            out[p++] = (c & 63) | 128;\n        }\n        else if (c < 65536) {\n            out[p++] = (c >> 12) | 224;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n        else {\n            out[p++] = (c >> 18) | 240;\n            out[p++] = ((c >> 12) & 63) | 128;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n    }\n    return out;\n};\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nconst stringLength = function (str) {\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        const c = str.charCodeAt(i);\n        if (c < 128) {\n            p++;\n        }\n        else if (c < 2048) {\n            p += 2;\n        }\n        else if (c >= 0xd800 && c <= 0xdbff) {\n            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\n            p += 4;\n            i++; // skip trail surrogate.\n        }\n        else {\n            p += 3;\n        }\n    }\n    return p;\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The amount of milliseconds to exponentially increase.\n */\nconst DEFAULT_INTERVAL_MILLIS = 1000;\n/**\n * The factor to backoff by.\n * Should be a number greater than 1.\n */\nconst DEFAULT_BACKOFF_FACTOR = 2;\n/**\n * The maximum milliseconds to increase to.\n *\n * <p>Visible for testing\n */\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n * <p>Visible for testing\n */\nconst RANDOM_FACTOR = 0.5;\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\n    // Calculates an exponentially increasing value.\n    // Deviation: calculates value from count and a constant interval, so we only need to save value\n    // and count to restore state.\n    const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n    // A random \"fuzz\" to avoid waves of retries.\n    // Deviation: randomFactor is required.\n    const randomWait = Math.round(\n    // A fraction of the backoff value to add/subtract.\n    // Deviation: changes multiplication order to improve readability.\n    RANDOM_FACTOR *\n        currBaseValue *\n        // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n        // if we add or subtract.\n        (Math.random() - 0.5) *\n        2);\n    // Limits backoff to max to avoid effectively permanent backoff.\n    return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provide English ordinal letters after a number\n */\nfunction ordinal(i) {\n    if (!Number.isFinite(i)) {\n        return `${i}`;\n    }\n    return i + indicator(i);\n}\nfunction indicator(i) {\n    i = Math.abs(i);\n    const cent = i % 100;\n    if (cent >= 10 && cent <= 20) {\n        return 'th';\n    }\n    const dec = i % 10;\n    if (dec === 1) {\n        return 'st';\n    }\n    if (dec === 2) {\n        return 'nd';\n    }\n    if (dec === 3) {\n        return 'rd';\n    }\n    return 'th';\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getModularInstance(service) {\n    if (service && service._delegate) {\n        return service._delegate;\n    }\n    else {\n        return service;\n    }\n}\n\n\n//# sourceMappingURL=index.esm2017.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/@firebase/util/dist/postinstall.mjs\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/@firebase/util/dist/postinstall.mjs ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getDefaultsFromPostinstall: function() { return /* binding */ getDefaultsFromPostinstall; }\n/* harmony export */ });\nconst getDefaultsFromPostinstall = () => (undefined);\n\n\n/***/ }),\n\n/***/ \"./node_modules/firebase/app/dist/esm/index.esm.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/firebase/app/dist/esm/index.esm.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FirebaseError: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.FirebaseError; },\n/* harmony export */   SDK_VERSION: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION; },\n/* harmony export */   _DEFAULT_ENTRY_NAME: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._DEFAULT_ENTRY_NAME; },\n/* harmony export */   _addComponent: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addComponent; },\n/* harmony export */   _addOrOverwriteComponent: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addOrOverwriteComponent; },\n/* harmony export */   _apps: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._apps; },\n/* harmony export */   _clearComponents: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._clearComponents; },\n/* harmony export */   _components: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._components; },\n/* harmony export */   _getProvider: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider; },\n/* harmony export */   _isFirebaseApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._isFirebaseApp; },\n/* harmony export */   _isFirebaseServerApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._isFirebaseServerApp; },\n/* harmony export */   _registerComponent: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._registerComponent; },\n/* harmony export */   _removeServiceInstance: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._removeServiceInstance; },\n/* harmony export */   _serverApps: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._serverApps; },\n/* harmony export */   deleteApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.deleteApp; },\n/* harmony export */   getApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApp; },\n/* harmony export */   getApps: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApps; },\n/* harmony export */   initializeApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.initializeApp; },\n/* harmony export */   initializeServerApp: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.initializeServerApp; },\n/* harmony export */   onLog: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.onLog; },\n/* harmony export */   registerVersion: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion; },\n/* harmony export */   setLogLevel: function() { return /* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.setLogLevel; }\n/* harmony export */ });\n/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/app */ \"./node_modules/@firebase/app/dist/esm/index.esm2017.js\");\n\n\n\nvar name = \"firebase\";\nvar version = \"11.10.0\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/firebase/messaging/dist/esm/index.esm.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/firebase/messaging/dist/esm/index.esm.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deleteToken: function() { return /* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.deleteToken; },\n/* harmony export */   getMessaging: function() { return /* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getMessaging; },\n/* harmony export */   getToken: function() { return /* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getToken; },\n/* harmony export */   isSupported: function() { return /* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.isSupported; },\n/* harmony export */   onMessage: function() { return /* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.onMessage; }\n/* harmony export */ });\n/* harmony import */ var _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/messaging */ \"./node_modules/@firebase/messaging/dist/esm/index.esm2017.js\");\n\n//# sourceMappingURL=index.esm.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/idb/build/index.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/idb/build/index.js ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deleteDB: function() { return /* binding */ deleteDB; },\n/* harmony export */   openDB: function() { return /* binding */ openDB; },\n/* harmony export */   unwrap: function() { return /* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.u; },\n/* harmony export */   wrap: function() { return /* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w; }\n/* harmony export */ });\n/* 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\");\n\n\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n    const request = indexedDB.open(name, version);\n    const openPromise = (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request);\n    if (upgrade) {\n        request.addEventListener('upgradeneeded', (event) => {\n            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);\n        });\n    }\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event.newVersion, event));\n    }\n    openPromise\n        .then((db) => {\n        if (terminated)\n            db.addEventListener('close', () => terminated());\n        if (blocking) {\n            db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n        }\n    })\n        .catch(() => { });\n    return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n    const request = indexedDB.deleteDatabase(name);\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event));\n    }\n    return (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n    if (!(target instanceof IDBDatabase &&\n        !(prop in target) &&\n        typeof prop === 'string')) {\n        return;\n    }\n    if (cachedMethods.get(prop))\n        return cachedMethods.get(prop);\n    const targetFuncName = prop.replace(/FromIndex$/, '');\n    const useIndex = prop !== targetFuncName;\n    const isWrite = writeMethods.includes(targetFuncName);\n    if (\n    // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n    !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n        !(isWrite || readMethods.includes(targetFuncName))) {\n        return;\n    }\n    const method = async function (storeName, ...args) {\n        // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n        const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n        let target = tx.store;\n        if (useIndex)\n            target = target.index(args.shift());\n        // Must reject if op rejects.\n        // If it's a write operation, must reject if tx.done rejects.\n        // Must reject with op rejection first.\n        // Must resolve with op value.\n        // Must handle both promises (no unhandled rejections)\n        return (await Promise.all([\n            target[targetFuncName](...args),\n            isWrite && tx.done,\n        ]))[0];\n    };\n    cachedMethods.set(prop, method);\n    return method;\n}\n(0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.r)((oldTraps) => ({\n    ...oldTraps,\n    get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n    has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/idb/build/wrap-idb-value.js\":\n/*!**************************************************!*\\\n  !*** ./node_modules/idb/build/wrap-idb-value.js ***!\n  \\**************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   a: function() { return /* binding */ reverseTransformCache; },\n/* harmony export */   i: function() { return /* binding */ instanceOfAny; },\n/* harmony export */   r: function() { return /* binding */ replaceTraps; },\n/* harmony export */   u: function() { return /* binding */ unwrap; },\n/* harmony export */   w: function() { return /* binding */ wrap; }\n/* harmony export */ });\nconst instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n    return (idbProxyableTypes ||\n        (idbProxyableTypes = [\n            IDBDatabase,\n            IDBObjectStore,\n            IDBIndex,\n            IDBCursor,\n            IDBTransaction,\n        ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n    return (cursorAdvanceMethods ||\n        (cursorAdvanceMethods = [\n            IDBCursor.prototype.advance,\n            IDBCursor.prototype.continue,\n            IDBCursor.prototype.continuePrimaryKey,\n        ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n    const promise = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            request.removeEventListener('success', success);\n            request.removeEventListener('error', error);\n        };\n        const success = () => {\n            resolve(wrap(request.result));\n            unlisten();\n        };\n        const error = () => {\n            reject(request.error);\n            unlisten();\n        };\n        request.addEventListener('success', success);\n        request.addEventListener('error', error);\n    });\n    promise\n        .then((value) => {\n        // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n        // (see wrapFunction).\n        if (value instanceof IDBCursor) {\n            cursorRequestMap.set(value, request);\n        }\n        // Catching to avoid \"Uncaught Promise exceptions\"\n    })\n        .catch(() => { });\n    // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n    // is because we create many promises from a single IDBRequest.\n    reverseTransformCache.set(promise, request);\n    return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n    // Early bail if we've already created a done promise for this transaction.\n    if (transactionDoneMap.has(tx))\n        return;\n    const done = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            tx.removeEventListener('complete', complete);\n            tx.removeEventListener('error', error);\n            tx.removeEventListener('abort', error);\n        };\n        const complete = () => {\n            resolve();\n            unlisten();\n        };\n        const error = () => {\n            reject(tx.error || new DOMException('AbortError', 'AbortError'));\n            unlisten();\n        };\n        tx.addEventListener('complete', complete);\n        tx.addEventListener('error', error);\n        tx.addEventListener('abort', error);\n    });\n    // Cache it for later retrieval.\n    transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n    get(target, prop, receiver) {\n        if (target instanceof IDBTransaction) {\n            // Special handling for transaction.done.\n            if (prop === 'done')\n                return transactionDoneMap.get(target);\n            // Polyfill for objectStoreNames because of Edge.\n            if (prop === 'objectStoreNames') {\n                return target.objectStoreNames || transactionStoreNamesMap.get(target);\n            }\n            // Make tx.store return the only store in the transaction, or undefined if there are many.\n            if (prop === 'store') {\n                return receiver.objectStoreNames[1]\n                    ? undefined\n                    : receiver.objectStore(receiver.objectStoreNames[0]);\n            }\n        }\n        // Else transform whatever we get back.\n        return wrap(target[prop]);\n    },\n    set(target, prop, value) {\n        target[prop] = value;\n        return true;\n    },\n    has(target, prop) {\n        if (target instanceof IDBTransaction &&\n            (prop === 'done' || prop === 'store')) {\n            return true;\n        }\n        return prop in target;\n    },\n};\nfunction replaceTraps(callback) {\n    idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n    // Due to expected object equality (which is enforced by the caching in `wrap`), we\n    // only create one new func per func.\n    // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n    if (func === IDBDatabase.prototype.transaction &&\n        !('objectStoreNames' in IDBTransaction.prototype)) {\n        return function (storeNames, ...args) {\n            const tx = func.call(unwrap(this), storeNames, ...args);\n            transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n            return wrap(tx);\n        };\n    }\n    // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n    // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n    // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n    // with real promises, so each advance methods returns a new promise for the cursor object, or\n    // undefined if the end of the cursor has been reached.\n    if (getCursorAdvanceMethods().includes(func)) {\n        return function (...args) {\n            // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n            // the original object.\n            func.apply(unwrap(this), args);\n            return wrap(cursorRequestMap.get(this));\n        };\n    }\n    return function (...args) {\n        // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n        // the original object.\n        return wrap(func.apply(unwrap(this), args));\n    };\n}\nfunction transformCachableValue(value) {\n    if (typeof value === 'function')\n        return wrapFunction(value);\n    // This doesn't return, it just creates a 'done' promise for the transaction,\n    // which is later returned for transaction.done (see idbObjectHandler).\n    if (value instanceof IDBTransaction)\n        cacheDonePromiseForTransaction(value);\n    if (instanceOfAny(value, getIdbProxyableTypes()))\n        return new Proxy(value, idbProxyTraps);\n    // Return the same value back if we're not going to transform it.\n    return value;\n}\nfunction wrap(value) {\n    // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n    // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n    if (value instanceof IDBRequest)\n        return promisifyRequest(value);\n    // If we've already transformed this value before, reuse the transformed value.\n    // This is faster, but it also provides object equality.\n    if (transformCache.has(value))\n        return transformCache.get(value);\n    const newValue = transformCachableValue(value);\n    // Not all types are transformed.\n    // These may be primitive types, so they can't be WeakMap keys.\n    if (newValue !== value) {\n        transformCache.set(value, newValue);\n        reverseTransformCache.set(newValue, value);\n    }\n    return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/react-dom/client.js\":\n/*!******************************************!*\\\n  !*** ./node_modules/react-dom/client.js ***!\n  \\******************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar m = __webpack_require__(/*! react-dom */ \"react-dom\");\nif (false) // removed by dead control flow\n{} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n\n\n/***/ }),\n\n/***/ \"./src/config.js\":\n/*!***********************!*\\\n  !*** ./src/config.js ***!\n  \\***********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   API_KEY: function() { return /* binding */ API_KEY; },\n/* harmony export */   APP_NAME: function() { return /* binding */ APP_NAME; },\n/* harmony export */   AVATAR_SIZE: function() { return /* binding */ AVATAR_SIZE; },\n/* harmony export */   BROKEN_IMAGE_SIZE: function() { return /* binding */ BROKEN_IMAGE_SIZE; },\n/* harmony export */   CHANNEL_ACCESS_MODE: function() { return /* binding */ CHANNEL_ACCESS_MODE; },\n/* harmony export */   CLICKABLE_URL_SCHEMES: function() { return /* binding */ CLICKABLE_URL_SCHEMES; },\n/* harmony export */   DEFAULT_COLOR_SCHEME: function() { return /* binding */ DEFAULT_COLOR_SCHEME; },\n/* harmony export */   DEFAULT_HOST: function() { return /* binding */ DEFAULT_HOST; },\n/* harmony export */   DEFAULT_P2P_ACCESS_MODE: function() { return /* binding */ DEFAULT_P2P_ACCESS_MODE; },\n/* harmony export */   DEFAULT_TEXT_SIZE: function() { return /* binding */ DEFAULT_TEXT_SIZE; },\n/* harmony export */   DRAFTY_FR_MIME_TYPE_LEGACY: function() { return /* binding */ DRAFTY_FR_MIME_TYPE_LEGACY; },\n/* harmony export */   EDIT_PREVIEW_LENGTH: function() { return /* binding */ EDIT_PREVIEW_LENGTH; },\n/* harmony export */   FORWARDED_PREVIEW_LENGTH: function() { return /* binding */ FORWARDED_PREVIEW_LENGTH; },\n/* harmony export */   IMAGE_PREVIEW_DIM: function() { return /* binding */ IMAGE_PREVIEW_DIM; },\n/* harmony export */   IMAGE_THUMBNAIL_DIM: function() { return /* binding */ IMAGE_THUMBNAIL_DIM; },\n/* harmony export */   IMMEDIATE_P2P_SUBSCRIPTION: function() { return /* binding */ IMMEDIATE_P2P_SUBSCRIPTION; },\n/* harmony export */   KEYPRESS_DELAY: function() { return /* binding */ KEYPRESS_DELAY; },\n/* harmony export */   KNOWN_HOSTS: function() { return /* binding */ KNOWN_HOSTS; },\n/* harmony export */   LINK_CONTACT_US: function() { return /* binding */ LINK_CONTACT_US; },\n/* harmony export */   LINK_PRIVACY_POLICY: function() { return /* binding */ LINK_PRIVACY_POLICY; },\n/* harmony export */   LINK_TERMS_OF_SERVICE: function() { return /* binding */ LINK_TERMS_OF_SERVICE; },\n/* harmony export */   LOGGING_ENABLED: function() { return /* binding */ LOGGING_ENABLED; },\n/* harmony export */   MAX_AVATAR_BYTES: function() { return /* binding */ MAX_AVATAR_BYTES; },\n/* harmony export */   MAX_DURATION: function() { return /* binding */ MAX_DURATION; },\n/* harmony export */   MAX_EXTERN_ATTACHMENT_SIZE: function() { return /* binding */ MAX_EXTERN_ATTACHMENT_SIZE; },\n/* harmony export */   MAX_IMAGE_DIM: function() { return /* binding */ MAX_IMAGE_DIM; },\n/* harmony export */   MAX_INBAND_ATTACHMENT_SIZE: function() { return /* binding */ MAX_INBAND_ATTACHMENT_SIZE; },\n/* harmony export */   MAX_ONLINE_IN_TOPIC: function() { return /* binding */ MAX_ONLINE_IN_TOPIC; },\n/* harmony export */   MAX_PEER_TITLE_LENGTH: function() { return /* binding */ MAX_PEER_TITLE_LENGTH; },\n/* harmony export */   MAX_TAG_COUNT: function() { return /* binding */ MAX_TAG_COUNT; },\n/* harmony export */   MAX_TAG_LENGTH: function() { return /* binding */ MAX_TAG_LENGTH; },\n/* harmony export */   MAX_TITLE_LENGTH: function() { return /* binding */ MAX_TITLE_LENGTH; },\n/* harmony export */   MAX_TOPIC_DESCRIPTION_LENGTH: function() { return /* binding */ MAX_TOPIC_DESCRIPTION_LENGTH; },\n/* harmony export */   MEDIA_BREAKPOINT: function() { return /* binding */ MEDIA_BREAKPOINT; },\n/* harmony export */   MESSAGES_PAGE: function() { return /* binding */ MESSAGES_PAGE; },\n/* harmony export */   MESSAGE_PREVIEW_LENGTH: function() { return /* binding */ MESSAGE_PREVIEW_LENGTH; },\n/* harmony export */   MIN_DURATION: function() { return /* binding */ MIN_DURATION; },\n/* harmony export */   MIN_SWIPE_DISTANCE: function() { return /* binding */ MIN_SWIPE_DISTANCE; },\n/* harmony export */   MIN_TAG_LENGTH: function() { return /* binding */ MIN_TAG_LENGTH; },\n/* harmony export */   NEW_GRP_ACCESS_MODE: function() { return /* binding */ NEW_GRP_ACCESS_MODE; },\n/* harmony export */   NO_ACCESS_MODE: function() { return /* binding */ NO_ACCESS_MODE; },\n/* harmony export */   NO_DIMENSIONS_VIDEO: function() { return /* binding */ NO_DIMENSIONS_VIDEO; },\n/* harmony export */   QRCODE_SIZE: function() { return /* binding */ QRCODE_SIZE; },\n/* harmony export */   QUOTED_REPLY_LENGTH: function() { return /* binding */ QUOTED_REPLY_LENGTH; },\n/* harmony export */   READ_DELAY: function() { return /* binding */ READ_DELAY; },\n/* harmony export */   REM_SIZE: function() { return /* binding */ REM_SIZE; },\n/* harmony export */   SELF_AVATAR_URI: function() { return /* binding */ SELF_AVATAR_URI; },\n/* harmony export */   TOAST_DURATION: function() { return /* binding */ TOAST_DURATION; },\n/* harmony export */   VIDEO_PREVIEW_DIM: function() { return /* binding */ VIDEO_PREVIEW_DIM; },\n/* harmony export */   VIDEO_THUMBNAIL_WIDTH: function() { return /* binding */ VIDEO_THUMBNAIL_WIDTH; },\n/* harmony export */   WAKE_UP_TICK: function() { return /* binding */ WAKE_UP_TICK; },\n/* harmony export */   WAKE_UP_TIMEOUT: function() { return /* binding */ WAKE_UP_TIMEOUT; },\n/* harmony export */   WALLPAPER_DEFAULTS: function() { return /* binding */ WALLPAPER_DEFAULTS; }\n/* harmony export */ });\n/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ \"./src/version.js\");\n\nconst APP_NAME = 'TinodeWeb/' + (_version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.24');\nconst API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\nconst KNOWN_HOSTS = {\n  hosted: 'web.tinode.co',\n  local: 'localhost:6060'\n};\nconst DEFAULT_HOST = KNOWN_HOSTS.hosted;\nconst LOGGING_ENABLED = true;\nconst KEYPRESS_DELAY = 3_000;\nconst READ_DELAY = 1_500;\nconst MIN_TAG_LENGTH = 2;\nconst MAX_TAG_LENGTH = 96;\nconst MAX_TAG_COUNT = 16;\nconst DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\nconst NEW_GRP_ACCESS_MODE = 'JRWPSAO';\nconst CHANNEL_ACCESS_MODE = 'JR';\nconst NO_ACCESS_MODE = 'N';\nconst MEDIA_BREAKPOINT = 640;\nconst REM_SIZE = 13;\nconst AVATAR_SIZE = 384;\nconst MAX_AVATAR_BYTES = 4096;\nconst BROKEN_IMAGE_SIZE = 32;\nconst NO_DIMENSIONS_VIDEO = 128;\nconst MESSAGES_PAGE = 24;\nconst MAX_INBAND_ATTACHMENT_SIZE = 262_144;\nconst MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\nconst MAX_IMAGE_DIM = 1024;\nconst IMAGE_PREVIEW_DIM = 64;\nconst VIDEO_PREVIEW_DIM = 96;\nconst IMAGE_THUMBNAIL_DIM = 36;\nconst VIDEO_THUMBNAIL_WIDTH = 48;\nconst MAX_ONLINE_IN_TOPIC = 4;\nconst MAX_TITLE_LENGTH = 60;\nconst MAX_TOPIC_DESCRIPTION_LENGTH = 360;\nconst MAX_PEER_TITLE_LENGTH = 24;\nconst MESSAGE_PREVIEW_LENGTH = 80;\nconst QUOTED_REPLY_LENGTH = 30;\nconst FORWARDED_PREVIEW_LENGTH = 84;\nconst EDIT_PREVIEW_LENGTH = 48;\nconst MIN_DURATION = 2_000;\nconst MAX_DURATION = 600_000;\nconst LINK_CONTACT_US = 'mailto:support@tinode.co';\nconst LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\nconst LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\nconst IMMEDIATE_P2P_SUBSCRIPTION = false;\nconst CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\nconst QRCODE_SIZE = 128;\nconst WAKE_UP_TIMEOUT = 80000;\nconst WAKE_UP_TICK = 1000;\nconst MIN_SWIPE_DISTANCE = REM_SIZE * 3;\nconst SELF_AVATAR_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=';\nconst TOAST_DURATION = 3_000;\nconst DEFAULT_COLOR_SCHEME = 'auto';\nconst DEFAULT_TEXT_SIZE = 10;\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json';\nconst WALLPAPER_DEFAULTS = {\n  type: 'patt',\n  index: 0,\n  path: 'img/bkg/'\n};\n\n/***/ }),\n\n/***/ \"./src/constants.js\":\n/*!**************************!*\\\n  !*** ./src/constants.js ***!\n  \\**************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CALL_HEAD_STARTED: function() { return /* binding */ CALL_HEAD_STARTED; },\n/* harmony export */   CALL_STATE_INCOMING_RECEIVED: function() { return /* binding */ CALL_STATE_INCOMING_RECEIVED; },\n/* harmony export */   CALL_STATE_IN_PROGRESS: function() { return /* binding */ CALL_STATE_IN_PROGRESS; },\n/* harmony export */   CALL_STATE_NONE: function() { return /* binding */ CALL_STATE_NONE; },\n/* harmony export */   CALL_STATE_OUTGOING_INITATED: function() { return /* binding */ CALL_STATE_OUTGOING_INITATED; }\n/* harmony export */ });\nconst CALL_STATE_NONE = 0;\nconst CALL_STATE_OUTGOING_INITATED = 1;\nconst CALL_STATE_INCOMING_RECEIVED = 2;\nconst CALL_STATE_IN_PROGRESS = 3;\nconst CALL_HEAD_STARTED = 'started';\n\n/***/ }),\n\n/***/ \"./src/lib/blob-helpers.js\":\n/*!*********************************!*\\\n  !*** ./src/lib/blob-helpers.js ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MIME_EXTENSIONS: function() { return /* binding */ MIME_EXTENSIONS; },\n/* harmony export */   SUPPORTED_IMAGE_FORMATS: function() { return /* binding */ SUPPORTED_IMAGE_FORMATS; },\n/* harmony export */   base64DecodedLen: function() { return /* binding */ base64DecodedLen; },\n/* harmony export */   base64EncodedLen: function() { return /* binding */ base64EncodedLen; },\n/* harmony export */   base64ReEncode: function() { return /* binding */ base64ReEncode; },\n/* harmony export */   base64ToBlob: function() { return /* binding */ base64ToBlob; },\n/* harmony export */   base64ToIntArray: function() { return /* binding */ base64ToIntArray; },\n/* harmony export */   blobToBase64: function() { return /* binding */ blobToBase64; },\n/* harmony export */   fileNameForMime: function() { return /* binding */ fileNameForMime; },\n/* harmony export */   filePasted: function() { return /* binding */ filePasted; },\n/* harmony export */   fileToBase64: function() { return /* binding */ fileToBase64; },\n/* harmony export */   fitImageSize: function() { return /* binding */ fitImageSize; },\n/* harmony export */   getMimeType: function() { return /* binding */ getMimeType; },\n/* harmony export */   imageCrop: function() { return /* binding */ imageCrop; },\n/* harmony export */   imageScaled: function() { return /* binding */ imageScaled; },\n/* harmony export */   importVCard: function() { return /* binding */ importVCard; },\n/* harmony export */   intArrayToBase64: function() { return /* binding */ intArrayToBase64; },\n/* harmony export */   makeImageUrl: function() { return /* binding */ makeImageUrl; }\n/* harmony export */ });\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);\n\nconst SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nconst MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\nfunction 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}\nfunction fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n  width = width | 0;\n  height = height | 0;\n  maxWidth = maxWidth | 0;\n  maxHeight = maxHeight | 0;\n  if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n    return null;\n  }\n  if (forceSquare) {\n    maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n  }\n  const scale = Math.min(Math.min(width, maxWidth) / width, Math.min(height, maxHeight) / height);\n  const size = {\n    dstWidth: width * scale | 0,\n    dstHeight: height * scale | 0\n  };\n  if (forceSquare) {\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}\nfunction fileNameForMime(fname, mime) {\n  const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n  if (idx < 0 || !fname) {\n    return fname;\n  }\n  const ext = MIME_EXTENSIONS[idx];\n  const at = fname.lastIndexOf('.');\n  if (at >= 0) {\n    fname = fname.substring(0, at);\n  }\n  return fname + '.' + ext;\n}\nfunction 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      URL.revokeObjectURL(img.src);\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, 0, 0, dim.dstWidth, dim.dstHeight);\n      const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\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      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, 0, 0, dim.dstWidth, dim.dstHeight);\n        blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n      }\n      canvas = null;\n      resolve({\n        mime: mime,\n        blob: blob,\n        width: dim.dstWidth,\n        height: dim.dstHeight,\n        name: fileNameForMime(fileOrBlob.name, mime)\n      });\n    };\n    img.src = URL.createObjectURL(fileOrBlob);\n  });\n}\nfunction 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      URL.revokeObjectURL(img.src);\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      mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\n      canvas.toBlob(blob => {\n        canvas = null;\n        if (blob) {\n          resolve({\n            mime: mime,\n            blob: blob,\n            width: width,\n            height: height\n          });\n        } else {\n          reject(new Error(\"Unsupported image format\"));\n        }\n      }, mime);\n    };\n    img.src = objURL;\n  });\n}\nfunction 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({\n        mime: file.type,\n        bits: reader.result.split(',')[1],\n        name: file.name\n      });\n    };\n    reader.readAsDataURL(file);\n  });\n}\nfunction 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({\n        mime: blob.type,\n        bits: reader.result.split(',')[1]\n      });\n    };\n    reader.readAsDataURL(blob);\n  });\n}\nfunction filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n  const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n  if (!items || !items.length) {\n    return false;\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      return true;\n    }\n  }\n  return false;\n}\nfunction getMimeType(header) {\n  const mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n  return mime && mime.length > 1 ? mime[1] : null;\n}\nfunction base64EncodedLen(n) {\n  return Math.floor((n + 2) / 3) * 4;\n}\nfunction base64DecodedLen(n) {\n  return Math.floor(n / 4) * 3;\n}\nfunction 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}\nfunction base64ToBlob(str, mime) {\n  if (!str) {\n    return null;\n  }\n  try {\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    return new Blob([buf], {\n      type: mime\n    });\n  } catch (err) {\n    console.error(\"Failed to convert base64 to blob: \", err);\n  }\n  return null;\n}\nfunction 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}\nfunction 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}\nfunction importVCard(fileOrBlob) {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onerror = _ => {\n      reject(reader.error);\n    };\n    reader.onload = _ => {\n      const card = tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.TheCard.importVCard(reader.result);\n      if (!card) {\n        reject(new Error(\"Failed to parse vCard\"));\n        return;\n      }\n      resolve(card);\n    };\n    reader.readAsText(fileOrBlob);\n  });\n}\n\n/***/ }),\n\n/***/ \"./src/lib/formatters.js\":\n/*!*******************************!*\\\n  !*** ./src/lib/formatters.js ***!\n  \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   fullFormatter: function() { return /* binding */ fullFormatter; },\n/* harmony export */   previewFormatter: function() { return /* binding */ previewFormatter; },\n/* harmony export */   replyFormatter: function() { return /* binding */ replyFormatter; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/audio-player.jsx */ \"./src/widgets/audio-player.jsx\");\n/* harmony import */ var _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/call-message.jsx */ \"./src/widgets/call-message.jsx\");\n/* harmony import */ var _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/call-status.jsx */ \"./src/widgets/call-status.jsx\");\n/* harmony import */ var _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/inline-video.jsx */ \"./src/widgets/inline-video.jsx\");\n/* harmony import */ var _widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/lazy-image.jsx */ \"./src/widgets/lazy-image.jsx\");\n/* harmony import */ var _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/the-card-mini.jsx */ \"./src/widgets/the-card-mini.jsx\");\n/* harmony import */ var _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/uploading-image.jsx */ \"./src/widgets/uploading-image.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _strformat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  drafty_form: {\n    id: \"drafty_form\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Form:\"\n    }]\n  },\n  drafty_attachment: {\n    id: \"drafty_attachment\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Attachment\"\n    }]\n  },\n  drafty_image: {\n    id: \"drafty_image\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Picture\"\n    }]\n  },\n  drafty_video: {\n    id: \"drafty_video\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Video recording\"\n    }]\n  },\n  drafty_unknown: {\n    id: \"drafty_unknown\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unsupported\"\n    }]\n  }\n});\nfunction fullFormatter(style, data, values, key, stack) {\n  if (stack.includes('QQ')) {\n    return quoteFormatter.call(this, style, data, values, key);\n  }\n  if (!style) {\n    return values;\n  }\n  let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);\n  let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};\n  attr.key = key;\n  switch (style) {\n    case 'AU':\n      if (attr.src) {\n        attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.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 = _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n      values = null;\n      break;\n    case 'BR':\n      values = null;\n      break;\n    case 'EX':\n      break;\n    case 'HL':\n      attr.className = 'highlight';\n      break;\n    case 'HD':\n      el = null;\n      values = null;\n      break;\n    case 'IM':\n      el = handleImageData.call(this, el, data, attr);\n      values = null;\n      break;\n    case 'BN':\n      attr.onClick = e => this.onHandleClick(e, 'form_button');\n      let inner = react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(values, child => {\n        return typeof child == 'string' ? child : undefined;\n      });\n      if (!inner || inner.length == 0) {\n        inner = [attr.name];\n      }\n      attr['data-title'] = inner.join('');\n      break;\n    case 'LN':\n      if (attr) {\n        attr.href = typeof attr.href == 'string' ? (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrl)(attr.href, _config_js__WEBPACK_IMPORTED_MODULE_10__.CLICKABLE_URL_SCHEMES) : '';\n      }\n      break;\n    case 'MN':\n      attr.className = 'mention';\n      if (data) {\n        attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);\n      }\n      break;\n    case 'FM':\n      attr.className = 'bot-form';\n      break;\n    case 'RW':\n      break;\n    case 'QQ':\n      attr.className = 'reply-quote';\n      attr.onClick = e => this.onHandleClick(e, 'quote');\n      break;\n    case 'TC':\n      el = _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\n      attr.content = data;\n      attr.authorizeURL = this.authorizeURL;\n      attr.onChatClick = e => this.onHandleClick(e, 'contact_chat');\n      attr.onFindClick = e => this.onHandleClick(e, 'contact_find');\n      values = null;\n      break;\n    case 'VC':\n      el = _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n      values = null;\n      if (data) {\n        attr.callState = data.state;\n        attr.incoming = data.incoming;\n        attr.duration = data.duration;\n      }\n      break;\n    case 'VD':\n      el = handleVideoData.call(this, el, data, attr);\n      values = null;\n      break;\n    default:\n      if (!el) {\n        el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n        attr = {\n          key: key\n        };\n        let body = values;\n        if (!Array.isArray(values) || !values.join('').trim()) {\n          body = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n            key: \"x1\",\n            className: \"gray\"\n          }, this.formatMessage(messages.drafty_unknown))];\n        }\n        values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          key: \"x0\",\n          className: \"material-icons gray\"\n        }, \"extension\"), ' '].concat(body);\n      }\n      break;\n  }\n  if (!el) {\n    return values;\n  }\n  return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);\n}\nfunction handleImageData(el, data, attr) {\n  if (!data) {\n    attr.src = 'img/broken_image.png';\n    attr.style = {\n      width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',\n      height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'\n    };\n    return el;\n  }\n  attr.className = 'inline-image';\n  const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {\n    dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE,\n    dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE\n  };\n  attr.style = {\n    width: dim.dstWidth + 'px',\n    height: dim.dstHeight + 'px',\n    minWidth: dim.dstWidth + 'px',\n    minHeight: dim.dstHeight + 'px'\n  };\n  if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {\n    attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));\n    attr.alt = data.name;\n    if (attr.src) {\n      if (Math.max(data.width || 0, data.height || 0) > _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM) {\n        attr.onClick = e => this.onHandleClick(e, 'image');\n        attr.className += ' image-clickable';\n      }\n      attr.loading = 'lazy';\n    } else {\n      attr.src = null;\n    }\n  } else {\n    el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n  }\n  return el;\n}\nfunction handleVideoData(el, data, attr) {\n  if (!data) {\n    attr.src = 'img/broken_video.png';\n    attr.style = {\n      width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',\n      height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'\n    };\n    return el;\n  }\n  attr.className = 'inline-image';\n  const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {\n    dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO,\n    dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO\n  };\n  attr.style = {\n    width: dim.dstWidth + 'px',\n    height: dim.dstHeight + 'px',\n    minWidth: dim.dstWidth + 'px',\n    minHeight: dim.dstHeight + 'px'\n  };\n  if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {\n    attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));\n    attr.alt = data.name;\n    if (data.ref || data.val) {\n      attr.onClick = e => this.onHandleClick(e, 'video');\n      attr.loading = 'lazy';\n    }\n    el = _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n  } else {\n    el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n  }\n  return el;\n}\nfunction previewFormatter(style, data, values, key) {\n  if (!style) {\n    return values;\n  }\n  let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);\n  const attr = {\n    key: key\n  };\n  switch (style) {\n    case 'AU':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"au\",\n        className: \"material-icons\"\n      }, \"mic\"), ' ', (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.secondsToTime)(data.duration / 1000)];\n      break;\n    case 'BR':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [' '];\n      break;\n    case 'HL':\n      attr.className = 'highlight preview';\n      break;\n    case 'LN':\n    case 'MN':\n      el = 'span';\n      break;\n    case 'IM':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"im\",\n        className: \"material-icons\"\n      }, \"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__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"fm\",\n        className: \"material-icons\"\n      }, \"dashboard\"), this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n      break;\n    case 'RW':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      break;\n    case 'EX':\n      if (data) {\n        if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {\n          return null;\n        }\n        delete data.val;\n        delete data.ref;\n      }\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"ex\",\n        className: \"material-icons\"\n      }, \"attachment\"), ' ', this.formatMessage(messages.drafty_attachment)];\n      break;\n    case 'VC':\n      el = _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\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 'TC':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"tc\",\n        className: \"material-icons\"\n      }, \"contact_mail\"), ' ', tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFn(data) || this.formatMessage(messages.drafty_unknown)];\n      break;\n    case 'VD':\n      el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n      values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"im\",\n        className: \"material-icons\"\n      }, \"play_circle_outline\"), ' ', this.formatMessage(messages.drafty_video)];\n      break;\n    default:\n      if (!el) {\n        el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n        values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          key: \"x0\",\n          className: \"material-icons gray\"\n        }, \"extension\"), ' ', this.formatMessage(messages.drafty_unknown)];\n      }\n      break;\n  }\n  if (!el) {\n    return values;\n  }\n  return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);\n}\n;\nfunction inlineImageAttr(attr, data) {\n  attr.style = {\n    width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',\n    height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',\n    maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',\n    maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.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}\nfunction inlineVideoAttr(attr, data) {\n  const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH, _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM);\n  attr.style = {\n    width: dim.width + 'px',\n    height: dim.height + 'px',\n    maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH + 'px',\n    maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.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}\nfunction quoteFormatter(style, data, values, key) {\n  if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n    let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);\n    let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.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__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];\n        el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n        attr = {\n          key: key\n        };\n        break;\n      case 'VD':\n        attr = inlineVideoAttr.call(this, attr, data);\n        values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];\n        el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n        attr = {\n          key: key\n        };\n        break;\n      case 'MN':\n        el = 'span';\n        attr.className = 'mention';\n        if (data) {\n          attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);\n        }\n        break;\n      case 'EX':\n        let fname;\n        if (data) {\n          if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {\n            return null;\n          }\n          fname = data.name;\n          delete data.val;\n          delete data.ref;\n        }\n        el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);\n        values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          key: \"ex\",\n          className: \"material-icons\"\n        }, \"attachment\"), (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.shortenFileName)(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n        break;\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);\n  }\n  return previewFormatter.call(this, style, data, values, key);\n}\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  if (bits) {\n    const blob = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.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((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(ref, 'image'))).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  return promise.then(blob => {\n    return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.imageScaled)(blob, isVideo ? _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH : _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM, _config_js__WEBPACK_IMPORTED_MODULE_10__.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    data.src = URL.createObjectURL(scaled.blob);\n    return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.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 = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;\n    data.height = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;\n    throw err;\n  });\n}\nfunction replyFormatter(style, data, values, key, stack) {\n  if (style == 'IM' || style == 'VD') {\n    const isImage = style == 'IM';\n    const attr = isImage ? inlineImageAttr.call(this, {\n      key: key\n    }, data) : inlineVideoAttr.call(this, {\n      key: key\n    }, data);\n    let loadedPromise;\n    try {\n      loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(quoteImageOrVideo.call(this, data, style == 'VD'));\n    } catch (error) {\n      console.warn(\"Failed to quote image:\", error.message);\n      loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(error);\n    }\n    attr.whenDone = loadedPromise;\n    values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"], attr, null), ' ', attr.alt];\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n      key: key\n    }, values);\n  } else if (style == 'QQ') {\n    if (stack.includes('QQ')) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('span', {\n        key: key\n      }, [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        key: \"qq\",\n        className: \"material-icons\"\n      }, \"format_quote\"), ' ']);\n    }\n    const attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue('QQ', data) || {};\n    attr.key = key;\n    attr.className = 'reply-quote';\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName('QQ'), attr, values);\n  }\n  return quoteFormatter.call(this, style, data, values, key);\n}\n\n/***/ }),\n\n/***/ \"./src/lib/host-name.js\":\n/*!******************************!*\\\n  !*** ./src/lib/host-name.js ***!\n  \\******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   detectServerAddress: function() { return /* binding */ detectServerAddress; },\n/* harmony export */   isLocalHost: function() { return /* binding */ isLocalHost; },\n/* harmony export */   isSecureConnection: function() { return /* binding */ isSecureConnection; }\n/* harmony export */ });\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\nfunction detectServerAddress() {\n  let host = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_HOST;\n  if (typeof window.location == 'object') {\n    if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {\n      host = _config_js__WEBPACK_IMPORTED_MODULE_0__.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}\nfunction isSecureConnection() {\n  if (typeof window.location == 'object') {\n    return window.location.protocol == 'https:';\n  }\n  return false;\n}\nfunction isLocalHost() {\n  if (typeof window.location == 'object') {\n    return window.location.hostname == 'localhost';\n  }\n  return false;\n}\n\n/***/ }),\n\n/***/ \"./src/lib/local-storage.js\":\n/*!**********************************!*\\\n  !*** ./src/lib/local-storage.js ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LocalStorageUtil; }\n/* harmony export */ });\nclass LocalStorageUtil {\n  static setObject(key, value) {\n    localStorage.setItem(key, JSON.stringify(value));\n  }\n  static getObject(key) {\n    const value = localStorage.getItem(key);\n    return value && JSON.parse(value);\n  }\n  static updateObject(key, value) {\n    const oldVal = this.getObject(key);\n    this.setObject(key, Object.assign(oldVal || {}, value));\n  }\n  static removeItem(key) {\n    localStorage.removeItem(key);\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/lib/navigation.js\":\n/*!*******************************!*\\\n  !*** ./src/lib/navigation.js ***!\n  \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ HashNavigation; }\n/* harmony export */ });\nclass HashNavigation {\n  static parseUrlHash(hash) {\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        const eq = arg.indexOf('=');\n        if (eq > 0) {\n          params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n        }\n      });\n    }\n    return {\n      path: path,\n      params: params\n    };\n  }\n  static navigateTo(url) {\n    window.location.hash = url;\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        if (params[key] !== undefined) {\n          args.push(key + '=' + encodeURIComponent(params[key]));\n        }\n      }\n    }\n    if (args.length > 0) {\n      url += '?' + args.join('&');\n    }\n    return url;\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  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  static removeUrlParams(hash, keys) {\n    if (!Array.isArray(keys)) {\n      keys = [keys];\n    }\n    const parsed = HashNavigation.parseUrlHash(hash);\n    for (const key of keys) {\n      delete parsed.params[key];\n    }\n    return HashNavigation.composeUrlHash(parsed.path, parsed.params);\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  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  static setUrlTopic(hash, topic) {\n    const parsed = HashNavigation.parseUrlHash(hash);\n    parsed.path[1] = topic;\n    delete parsed.params.info;\n    return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/lib/strformat.js\":\n/*!******************************!*\\\n  !*** ./src/lib/strformat.js ***!\n  \\******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   bytesToHumanSize: function() { return /* binding */ bytesToHumanSize; },\n/* harmony export */   flagEmoji: function() { return /* binding */ flagEmoji; },\n/* harmony export */   idToColorClass: function() { return /* binding */ idToColorClass; },\n/* harmony export */   letterTileColorId: function() { return /* binding */ letterTileColorId; },\n/* harmony export */   relativeDateFormat: function() { return /* binding */ relativeDateFormat; },\n/* harmony export */   secondsToTime: function() { return /* binding */ secondsToTime; },\n/* harmony export */   shortDateFormat: function() { return /* binding */ shortDateFormat; },\n/* harmony export */   shortenFileName: function() { return /* binding */ shortenFileName; },\n/* harmony export */   truncateString: function() { return /* binding */ truncateString; }\n/* harmony export */ });\nfunction shortDateFormat(then, locale) {\n  locale = locale || window.navigator.userLanguage || window.navigator.language;\n  const now = new Date();\n  if (then.getFullYear() == now.getFullYear()) {\n    if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n      return then.toLocaleTimeString(locale, {\n        hour12: false,\n        hour: '2-digit',\n        minute: '2-digit'\n      });\n    }\n    return then.toLocaleDateString(locale, {\n      hour12: false,\n      month: 'short',\n      day: 'numeric',\n      hour: '2-digit',\n      minute: '2-digit'\n    });\n  }\n  return then.toLocaleDateString(locale, {\n    year: 'numeric',\n    month: 'short',\n    day: 'numeric'\n  });\n}\nfunction 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    return new Intl.RelativeTimeFormat(locale, {\n      numeric: 'auto'\n    }).format(diff, 'day');\n  }\n  return new Intl.DateTimeFormat(locale).format(then);\n}\nfunction secondsToTime(seconds, fixedMin) {\n  if (typeof seconds != 'number') {\n    return '';\n  }\n  let min = (Math.floor(seconds / 60) | 0) % 60;\n  let hours = Math.floor(seconds / 3600) | 0;\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}\nfunction bytesToHumanSize(bytes) {\n  if (!bytes || bytes == 0) {\n    return '0 Bytes';\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}\nfunction shortenFileName(filename, maxLength) {\n  if (typeof filename != 'string') {\n    return filename;\n  }\n  return filename.length > maxLength ? filename.slice(0, maxLength / 2 - 1) + '…' + filename.slice(1 - maxLength / 2) : filename;\n}\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;\n  }\n  return hash;\n}\nfunction letterTileColorId(userId) {\n  return Math.abs(stringToColorHash(userId)) % 16;\n}\nfunction idToColorClass(id, light, fg) {\n  return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\nfunction flagEmoji(countryCode) {\n  const codePoints = countryCode.toUpperCase().split('').map(char => 0x1F1A5 + char.charCodeAt());\n  return String.fromCodePoint(...codePoints);\n}\nfunction truncateString(str, maxLength) {\n  if (typeof str !== 'string') {\n    return str;\n  }\n  if (str.length <= maxLength) {\n    return str;\n  }\n  const isRTL = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/.test(str);\n  return isRTL ? '…' + str.slice(0, maxLength - 1) : str.slice(0, maxLength - 1) + '…';\n}\n\n/***/ }),\n\n/***/ \"./src/lib/utils.js\":\n/*!**************************!*\\\n  !*** ./src/lib/utils.js ***!\n  \\**************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   arrayEqual: function() { return /* binding */ arrayEqual; },\n/* harmony export */   asEmail: function() { return /* binding */ asEmail; },\n/* harmony export */   asPhone: function() { return /* binding */ asPhone; },\n/* harmony export */   cancelablePromise: function() { return /* binding */ cancelablePromise; },\n/* harmony export */   defaultWallpaper: function() { return /* binding */ defaultWallpaper; },\n/* harmony export */   deliveryMarker: function() { return /* binding */ deliveryMarker; },\n/* harmony export */   isUrlRelative: function() { return /* binding */ isUrlRelative; },\n/* harmony export */   sanitizeUrl: function() { return /* binding */ sanitizeUrl; },\n/* harmony export */   sanitizeUrlForMime: function() { return /* binding */ sanitizeUrlForMime; },\n/* harmony export */   theCard: function() { return /* binding */ theCard; },\n/* harmony export */   updateFavicon: function() { return /* binding */ updateFavicon; },\n/* harmony export */   urlAsAttachment: function() { return /* binding */ urlAsAttachment; },\n/* harmony export */   wallpaperNameFromUrl: function() { return /* binding */ wallpaperNameFromUrl; },\n/* harmony export */   wallpaperTypeFromUrl: function() { return /* binding */ wallpaperTypeFromUrl; }\n/* harmony export */ });\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\nfunction 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  document.title = (count > 0 ? '(' + count + ') ' : '') + 'Tinode';\n}\nfunction theCard(fn, imageUrl, imageMimeType, note) {\n  let card = null;\n  fn = fn && fn.trim();\n  note = note && note.trim();\n  if (fn) {\n    card = {\n      fn: fn\n    };\n  }\n  if (typeof note == 'string') {\n    card = card || {};\n    card.note = note ? note : tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR;\n  }\n  if (imageUrl) {\n    card = card || {};\n    let mimeType = imageMimeType;\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_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR\n      };\n    } else {\n      card.photo = {\n        data: tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR,\n        ref: imageUrl\n      };\n    }\n    card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n  }\n  return card;\n}\nfunction arrayEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (!Array.isArray(a) || !Array.isArray(b)) {\n    return false;\n  }\n  if (a.length != b.length) {\n    return false;\n  }\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}\nfunction asPhone(val) {\n  val = val.trim();\n  if (/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(val)) {\n    return val.replaceAll(/[- ().]*/g, '');\n  }\n  return null;\n}\nfunction asEmail(val) {\n  val = val.trim();\n  if (/^[a-z0-9_.+-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.test(val)) {\n    return val;\n  }\n  return null;\n}\nfunction isUrlRelative(url) {\n  return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url.replace(/\\\\/g, '/'));\n}\nfunction sanitizeUrl(url, allowedSchemes) {\n  if (typeof url != 'string') {\n    return url;\n  }\n  url = url.replace(/[^\\x21-\\x7E]/gmi, '').trim();\n  url = url.replace(/\\\\/g, '/');\n  if (!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url)) {\n    return url;\n  }\n  if (/^blob:http/.test(url)) {\n    return url;\n  }\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  return url;\n}\nfunction sanitizeUrlForMime(url, mimeMajor) {\n  if (!url) {\n    return null;\n  }\n  const sanitizedUrl = sanitizeUrl(url);\n  if (sanitizedUrl) {\n    return sanitizedUrl;\n  }\n  const re = new RegExp(`data:${mimeMajor}\\/[-+.a-z0-9]+;base64,`, 'i');\n  if (re.test(url.trim())) {\n    return url;\n  }\n  return null;\n}\nfunction urlAsAttachment(url) {\n  if (url.startsWith('data:') || url.startsWith('blob:')) {\n    return url;\n  }\n  let query = '',\n    fragment = '';\n  const idxF = url.indexOf('#');\n  if (idxF > 0) {\n    fragment = url.substring(idxF + 1);\n    url = url.substring(0, idxF);\n  }\n  const idxQ = url.indexOf('?');\n  if (idxQ > 0) {\n    query = url.substring(idxQ + 1);\n    url = url.substring(0, idxQ);\n  }\n  const params = new URLSearchParams(query);\n  params.append('asatt', '1');\n  return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\nfunction deliveryMarker(received) {\n  switch (received) {\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENDING:\n      return {\n        name: 'access_time'\n      };\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FAILED:\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FATAL:\n      return {\n        name: 'warning',\n        color: 'danger-color'\n      };\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENT:\n      return {\n        name: 'done'\n      };\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_RECEIVED:\n      return {\n        name: 'done_all'\n      };\n    case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_READ:\n      return {\n        name: 'done_all',\n        color: 'blue'\n      };\n  }\n  return null;\n}\nfunction cancelablePromise(promise) {\n  let hasCanceled = false;\n  const wrappedPromise = promise instanceof Error ? Promise.reject(promise) : new Promise((resolve, reject) => {\n    promise.then(result => hasCanceled ? reject({\n      isCanceled: true\n    }) : resolve(result), error => hasCanceled ? reject({\n      isCanceled: true\n    }) : reject(error));\n  });\n  return {\n    promise: wrappedPromise,\n    cancel() {\n      hasCanceled = true;\n    }\n  };\n}\n;\nfunction defaultWallpaper() {\n  const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ \"./img/bkg/index.json\");\n  const wp = wallpaperIndex[_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.type][_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.index];\n  return {\n    name: `../${_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.path}${wp.name}`,\n    size: wp.size\n  };\n}\nfunction wallpaperNameFromUrl(wallpaperUrl) {\n  const parts = wallpaperUrl.split('/');\n  return parts[parts.length - 1];\n}\nfunction wallpaperTypeFromUrl(wallpaperUrl) {\n  const fname = wallpaperNameFromUrl(wallpaperUrl);\n  const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ \"./img/bkg/index.json\");\n  for (const type in wallpaperIndex) {\n    for (let i = 0; i < wallpaperIndex[type].length; i++) {\n      if (wallpaperIndex[type][i].name == fname) {\n        return type;\n      }\n    }\n  }\n  return null;\n}\n\n/***/ }),\n\n/***/ \"./src/version.js\":\n/*!************************!*\\\n  !*** ./src/version.js ***!\n  \\************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   PACKAGE_VERSION: function() { return /* binding */ PACKAGE_VERSION; }\n/* harmony export */ });\nconst PACKAGE_VERSION = \"0.25.2\";\n\n/***/ }),\n\n/***/ \"./src/views/acc-general-view.jsx\":\n/*!****************************************!*\\\n  !*** ./src/views/acc-general-view.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AccGeneralView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass AccGeneralView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      colorSchema: props.colorSchema || 'auto',\n      textSize: props.textSize * 10 || '100',\n      sendOnEnter: props.sendOnEnter || 'plain'\n    };\n    this.isMac = (navigator.userAgentData && navigator.userAgentData.platform || navigator.platform).toLowerCase().startsWith('mac');\n    this.handleColorSchemaSelected = this.handleColorSchemaSelected.bind(this);\n    this.handleTextSizeChanged = this.handleTextSizeChanged.bind(this);\n    this.handleSendOnEnterSelected = this.handleSendOnEnterSelected.bind(this);\n  }\n  handleColorSchemaSelected(e) {\n    this.setState({\n      colorSchema: e.currentTarget.value\n    });\n    this.props.onChangeColorSchema(e.currentTarget.value);\n  }\n  handleTextSizeChanged(e) {\n    this.setState({\n      textSize: e.currentTarget.value\n    });\n    this.props.onTextSizeChanged(e.currentTarget.value / 10 | 0);\n  }\n  handleSendOnEnterSelected(e) {\n    this.setState({\n      sendOnEnter: e.currentTarget.value\n    });\n    this.props.onSendOnEnterChanged(e.currentTarget.value);\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"settings-form\",\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_color_schema\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Theme:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: \"system\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"radio\",\n      id: \"system\",\n      name: \"color-scheme-select\",\n      value: \"auto\",\n      checked: this.state.colorSchema == 'auto',\n      onChange: this.handleColorSchemaSelected\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"system\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"color_schema_system\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"System default\"\n      }]\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      src: \"img/routine.svg\",\n      style: {\n        verticalAlign: 'top',\n        width: '1.6rem',\n        height: '1.6rem'\n      }\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: \"light\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"radio\",\n      id: \"light\",\n      name: \"color-scheme-select\",\n      value: \"light\",\n      checked: this.state.colorSchema == 'light',\n      onChange: this.handleColorSchemaSelected\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"light\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"color_schema_light\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Light\"\n      }]\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons orange large\"\n    }, \"light_mode\"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: \"dark\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"radio\",\n      id: \"dark\",\n      name: \"color-scheme-select\",\n      value: \"dark\",\n      checked: this.state.colorSchema == 'dark',\n      onChange: this.handleColorSchemaSelected\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"dark\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"color_schema_dark\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Dark\"\n      }]\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons blue large\"\n    }, \"dark_mode\")))))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row clean-clickable\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      onClick: this.props.onSelectWallpapers,\n      className: \"flat-button\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"wallpaper\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"wallpapers\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Wallpapers\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_text_size\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Text size:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"range\",\n      id: \"text_size\",\n      name: \"text_size\",\n      min: \"80\",\n      max: \"120\",\n      step: \"10\",\n      list: \"text_size_options\",\n      value: this.state.textSize,\n      onChange: this.handleTextSizeChanged\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"datalist\", {\n      id: \"text_size_options\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n      value: \"80\",\n      label: \"80%\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n      value: \"90\",\n      label: \"90%\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n      value: \"100\",\n      label: \"100%\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n      value: \"110\",\n      label: \"110%\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n      value: \"120\",\n      label: \"120%\"\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_keyboard\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Keyboard:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: \"plain\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"radio\",\n      id: \"plain\",\n      name: \"send-select\",\n      value: \"plain\",\n      checked: this.state.sendOnEnter == 'plain',\n      onChange: this.handleSendOnEnterSelected\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"send_plain\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"send_plain\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Send on Enter\"\n      }]\n    }), \"\\xA0\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"send_plain_explained\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Press Shift + Enter for new line\"\n      }]\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: \"command\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"radio\",\n      id: \"command\",\n      name: \"send-select\",\n      value: \"command\",\n      checked: this.state.sendOnEnter == 'command',\n      onChange: this.handleSendOnEnterSelected\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"send_command\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"send_command\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Send on \"\n      }, {\n        \"type\": 1,\n        \"value\": \"key\"\n      }],\n      values: {\n        key: this.isMac ? '⌘ + Enter' : 'Ctrl + Enter'\n      }\n    }), \"\\xA0\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"send_command_explained\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Press Enter for new line\"\n      }]\n    })))))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/acc-notifications-view.jsx\":\n/*!**********************************************!*\\\n  !*** ./src/views/acc-notifications-view.jsx ***!\n  \\**********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AccNotificationsView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n\n\n\nclass AccNotificationsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\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    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"message-sound\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_message_sound\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Message sound:\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      name: \"sound\",\n      id: \"message-sound\",\n      checked: this.props.messageSounds,\n      onChange: this.handleCheckboxClick\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"desktop-alerts\"\n    }, this.props.desktopAlertsEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_push_notifications\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Notification alerts:\"\n      }]\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_push_notifications_disabled\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Notification alerts (requires HTTPS):\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      name: \"alert\",\n      id: \"desktop-alerts\",\n      checked: this.props.desktopAlerts,\n      onChange: this.props.desktopAlertsEnabled ? this.handleCheckboxClick : null\n    })));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/acc-support-view.jsx\":\n/*!****************************************!*\\\n  !*** ./src/views/acc-support-view.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AccSupportView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\nclass AccSupportView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_CONTACT_US,\n      className: \"flat-button\",\n      target: \"_blank\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"email\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"link_contact_us\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Contact Us\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_TERMS_OF_SERVICE,\n      className: \"flat-button\",\n      target: \"_blank\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"description\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"link_terms_of_service\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Terms of Service\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_PRIVACY_POLICY,\n      className: \"flat-button\",\n      target: \"_blank\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"policy\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"link_privacy_policy\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Privacy Policy\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_client\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Client:\"\n      }]\n    })), _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_sdk\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"SDK:\"\n      }]\n    })), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.getLibrary()), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_server\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Server:\"\n      }]\n    })), this.props.serverVersion), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_server_address\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Server address:\"\n      }]\n    })), this.props.serverAddress)));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/contacts-view.jsx\":\n/*!*************************************!*\\\n  !*** ./src/views/contacts-view.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ContactsView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ \"./src/widgets/contact-list.jsx\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  archived_contacts_title: {\n    id: \"archived_contacts\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Archived contacts (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"count\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  }\n});\nclass ContactsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.handleAction = this.handleAction.bind(this);\n    this.state = ContactsView.deriveStateFromProps(props);\n  }\n  static deriveStateFromProps(props) {\n    const contacts = [];\n    let unreadThreads = 0;\n    let archivedCount = 0;\n    const me = props.tinode.getMeTopic();\n    props.chatList.forEach(c => {\n      const blocked = c.acs && !c.acs.isJoiner();\n      c.pinned = me.pinnedTopicRank(c.topic);\n      if (blocked && props.blocked) {\n        contacts.push(c);\n      }\n      if (blocked || props.blocked) {\n        return;\n      }\n      if (c.private && c.private.arch) {\n        if (props.archive) {\n          contacts.push(c);\n        } else {\n          archivedCount++;\n        }\n      } else if (!props.archive) {\n        contacts.push(c);\n        unreadThreads += c.unread > 0 ? 1 : 0;\n      }\n    });\n    contacts.sort((a, b) => {\n      const pin = b.pinned - a.pinned;\n      return pin != 0 ? pin : (b.touched || 0) - (a.touched || 0);\n    });\n    if (archivedCount > 0) {\n      contacts.push({\n        action: 'archive',\n        title: messages.archived_contacts_title,\n        values: {\n          count: archivedCount\n        }\n      });\n    }\n    return {\n      contactList: contacts,\n      unreadThreads: unreadThreads\n    };\n  }\n  componentDidUpdate(prevProps, prevState) {\n    if (prevProps.chatList != this.props.chatList || prevProps.archive != this.props.archive || prevProps.blocked != this.props.blocked) {\n      const newState = ContactsView.deriveStateFromProps(this.props);\n      this.setState(newState);\n      if (newState.unreadThreads != prevState.unreadThreads) {\n        (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.updateFavicon)(newState.unreadThreads);\n      }\n    }\n  }\n  handleAction(action_ignored) {\n    this.props.onShowArchive();\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"contacts_not_found\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"You have no chats\\\\n¯∖_(ツ)_/¯\"\n      }]\n    }, no_contacts => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      tinode: this.props.tinode,\n      connected: this.props.connected,\n      contacts: this.state.contactList,\n      emptyListMessage: no_contacts,\n      topicSelected: this.props.topicSelected,\n      myUserId: this.props.myUserId,\n      showOnline: true,\n      showUnread: true,\n      onTopicSelected: this.props.onTopicSelected,\n      showContextMenu: this.props.showContextMenu,\n      onAction: this.handleAction\n    }));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/login-view.jsx\":\n/*!**********************************!*\\\n  !*** ./src/views/login-view.jsx ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LoginView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ \"./src/widgets/visible-password.jsx\");\n\n\n\n\nclass LoginView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      login: props.login,\n      password: '',\n      hostName: props.serverAddress,\n      saveToken: props.persist\n    };\n    this.handleLoginChange = this.handleLoginChange.bind(this);\n    this.handlePasswordChange = this.handlePasswordChange.bind(this);\n    this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n  handleLoginChange(e) {\n    this.setState({\n      login: e.target.value\n    });\n  }\n  handlePasswordChange(e) {\n    this.setState({\n      password: e.target.value\n    });\n  }\n  handleToggleSaveToken() {\n    this.props.onPersistenceChange(!this.state.saveToken);\n    this.setState({\n      saveToken: !this.state.saveToken\n    });\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    this.props.onLogin(this.state.login.trim(), this.state.password.trim());\n  }\n  render() {\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      id: \"login-form\",\n      onSubmit: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"login_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Login\"\n      }]\n    }, login_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"inputLogin\",\n      placeholder: login_prompt,\n      autoComplete: \"username\",\n      autoCorrect: \"off\",\n      autoCapitalize: \"none\",\n      value: this.state.login,\n      onChange: this.handleLoginChange,\n      required: true,\n      autoFocus: true\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"password_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Password\"\n      }]\n    }, password_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      type: \"password\",\n      id: \"inputPassword\",\n      placeholder: password_prompt,\n      autoComplete: \"current-password\",\n      value: this.state.password,\n      onChange: this.handlePasswordChange,\n      required: true\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      id: \"save-token\",\n      name: \"save-token\",\n      checked: this.state.saveToken,\n      onChange: this.handleToggleSaveToken\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"save-token\"\n    }, \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"stay_logged_in\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Stay logged in\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#reset\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"forgot_password_link\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Forgot password?\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: submitClasses,\n      type: \"submit\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_sign_in\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Sign in\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/new-topic-view.jsx\":\n/*!**************************************!*\\\n  !*** ./src/views/new-topic-view.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ \"./src/widgets/contact-list.jsx\");\n/* harmony import */ var _widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/new-topic-by-id.jsx */ \"./src/widgets/new-topic-by-id.jsx\");\n/* harmony import */ var _widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/new-topic-group.jsx */ \"./src/widgets/new-topic-group.jsx\");\n/* harmony import */ var _widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/search-contacts.jsx */ \"./src/widgets/search-contacts.jsx\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  search_for_contacts: {\n    id: \"search_for_contacts\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Use search to find contacts\"\n    }]\n  },\n  search_no_results: {\n    id: \"search_no_results\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Search returned no results\"\n    }]\n  },\n  search_placeholder: {\n    id: \"search_placeholder\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"List like alice@example.com, +17025550003...\"\n    }]\n  }\n});\nclass NewTopicView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    const urlParams = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].parseUrlHash(window.location.hash).params;\n    const initialTab = urlParams['tab'] || 'find';\n    const initialQuery = initialTab == 'find' ? urlParams['q'] || null : null;\n    this.state = {\n      tabSelected: initialTab,\n      searchQuery: initialQuery\n    };\n    this.handleTabClick = this.handleTabClick.bind(this);\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleSearchResultSelected = this.handleSearchResultSelected.bind(this);\n    this.handleNewGroupSubmit = this.handleNewGroupSubmit.bind(this);\n    this.handleGroupByID = this.handleGroupByID.bind(this);\n  }\n  componentDidMount() {\n    this.props.onInitFind();\n  }\n  handleTabClick(e) {\n    e.preventDefault();\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));\n    this.setState({\n      tabSelected: e.currentTarget.dataset.id\n    });\n  }\n  handleSearchContacts(query) {\n    query = query.trim() || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR;\n    if (!/[\\s,:]/.test(query) && query != tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR) {\n      const email = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asEmail)(query);\n      if (email) {\n        query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_EMAIL}${email}`;\n      } else {\n        const tel = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asPhone)(query);\n        if (tel) {\n          query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_PHONE}${tel}`;\n        } else {\n          if (query[0] == '@') {\n            query = query.substring(1);\n          }\n          query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${query},${query}`;\n        }\n      }\n    }\n    this.props.onSearchContacts(query);\n    this.setState({\n      searchQuery: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query\n    });\n  }\n  handleSearchResultSelected(topicName) {\n    if (this.state.tabSelected == 'find') {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeUrlParams(window.location.hash, ['tab', 'q']));\n      this.props.onCreateTopic(topicName);\n    }\n  }\n  handleNewGroupSubmit(name, description, dataUrl, priv, tags, isChannel) {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeUrlParams(window.location.hash, ['tab', 'q']));\n    this.props.onCreateTopic(undefined, {\n      public: (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.theCard)(name, dataUrl, null, description),\n      private: priv,\n      tags: tags\n    }, isChannel);\n  }\n  handleGroupByID(topicName) {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeUrlParams(window.location.hash, ['tab', 'q']));\n    this.props.onCreateTopic(topicName);\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const no_contacts_placeholder = formatMessage(this.state.searchQuery ? messages.search_no_results : messages.search_for_contacts);\n    const search_placeholder = formatMessage(messages.search_placeholder);\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"flex-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"tabbar\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: this.state.tabSelected === 'find' ? 'active' : null\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      \"data-id\": \"find\",\n      onClick: this.handleTabClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tabtitle_find_user\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"find\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: this.state.tabSelected === 'grp' ? 'active' : null\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      \"data-id\": \"grp\",\n      onClick: this.handleTabClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tabtitle_new_group\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"new group\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: this.state.tabSelected === 'byid' ? 'active' : null\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      \"data-id\": \"byid\",\n      onClick: this.handleTabClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tabtitle_group_by_id\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"by id\"\n      }]\n    })))), this.state.tabSelected === 'grp' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      tinode: this.props.tinode,\n      onSubmit: this.handleNewGroupSubmit,\n      onError: this.props.onError\n    }) : this.state.tabSelected === 'byid' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      myURI: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.URI_TOPIC_ID_PREFIX + this.props.tinode.getCurrentUserID(),\n      onSubmit: this.handleGroupByID,\n      onError: this.props.onError\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"flex-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      placeholder: search_placeholder,\n      initialQuery: this.state.searchQuery || '',\n      onSearchContacts: this.handleSearchContacts\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      contacts: this.props.searchResults,\n      myUserId: this.props.myUserId,\n      emptyListMessage: no_contacts_placeholder,\n      showSelfTopic: !this.state.searchQuery,\n      showOnline: false,\n      showUnread: false,\n      showContextMenu: false,\n      onTopicSelected: this.handleSearchResultSelected\n    })));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(NewTopicView));\n\n/***/ }),\n\n/***/ \"./src/views/settings-view.jsx\":\n/*!*************************************!*\\\n  !*** ./src/views/settings-view.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ SettingsView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/host-selector.jsx */ \"./src/widgets/host-selector.jsx\");\n\n\n\n\nclass SettingsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      transport: props.transport || 'def',\n      serverAddress: props.serverAddress,\n      secureConnection: props.secureConnection\n    };\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleTransportSelected = this.handleTransportSelected.bind(this);\n    this.handleServerAddressChange = this.handleServerAddressChange.bind(this);\n    this.handleToggleSecure = this.handleToggleSecure.bind(this);\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    this.props.onUpdate({\n      transport: this.state.transport,\n      serverAddress: this.state.serverAddress,\n      secureConnection: this.state.secureConnection\n    });\n  }\n  handleTransportSelected(e) {\n    this.setState({\n      transport: e.currentTarget.value\n    });\n  }\n  handleServerAddressChange(name) {\n    this.setState({\n      serverAddress: name\n    });\n  }\n  handleToggleSecure(e) {\n    this.setState({\n      secureConnection: !this.state.secureConnection\n    });\n  }\n  render() {\n    const names = {\n      def: \"default\",\n      ws: \"websocket\",\n      lp: \"long polling\"\n    };\n    const transportOptions = [];\n    ['def', 'ws', 'lp'].forEach(item => {\n      const id = 'transport-' + item;\n      const name = names[item];\n      transportOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n        key: item\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n        type: \"radio\",\n        id: id,\n        name: \"transport-select\",\n        value: item,\n        checked: this.state.transport === item,\n        onChange: this.handleTransportSelected\n      }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n        htmlFor: id\n      }, name)));\n    });\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      id: \"settings-form\",\n      className: \"panel-form\",\n      onSubmit: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_server_to_use\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Server to use:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      serverAddress: this.state.serverAddress,\n      onServerAddressChange: this.handleServerAddressChange\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      id: \"secure-connection\",\n      name: \"secure-connection\",\n      checked: this.state.secureConnection,\n      className: \"quoted\",\n      onChange: this.handleToggleSecure\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"secure-connection\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_use_secure_connection\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Use secure connection\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_wire_transport\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Wire transport:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"quoted\"\n    }, transportOptions)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      type: \"submit\",\n      className: \"primary\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_update\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Update\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/sidepanel-view.jsx\":\n/*!**************************************!*\\\n  !*** ./src/views/sidepanel-view.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ \"./src/widgets/error-panel.jsx\");\n/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ \"./src/widgets/load-spinner.jsx\");\n/* harmony import */ var _widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/side-navbar.jsx */ \"./src/widgets/side-navbar.jsx\");\n/* harmony import */ var _topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./topic-common-view.jsx */ \"./src/views/topic-common-view.jsx\");\n/* harmony import */ var _contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./contacts-view.jsx */ \"./src/views/contacts-view.jsx\");\n/* harmony import */ var _acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./acc-general-view.jsx */ \"./src/views/acc-general-view.jsx\");\n/* harmony import */ var _acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./acc-notifications-view.jsx */ \"./src/views/acc-notifications-view.jsx\");\n/* harmony import */ var _acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./acc-support-view.jsx */ \"./src/views/acc-support-view.jsx\");\n/* harmony import */ var _login_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./login-view.jsx */ \"./src/views/login-view.jsx\");\n/* harmony import */ var _new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./new-topic-view.jsx */ \"./src/views/new-topic-view.jsx\");\n/* harmony import */ var _settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./settings-view.jsx */ \"./src/views/settings-view.jsx\");\n/* harmony import */ var _validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./validation-view.jsx */ \"./src/views/validation-view.jsx\");\n\n\n\n\n\n\nconst AccountSettingsView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js\"), __webpack_require__.e(\"vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54\"), __webpack_require__.e(\"src_views_account-settings-view_jsx\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./account-settings-view.jsx */ \"./src/views/account-settings-view.jsx\")));\n\nconst CreateAccountView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js\"), __webpack_require__.e(\"vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54\"), __webpack_require__.e(\"src_views_create-account-view_jsx\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./create-account-view.jsx */ \"./src/views/create-account-view.jsx\")));\n\n\nconst AccSecurityView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_views_acc-security-view_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ./acc-security-view.jsx */ \"./src/views/acc-security-view.jsx\")));\n\n\n\nconst PasswordResetView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js\"), __webpack_require__.e(\"vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54\"), __webpack_require__.e(\"src_views_password-reset-view_jsx\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./password-reset-view.jsx */ \"./src/views/password-reset-view.jsx\")));\n\n\nconst WallpapersView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_views_wallpapers_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ./wallpapers.jsx */ \"./src/views/wallpapers.jsx\")));\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  login: {\n    id: \"sidepanel_title_login\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Sign In\"\n    }]\n  },\n  register: {\n    id: \"sidepanel_title_register\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Create Account\"\n    }]\n  },\n  settings: {\n    id: \"sidepanel_title_settings\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Settings\"\n    }]\n  },\n  edit: {\n    id: \"sidepanel_title_account_settings\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Account Settings\"\n    }]\n  },\n  general: {\n    id: \"panel_title_general\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"General\"\n    }]\n  },\n  security: {\n    id: \"panel_title_security\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Security\"\n    }]\n  },\n  crop: {\n    id: \"panel_title_crop\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Drag to Adjust\"\n    }]\n  },\n  notif: {\n    id: \"sidepanel_title_acc_notifications\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Notifications\"\n    }]\n  },\n  acc_general: {\n    id: \"sidepanel_title_acc_general\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"General\"\n    }]\n  },\n  support: {\n    id: \"sidepanel_title_acc_support\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Support\"\n    }]\n  },\n  newtpk: {\n    id: \"sidepanel_title_newtpk\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Start New Chat\"\n    }]\n  },\n  cred: {\n    id: \"sidepanel_title_cred\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Confirm Credentials\"\n    }]\n  },\n  reset: {\n    id: \"sidepanel_title_reset\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Reset Password\"\n    }]\n  },\n  archive: {\n    id: \"sidepanel_title_archive\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Archived Chats\"\n    }]\n  },\n  blocked: {\n    id: \"sidepanel_title_blocked\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Blocked Chats\"\n    }]\n  },\n  wallpapers: {\n    id: \"wallpapers\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Wallpapers\"\n    }]\n  }\n});\nclass SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleNewTopic = this.handleNewTopic.bind(this);\n  }\n  handleNewTopic() {\n    this.props.onNavigate('newtpk');\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const view = this.props.state || (this.props.myUserId ? 'contacts' : 'login');\n    let title, avatar, badges;\n    if (view == 'contacts') {\n      title = this.props.title;\n      avatar = this.props.avatar ? this.props.avatar : true;\n      badges = this.props.trustedBadges;\n    } else {\n      title = formatMessage(messages[view]);\n      avatar = false;\n      badges = null;\n    }\n    let onCancel;\n    if (['login', 'contacts'].indexOf(view) == -1) {\n      onCancel = this.props.onCancel;\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"sidepanel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      state: view,\n      title: title,\n      avatar: avatar,\n      tinode: this.props.tinode,\n      trustedBadges: badges,\n      myUserId: this.props.myUserId,\n      onSignUp: this.props.onSignUp,\n      onSettings: this.props.onSettings,\n      onNewTopic: this.handleNewTopic,\n      onCancel: onCancel\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      level: this.props.errorLevel,\n      text: this.props.errorText,\n      action: this.props.errorAction,\n      actionText: this.props.errorActionText,\n      onClearError: this.props.onError\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      show: this.props.loadSpinnerVisible\n    }), view === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_login_view_jsx__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n      login: this.props.login,\n      disabled: this.props.loginDisabled,\n      persist: this.props.persist,\n      onLogin: this.props.onLoginRequest,\n      onPersistenceChange: this.props.onPersistenceChange\n    }) : view === 'register' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"panel-form-row\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CreateAccountView, {\n      tinode: this.props.tinode,\n      reqCredMethod: this.props.reqCredMethod,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onCreateAccount: this.props.onCreateAccount,\n      onCancel: this.props.onCancel,\n      onError: this.props.onError\n    })) : view === 'settings' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n      transport: this.props.transport,\n      serverAddress: this.props.serverAddress,\n      secureConnection: this.props.secureConnection,\n      onCancel: this.props.onCancel,\n      onUpdate: this.props.onGlobalSettings\n    }) : view === 'edit' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"panel-form-row\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AccountSettingsView, {\n      tinode: this.props.tinode,\n      myUserId: this.props.myUserId,\n      trustedBadges: this.props.trustedBadges,\n      reqCredMethod: this.props.reqCredMethod,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onNavigate: this.props.onNavigate,\n      onCredAdd: this.props.onCredAdd,\n      onCredDelete: this.props.onCredDelete,\n      onCredConfirm: this.props.onCredConfirm,\n      onError: this.props.onError\n    })) : view === 'general' || view === 'crop' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      topic: \"me\",\n      tinode: this.props.tinode,\n      myUserId: this.props.myUserId,\n      reqCredMethod: this.props.reqCredMethod,\n      onUpdateTopicDesc: this.props.onUpdateAccountDesc,\n      onUpdateTagsRequest: this.props.onUpdateAccountTags,\n      onError: this.props.onError\n    }) : view === 'acc_general' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      colorSchema: this.props.colorSchema,\n      onSelectWallpapers: this.props.onSelectWallpapers,\n      textSize: this.props.textSize,\n      sendOnEnter: this.props.sendOnEnter,\n      onChangeColorSchema: this.props.onChangeColorSchema,\n      onTextSizeChanged: this.props.onTextSizeChanged,\n      onSendOnEnterChanged: this.props.onSendOnEnterChanged\n    }) : view === 'notif' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      messageSounds: this.props.messageSounds,\n      desktopAlerts: this.props.desktopAlerts,\n      desktopAlertsEnabled: this.props.desktopAlertsEnabled,\n      onTogglePushNotifications: this.props.onTogglePushNotifications,\n      onToggleMessageSounds: this.props.onToggleMessageSounds\n    }) : view === 'security' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"panel-form-row\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AccSecurityView, {\n      tinode: this.props.tinode,\n      incognitoMode: this.props.incognitoMode,\n      onUpdateAccountDesc: this.props.onUpdateAccountDesc,\n      onUpdatePassword: this.props.onUpdatePassword,\n      onLogout: this.props.onLogout,\n      onDeleteAccount: this.props.onDeleteAccount,\n      onShowAlert: this.props.onShowAlert,\n      onShowBlocked: this.props.onShowBlocked,\n      onToggleIncognitoMode: this.props.onToggleIncognitoMode\n    })) : view === 'support' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n      serverAddress: this.props.serverAddress,\n      serverVersion: this.props.serverVersion\n    }) : view === 'wallpapers' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"panel-form-row\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WallpapersView, {\n      wallpaper: this.props.wallpaper,\n      wallpaperSize: this.props.wallpaperSize,\n      wallpaperBlur: this.props.wallpaperBlur,\n      colorSchema: this.props.colorSchema !== 'auto' ? this.props.colorSchema : this.props.systemColorSchema,\n      onWallpaperSelected: this.props.onWallpaperSelected\n    })) : view === 'contacts' || view == 'archive' || view == 'blocked' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      tinode: this.props.tinode,\n      myUserId: this.props.myUserId,\n      connected: this.props.connected,\n      topicSelected: this.props.topicSelected,\n      archive: view == 'archive',\n      blocked: view == 'blocked',\n      chatList: this.props.chatList,\n      showContextMenu: this.props.showContextMenu,\n      onTopicSelected: this.props.onTopicSelected,\n      onShowArchive: this.props.onShowArchive\n    }) : view === 'newtpk' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n      tinode: this.props.tinode,\n      searchResults: this.props.searchResults,\n      onInitFind: this.props.onInitFind,\n      onSearchContacts: this.props.onSearchContacts,\n      onCreateTopic: this.props.onCreateTopic,\n      onError: this.props.onError\n    }) : view === 'cred' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n      credCode: this.props.credCode,\n      credMethod: this.props.credMethod,\n      credToken: this.props.credToken,\n      onSubmit: this.props.onValidateCredentials,\n      onCancel: this.props.onCancel\n    }) : view === 'reset' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"panel-form-row\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PasswordResetView, {\n      tinode: this.props.tinode,\n      reqCredMethod: this.props.reqCredMethod,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onRequest: this.props.onPasswordResetRequest,\n      onReset: this.props.onResetPassword,\n      onCancel: this.props.onCancel,\n      onError: this.props.onError\n    })) : null);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SidepanelView));\n\n/***/ }),\n\n/***/ \"./src/views/tinode-web.jsx\":\n/*!**********************************!*\\\n  !*** ./src/views/tinode-web.jsx ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var firebase_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! firebase/app */ \"./node_modules/firebase/app/dist/esm/index.esm.js\");\n/* harmony import */ var firebase_messaging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! firebase/messaging */ \"./node_modules/firebase/messaging/dist/esm/index.esm.js\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/alert.jsx */ \"./src/widgets/alert.jsx\");\n/* harmony import */ var _widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/context-menu.jsx */ \"./src/widgets/context-menu.jsx\");\n/* harmony import */ var _widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/forward-dialog.jsx */ \"./src/widgets/forward-dialog.jsx\");\n/* harmony import */ var _widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/call-incoming.jsx */ \"./src/widgets/call-incoming.jsx\");\n/* harmony import */ var _sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sidepanel-view.jsx */ \"./src/views/sidepanel-view.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants.js */ \"./src/constants.js\");\n/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../version.js */ \"./src/version.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/host-name.js */ \"./src/lib/host-name.js\");\n/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/local-storage.js */ \"./src/lib/local-storage.js\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\n\n\nconst PhoneCountrySelector = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_widgets_phone-country-selector_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/phone-country-selector.jsx */ \"./src/widgets/phone-country-selector.jsx\")));\nconst InfoView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_views_info-view_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ./info-view.jsx */ \"./src/views/info-view.jsx\")));\nconst MessagesView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_views_messages-view_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ./messages-view.jsx */ \"./src/views/messages-view.jsx\")));\n\n\n\n\n\n\n\n\n\n\nconst POP_SOUND = new Audio('audio/msg.m4a');\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  reconnect_countdown: {\n    id: \"reconnect_countdown\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Disconnected. Reconnecting in \"\n    }, {\n      \"type\": 1,\n      \"value\": \"seconds\"\n    }, {\n      \"type\": 0,\n      \"value\": \"…\"\n    }]\n  },\n  reconnect_now: {\n    id: \"reconnect_now\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Try now\"\n    }]\n  },\n  push_init_failed: {\n    id: \"push_init_failed\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Failed to initialize push notifications\"\n    }]\n  },\n  invalid_security_token: {\n    id: \"invalid_security_token\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Invalid security token\"\n    }]\n  },\n  no_connection: {\n    id: \"no_connection\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"No connection\"\n    }]\n  },\n  code_doesnot_match: {\n    id: \"code_doesnot_match\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Code does not match\"\n    }]\n  },\n  menu_item_info: {\n    id: \"menu_item_info\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Info\"\n    }]\n  },\n  menu_item_audio_call: {\n    id: \"menu_item_audio_call\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Call\"\n    }]\n  },\n  menu_item_video_call: {\n    id: \"menu_item_video_call\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Video call\"\n    }]\n  },\n  cred_confirmed_successfully: {\n    id: \"cred_confirmed_successfully\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Confirmed successfully\"\n    }]\n  },\n  password_reset_success: {\n    id: \"password_reset_success\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Password reset successfully\"\n    }]\n  },\n  select_country: {\n    id: \"select_country\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Select country\"\n    }]\n  }\n});\nclass TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.state = this.getBlankState();\n    this.handleResize = this.handleResize.bind(this);\n    this.handleHashRoute = this.handleHashRoute.bind(this);\n    this.handleOnline = this.handleOnline.bind(this);\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleColorSchemeChange = this.handleColorSchemeChange.bind(this);\n    this.checkForAppUpdate = this.checkForAppUpdate.bind(this);\n    this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.handleLoginRequest = this.handleLoginRequest.bind(this);\n    this.handlePersistenceChange = this.handlePersistenceChange.bind(this);\n    this.handleConnected = this.handleConnected.bind(this);\n    this.handleAutoreconnectIteration = this.handleAutoreconnectIteration.bind(this);\n    this.doLogin = this.doLogin.bind(this);\n    this.handleLoginSuccessful = this.handleLoginSuccessful.bind(this);\n    this.handleDisconnect = this.handleDisconnect.bind(this);\n    this.tnMeMetaDesc = this.tnMeMetaDesc.bind(this);\n    this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);\n    this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);\n    this.resetContactList = this.resetContactList.bind(this);\n    this.tnInitFind = this.tnInitFind.bind(this);\n    this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleTopicSelected = this.handleTopicSelected.bind(this);\n    this.handleHideMessagesView = this.handleHideMessagesView.bind(this);\n    this.handleSendMessage = this.handleSendMessage.bind(this);\n    this.handleNewChatInvitation = this.handleNewChatInvitation.bind(this);\n    this.handleNewAccount = this.handleNewAccount.bind(this);\n    this.handleNewAccountRequest = this.handleNewAccountRequest.bind(this);\n    this.handleUpdatePasswordRequest = this.handleUpdatePasswordRequest.bind(this);\n    this.handleUpdateAccountTagsRequest = this.handleUpdateAccountTagsRequest.bind(this);\n    this.handleToggleIncognitoMode = this.handleToggleIncognitoMode.bind(this);\n    this.handleChangeColorSchema = this.handleChangeColorSchema.bind(this);\n    this.handleChangeTextSize = this.handleChangeTextSize.bind(this);\n    this.handleSendOnEnter = this.handleSendOnEnter.bind(this);\n    this.handleSelectWallpapers = this.handleSelectWallpapers.bind(this);\n    this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);\n    this.handleSettings = this.handleSettings.bind(this);\n    this.handleGlobalSettings = this.handleGlobalSettings.bind(this);\n    this.handleShowArchive = this.handleShowArchive.bind(this);\n    this.handleShowBlocked = this.handleShowBlocked.bind(this);\n    this.handleToggleMessageSounds = this.handleToggleMessageSounds.bind(this);\n    this.handleCredAdd = this.handleCredAdd.bind(this);\n    this.handleCredDelete = this.handleCredDelete.bind(this);\n    this.handleCredConfirm = this.handleCredConfirm.bind(this);\n    this.initFCMessaging = this.initFCMessaging.bind(this);\n    this.toggleFCMToken = this.toggleFCMToken.bind(this);\n    this.handlePushMessage = this.handlePushMessage.bind(this);\n    this.handleSidepanelCancel = this.handleSidepanelCancel.bind(this);\n    this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);\n    this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);\n    this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);\n    this.handleUnarchive = this.handleUnarchive.bind(this);\n    this.handleChangePermissions = this.handleChangePermissions.bind(this);\n    this.handleTagsUpdateRequest = this.handleTagsUpdateRequest.bind(this);\n    this.handleLogout = this.handleLogout.bind(this);\n    this.handleDeleteAccount = this.handleDeleteAccount.bind(this);\n    this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);\n    this.handleDeleteMessagesRequest = this.handleDeleteMessagesRequest.bind(this);\n    this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this);\n    this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this);\n    this.handleReportTopic = this.handleReportTopic.bind(this);\n    this.handleShareTheCard = this.handleShareTheCard.bind(this);\n    this.handleShowContextMenu = this.handleShowContextMenu.bind(this);\n    this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this);\n    this.handleHideContextMenu = this.handleHideContextMenu.bind(this);\n    this.handleShowAlert = this.handleShowAlert.bind(this);\n    this.handleShowInfoView = this.handleShowInfoView.bind(this);\n    this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\n    this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);\n    this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);\n    this.handleResetPassword = this.handleResetPassword.bind(this);\n    this.handleContextMenuAction = this.handleContextMenuAction.bind(this);\n    this.handleShowCountrySelector = this.handleShowCountrySelector.bind(this);\n    this.handleShowForwardDialog = this.handleShowForwardDialog.bind(this);\n    this.handleHideForwardDialog = this.handleHideForwardDialog.bind(this);\n    this.handleStartVideoCall = this.handleStartVideoCall.bind(this);\n    this.handleStartAudioCall = this.handleStartAudioCall.bind(this);\n    this.handleInfoMessage = this.handleInfoMessage.bind(this);\n    this.handleDataMessage = this.handleDataMessage.bind(this);\n    this.handleCallClose = this.handleCallClose.bind(this);\n    this.handleCallInvite = this.handleCallInvite.bind(this);\n    this.handleCallRinging = this.handleCallRinging.bind(this);\n    this.handleCallHangup = this.handleCallHangup.bind(this);\n    this.handleCallSendOffer = this.handleCallSendOffer.bind(this);\n    this.handleCallIceCandidate = this.handleCallIceCandidate.bind(this);\n    this.handleCallSendAnswer = this.handleCallSendAnswer.bind(this);\n    this.handleCallAccept = this.handleCallAccept.bind(this);\n    this.sendMessageToTopic = this.sendMessageToTopic.bind(this);\n    this.callTimeoutTimer = null;\n  }\n  getBlankState() {\n    const settings = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('settings') || {};\n    const persist = !!_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in');\n    if (!settings.wallpaper) {\n      const wallpaper = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.defaultWallpaper)();\n      settings.wallpaper = wallpaper.name || '';\n      settings.wallpaperSize = wallpaper.size || 0;\n      settings.wallpaperBlur = 0;\n    }\n    return {\n      connected: false,\n      ready: false,\n      autoLogin: false,\n      transport: settings.transport || null,\n      serverAddress: settings.serverAddress || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.detectServerAddress)(),\n      secureConnection: settings.secureConnection === undefined ? (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() : settings.secureConnection,\n      serverVersion: \"no connection\",\n      messageSounds: !settings.messageSoundsOff,\n      incognitoMode: false,\n      colorSchema: settings.colorSchema || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME,\n      systemColorSchema: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',\n      wallpaper: settings.wallpaper,\n      wallpaperSize: settings.wallpaperSize,\n      wallpaperBlur: 0,\n      textSize: settings.textSize || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE,\n      sendOnEnter: settings.sendOnEnter || 'plain',\n      desktopAlerts: persist && !!settings.desktopAlerts,\n      desktopAlertsEnabled: ((0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isLocalHost)()) && typeof firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp != 'undefined' && typeof navigator != 'undefined' && typeof FIREBASE_INIT != 'undefined',\n      firebaseToken: persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('firebase-token') : null,\n      applicationVisible: !document.hidden,\n      errorText: '',\n      errorLevel: null,\n      errorAction: undefined,\n      errorActionText: null,\n      sidePanelSelected: 'login',\n      sidePanelTitle: null,\n      sidePanelAvatar: null,\n      myTrustedBadges: [],\n      loadSpinnerVisible: false,\n      login: '',\n      password: '',\n      persist: persist,\n      myUserId: null,\n      liveConnection: navigator.onLine,\n      topicSelected: '',\n      topicSelectedOnline: false,\n      topicSelectedAcs: null,\n      newTopicParams: null,\n      loginDisabled: false,\n      displayMobile: window.innerWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT,\n      infoPanel: undefined,\n      mobilePanel: 'sidepanel',\n      callTopic: undefined,\n      callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,\n      callAudioOnly: undefined,\n      callShouldStart: false,\n      contextMenuVisible: false,\n      contextMenuBounds: null,\n      contextMenuClickAt: null,\n      contextMenuParams: null,\n      contextMenuItems: [],\n      forwardDialogVisible: false,\n      forwardMessage: null,\n      alertVisible: false,\n      alertParams: {},\n      chatList: [],\n      searchResults: [],\n      searchableContacts: [],\n      reqCredMethod: undefined,\n      credMethod: undefined,\n      credCode: undefined,\n      credToken: undefined,\n      requestedTopic: undefined\n    };\n  }\n  componentDidMount() {\n    window.addEventListener('resize', this.handleResize);\n    this.handleOnlineOn = _ => {\n      this.handleOnline(true);\n    };\n    window.addEventListener('online', this.handleOnlineOn);\n    this.handleOnlineOff = _ => {\n      this.handleOnline(false);\n    };\n    window.addEventListener('offline', this.handleOnlineOff);\n    window.addEventListener('hashchange', this.handleHashRoute);\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.handleColorSchemeChange);\n    document.addEventListener('visibilitychange', this.handleVisibilityEvent);\n    document.addEventListener('keydown', this.handleEscapeKey);\n    document.documentElement.style.colorScheme = this.state.colorSchema == 'auto' ? 'light dark' : this.state.colorSchema;\n    document.documentElement.style.setProperty('--message-text-size', `${this.state.textSize}pt`);\n    this.applyWallpaperSettings(this.state.wallpaper, this.state.wallpaperSize, this.state.wallpaperBlur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);\n    if (typeof BroadcastChannel == 'function') {\n      const serviceWorkerChannel = new BroadcastChannel('tinode-sw');\n      serviceWorkerChannel.addEventListener('message', this.handlePushMessage);\n    } else {\n      console.warn(\"Your browser does not support BroadcastChannel. Some features will not be available\");\n    }\n    this.lastWakeUpCheck = new Date().getTime();\n    this.wakeUpTicker = setInterval(_ => {\n      const now = new Date().getTime();\n      if (now - this.lastWakeUpCheck > _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TIMEOUT) {\n        this.handleOnlineOn();\n      }\n      this.lastWakeUpCheck = now;\n    }, _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TICK);\n    this.setState({\n      viewportWidth: document.documentElement.clientWidth,\n      viewportHeight: document.documentElement.clientHeight\n    });\n    new Promise((resolve, reject) => {\n      this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, this.state.persist, resolve);\n      this.tinode.onConnect = this.handleConnected;\n      this.tinode.onDisconnect = this.handleDisconnect;\n      this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n      this.tinode.onInfoMessage = this.handleInfoMessage;\n      this.tinode.onDataMessage = this.handleDataMessage;\n    }).then(_ => {\n      if (this.state.desktopAlertsEnabled) {\n        this.initFCMessaging().catch(_ => {});\n      }\n      this.resetContactList();\n      const token = this.state.persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('auth-token') : undefined;\n      if (token) {\n        this.setState({\n          autoLogin: true\n        });\n        token.expires = new Date(token.expires);\n        this.tinode.setAuthToken(token);\n        this.tinode.connect().catch(err => {\n          this.handleError(err.message, 'err');\n        });\n      }\n      const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].parseUrlHash(window.location.hash);\n      if (!['cred', 'reset', 'register'].includes(parsedNav.path[0])) {\n        this.setState({\n          requestedTopic: parsedNav.path[1]\n        });\n        const path = parsedNav.params && parsedNav.params.cred_done ? _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].addUrlParam('', 'cred_done', parsedNav.params.cred_done) : '';\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(path);\n      } else {\n        this.handleHashRoute();\n      }\n    });\n  }\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('hashchange', this.handleHashRoute);\n    window.removeEventListener('online', this.handleOnlineOn);\n    window.removeEventListener('offline', this.handleOnlineOff);\n    window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.handleColorSchemeChange);\n    document.removeEventListener('visibilitychange', this.handleVisibilityEvent);\n    document.removeEventListener('keydown', this.handleEscapeKey);\n    clearInterval(this.wakeUpTicker);\n  }\n  static tnSetup(serverAddress, secureConnection, transport, locale, persistentCache, onSetupCompleted) {\n    const tinode = new tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode({\n      appName: _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME,\n      host: serverAddress,\n      apiKey: _config_js__WEBPACK_IMPORTED_MODULE_10__.API_KEY,\n      transport: transport,\n      secure: secureConnection,\n      persist: persistentCache\n    }, onSetupCompleted);\n    tinode.setHumanLanguage(locale);\n    tinode.enableLogging(_config_js__WEBPACK_IMPORTED_MODULE_10__.LOGGING_ENABLED, true);\n    return tinode;\n  }\n  handlePushMessage(payload) {\n    this.tinode.oobNotification(payload.data || {});\n  }\n  initFCMessaging() {\n    const {\n      formatMessage,\n      locale\n    } = this.props.intl;\n    const onError = (msg, err) => {\n      console.error(msg, err);\n      this.handleError(formatMessage(messages.push_init_failed), 'err');\n      this.setState({\n        firebaseToken: null\n      });\n      _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n        desktopAlerts: false\n      });\n    };\n    try {\n      this.fcm = (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getMessaging)((0,firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp)(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME));\n      return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {\n        return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {\n          this.checkForAppUpdate(reg);\n          return reg;\n        });\n      }).then(reg => {\n        (reg.active || reg.installing).postMessage(JSON.stringify({\n          locale: locale,\n          version: _version_js__WEBPACK_IMPORTED_MODULE_12__.PACKAGE_VERSION\n        }));\n        return TinodeWeb.requestFCMToken(this.fcm, reg);\n      }).then(token => {\n        const persist = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in');\n        if (token != this.state.firebaseToken) {\n          this.tinode.setDeviceToken(token);\n          if (persist) {\n            _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setObject('firebase-token', token);\n          }\n        }\n        this.setState({\n          firebaseToken: token,\n          desktopAlerts: true\n        });\n        if (persist) {\n          _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n            desktopAlerts: true\n          });\n        }\n        (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.onMessage)(this.fcm, payload => {\n          this.handlePushMessage(payload);\n        });\n      }).catch(err => {\n        onError(err);\n        throw err;\n      });\n    } catch (err) {\n      onError(err);\n      return Promise.reject(err);\n    }\n  }\n  static requestFCMToken(fcm, sw) {\n    return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {\n      serviceWorkerRegistration: sw,\n      vapidKey: FIREBASE_INIT.messagingVapidKey\n    }).then(token => {\n      if (token) {\n        return token;\n      } else if (typeof Notification != 'undefined') {\n        return Notification.requestPermission().then(permission => {\n          if (permission === 'granted') {\n            return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {\n              serviceWorkerRegistration: reg,\n              vapidKey: FIREBASE_INIT.messagingVapidKey\n            }).then(token => {\n              if (token) {\n                return token;\n              } else {\n                throw new Error(\"Failed to initialize notifications\");\n              }\n            });\n          } else {\n            throw new Error(\"No permission to send notifications: \" + permission);\n          }\n        });\n      }\n      throw new Error(\"Notifications are not supported\");\n    });\n  }\n  handleResize() {\n    const mobile = document.documentElement.clientWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT;\n    this.setState({\n      viewportWidth: document.documentElement.clientWidth,\n      viewportHeight: document.documentElement.clientHeight\n    });\n    if (this.state.displayMobile != mobile) {\n      this.setState({\n        displayMobile: mobile\n      });\n    }\n  }\n  handleEscapeKey(e) {\n    if (e.key === 'Escape' || e.keyCode === 27) {\n      this.setState({\n        topicSelected: null,\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'sidepanel',\n        topicSelectedOnline: false,\n        topicSelectedAcs: null,\n        infoPanel: undefined,\n        forwardMessage: null,\n        contextMenuVisible: false,\n        forwardDialogVisible: false,\n        alertVisible: false\n      });\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic('', null));\n    }\n  }\n  checkForAppUpdate(reg) {\n    reg.onupdatefound = _ => {\n      const installingWorker = reg.installing;\n      installingWorker.onstatechange = _ => {\n        if (installingWorker.state == 'installed' && navigator.serviceWorker.controller) {\n          const msg = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"update_available\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Update available.\"\n            }]\n          }), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n            href: \"\"\n          }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"reload_update\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Reload\"\n            }]\n          })), \".\");\n          this.handleError(msg, 'info');\n        }\n      };\n    };\n  }\n  handleHashRoute() {\n    const hash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].parseUrlHash(window.location.hash);\n    const newState = {\n      infoPanel: hash.params.info,\n      newTopicTabSelected: hash.params.tab\n    };\n    if (hash.path && hash.path.length > 0) {\n      if (['acc_general', 'archive', 'blocked', 'contacts', 'cred', 'crop', 'edit', 'general', 'newtpk', 'notif', 'register', 'reset', 'security', 'settings', 'support', 'wallpapers', ''].includes(hash.path[0])) {\n        newState.sidePanelSelected = hash.path[0];\n      } else {\n        console.warn(\"Unknown sidepanel view\", hash.path[0]);\n      }\n      let topicName = hash.path[1] || null;\n      if (topicName != this.state.topicSelected) {\n        if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.topicType(topicName)) {\n          topicName = null;\n          newState.mobilePanel = 'sidepanel';\n        } else {\n          newState.mobilePanel = 'topic-view';\n        }\n        Object.assign(newState, {\n          topicSelected: topicName,\n          topicSelectedAcs: this.tinode.getTopicAccessMode(topicName)\n        });\n      }\n    } else {\n      Object.assign(newState, {\n        sidePanelSelected: '',\n        topicSelected: null\n      });\n    }\n    if (hash.params.method) {\n      newState.credMethod = hash.params.method;\n    }\n    if (hash.params.code) {\n      newState.credCode = hash.params.code;\n    }\n    if (hash.params.token) {\n      newState.credToken = hash.params.token;\n    }\n    if (hash.params.cred_done) {\n      Object.assign(newState, TinodeWeb.stateForError(this.props.intl.formatMessage(messages.cred_confirmed_successfully), 'info'));\n    }\n    this.setState(newState);\n  }\n  handleOnline(online) {\n    if (online) {\n      this.handleError();\n      clearInterval(this.reconnectCountdown);\n      this.tinode.reconnect();\n    } else {\n      this.handleError(this.props.intl.formatMessage(messages.no_connection), 'warn');\n    }\n    this.setState({\n      liveConnection: online\n    });\n  }\n  handleVisibilityEvent() {\n    this.setState({\n      applicationVisible: !document.hidden\n    });\n  }\n  static stateForError(err, level, action, actionText) {\n    return {\n      errorText: err,\n      errorLevel: level,\n      errorAction: action,\n      errorActionText: actionText,\n      callShouldStart: false\n    };\n  }\n  handleError(err, level, action, actionText) {\n    this.setState(TinodeWeb.stateForError(err, level, action, actionText));\n  }\n  handleLoginRequest(login, password) {\n    this.setState({\n      loginDisabled: true,\n      login: login,\n      password: password,\n      loadSpinnerVisible: true,\n      autoLogin: true\n    });\n    this.handleError('', null);\n    if (this.tinode.isConnected()) {\n      this.doLogin(login, password, null, {\n        meth: this.state.credMethod,\n        resp: this.state.credCode\n      });\n    } else {\n      this.tinode.connect().catch(err => {\n        this.setState({\n          loginDisabled: false,\n          autoLogin: false,\n          loadSpinnerVisible: false\n        });\n        this.handleError(err.message, 'err');\n      });\n    }\n    if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {\n      this.initFCMessaging();\n    }\n  }\n  handlePersistenceChange(persist) {\n    if (persist) {\n      this.tinode.initStorage().then(_ => {\n        _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setObject('keep-logged-in', true);\n        this.setState({\n          persist: true\n        });\n      });\n    } else {\n      this.tinode.clearStorage().then(_ => {\n        _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setObject('keep-logged-in', false);\n        this.setState({\n          persist: false\n        });\n      });\n    }\n  }\n  handleConnected() {\n    clearInterval(this.reconnectCountdown);\n    this.handleError();\n    const params = this.tinode.getServerInfo();\n    this.setState({\n      serverVersion: params.ver + ' ' + (params.build ? params.build : 'none'),\n      reqCredMethod: ((params.reqCred || {}).auth || [])[0] || 'email'\n    });\n    if (this.state.autoLogin) {\n      this.doLogin(this.state.login, this.state.password, null, {\n        meth: this.state.credMethod,\n        resp: this.state.credCode\n      });\n    }\n  }\n  handleAutoreconnectIteration(sec, prom) {\n    clearInterval(this.reconnectCountdown);\n    if (sec < 0) {\n      this.handleError();\n      return;\n    }\n    if (prom) {\n      prom.then(_ => {\n        this.handleError();\n      }).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n      return;\n    }\n    const {\n      formatMessage\n    } = this.props.intl;\n    let count = sec / 1000;\n    count = count | count;\n    this.reconnectCountdown = setInterval(_ => {\n      if (count < -10) {\n        clearInterval(this.reconnectCountdown);\n        this.tinode.reconnect();\n        return;\n      }\n      const fmtTime = count > 99 ? (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__.secondsToTime)(count) : count;\n      this.handleError(formatMessage(messages.reconnect_countdown, {\n        seconds: fmtTime\n      }), 'warn', _ => {\n        clearInterval(this.reconnectCountdown);\n        this.tinode.reconnect();\n      }, formatMessage(messages.reconnect_now));\n      count -= 1;\n    }, 1000);\n  }\n  handleDisconnect(err) {\n    this.setState({\n      connected: false,\n      ready: false,\n      topicSelectedOnline: false,\n      errorText: err && err.message ? err.message : \"Disconnected\",\n      errorLevel: err && err.message ? 'err' : 'warn',\n      loginDisabled: false,\n      contextMenuVisible: false,\n      forwardDialogVisible: false,\n      serverVersion: \"no connection\"\n    });\n  }\n  doLogin(login, password, tmpToken, cred) {\n    if (this.tinode.isAuthenticated()) {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n      return;\n    }\n    let token = tmpToken || (this.tinode.getAuthToken() || {}).token;\n    if (!(login && password) && !token) {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n      this.setState({\n        loginDisabled: false\n      });\n      return;\n    }\n    cred = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred);\n    let connectionPromise = this.tinode.isConnected() ? Promise.resolve() : this.tinode.connect();\n    let loginPromise;\n    if (login && password) {\n      token = null;\n      this.setState({\n        password: null\n      });\n      loginPromise = connectionPromise.then(_ => this.tinode.loginBasic(login, password, cred));\n    } else {\n      loginPromise = connectionPromise.then(_ => this.tinode.loginToken(token, cred));\n    }\n    loginPromise.then(ctrl => {\n      if (ctrl.code >= 300 && ctrl.text === 'validate credentials') {\n        this.setState({\n          loadSpinnerVisible: false\n        });\n        if (cred) {\n          this.handleError(this.props.intl.formatMessage(messages.code_doesnot_match), 'warn');\n        }\n        TinodeWeb.navigateToCredentialsView(ctrl.params);\n      } else {\n        this.handleLoginSuccessful();\n      }\n    }).catch(err => {\n      const autoLogin = err.code >= 500;\n      this.setState({\n        loginDisabled: false,\n        credMethod: undefined,\n        credCode: undefined,\n        loadSpinnerVisible: false,\n        autoLogin: autoLogin\n      });\n      this.handleError(err.message, 'err');\n      console.warn(\"Login failed\", err);\n      if (!autoLogin) {\n        if (token) {\n          this.handleLogout();\n        }\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n      }\n    });\n  }\n  static navigateToCredentialsView(params) {\n    const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].parseUrlHash(window.location.hash);\n    parsed.path[0] = 'cred';\n    parsed.params['method'] = params.cred[0];\n    parsed.params['token'] = params.token;\n    parsed.params['code'] = params.code;\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].composeUrlHash(parsed.path, parsed.params));\n  }\n  handleLoginSuccessful() {\n    this.handleError();\n    if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in')) {\n      _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setObject('auth-token', this.tinode.getAuthToken());\n    }\n    const goToTopic = this.state.requestedTopic || this.state.topicSelected;\n    const me = this.tinode.getMeTopic();\n    me.onMetaDesc = this.tnMeMetaDesc;\n    me.onContactUpdate = this.tnMeContactUpdate;\n    me.onSubsUpdated = this.tnMeSubsUpdated;\n    this.setState({\n      connected: true,\n      credMethod: undefined,\n      credCode: undefined,\n      credToken: undefined,\n      myUserId: this.tinode.getCurrentUserID(),\n      autoLogin: true,\n      requestedTopic: undefined\n    });\n    me.subscribe(me.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch(err => {\n      this.tinode.disconnect();\n      localStorage.removeItem('auth-token');\n      this.handleError(err.message, 'err');\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n    }).finally(_ => {\n      this.setState({\n        loadSpinnerVisible: false\n      });\n    });\n    let urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, 'contacts');\n    if (goToTopic) {\n      urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(urlHash, goToTopic);\n    }\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(urlHash);\n  }\n  tnMeMetaDesc(desc) {\n    if (!desc) {\n      return;\n    }\n    if (desc.public) {\n      this.setState({\n        sidePanelTitle: desc.public.fn,\n        sidePanelAvatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.makeImageUrl)(desc.public.photo)\n      });\n    }\n    if (desc.trusted) {\n      const badges = [];\n      for (const [key, val] of Object.entries(desc.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n      this.setState({\n        myTrustedBadges: badges\n      });\n    }\n    if (desc.acs) {\n      this.setState({\n        incognitoMode: !desc.acs.isPresencer()\n      });\n    }\n    if (TinodeWeb.checkIfPinsUpdated(desc, this.state.chatList)) {\n      this.resetContactList();\n    }\n  }\n  tnMeContactUpdate(what, cont) {\n    if (what == 'on' || what == 'off') {\n      this.resetContactList();\n      if (this.state.topicSelected == cont.topic) {\n        this.setState({\n          topicSelectedOnline: what == 'on'\n        });\n      }\n    } else if (what == 'read') {\n      this.resetContactList();\n    } else if (what == 'msg' && cont) {\n      const topic = this.tinode.getTopic(cont.topic);\n      const archived = topic && topic.isArchived();\n      if (cont.unread > 0 && this.state.messageSounds && !archived) {\n        if (document.hidden || this.state.topicSelected != cont.topic) {\n          POP_SOUND.play().catch(_ => {});\n        }\n      }\n      this.resetContactList();\n    } else if (what == 'recv') {} else if (what == 'gone' || what == 'unsub') {\n      if (this.state.topicSelected == cont.topic) {\n        this.handleTopicSelected(null);\n      }\n      this.resetContactList();\n    } else if (what == 'acs') {\n      if (this.state.topicSelected == cont.topic) {\n        this.setState({\n          topicSelectedAcs: cont.acs\n        });\n      }\n    } else if (what == 'del') {} else if (what == 'upd' || what == 'call') {} else {\n      console.info(\"Unsupported (yet) presence update:\", what, \"in\", (cont || {}).topic);\n    }\n  }\n  tnMeSubsUpdated(unused) {\n    this.resetContactList();\n  }\n  static prepareSearchableContacts(chatList, foundContacts) {\n    const merged = {};\n    for (const c of chatList) {\n      if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(c.topic)) {\n        merged[c.topic] = {\n          user: c.topic,\n          updated: c.updated,\n          public: c.public,\n          private: c.private,\n          acs: c.acs\n        };\n      }\n    }\n    for (const c of foundContacts) {\n      if (!merged[c.user]) {\n        merged[c.user] = c;\n      }\n    }\n    return Object.values(merged);\n  }\n  resetContactList() {\n    const newState = {\n      chatList: []\n    };\n    if (!this.state.ready) {\n      newState.ready = true;\n    }\n    const me = this.tinode.getMeTopic();\n    me.contacts(c => {\n      if (!c.topic && !c.user) {\n        c.topic = c.name;\n      }\n      newState.chatList.push(c);\n      if (this.state.topicSelected == c.topic) {\n        newState.topicSelectedOnline = c.online;\n        newState.topicSelectedAcs = c.acs;\n      }\n    });\n    const past = new Date(0);\n    newState.chatList.sort((a, b) => {\n      const pins = me.pinnedTopicRank(b.topic) - me.pinnedTopicRank(a.topic);\n      return pins != 0 ? pins : (b.touched || past).getTime() - (a.touched || past).getTime();\n    });\n    newState.searchableContacts = TinodeWeb.prepareSearchableContacts(newState.chatList, this.state.searchResults);\n    this.setState(newState);\n  }\n  static checkIfPinsUpdated(me, chatList) {\n    for (let i = 0; i < chatList.length; i++) {\n      const c = chatList[i];\n      if (!!me.pinnedTopicRank(c.topic) != c.pinned) {\n        return true;\n      }\n    }\n    return false;\n  }\n  tnInitFind() {\n    const fnd = this.tinode.getFndTopic();\n    fnd.onSubsUpdated = this.tnFndSubsUpdated;\n    if (fnd.isSubscribed()) {\n      this.tnFndSubsUpdated();\n    } else {\n      fnd.subscribe(fnd.startMetaQuery().withSub().build()).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n    }\n  }\n  tnFndSubsUpdated() {\n    const foundContacts = [];\n    this.tinode.getFndTopic().contacts(s => {\n      foundContacts.push(s);\n    });\n    this.setState({\n      searchResults: foundContacts,\n      searchableContacts: TinodeWeb.prepareSearchableContacts(this.state.chatList, foundContacts)\n    });\n  }\n  handleSearchContacts(query) {\n    const fnd = this.tinode.getFndTopic();\n    fnd.setMeta({\n      desc: {\n        public: query\n      }\n    }).then(_ => fnd.getMeta(fnd.startMetaQuery().withSub().build())).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleTopicSelected(topicName) {\n    if (this.state.newTopicParams && this.state.newTopicParams._topicName != topicName) {\n      this.setState({\n        newTopicParams: null\n      });\n    }\n    if (topicName) {\n      this.setState({\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'topic-view',\n        infoPanel: undefined\n      });\n      if (this.state.topicSelected != topicName) {\n        this.setState({\n          topicSelectedOnline: this.tinode.isTopicOnline(topicName),\n          topicSelectedAcs: this.tinode.getTopicAccessMode(topicName),\n          forwardMessage: null\n        });\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic('', topicName));\n      }\n    } else {\n      this.setState({\n        topicSelected: null,\n        errorText: '',\n        errorLevel: null,\n        mobilePanel: 'sidepanel',\n        topicSelectedOnline: false,\n        topicSelectedAcs: null,\n        infoPanel: undefined,\n        forwardMessage: null\n      });\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic('', null));\n    }\n  }\n  handleHideMessagesView() {\n    this.setState({\n      mobilePanel: 'sidepanel'\n    });\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(window.location.hash, null));\n  }\n  handleSendMessage(msg, uploadCompletionPromise, uploader, head) {\n    const topic = this.tinode.getTopic(this.state.topicSelected);\n    return this.sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head);\n  }\n  sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head) {\n    msg = topic.createMessage(msg, false);\n    msg._uploader = uploader;\n    if (head) {\n      msg.head = Object.assign(msg.head || {}, head);\n    }\n    const completion = [];\n    if (uploadCompletionPromise) {\n      completion.push(uploadCompletionPromise);\n    }\n    if (!topic.isSubscribed()) {\n      const subscribePromise = topic.subscribe().then(_ => {\n        let calls = [];\n        topic.queuedMessages(pub => {\n          if (pub._sending || pub.seq == msg.seq) {\n            return;\n          }\n          if (pub.head && pub.head.webrtc) {\n            calls.push(pub.seq);\n            return;\n          }\n          if (topic.isSubscribed()) {\n            topic.publishMessage(pub);\n          }\n        });\n        if (calls.length > 0) {\n          topic.delMessagesList(calls, true);\n        }\n      });\n      completion.push(subscribePromise);\n    }\n    return topic.publishDraft(msg, Promise.all(completion)).then(ctrl => {\n      if (topic.isArchived()) {\n        topic.archive(false);\n      }\n      return ctrl;\n    }).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleNewChatInvitation(topicName, action) {\n    const topic = this.tinode.getTopic(topicName);\n    let response = null;\n    switch (action) {\n      case 'accept':\n        const mode = topic.getAccessMode().getGiven();\n        response = topic.setMeta({\n          sub: {\n            mode: mode\n          }\n        });\n        if (topic.isP2PType()) {\n          response = response.then(_ => topic.setMeta({\n            sub: {\n              user: topicName,\n              mode: mode\n            }\n          }));\n        }\n        break;\n      case 'delete':\n        response = topic.delTopic(true);\n        break;\n      case 'block':\n        const am = topic.getAccessMode().updateWant('-JP').getWant();\n        response = topic.setMeta({\n          sub: {\n            mode: am\n          }\n        }).then(_ => this.handleTopicSelected(null));\n        break;\n      default:\n        console.warn(\"Unknown invitation action\", '\"' + action + '\"\"');\n    }\n    if (response != null) {\n      response.catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleNewAccount() {\n    this.handleError();\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, 'register'));\n  }\n  handleNewAccountRequest(login_, password_, public_, cred_, tags_) {\n    this.handleError();\n    this.tinode.connect(this.state.serverAddress).then(_ => {\n      let attachments;\n      if (public_ && public_.photo && public_.photo.ref) {\n        attachments = [public_.photo.ref];\n      }\n      return this.tinode.createAccountBasic(login_, password_, {\n        public: public_,\n        tags: tags_,\n        cred: tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred_),\n        attachments: attachments\n      });\n    }).then(ctrl => {\n      if (ctrl.code >= 300 && ctrl.text == 'validate credentials') {\n        TinodeWeb.navigateToCredentialsView(ctrl.params);\n      } else {\n        this.handleLoginSuccessful(this);\n      }\n    }).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n  handleToggleIncognitoMode(on) {\n    this.setState({\n      incognitoMode: null\n    });\n    const me = this.tinode.getMeTopic();\n    const am = me.getAccessMode().updateWant(on ? '-P' : '+P').getWant();\n    me.setMeta({\n      sub: {\n        mode: am\n      }\n    }).catch(err => {\n      this.setState({\n        incognitoMode: !on\n      });\n      this.handleError(err.message, 'err');\n    });\n  }\n  handleChangeColorSchema(schema) {\n    this.setState({\n      colorSchema: schema\n    });\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n      colorSchema: schema\n    });\n    document.documentElement.style.colorScheme = schema == 'auto' ? 'light dark' : schema;\n    this.applyColorSchema(schema, this.state.systemColorSchema, this.state.wallpaperSize);\n  }\n  handleColorSchemeChange(event) {\n    const systemSchema = event.matches ? 'dark' : 'light';\n    this.setState({\n      systemColorSchema: systemSchema\n    });\n    this.applyColorSchema(this.state.colorSchema, systemSchema, this.state.wallpaperSize);\n  }\n  applyColorSchema(schema, systemSchema, size) {\n    const effectiveSchema = schema == 'auto' ? systemSchema : schema;\n    document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');\n    document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');\n  }\n  handleSelectWallpapers() {\n    this.handleError();\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, 'wallpapers'));\n  }\n  applyWallpaperSettings(wallpaper, size, blur, effectiveSchema) {\n    document.documentElement.style.setProperty('--wallpaper-url', `url('${wallpaper}')`);\n    document.documentElement.style.setProperty('--wallpaper-repeat', size ? 'repeat' : 'no-repeat');\n    document.documentElement.style.setProperty('--wallpaper-blur', size ? '0px' : `${blur}px`);\n    document.documentElement.style.setProperty('--wallpaper-size', size ? `${size}px` : 'cover');\n    document.documentElement.style.setProperty('--wallpaper-position', size ? 'unset' : 'center');\n    document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');\n    document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');\n  }\n  handleWallpaperSelected(wallpaper, size, blur) {\n    this.handleError();\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n      wallpaper: wallpaper,\n      wallpaperSize: size,\n      wallpaperBlur: blur\n    });\n    this.setState({\n      wallpaper: wallpaper,\n      wallpaperSize: size,\n      wallpaperBlur: blur\n    });\n    this.applyWallpaperSettings(wallpaper, size, blur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);\n  }\n  handleChangeTextSize(size) {\n    this.setState({\n      textSize: size | 0\n    });\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n      textSize: size\n    });\n    document.documentElement.style.setProperty('--message-text-size', `${size}pt`);\n  }\n  handleSendOnEnter(option) {\n    this.setState({\n      sendOnEnter: option\n    });\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n      sendOnEnter: option\n    });\n  }\n  handleUpdateAccountTagsRequest(_, tags) {\n    this.tinode.getMeTopic().setMeta({\n      tags: tags\n    }).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleSettings() {\n    this.handleError();\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'edit' : 'settings'));\n  }\n  handleGlobalSettings(settings) {\n    const serverAddress = settings.serverAddress || this.state.serverAddress;\n    const transport = settings.transport || this.state.transport;\n    const secureConnection = settings.secureConnection === undefined ? this.state.secureConnection : settings.secureConnection;\n    if (this.tinode) {\n      this.tinode.clearStorage();\n      this.tinode.onDisconnect = undefined;\n      this.tinode.disconnect();\n    }\n    this.tinode = TinodeWeb.tnSetup(serverAddress, secureConnection, transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in'));\n    this.tinode.onConnect = this.handleConnected;\n    this.tinode.onDisconnect = this.handleDisconnect;\n    this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n    this.tinode.onInfoMessage = this.handleInfoMessage;\n    this.tinode.onDataMessage = this.handleDataMessage;\n    this.setState({\n      serverAddress: serverAddress,\n      transport: transport,\n      secureConnection: secureConnection\n    });\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setObject('settings', {\n      serverAddress: serverAddress,\n      transport: transport,\n      secureConnection: secureConnection\n    });\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, ''));\n  }\n  handleShowArchive() {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'archive' : ''));\n  }\n  handleShowBlocked() {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'blocked' : ''));\n  }\n  toggleFCMToken(enabled) {\n    if (enabled) {\n      this.setState({\n        desktopAlerts: null\n      });\n      if (!this.state.firebaseToken) {\n        this.initFCMessaging();\n      } else {\n        this.setState({\n          desktopAlerts: true\n        });\n        if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in')) {\n          _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n            desktopAlerts: true\n          });\n        }\n      }\n    } else if (this.state.firebaseToken && this.fcm) {\n      (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm).catch(err => {\n        console.error(\"Unable to delete token.\", err);\n      }).finally(_ => {\n        _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n          desktopAlerts: false\n        });\n        localStorage.removeItem('firebase-token');\n        this.setState({\n          desktopAlerts: false,\n          firebaseToken: null\n        });\n        this.tinode.setDeviceToken(null);\n      });\n    } else {\n      this.setState({\n        desktopAlerts: false,\n        firebaseToken: null\n      });\n      _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n        desktopAlerts: false\n      });\n    }\n  }\n  handleToggleMessageSounds(enabled) {\n    this.setState({\n      messageSounds: enabled\n    });\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].updateObject('settings', {\n      messageSoundsOff: !enabled\n    });\n  }\n  handleCredAdd(method, value) {\n    const me = this.tinode.getMeTopic();\n    me.setMeta({\n      cred: {\n        meth: method,\n        val: value\n      }\n    }).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleCredDelete(method, value) {\n    const me = this.tinode.getMeTopic();\n    me.delCredential(method, value).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleCredConfirm(method, response) {\n    TinodeWeb.navigateToCredentialsView({\n      cred: [method],\n      code: response\n    });\n  }\n  handleSidepanelCancel() {\n    const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].parseUrlHash(window.location.hash);\n    let path = '';\n    if (['security', 'support', 'general', 'notif', 'acc_general'].includes(parsed.path[0])) {\n      path = 'edit';\n    } else if ('crop' == parsed.path[0]) {\n      path = 'general';\n    } else if ('blocked' == parsed.path[0]) {\n      path = 'security';\n    } else if ('wallpapers' == parsed.path[0]) {\n      path = 'acc_general';\n    } else if (this.state.myUserId) {\n      path = 'contacts';\n    }\n    parsed.path[0] = path;\n    if (parsed.params) {\n      delete parsed.params.code;\n      delete parsed.params.method;\n      delete parsed.params.tab;\n      delete parsed.params.scheme;\n      delete parsed.params.token;\n    }\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].composeUrlHash(parsed.path, parsed.params));\n    this.setState({\n      errorText: '',\n      errorLevel: null\n    });\n  }\n  basicNavigator(hash) {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, hash));\n  }\n  infoNavigator(hash) {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlInfoPanel(window.location.hash, hash));\n  }\n  handleStartTopicRequest(topicName, newTopicParams, isChannel) {\n    if (topicName && this.tinode.isTopicCached(topicName)) {\n      this.handleTopicSelected(topicName);\n      return;\n    }\n    const params = {};\n    if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName)) {\n      params.sub = {\n        mode: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE\n      };\n      params.desc = {\n        defacs: {\n          auth: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE\n        }\n      };\n    } else {\n      topicName = topicName || this.tinode.newGroupTopicName(isChannel);\n      if (newTopicParams) {\n        params.desc = {\n          public: newTopicParams.public,\n          private: {\n            comment: newTopicParams.private\n          }\n        };\n        params.tags = newTopicParams.tags;\n      }\n    }\n    params._topicName = topicName;\n    this.setState({\n      newTopicParams: params\n    }, _ => {\n      this.handleTopicSelected(topicName);\n    });\n  }\n  handleNewTopicCreated(oldName, newName) {\n    let nextState = {};\n    if (this.state.callShouldStart) {\n      nextState = {\n        callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS,\n        callShouldStart: false\n      };\n    }\n    if (this.state.topicSelected == oldName && oldName != newName) {\n      nextState.topicSelected = newName;\n    }\n    this.setState(nextState, _ => {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic('', newName));\n    });\n  }\n  handleTopicUpdateRequest(topicName, pub, priv, defacs) {\n    this.handleError();\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      const params = {};\n      let attachments;\n      if (pub) {\n        if (pub.photo) {\n          if (pub.photo.ref && pub.photo.ref != tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {\n            attachments = [pub.photo.ref];\n          } else if (!pub.photo.data || pub.photo.data == tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {\n            pub.photo = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR;\n          }\n        }\n        params.public = pub;\n      }\n      if (typeof priv == 'string') {\n        params.private = priv === tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR : {\n          comment: priv\n        };\n      }\n      if (defacs) {\n        params.defacs = defacs;\n      }\n      topic.setMeta({\n        desc: params,\n        attachments: attachments\n      }).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleUnarchive(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      topic.archive(false).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleUpdatePasswordRequest(password) {\n    this.handleError();\n    if (password) {\n      this.tinode.updateAccountBasic(null, this.tinode.getCurrentLogin(), password).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleChangePermissions(topicName, mode, uid) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      const am = topic.getAccessMode();\n      if (uid) {\n        am.updateGiven(mode);\n        mode = am.getGiven();\n      } else {\n        am.updateWant(mode);\n        mode = am.getWant();\n      }\n      topic.setMeta({\n        sub: {\n          user: uid,\n          mode: mode\n        }\n      }).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleTagsUpdateRequest(topicName, tags) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic) {\n      topic.setMeta({\n        tags: tags\n      }).catch(err => this.handleError(err.message, 'err'));\n    }\n  }\n  handleLogout() {\n    (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.updateFavicon)(0);\n    localStorage.removeItem('auth-token');\n    localStorage.removeItem('firebase-token');\n    localStorage.removeItem('settings');\n    if (this.state.firebaseToken) {\n      (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm);\n    }\n    document.documentElement.style.colorScheme = _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME == 'auto' ? 'light dark' : _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME;\n    document.documentElement.style.setProperty('--message-text-size', `${_config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE}pt`);\n    clearInterval(this.reconnectCountdown);\n    let cleared;\n    if (this.tinode) {\n      cleared = this.tinode.clearStorage();\n      this.tinode.onDisconnect = undefined;\n      this.tinode.disconnect();\n    } else {\n      cleared = Promose.resolve();\n    }\n    this.setState(this.getBlankState());\n    cleared.then(_ => {\n      this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getObject('keep-logged-in'), _ => {\n        this.tinode.onConnect = this.handleConnected;\n        this.tinode.onDisconnect = this.handleDisconnect;\n        this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;\n        this.tinode.onInfoMessage = this.handleInfoMessage;\n        this.tinode.onDataMessage = this.handleDataMessage;\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n      });\n    });\n  }\n  handleDeleteAccount() {\n    this.tinode.delCurrentUser(true).then(_ => {\n      this.handleLogout();\n    });\n  }\n  handleDeleteTopicRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    topic.delTopic(true).then(_ => {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(window.location.hash, ''));\n    }).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n  handleDeleteMessagesRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    topic.delMessagesAll(true).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleLeaveUnsubRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    topic.leave(true).then(_ => {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(window.location.hash, ''));\n    }).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n  handleBlockTopicRequest(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    topic.updateMode(null, '-JP').then(_ => {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(window.location.hash, ''));\n    }).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleReportTopic(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    this.tinode.report('report', topicName);\n    topic.updateMode(null, '-JP').then(_ => {\n      _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlTopic(window.location.hash, ''));\n    }).catch(err => this.handleError(err.message, 'err'));\n  }\n  handleShowContextMenu(params, menuItems) {\n    this.setState({\n      contextMenuVisible: true,\n      contextMenuClickAt: {\n        x: params.x,\n        y: params.y\n      },\n      contextMenuParams: params,\n      contextMenuItems: menuItems || this.defaultTopicContextMenu(params.topicName),\n      contextMenuBounds: this.selfRef.current.getBoundingClientRect()\n    });\n  }\n  handleShowForwardDialog(params) {\n    if (this.state.sidePanelSelected == 'newtpk') {\n      this.handleSidepanelCancel();\n    }\n    const header = params.userName ? '➦ ' + params.userName : '';\n    const content = typeof params.content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.init(params.content) : tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.forwardedContent(params.content);\n    const preview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.preview(content, _config_js__WEBPACK_IMPORTED_MODULE_10__.FORWARDED_PREVIEW_LENGTH, true);\n    const msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.appendLineBreak(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.mention(header, params.userFrom)), content);\n    const msgPreview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.quote(header, params.userFrom, preview);\n    const head = {\n      forwarded: params.topicName + ':' + params.seq\n    };\n    this.setState({\n      forwardDialogVisible: true,\n      forwardMessage: {\n        head: head,\n        msg: msg,\n        preview: msgPreview\n      }\n    });\n  }\n  handleShareTheCard(card) {\n    this.setState({\n      forwardDialogVisible: true,\n      forwardMessage: {\n        content: card,\n        type: card.contentType\n      }\n    });\n  }\n  defaultTopicContextMenu(topicName) {\n    const topic = this.tinode.getTopic(topicName);\n    if (topic._deleted) {\n      return ['topic_delete'];\n    }\n    const me = this.tinode.getMeTopic();\n    let muted = false,\n      blocked = false,\n      self_blocked = false,\n      subscribed = false,\n      deleter = false,\n      archived = false,\n      pinned = false,\n      webrtc = false,\n      writer = false,\n      p2p = false,\n      self = false;\n    if (topic) {\n      subscribed = topic.isSubscribed();\n      archived = topic.isArchived();\n      pinned = me.pinnedTopicRank(topicName) > 0;\n      const acs = topic.getAccessMode();\n      if (acs) {\n        muted = acs.isMuted();\n        blocked = !acs.isJoiner();\n        self_blocked = !acs.isJoiner('want');\n        deleter = acs.isDeleter();\n        writer = acs.isWriter();\n      }\n    }\n    webrtc = writer && !!this.tinode.getServerParam('iceServers');\n    p2p = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName);\n    self = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isSelfTopicName(topicName);\n    return [subscribed ? {\n      title: this.props.intl.formatMessage(messages.menu_item_info),\n      handler: this.handleShowInfoView\n    } : null, subscribed && p2p && webrtc ? {\n      title: this.props.intl.formatMessage(messages.menu_item_audio_call),\n      handler: this.handleStartAudioCall\n    } : null, subscribed && p2p && webrtc ? {\n      title: this.props.intl.formatMessage(messages.menu_item_video_call),\n      handler: this.handleStartVideoCall\n    } : null, subscribed ? 'messages_clear' : null, subscribed && deleter && !self ? 'messages_clear_hard' : null, self ? null : muted ? blocked ? null : 'topic_unmute' : 'topic_mute', self ? null : self_blocked ? 'topic_unblock' : 'topic_block', pinned ? 'topic_unpin' : 'topic_pin', archived ? 'topic_restore' : 'topic_archive', 'topic_delete'];\n  }\n  handleHideContextMenu() {\n    this.setState({\n      contextMenuVisible: false,\n      contextMenuClickAt: null,\n      contextMenuParams: null,\n      contextMenuBounds: null\n    });\n  }\n  handleHideForwardDialog(keepForwardedMessage) {\n    this.setState({\n      forwardDialogVisible: false,\n      forwardMessage: keepForwardedMessage ? this.state.forwardMessage : null\n    });\n  }\n  handleContextMenuAction(action, promise, params) {\n    if (action == 'topic_archive') {\n      if (promise && params.topicName && params.topicName == this.state.topicSelected) {\n        promise.then(_ => {\n          this.handleTopicSelected(null);\n        });\n      }\n    } else if (action == 'menu_item_forward') {\n      this.handleShowForwardDialog(params);\n    }\n  }\n  handleShowAlert(title, content, onConfirm, confirmText, onReject, rejectText) {\n    this.setState({\n      alertVisible: true,\n      alertParams: {\n        title: title,\n        content: content,\n        onConfirm: onConfirm,\n        confirm: confirmText,\n        onReject: onReject,\n        reject: rejectText\n      }\n    });\n  }\n  handleShowInfoView() {\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].addUrlParam(window.location.hash, 'info', 'info'));\n    this.setState({\n      infoPanel: 'info'\n    });\n  }\n  handleMemberUpdateRequest(topicName, added, removed) {\n    if (!topicName) {\n      return;\n    }\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    if (added && added.length > 0) {\n      added.forEach(uid => {\n        topic.invite(uid, null).catch(err => this.handleError(err.message, 'err'));\n      });\n    }\n    if (removed && removed.length > 0) {\n      removed.forEach(uid => {\n        topic.delSubscription(uid).catch(err => this.handleError(err.message, 'err'));\n      });\n    }\n  }\n  handleValidateCredentialsRequest(cred, code, token) {\n    if (this.tinode.isAuthenticated()) {\n      this.tinode.getMeTopic().setMeta({\n        cred: {\n          meth: cred,\n          resp: code\n        }\n      }).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setUrlSidePanel(window.location.hash, 'contacts'))).catch(err => this.handleError(err.message, 'err'));\n    } else {\n      this.setState({\n        credMethod: cred,\n        credCode: code,\n        credToken: token\n      });\n      this.doLogin(null, null, token, {\n        meth: cred,\n        resp: code\n      });\n    }\n  }\n  handlePasswordResetRequest(method, value) {\n    return this.tinode.connect().then(_ => this.tinode.requestResetAuthSecret('basic', method, value)).catch(err => {\n      this.handleError(err.message, 'err');\n    });\n  }\n  handleResetPassword(newPassword, tempAuth) {\n    const secret = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.base64ReEncode)(tempAuth.secret);\n    if (!secret || !tempAuth.scheme) {\n      this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');\n    } else {\n      this.tinode.connect().then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {\n        scheme: tempAuth.scheme,\n        secret: secret\n      })).then(_ => {\n        this.handleError(this.props.intl.formatMessage(messages.password_reset_success), 'info');\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].navigateTo('');\n      }).catch(err => {\n        this.handleError(err.message, 'err');\n      });\n    }\n  }\n  handleShowCountrySelector(code, dial, selectedCallback) {\n    this.handleShowAlert(this.props.intl.formatMessage(messages.select_country), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PhoneCountrySelector, {\n      selected: code,\n      onSubmit: (c, d) => {\n        this.setState({\n          alertVisible: false\n        });\n        selectedCallback(c, d);\n      }\n    })), null, null, _ => {}, null);\n  }\n  handleStartVideoCall() {\n    this.setState({\n      callTopic: this.state.topicSelected,\n      callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,\n      callAudioOnly: false\n    });\n  }\n  handleStartAudioCall() {\n    this.setState({\n      callTopic: this.state.topicSelected,\n      callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,\n      callAudioOnly: true\n    });\n  }\n  handleCallInvite(callTopic, callSeq, callState, audioOnly) {\n    switch (callState) {\n      case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED:\n        const head = {\n          webrtc: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED,\n          aonly: !!audioOnly\n        };\n        return this.handleSendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.videoCall(audioOnly), undefined, undefined, head).then(ctrl => {\n          if (ctrl.code < 200 || ctrl.code >= 300 || !ctrl.params || !ctrl.params.seq) {\n            this.handleCallClose();\n            return ctrl;\n          }\n          this.setState({\n            callSeq: ctrl.params['seq']\n          });\n          return ctrl;\n        });\n      case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS:\n        const topic = this.tinode.getTopic(callTopic);\n        if (!topic) {\n          return;\n        }\n        topic.videoCall('accept', callSeq);\n        break;\n    }\n  }\n  handleCallRinging(callTopic, callSeq) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n    topic.videoCall('ringing', callSeq);\n  }\n  handleCallHangup(callTopic, callSeq) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n    topic.videoCall('hang-up', callSeq);\n  }\n  handleCallSendOffer(callTopic, callSeq, sdp) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n    topic.videoCall('offer', callSeq, sdp);\n  }\n  handleCallIceCandidate(callTopic, callSeq, candidate) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n    topic.videoCall('ice-candidate', callSeq, candidate);\n  }\n  handleCallSendAnswer(callTopic, callSeq, sdp) {\n    const topic = this.tinode.getTopic(callTopic);\n    if (!topic) {\n      return;\n    }\n    topic.videoCall('answer', callSeq, sdp);\n  }\n  handleCallClose() {\n    if (this.callTimeoutTimer) {\n      clearTimeout(this.callTimeoutTimer);\n    }\n    this.setState({\n      callTopic: undefined,\n      callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,\n      callAudioOnly: undefined\n    });\n  }\n  handleCallAccept(topicName, setCallTopic, callSeq) {\n    const topic = this.tinode.getTopic(topicName);\n    if (!topic) {\n      return;\n    }\n    if (topic.isSubscribed()) {\n      this.handleTopicSelected(setCallTopic ? topicName : this.state.callTopic);\n      const upd = {\n        callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS\n      };\n      if (setCallTopic) {\n        upd.callTopic = topicName;\n        upd.callSeq = callSeq;\n      }\n      this.setState(upd);\n    } else {\n      this.setState({\n        callShouldStart: true\n      }, _ => this.handleTopicSelected(this.state.callTopic));\n    }\n  }\n  handleInfoMessage(info) {\n    if (info.what != 'call') {\n      return;\n    }\n    switch (info.event) {\n      case 'accept':\n        if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isMeTopicName(info.topic) && this.tinode.isMe(info.from)) {\n          this.setState({\n            callTopic: null,\n            callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,\n            callSeq: null,\n            callAudioOnly: undefined\n          });\n          return;\n        }\n        if (info.topic == this.state.callTopic) {\n          this.setState({\n            callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS\n          });\n        }\n        break;\n      case 'hang-up':\n        this.handleCallClose();\n        break;\n    }\n  }\n  handleDataMessage(data) {\n    if (data.head && data.head.webrtc && data.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED && tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(data.topic)) {\n      const topic = this.tinode.getTopic(data.topic);\n      if (topic) {\n        const msg = topic.latestMsgVersion(data.seq) || data;\n        if (msg.head && msg.head.webrtc && msg.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED) {\n          if (data.from != this.state.myUserId) {\n            if (this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE) {\n              this.setState({\n                callTopic: data.topic,\n                callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED,\n                callSeq: data.seq,\n                callAudioOnly: !!msg.head.aonly\n              });\n            } else {\n              this.handleCallHangup(data.topic, data.seq);\n            }\n          }\n        }\n      } else {\n        console.warn(\"Received vc data message from unknown topic\", data.topic);\n      }\n    }\n  }\n  render() {\n    const colorSchema = this.state.colorSchema !== 'auto' ? this.state.colorSchema : this.state.systemColorSchema;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"app-container\",\n      ref: this.selfRef\n    }, this.state.contextMenuVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      tinode: this.tinode,\n      bounds: this.state.contextMenuBounds,\n      clickAt: this.state.contextMenuClickAt,\n      params: this.state.contextMenuParams,\n      items: this.state.contextMenuItems,\n      hide: this.handleHideContextMenu,\n      onShowAlert: this.handleShowAlert,\n      onAction: this.handleContextMenuAction,\n      onTopicRemoved: topicName => {\n        if (topicName == this.state.topicSelected) {\n          this.handleTopicSelected(null);\n        }\n      },\n      onError: this.handleError\n    }) : null, this.state.forwardDialogVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      tinode: this.tinode,\n      contacts: this.state.chatList,\n      topicSelected: this.state.topicSelected,\n      myUserId: this.state.myUserId,\n      hide: this.handleHideForwardDialog,\n      onInitFind: this.tnInitFind,\n      searchResults: this.state.searchResults,\n      onSearchContacts: this.handleSearchContacts,\n      onTopicSelected: this.handleStartTopicRequest\n    }) : null, this.state.callTopic && this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      tinode: this.tinode,\n      topic: this.state.callTopic,\n      seq: this.state.callSeq,\n      callState: this.state.callState,\n      audioOnly: this.state.callAudioOnly,\n      onClose: this.handleCallClose,\n      onRinging: this.handleCallRinging,\n      onAcceptCall: this.handleCallAccept,\n      onReject: this.handleCallHangup\n    }) : null, this.state.alertVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      title: this.state.alertParams.title,\n      content: this.state.alertParams.content,\n      onReject: this.state.alertParams.onReject ? _ => this.setState({\n        alertVisible: false\n      }) : null,\n      reject: this.state.alertParams.reject,\n      onConfirm: this.state.alertParams.onConfirm ? _ => {\n        this.setState({\n          alertVisible: false\n        });\n        this.state.alertParams.onConfirm();\n      } : null,\n      confirm: this.state.alertParams.confirm\n    }) : null, !this.state.displayMobile || this.state.mobilePanel == 'sidepanel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n      tinode: this.tinode,\n      connected: this.state.connected,\n      displayMobile: this.state.displayMobile,\n      state: this.state.sidePanelSelected,\n      title: this.state.sidePanelTitle,\n      avatar: this.state.sidePanelAvatar,\n      trustedBadges: this.state.myTrustedBadges,\n      login: this.state.login,\n      persist: this.state.persist,\n      myUserId: this.state.myUserId,\n      loginDisabled: this.state.loginDisabled,\n      loadSpinnerVisible: this.state.loadSpinnerVisible,\n      errorText: this.state.errorText,\n      errorLevel: this.state.errorLevel,\n      errorAction: this.state.errorAction,\n      errorActionText: this.state.errorActionText,\n      topicSelected: this.state.topicSelected,\n      chatList: this.state.chatList,\n      credMethod: this.state.credMethod,\n      credCode: this.state.credCode,\n      credToken: this.state.credToken,\n      transport: this.state.transport,\n      messageSounds: this.state.messageSounds,\n      desktopAlerts: this.state.desktopAlerts,\n      desktopAlertsEnabled: this.state.desktopAlertsEnabled,\n      incognitoMode: this.state.incognitoMode,\n      serverAddress: this.state.serverAddress,\n      secureConnection: this.state.secureConnection,\n      serverVersion: this.state.serverVersion,\n      reqCredMethod: this.state.reqCredMethod,\n      textSize: this.state.textSize,\n      colorSchema: this.state.colorSchema,\n      wallpaper: this.state.wallpaper,\n      wallpaperSize: this.state.wallpaperSize,\n      wallpaperBlur: this.state.wallpaperBlur,\n      systemColorSchema: this.state.systemColorSchema,\n      sendOnEnter: this.state.sendOnEnter,\n      onGlobalSettings: this.handleGlobalSettings,\n      onSignUp: this.handleNewAccount,\n      onSettings: this.handleSettings,\n      onNavigate: this.basicNavigator,\n      onLoginRequest: this.handleLoginRequest,\n      onPersistenceChange: this.handlePersistenceChange,\n      onCreateAccount: this.handleNewAccountRequest,\n      onUpdateAccountDesc: this.handleTopicUpdateRequest,\n      onUpdatePassword: this.handleUpdatePasswordRequest,\n      onUpdateAccountTags: this.handleUpdateAccountTagsRequest,\n      onTogglePushNotifications: this.toggleFCMToken,\n      onToggleMessageSounds: this.handleToggleMessageSounds,\n      onToggleIncognitoMode: this.handleToggleIncognitoMode,\n      onChangeColorSchema: this.handleChangeColorSchema,\n      onTextSizeChanged: this.handleChangeTextSize,\n      onSendOnEnterChanged: this.handleSendOnEnter,\n      onSelectWallpapers: this.handleSelectWallpapers,\n      onWallpaperSelected: this.handleWallpaperSelected,\n      onCredAdd: this.handleCredAdd,\n      onCredDelete: this.handleCredDelete,\n      onCredConfirm: this.handleCredConfirm,\n      onTopicSelected: this.handleTopicSelected,\n      onCreateTopic: this.handleStartTopicRequest,\n      onLogout: this.handleLogout,\n      onDeleteAccount: this.handleDeleteAccount,\n      onShowAlert: this.handleShowAlert,\n      onCancel: this.handleSidepanelCancel,\n      onError: this.handleError,\n      onValidateCredentials: this.handleValidateCredentialsRequest,\n      onPasswordResetRequest: this.handlePasswordResetRequest,\n      onResetPassword: this.handleResetPassword,\n      onShowArchive: this.handleShowArchive,\n      onShowBlocked: this.handleShowBlocked,\n      onShowCountrySelector: this.handleShowCountrySelector,\n      onInitFind: this.tnInitFind,\n      searchResults: this.state.searchResults,\n      onSearchContacts: this.handleSearchContacts,\n      showContextMenu: this.handleShowContextMenu\n    }) : null, !this.state.displayMobile || this.state.mobilePanel == 'topic-view' && !this.state.infoPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MessagesView, {\n      tinode: this.tinode,\n      connected: this.state.connected,\n      ready: this.state.ready,\n      online: this.state.topicSelectedOnline,\n      acs: this.state.topicSelectedAcs,\n      displayMobile: this.state.displayMobile,\n      viewportWidth: this.state.viewportWidth,\n      viewportHeight: this.state.viewportHeight,\n      topic: this.state.topicSelected,\n      myUserId: this.state.myUserId,\n      myUserName: this.state.sidePanelTitle,\n      serverVersion: this.state.serverVersion,\n      serverAddress: this.state.serverAddress,\n      applicationVisible: this.state.applicationVisible,\n      colorSchema: colorSchema,\n      sendOnEnter: this.state.sendOnEnter,\n      wallpaper: this.state.wallpaper,\n      forwardMessage: this.state.forwardMessage,\n      onCancelForwardMessage: this.handleHideForwardDialog,\n      callTopic: this.state.callTopic,\n      callSeq: this.state.callSeq,\n      callState: this.state.callState,\n      callAudioOnly: this.state.callAudioOnly,\n      onCallHangup: this.handleCallHangup,\n      onAcceptCall: this.handleCallAccept,\n      onCallInvite: this.handleCallInvite,\n      onCallSendOffer: this.handleCallSendOffer,\n      onCallIceCandidate: this.handleCallIceCandidate,\n      onCallSendAnswer: this.handleCallSendAnswer,\n      errorText: this.state.errorText,\n      errorLevel: this.state.errorLevel,\n      errorAction: this.state.errorAction,\n      errorActionText: this.state.errorActionText,\n      newTopicParams: this.state.newTopicParams,\n      onHideMessagesView: this.handleHideMessagesView,\n      onError: this.handleError,\n      onNewTopicCreated: this.handleNewTopicCreated,\n      showContextMenu: this.handleShowContextMenu,\n      onChangePermissions: this.handleChangePermissions,\n      onNewChat: this.handleNewChatInvitation,\n      sendMessage: this.handleSendMessage,\n      onVideoCallClosed: this.handleCallClose\n    })) : null, this.state.infoPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InfoView, {\n      tinode: this.tinode,\n      connected: this.state.connected,\n      displayMobile: this.state.displayMobile,\n      topic: this.state.topicSelected,\n      searchableContacts: this.state.searchableContacts,\n      myUserId: this.state.myUserId,\n      panel: this.state.infoPanel,\n      errorText: this.state.errorText,\n      errorLevel: this.state.errorLevel,\n      errorAction: this.state.errorAction,\n      errorActionText: this.state.errorActionText,\n      onNavigate: this.infoNavigator,\n      onTopicDescUpdateRequest: this.handleTopicUpdateRequest,\n      onShowAlert: this.handleShowAlert,\n      onChangePermissions: this.handleChangePermissions,\n      onMemberUpdateRequest: this.handleMemberUpdateRequest,\n      onDeleteTopic: this.handleDeleteTopicRequest,\n      onDeleteMessages: this.handleDeleteMessagesRequest,\n      onLeaveTopic: this.handleLeaveUnsubRequest,\n      onBlockTopic: this.handleBlockTopicRequest,\n      onReportTopic: this.handleReportTopic,\n      onShareTheCard: this.handleShareTheCard,\n      onTopicTagsUpdateRequest: this.handleTagsUpdateRequest,\n      onTopicUnArchive: this.handleUnarchive,\n      onInitFind: this.tnInitFind,\n      onError: this.handleError,\n      showContextMenu: this.handleShowContextMenu\n    })) : null);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TinodeWeb));\n\n/***/ }),\n\n/***/ \"./src/views/topic-common-view.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/views/topic-common-view.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TopicCommonView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../widgets/topic-desc-edit.jsx */ \"./src/widgets/topic-desc-edit.jsx\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\nclass TopicCommonView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    const acs = topic.getAccessMode();\n    this.state = {\n      tags: []\n    };\n    this.previousTagsUpdated = undefined;\n    this.onTagsUpdated = this.onTagsUpdated.bind(this);\n    this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n  }\n  componentDidUpdate(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n    if (topic.onTagsUpdated != this.onTagsUpdated) {\n      if (topic.getType() == 'grp') {\n        this.previousTagsUpdated = topic.onTagsUpdated;\n        topic.onTagsUpdated = this.onTagsUpdated;\n      } else {\n        this.previousTagsUpdated = undefined;\n      }\n    }\n    if (this.state.topic != props.topic) {\n      this.setState({\n        topic: props.topic\n      });\n    }\n  }\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onTagsUpdated = this.previousTagsUpdated;\n  }\n  onTagsUpdated(tags) {\n    this.setState({\n      tags: tags\n    });\n    if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {\n      this.previousTagsUpdated(tags);\n    }\n  }\n  handleTagsUpdated(tags) {\n    if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_2__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {\n      this.props.onUpdateTagsRequest(this.props.topic, tags);\n    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      tinode: this.props.tinode,\n      topic: this.props.topic,\n      onUpdateTopicDesc: this.props.onUpdateTopicDesc,\n      onUpdateTags: this.handleTagsUpdated,\n      onError: this.props.onError\n    }));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/validation-view.jsx\":\n/*!***************************************!*\\\n  !*** ./src/views/validation-view.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  phone: {\n    id: \"phone_dative\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"phone\"\n    }]\n  },\n  email: {\n    id: \"email_dative\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"email\"\n    }]\n  }\n});\nclass ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      code: props.credCode || '',\n      codeReceived: props.credCode\n    };\n    this.handleCodeChange = this.handleCodeChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.credCode != prevState.codeReceived) {\n      return {\n        code: nextProps.credCode || '',\n        codeReceived: nextProps.credCode\n      };\n    }\n    return prevState;\n  }\n  componentDidMount() {\n    if (this.props.credCode) {\n      this.props.onSubmit(this.props.credMethod, this.props.credCode, this.props.credToken);\n    }\n  }\n  componentDidUpdate(prevProps, prevState) {\n    if (this.state.codeReceived && this.state.code && this.state.code != prevState.code) {\n      this.props.onSubmit(this.props.credMethod, this.state.code, this.props.credToken);\n    }\n  }\n  handleCodeChange(e) {\n    this.setState({\n      code: e.target.value.replace(/[^\\d]/g, '')\n    });\n  }\n  handleKeyPress(e) {\n    if (e.key === 'Enter') {\n      this.handleSubmit(e);\n    } else if (e.key == 'Escape') {\n      this.handleCancel(e);\n    }\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.code && this.state.code.trim()) {\n      this.props.onSubmit(this.props.credMethod, this.state.code.trim(), this.props.credToken);\n    }\n  }\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel();\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const methods = {\n      'email': formatMessage(messages.email),\n      'tel': formatMessage(messages.phone)\n    };\n    const method = methods[this.props.credMethod] || this.props.credMethod;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\",\n      htmlFor: \"enter-confirmation-code\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"enter_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Confirmation code\"\n      }],\n      values: {\n        method: method\n      }\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"numeric_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Numbers only\"\n      }]\n    }, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"enter-confirmation-code\",\n      placeholder: numbers_only,\n      value: this.state.code,\n      onChange: this.handleCodeChange,\n      onKeyDown: this.handleKeyPress,\n      required: true\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_confirm\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Confirm\"\n      }]\n    }))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ValidationView));\n\n/***/ }),\n\n/***/ \"./src/widgets/alert.jsx\":\n/*!*******************************!*\\\n  !*** ./src/widgets/alert.jsx ***!\n  \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Alert; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"alert-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"alert\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"title\"\n    }, this.props.title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"content\"\n    }, this.props.content), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, this.props.onReject ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"outline\",\n      onClick: this.props.onReject\n    }, this.props.reject || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })) : null, this.props.onConfirm ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.props.onConfirm\n    }, this.props.confirm || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    })) : null)));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/audio-player.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/audio-player.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers */ \"./src/lib/blob-helpers.js\");\n\n\n\n\nconst CANVAS_UPSCALING = 2.0;\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\nconst SPACING = 2 * CANVAS_UPSCALING;\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#1781d7';\nconst MIN_PREVIEW_LENGTH = 16;\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  icon_title_play: {\n    id: \"icon_title_play\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Play recording\"\n    }]\n  }\n});\nclass AudioPlayer extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);\n    if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n      preview = null;\n    }\n    this.state = {\n      canPlay: false,\n      playing: false,\n      currentTime: '0:00',\n      duration: this.props.duration > 0 ? (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000) : '-:--',\n      longMin: this.props.duration >= 600000,\n      preview: preview\n    };\n    this.initAudio = this.initAudio.bind(this);\n    this.initCanvas = this.initCanvas.bind(this);\n    this.resampleBars = this.resampleBars.bind(this);\n    this.visualize = this.visualize.bind(this);\n    this.handlePlay = this.handlePlay.bind(this);\n    this.handleSeek = this.handleSeek.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.audioPlayer = null;\n    this.viewBuffer = [];\n    this.canvasRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n  }\n  componentDidMount() {\n    if (this.props.src) {\n      this.initAudio();\n    }\n    this.initCanvas();\n  }\n  componentWillUnmount() {\n    if (this.audioPlayer) {\n      this.audioPlayer.onloadedmetadata = null;\n      this.audioPlayer.ontimeupdate = null;\n      this.audioPlayer.onended = null;\n      this.audioPlayer.pause();\n      this.audioPlayer = null;\n    }\n  }\n  componentDidUpdate(prevProps) {\n    if (this.props.src != prevProps.src) {\n      this.initAudio();\n    }\n    if (this.props.preview != prevProps.preview) {\n      let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);\n      if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n        preview = null;\n      }\n      this.setState({\n        preview: preview\n      }, this.initCanvas);\n    }\n  }\n  initAudio() {\n    this.audioPlayer = new Audio(this.props.src);\n    this.audioPlayer.onloadedmetadata = _ => this.setState({\n      canPlay: true\n    });\n    this.audioPlayer.ontimeupdate = _ => this.setState({\n      currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)\n    });\n    this.audioPlayer.onended = _ => {\n      this.audioPlayer.currentTime = 0;\n      this.setState({\n        playing: false,\n        currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(0, this.state.longMin)\n      });\n    };\n  }\n  initCanvas() {\n    this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n    this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n    this.canvasContext = this.canvasRef.current.getContext('2d');\n    this.canvasContext.lineCap = 'round';\n    this.viewBuffer = this.resampleBars(this.state.preview);\n    this.visualize();\n  }\n  visualize() {\n    if (!this.canvasRef.current) {\n      return;\n    }\n    const width = this.effectiveWidth;\n    const height = this.canvasRef.current.height;\n    this.canvasContext.lineWidth = LINE_WIDTH;\n    const drawFrame = _ => {\n      if (!this.canvasRef.current || !this.audioPlayer) {\n        return;\n      }\n      this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n      if (this.viewBuffer) {\n        if (this.state.playing) {\n          window.requestAnimationFrame(drawFrame);\n        }\n        const thumbAt = this.props.duration ? Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n        this.canvasContext.beginPath();\n        this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n        for (let i = 0; i < this.viewBuffer.length; i++) {\n          let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n          let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n          const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n          if (this.canvasContext.strokeStyle != color) {\n            this.canvasContext.stroke();\n            this.canvasContext.beginPath();\n            this.canvasContext.strokeStyle = color;\n          }\n          this.canvasContext.moveTo(x, (height - y) * 0.5);\n          this.canvasContext.lineTo(x, (height + y) * 0.5);\n        }\n        this.canvasContext.stroke();\n        if (this.props.duration) {\n          this.canvasContext.beginPath();\n          this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n          this.canvasContext.fillStyle = THUMB_COLOR;\n          this.canvasContext.fill();\n        }\n      }\n    };\n    drawFrame();\n  }\n  resampleBars(original) {\n    const dstCount = (this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING) | 0;\n    this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n    if (!Array.isArray(original) || original.length == 0) {\n      return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n    }\n    const factor = original.length / dstCount;\n    let amps = [];\n    let maxAmp = -1;\n    for (let i = 0; i < dstCount; i++) {\n      let lo = i * factor | 0;\n      let hi = (i + 1) * factor | 0;\n      if (hi == lo) {\n        amps[i] = original[lo];\n      } else {\n        let amp = 0.0;\n        for (let j = lo; j < hi; j++) {\n          amp += original[j];\n        }\n        amps[i] = Math.max(0, amp / (hi - lo));\n      }\n      maxAmp = Math.max(amps[i], maxAmp);\n    }\n    if (maxAmp > 0) {\n      return amps.map(a => a / maxAmp);\n    }\n    return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n  }\n  handlePlay(e) {\n    e.preventDefault();\n    if (!this.state.canPlay) {\n      return;\n    }\n    if (this.state.playing) {\n      this.audioPlayer.pause();\n      this.setState({\n        playing: false\n      });\n    } else if (this.audioPlayer.readyState >= 2) {\n      this.audioPlayer.play();\n      this.setState({\n        playing: true\n      }, this.visualize);\n    }\n  }\n  handleError(err) {\n    console.error(err);\n  }\n  handleSeek(e) {\n    e.preventDefault();\n    if (e.target && this.props.duration) {\n      const rect = e.target.getBoundingClientRect();\n      const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;\n      this.audioPlayer.currentTime = this.props.duration * offset / 1000;\n      this.setState({\n        currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)\n      });\n      if (!this.state.playing) {\n        this.visualize();\n      }\n    }\n  }\n  render() {\n    const playClass = 'material-icons' + (this.props.short ? '' : ' large') + (this.state.canPlay ? '' : ' disabled');\n    const play = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handlePlay,\n      title: this.props.intl.formatMessage(messages.icon_title_play)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: playClass\n    }, this.state.playing ? 'pause_circle' : this.state.canPlay ? 'play_circle' : 'not_interested'));\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"audio-player\"\n    }, this.props.short ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n      className: \"playback\",\n      ref: this.canvasRef,\n      onClick: this.handleSeek\n    }), play) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, play, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n      className: \"playback\",\n      ref: this.canvasRef,\n      onClick: this.handleSeek\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"timer\"\n    }, this.state.currentTime, \"/\", this.state.duration))));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AudioPlayer));\n\n/***/ }),\n\n/***/ \"./src/widgets/avatar-crop.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/avatar-crop.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AvatarCrop; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _cropper_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cropper.jsx */ \"./src/widgets/cropper.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\n\nclass AvatarCrop extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      top: 0,\n      left: 0,\n      width: 0,\n      height: 0,\n      scale: 1\n    };\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleChange = this.handleChange.bind(this);\n  }\n  handleChange(left, top, width, height, scale) {\n    this.setState({\n      left: left,\n      top: top,\n      width: width,\n      height: height,\n      scale: scale\n    });\n  }\n  handleSubmit() {\n    (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.imageCrop)(this.props.mime, this.props.avatar, this.state.left, this.state.top, this.state.width, this.state.height, this.state.scale).then(img => {\n      this.props.onSubmit(img.mime, img.blob, img.width, img.height);\n    }).catch(err => {\n      this.props.onError(err);\n    });\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cropper_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      source: this.props.avatar,\n      onChange: this.handleChange\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.props.onCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/avatar-upload.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/avatar-upload.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AvatarUpload; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-spinner.jsx */ \"./src/widgets/load-spinner.jsx\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\nclass AvatarUpload extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      source: props.avatar\n    };\n    this.handleFileReceived = this.handleFileReceived.bind(this);\n  }\n  componentDidUpdate(prevProps) {\n    if (this.props.avatar != prevProps.avatar) {\n      this.setState({\n        source: this.props.avatar\n      });\n    }\n  }\n  handleFileReceived(e) {\n    const image = e.target.files[0];\n    this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);\n    e.target.value = '';\n  }\n  render() {\n    const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);\n    const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, this.props.readOnly || !this.state.source ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"clear-avatar\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onImageUpdated();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"clear\")), this.state.source ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      src: this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.state.source, 'image')),\n      className: \"preview\"\n    }) : this.props.readOnly && this.props.uid ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: true,\n      topic: this.props.uid,\n      title: this.props.title\n    })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"blank\"\n    }, _config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE, \"\\xD7\", _config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"file\",\n      id: randId,\n      className: \"inputfile hidden\",\n      accept: \"image/*\",\n      onChange: this.handleFileReceived\n    }), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: randId,\n      className: \"round\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"file_upload\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      show: this.props.uploading,\n      large: true,\n      clear: true,\n      centered: true\n    }));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/badge-list.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/badge-list.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst icon_mapping = {\n  'staff': 'verified_user'\n};\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  badge_verified: {\n    id: \"badge_verified\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Verified/official\"\n    }]\n  },\n  badge_staff: {\n    id: \"badge_staff\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Staff-managed\"\n    }]\n  },\n  badge_danger: {\n    id: \"badge_danger\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Untrustworthy\"\n    }]\n  }\n});\nclass BadgeList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    let badges = null;\n    if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {\n      badges = [];\n      this.props.trustedBadges.forEach(b => {\n        const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);\n        const style = 'material-icons ' + b + '-color';\n        badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          className: \"trusted-badge\",\n          key: b\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: style\n        }, icon_mapping[b] || b), \" \", comment));\n      });\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, badges);\n    }\n    return null;\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(BadgeList));\n\n/***/ }),\n\n/***/ \"./src/widgets/button-back.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/button-back.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ButtonBack; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass ButtonBack extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onBack();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"arrow_back\"));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/call-incoming.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/call-incoming.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CallIncoming; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./badge-list.jsx */ \"./src/widgets/badge-list.jsx\");\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ \"./src/constants.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\n\nconst RING_SOUND = new Audio('audio/call-in.m4a');\nclass CallIncoming extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      topic: null,\n      fullName: undefined,\n      avatar: null,\n      trustedBadges: [],\n      previousMetaDesc: undefined\n    };\n    this.resetDesc = this.resetDesc.bind(this);\n    this.onMetaDesc = this.onMetaDesc.bind(this);\n    this.handleRejectCall = this.handleRejectCall.bind(this);\n    this.handleAcceptCall = this.handleAcceptCall.bind(this);\n    this.ringTimer = null;\n  }\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetDesc(topic);\n    if (this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED) {\n      RING_SOUND.play().catch(_ => {});\n      this.ringTimer = setInterval(_ => {\n        RING_SOUND.play().catch(_ => {});\n      }, 2000);\n      this.props.onRinging(this.props.topic, this.props.seq);\n    }\n  }\n  componentDidUpdate(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n    if (this.onMetaDesc != topic.onMetaDesc) {\n      this.previousMetaDesc = topic.onMetaDesc;\n      topic.onMetaDesc = this.onMetaDesc;\n    }\n    if (this.state.topic != props.topic) {\n      this.setState({\n        topic: props.topic\n      });\n      this.resetDesc(topic, props);\n    }\n  }\n  componentWillUnmount() {\n    if (this.ringTimer != null) {\n      clearInterval(this.ringTimer);\n      RING_SOUND.pause();\n    }\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.setState({\n      topic: null\n    });\n    topic.onMetaDesc = this.previousMetaDesc;\n  }\n  resetDesc(topic) {\n    const badges = [];\n    if (topic.trusted) {\n      for (const [key, val] of Object.entries(topic.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n    }\n    this.setState({\n      fullName: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(topic.public ? topic.public.fn : undefined, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_TITLE_LENGTH),\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(topic.public ? topic.public.photo : null),\n      trustedBadges: badges\n    });\n  }\n  onMetaDesc(desc) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetDesc(topic);\n    if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\n      this.previousMetaDesc(desc);\n    }\n  }\n  handleAcceptCall() {\n    this.props.onAcceptCall(this.props.topic);\n  }\n  handleRejectCall() {\n    this.props.onReject(this.props.topic, this.props.seq);\n    this.props.onClose();\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"alert-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"incoming-call\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caller-card incoming pulse\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: this.state.avatar || true,\n      topic: this.props.topic,\n      title: this.state.fullName\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caller-name\"\n    }, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(this.state.fullName, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PEER_TITLE_LENGTH), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      short: true,\n      trustedBadges: this.state.trustedBadges\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"controls\"\n    }, this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"danger\",\n      onClick: this.handleRejectCall\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"call_end\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"positive\",\n      onClick: this.handleAcceptCall\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"call\"))) : null)));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/call-message.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/call-message.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CallMessage; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\nclass CallMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n    const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n    const callIcon = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';\n    const title = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"calls_incoming\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Incoming call\"\n      }]\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"calls_outgoing\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Outgoing call\"\n      }]\n    });\n    let duration;\n    if (isCallDropped) {\n      switch (this.props.callState) {\n        case 'busy':\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_busy\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"busy\"\n            }]\n          });\n          break;\n        case 'declined':\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_declined\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"declined\"\n            }]\n          });\n          break;\n        case 'missed':\n          duration = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_missed\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"missed\"\n            }]\n          }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_cancelled\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"cancelled\"\n            }]\n          });\n          break;\n        default:\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_disconnected\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"disconnected\"\n            }]\n          });\n          break;\n      }\n    } else {\n      duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"call-message\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons big gray\"\n    }, \"call\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"flex-column narrow\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"duration\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: successClass\n    }, callIcon), \" \", duration)));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/call-status.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/call-status.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CallStatus; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\nclass CallStatus extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n    const icon2 = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';\n    let duration;\n    if (isCallDropped) {\n      switch (this.props.callState) {\n        case 'busy':\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_busy\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"busy\"\n            }]\n          });\n          break;\n        case 'declined':\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_declined\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"declined\"\n            }]\n          });\n          break;\n        case 'missed':\n          duration = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_missed\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"missed\"\n            }]\n          }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_cancelled\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"cancelled\"\n            }]\n          });\n          break;\n        default:\n          duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"call_disconnected\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"disconnected\"\n            }]\n          });\n          break;\n      }\n    } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {\n      duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"call_in_progress\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"in progress\"\n        }]\n      });\n    } else {\n      duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"composed-material\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"call\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons second\"\n    }, icon2)), \" \", duration);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/checkbox.jsx\":\n/*!**********************************!*\\\n  !*** ./src/widgets/checkbox.jsx ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CheckBox; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass CheckBox extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleChange = this.handleChange.bind(this);\n  }\n  handleChange() {\n    this.props.onChange(this.props.name, !this.props.checked);\n  }\n  render() {\n    let classList = ['material-icons'];\n    let iconName;\n    if (Array.isArray(this.props.className)) {\n      classList.push(...this.props.className);\n    } else if (this.props.className) {\n      classList.push(this.props.className);\n    }\n    if (this.props.onChange) {\n      if (this.props.checked) {\n        classList.push('blue', 'clickable');\n        iconName = 'check_box';\n      } else if (this.props.checked === false) {\n        classList.push('blue', 'clickable');\n        iconName = 'check_box_outline_blank';\n      } else {\n        classList.push('lt-blue');\n        iconName = 'indeterminate_check_box';\n      }\n    } else {\n      if (this.props.checked) {\n        iconName = 'check_box';\n      } else {\n        iconName = 'check_box_outline_blank';\n      }\n    }\n    let attrs = {\n      className: classList.join(' '),\n      id: this.props.id\n    };\n    if (this.props.onChange) {\n      attrs.onClick = this.handleChange;\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', attrs, iconName);\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/chip-input.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/chip-input.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ChipInput; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _chip_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chip.jsx */ \"./src/widgets/chip.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\nclass ChipInput extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = ChipInput.deriveStateFromProps(props);\n    this.state.input = '';\n    this.state.focused = false;\n    this.handleTextInput = this.handleTextInput.bind(this);\n    this.removeChipAt = this.removeChipAt.bind(this);\n    this.handleChipCancel = this.handleChipCancel.bind(this);\n    this.handleFocusGained = this.handleFocusGained.bind(this);\n    this.handleFocusLost = this.handleFocusLost.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  static deriveStateFromProps(props) {\n    return {\n      sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),\n      chipIndex: ChipInput.indexChips(props.chips)\n    };\n  }\n  componentDidUpdate(prevProps, prevState) {\n    if (prevProps.chips != this.props.chips || prevProps.staticMembers != this.props.staticMembers || prevProps.prompt != this.props.prompt) {\n      this.setState(ChipInput.deriveStateFromProps(this.props));\n    }\n    if (!prevState || this.props.chips.length > prevState.sortedChips.length) {\n      this.setState({\n        input: ''\n      });\n    }\n  }\n  static indexChips(chips) {\n    const index = {};\n    let count = 0;\n    chips.forEach(item => {\n      index[item.user] = count;\n      count++;\n    });\n    return index;\n  }\n  static sortChips(chips, keep) {\n    const required = [];\n    const normal = [];\n    chips.forEach(item => {\n      if (keep && keep.includes(item.user)) {\n        required.push(item);\n      } else {\n        normal.push(item);\n      }\n    });\n    return required.concat(normal);\n  }\n  handleTextInput(e) {\n    this.setState({\n      input: e.target.value\n    });\n    if (this.props.filterFunc) {\n      this.props.filterFunc(e.target.value);\n    }\n  }\n  removeChipAt(idx) {\n    const removed = this.state.sortedChips[idx];\n    this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);\n  }\n  handleChipCancel(item, idx) {\n    this.removeChipAt(idx);\n  }\n  handleFocusGained() {\n    this.setState({\n      focused: true\n    });\n  }\n  handleFocusLost() {\n    this.setState({\n      focused: false\n    });\n    if (this.props.onFocusLost) {\n      this.props.onFocusLost(this.state.input);\n    }\n  }\n  handleKeyDown(e) {\n    if (e.key === 'Backspace') {\n      if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {\n        const at = this.state.sortedChips.length - 1;\n        if (this.state.sortedChips[at].user !== this.props.staticMembers) {\n          this.removeChipAt(at);\n        }\n      }\n    } else if (e.key === 'Enter') {\n      if (this.props.onEnter) {\n        this.props.onEnter(this.state.input);\n      }\n    } else if (e.key === 'Escape') {\n      if (this.props.onCancel) {\n        this.props.onCancel();\n      }\n    }\n  }\n  render() {\n    const chips = [];\n    let count = 0;\n    const staticMembers = this.props.staticMembers || [];\n    this.state.sortedChips.forEach(item => {\n      chips.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n        tinode: this.props.tinode,\n        onCancel: this.handleChipCancel,\n        avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__.makeImageUrl)(item.public ? item.public.photo : null),\n        title: item.public ? item.public.fn : undefined,\n        noAvatar: this.props.avatarDisabled,\n        topic: item.user,\n        required: staticMembers.includes(item.user),\n        invalid: item.invalid,\n        index: count,\n        key: item.user\n      }));\n      count++;\n    });\n    const className = \"chip-input\" + (this.state.focused ? ' focused' : '');\n    const autoFocus = !(this.props.tabIndex > 0);\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, chips, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      placeholder: this.props.prompt,\n      onChange: this.handleTextInput,\n      onFocus: this.handleFocusGained,\n      onBlur: this.handleFocusLost,\n      onKeyDown: this.handleKeyDown,\n      value: this.state.input,\n      tabIndex: this.props.tabIndex,\n      autoFocus: autoFocus\n    }));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/chip.jsx\":\n/*!******************************!*\\\n  !*** ./src/widgets/chip.jsx ***!\n  \\******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Chip; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n\n\nclass Chip extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel(this.props.topic, this.props.index);\n  }\n  render() {\n    const title = this.props.title || this.props.topic;\n    const className = this.props.invalid ? 'chip invalid' : 'chip';\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, this.props.noAvatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"spacer\"\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: this.props.avatar || true,\n      topic: this.props.topic,\n      title: this.props.title\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, title), this.props.onCancel && !this.props.required ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleCancel\n    }, \"\\xD7\") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"spacer\"\n    }));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/contact-action.jsx\":\n/*!****************************************!*\\\n  !*** ./src/widgets/contact-action.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass ContactAction extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleClick = this.handleClick.bind(this);\n  }\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.onAction(this.props.action);\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      onClick: this.handleClick,\n      className: \"action\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"action-text\"\n    }, formatMessage(this.props.title, this.props.values)));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactAction));\n\n/***/ }),\n\n/***/ \"./src/widgets/contact-badges.jsx\":\n/*!****************************************!*\\\n  !*** ./src/widgets/contact-badges.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ContactBadges; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst icon_mapping = {\n  'muted': 'notifications_off',\n  'banned': 'block',\n  'staff': 'verified_user'\n};\nclass ContactBadges extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    let badges = null;\n    if (this.props.badges && this.props.badges.length > 0) {\n      badges = [];\n      this.props.badges.forEach(b => {\n        const color = b.color ? ' ' + b.color : '';\n        if (b.icon) {\n          badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n            className: 'material-icons as-badge' + color,\n            key: b.key || b.icon\n          }, icon_mapping[b.icon] || b.icon));\n        } else {\n          badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n            className: 'badge' + color,\n            key: b.key || b.name\n          }, b.name));\n        }\n      });\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, badges);\n    }\n    return null;\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/contact-list.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/contact-list.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ \"./src/widgets/contact.jsx\");\n/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contact-action.jsx */ \"./src/widgets/contact-action.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  badge_you: {\n    id: \"badge_you\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"you\"\n    }]\n  },\n  badge_owner: {\n    id: \"badge_owner\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"owner\"\n    }]\n  }\n});\nclass ContactList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const showCheckmark = Array.isArray(this.props.topicSelected);\n    const contactNodes = [];\n    let contactsCount = 0;\n    if (this.props.showSelfTopic) {\n      const selected = showCheckmark ? this.props.topicSelected.indexOf('slf') > -1 : this.props.topicSelected === 'slf';\n      contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n        tinode: this.props.tinode,\n        avatar: true,\n        showMode: this.props.showMode,\n        selected: selected,\n        showCheckmark: showCheckmark,\n        onSelected: this.props.onTopicSelected,\n        showContextMenu: this.props.showContextMenu,\n        index: contactNodes.length,\n        item: \"slf\",\n        key: \"slf\"\n      }));\n      contactsCount++;\n    }\n    if (this.props.contacts && this.props.contacts.length > 0) {\n      const usedKeys = {};\n      this.props.contacts.forEach(c => {\n        if (c.action) {\n          contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n            title: c.title,\n            action: c.action,\n            values: c.values,\n            key: c.action,\n            onAction: this.props.onAction\n          }));\n        } else {\n          const key = this.props.showMode ? c.user : c.topic || c.user;\n          if (usedKeys[key]) {\n            return;\n          }\n          usedKeys[key] = true;\n          if (this.props.filterFunc && this.props.filter) {\n            const filterOn = [key];\n            if (c.private && c.private.comment) {\n              filterOn.push(('' + c.private.comment).toLowerCase());\n            }\n            if (c.public && c.public.fn) {\n              filterOn.push(('' + c.public.fn).toLowerCase());\n            }\n            if (!this.props.filterFunc(this.props.filter, filterOn)) {\n              return;\n            }\n          }\n          const isChannel = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isChannelTopicName(key);\n          const isGroup = !isChannel && tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isGroupTopicName(key);\n          const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;\n          const badges = [];\n          if (this.props.showMode) {\n            if (key == this.props.myUserId) {\n              badges.push({\n                name: formatMessage(messages.badge_you),\n                color: 'green'\n              });\n            }\n            if (c.acs && c.acs.isOwner()) {\n              badges.push({\n                name: formatMessage(messages.badge_owner),\n                color: 'blue'\n              });\n            }\n          }\n          const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;\n          let preview;\n          let forwarded;\n          let previewIsResponse;\n          let deliveryStatus;\n          if (!this.props.showMode && c.latestMessage) {\n            const msg = c.latestMessage();\n            if (msg) {\n              forwarded = msg.head ? msg.head.forwarded : null;\n              deliveryStatus = msg._status || c.msgStatus(msg, true);\n              previewIsResponse = msg.from != this.props.myUserId;\n              if (msg.content) {\n                preview = typeof msg.content == 'string' ? msg.content.substr(0, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.preview(msg.content, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH);\n              }\n            }\n          }\n          contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n            tinode: this.props.tinode,\n            title: c.public ? c.public.fn : null,\n            avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(c.public ? c.public.photo : null),\n            comment: comment,\n            preview: preview,\n            previewIsResponse: previewIsResponse,\n            forwarded: forwarded,\n            received: deliveryStatus,\n            unread: this.props.showUnread ? c.unread : 0,\n            now: c.online && this.props.connected,\n            acs: c.acs,\n            showMode: this.props.showMode,\n            badges: badges,\n            showCheckmark: showCheckmark,\n            selected: selected,\n            pinned: c.pinned,\n            showOnline: this.props.showOnline && !isChannel,\n            isChannel: isChannel,\n            isGroup: isGroup,\n            showContextMenu: this.props.showContextMenu,\n            isVerified: c.trusted && c.trusted.verified,\n            isStaff: c.trusted && c.trusted.staff,\n            isDangerous: c.trusted && c.trusted.danger,\n            deleted: c._deleted,\n            onSelected: this.props.onTopicSelected,\n            item: key,\n            index: contactNodes.length,\n            key: key\n          }));\n          contactsCount++;\n        }\n      }, this);\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: this.props.noScroll ? null : \"scrollable-panel\"\n    }, contactsCount == 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"center-medium-text\",\n      style: {\n        whiteSpace: 'pre-line'\n      }\n    }, this.props.emptyListMessage) : null, contactNodes.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"contact-box\"\n    }, contactNodes) : null);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactList));\n\n/***/ }),\n\n/***/ \"./src/widgets/contact.jsx\":\n/*!*********************************!*\\\n  !*** ./src/widgets/contact.jsx ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ \"./src/widgets/contact-badges.jsx\");\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./unread-badge.jsx */ \"./src/widgets/unread-badge.jsx\");\n/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/formatters.js */ \"./src/lib/formatters.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  self_topic_name: {\n    id: \"self_topic_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Saved messages\"\n    }]\n  },\n  self_topic_comment: {\n    id: \"self_topic_comment\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Notes, messages, links, files saved for posterity\"\n    }]\n  }\n});\nclass Contact extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.handleClick = this.handleClick.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n  }\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.props.onSelected) {\n      this.props.onSelected(this.props.item, this.props.index);\n    }\n  }\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.showContextMenu({\n      topicName: this.props.item,\n      topicTitle: this.props.title,\n      y: e.pageY,\n      x: e.pageX\n    });\n  }\n  render() {\n    let title = this.props.title;\n    const self = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.item);\n    if (!title) {\n      if (self) {\n        title = this.props.intl.formatMessage(messages.self_topic_name);\n      } else {\n        title = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"unnamed_topic\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"Unnamed\"\n          }]\n        }));\n      }\n    } else if (title.length > 30) {\n      title = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(title, 30);\n    }\n    const online = this.props.now ? 'online' : 'offline';\n    const avatar = this.props.avatar ? this.props.avatar : true;\n    const badges = this.props.badges ? this.props.badges.slice() : [];\n    const icon_badges = [];\n    if (this.props.isVerified) {\n      icon_badges.push({\n        icon: 'verified',\n        color: 'verified-color'\n      });\n    }\n    if (this.props.isStaff) {\n      icon_badges.push({\n        icon: 'staff',\n        color: 'staff-color'\n      });\n    }\n    if (this.props.isDangerous) {\n      icon_badges.push({\n        icon: 'dangerous',\n        color: 'danger-color'\n      });\n    }\n    if (this.props.acs) {\n      if (this.props.showMode) {\n        badges.push({\n          name: this.props.acs.getMode(),\n          key: 'mode'\n        });\n      }\n      if (this.props.acs.isMuted()) {\n        icon_badges.push({\n          icon: 'muted'\n        });\n      }\n      if (!this.props.acs.isJoiner()) {\n        icon_badges.push({\n          icon: 'banned'\n        });\n      }\n    }\n    let preview;\n    if (typeof this.props.preview == 'string') {\n      preview = this.props.preview;\n    } else if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(this.props.preview)) {\n      preview = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.preview, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__.previewFormatter, {\n        formatMessage: this.props.intl.formatMessage,\n        previewIsResponse: this.props.previewIsResponse\n      }));\n    } else if (this.props.preview) {\n      preview = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons gray\"\n      }, \"warning_amber\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"gray\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"invalid_content\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"invalid content\"\n        }]\n      })));\n    }\n    const icon = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.deliveryMarker)(this.props.received);\n    const marker = icon ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: 'material-icons small space-right' + (icon.color ? ' ' + icon.color : '')\n    }, icon.name) : null;\n    const titleClass = 'contact-title' + (this.props.deleted ? ' deleted' : '');\n    const comment = preview || this.props.comment || (self ? this.props.intl.formatMessage(messages.self_topic_comment) : '\\u00A0');\n    const bgColor = this.props.showCheckmark ? null : this.props.selected ? 'selected' : this.props.pinned ? 'tpinned' : null;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: bgColor,\n      onClick: this.handleClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: avatar,\n      title: this.props.title,\n      topic: this.props.item,\n      deleted: this.props.deleted\n    }), this.props.deleted ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"deleted material-icons\"\n    }, \"cancel\") : !self && this.props.showOnline ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: online\n    }) : this.props.showCheckmark && this.props.selected ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"checkmark material-icons\"\n    }, \"check_circle\") : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"text-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: titleClass\n    }, title), this.props.isGroup ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons as-badge\"\n    }, \"group\") : null, this.props.isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons as-badge\"\n    }, \"podcasts\") : null, !self ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      badges: icon_badges\n    }) : null, !this.props.deleted ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      count: this.props.unread\n    }) : null), this.props.showMode ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      badges: badges\n    })) : this.props.small ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"contact-comment\"\n    }, marker, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, comment))), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"menuTrigger\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleContextClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"expand_more\"))) : null);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(Contact));\n\n/***/ }),\n\n/***/ \"./src/widgets/context-menu.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/context-menu.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  info: {\n    id: \"menu_item_info\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Info\"\n    }]\n  },\n  clear_messages: {\n    id: \"menu_item_clear_messages\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Clear messages\"\n    }]\n  },\n  clear_for_all: {\n    id: \"menu_item_clear_messages_for_all\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Clear for All\"\n    }]\n  },\n  delete: {\n    id: \"menu_item_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete\"\n    }]\n  },\n  delete_for_all: {\n    id: \"menu_item_delete_for_all\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete for All\"\n    }]\n  },\n  send_retry: {\n    id: \"menu_item_send_retry\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Retry\"\n    }]\n  },\n  mute: {\n    id: \"menu_item_mute\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Mute\"\n    }]\n  },\n  unmute: {\n    id: \"menu_item_unmute\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unmute\"\n    }]\n  },\n  reply: {\n    id: \"menu_item_reply\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Reply\"\n    }]\n  },\n  forward: {\n    id: \"menu_item_forward\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Forward\"\n    }]\n  },\n  edit: {\n    id: \"menu_item_edit\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Edit\"\n    }]\n  },\n  topic_delete: {\n    id: \"menu_item_delete_topic\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete\"\n    }]\n  },\n  topic_delete_warning: {\n    id: \"topic_delete_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to delete this conversation? It cannot be undone.\"\n    }]\n  },\n  delete_messages_warning: {\n    id: \"delete_messages_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\"\n    }]\n  },\n  unblock: {\n    id: \"menu_item_unblock\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unblock\"\n    }]\n  },\n  block: {\n    id: \"menu_item_block\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Block\"\n    }]\n  },\n  topic_block_warning: {\n    id: \"topic_block_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to block this conversation?\"\n    }]\n  },\n  member_delete: {\n    id: \"menu_item_member_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Remove\"\n    }]\n  },\n  archive: {\n    id: \"menu_item_archive_topic\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Archive\"\n    }]\n  },\n  unarchive: {\n    id: \"menu_item_restore_topic\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Restore\"\n    }]\n  },\n  edit_permissions: {\n    id: \"menu_item_edit_permissions\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Edit permissions\"\n    }]\n  },\n  clear_messages_warning: {\n    id: \"clear_messages_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to clear all messages? It cannot be undone.\"\n    }]\n  },\n  pin_message: {\n    id: \"pin_message\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Pin\"\n    }]\n  },\n  unpin_message: {\n    id: \"unpin_message\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unpin\"\n    }]\n  },\n  pin_chat: {\n    id: \"pin_chat\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Pin\"\n    }]\n  },\n  unpin_chat: {\n    id: \"unpin_chat\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unpin\"\n    }]\n  }\n});\nclass ContextMenu extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    const {\n      formatMessage\n    } = props.intl;\n    this.handlePageClick = this.handlePageClick.bind(this);\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleClick = this.handleClick.bind(this);\n    this.MenuItems = {\n      'topic_info': {\n        id: 'topic_info',\n        title: formatMessage(messages.info),\n        handler: null\n      },\n      'messages_clear': {\n        id: 'messages_clear',\n        title: formatMessage(messages.clear_messages),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_messages), formatMessage(messages.clear_messages_warning), _ => {\n            this.deleteMessages(true, false, params, errorHandler);\n          }, null, true, null);\n        }\n      },\n      'messages_clear_hard': {\n        id: 'messages_clear_hard',\n        title: formatMessage(messages.clear_for_all),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_for_all), formatMessage(messages.delete_messages_warning), _ => {\n            return this.deleteMessages(true, true, params, errorHandler);\n          }, null, true, null);\n        }\n      },\n      'message_delete': {\n        id: 'message_delete',\n        title: formatMessage(messages.delete),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, false, params, errorHandler);\n        }\n      },\n      'message_delete_hard': {\n        id: 'message_delete_hard',\n        title: formatMessage(messages.delete_for_all),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, true, params, errorHandler);\n        }\n      },\n      'message_delete_generic': {\n        id: 'message_delete_generic',\n        title: formatMessage(messages.delete),\n        handler: (params, errorHandler) => {\n          return this.deleteMessages(false, true, params, errorHandler);\n        }\n      },\n      'menu_item_send_retry': {\n        id: 'menu_item_send_retry',\n        title: formatMessage(messages.send_retry),\n        handler: (params, errorHandler) => {\n          return this.retryMessage(params, errorHandler);\n        }\n      },\n      'menu_item_reply': {\n        id: 'menu_item_reply',\n        title: formatMessage(messages.reply),\n        handler: (params, errorHandler) => {\n          return this.replyToMessage(params, errorHandler);\n        }\n      },\n      'menu_item_forward': {\n        id: 'menu_item_forward',\n        title: formatMessage(messages.forward),\n        handler: _ => {}\n      },\n      'menu_item_edit': {\n        id: 'menu_item_edit',\n        title: formatMessage(messages.edit),\n        handler: (params, errorHandler) => {\n          return this.editMessage(params, errorHandler);\n        }\n      },\n      'menu_item_pin': {\n        id: 'menu_item_pin',\n        title: formatMessage(messages.pin_message),\n        handler: (params, errorHandler) => {\n          return this.pinMessage(true, params, errorHandler);\n        }\n      },\n      'menu_item_unpin': {\n        id: 'menu_item_unpin',\n        title: formatMessage(messages.unpin_message),\n        handler: (params, errorHandler) => {\n          return this.pinMessage(false, params, errorHandler);\n        }\n      },\n      'topic_unmute': {\n        id: 'topic_unmute',\n        title: formatMessage(messages.unmute),\n        handler: this.topicPermissionSetter.bind(this, '+P')\n      },\n      'topic_mute': {\n        id: 'topic_mute',\n        title: formatMessage(messages.mute),\n        handler: this.topicPermissionSetter.bind(this, '-P')\n      },\n      'topic_unblock': {\n        id: 'topic_unblock',\n        title: formatMessage(messages.unblock),\n        handler: this.topicPermissionSetter.bind(this, '+JP')\n      },\n      'topic_block': {\n        id: 'topic_block',\n        title: formatMessage(messages.block),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(params.topicTitle || formatMessage(messages.block), formatMessage(messages.topic_block_warning), _ => this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {\n            this.props.onTopicRemoved(params.topicName);\n            return ctrl;\n          }), null, true, null);\n        }\n      },\n      'topic_delete': {\n        id: 'topic_delete',\n        title: formatMessage(messages.topic_delete),\n        handler: (params, errorHandler) => {\n          return props.onShowAlert(params.topicTitle || formatMessage(messages.topic_delete), formatMessage(messages.topic_delete_warning), _ => {\n            const topic = this.props.tinode.getTopic(params.topicName);\n            if (!topic) {\n              console.warn(\"Topic not found: \", params.topicName);\n              return;\n            }\n            return topic.delTopic(true).catch(err => {\n              if (errorHandler) {\n                errorHandler(err.message, 'err');\n              }\n            });\n          }, null, true, null);\n        }\n      },\n      'topic_archive': {\n        id: 'topic_archive',\n        title: formatMessage(messages.archive),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic) {\n            console.warn(\"Topic not found: \", params.topicName);\n            return;\n          }\n          return topic.archive(true).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_restore': {\n        id: 'topic_restore',\n        title: formatMessage(messages.unarchive),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic) {\n            console.warn(\"Topic not found: \", params.topicName);\n            return;\n          }\n          return topic.archive(false).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_pin': {\n        id: 'topic_pin',\n        title: formatMessage(messages.pin_chat),\n        handler: (params, errorHandler) => {\n          const me = this.props.tinode.getMeTopic();\n          if (!me) {\n            console.warn(\"'me' topic not found\");\n            return;\n          }\n          return me.pinTopic(params.topicName, true).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'topic_unpin': {\n        id: 'topic_unpin',\n        title: formatMessage(messages.unpin_chat),\n        handler: (params, errorHandler) => {\n          const me = this.props.tinode.getMeTopic();\n          if (!me) {\n            console.warn(\"'me' topic not found\");\n            return;\n          }\n          return me.pinTopic(params.topicName, false).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'permissions': {\n        id: 'permissions',\n        title: formatMessage(messages.edit_permissions),\n        handler: null\n      },\n      'member_delete': {\n        id: 'member_delete',\n        title: formatMessage(messages.member_delete),\n        handler: (params, errorHandler) => {\n          const topic = this.props.tinode.getTopic(params.topicName);\n          if (!topic || !params.user) {\n            console.warn(\"Topic or user not found: '\" + params.topicName + \"', '\" + params.user + \"'\");\n            return;\n          }\n          return topic.delSubscription(params.user).catch(err => {\n            if (errorHandler) {\n              errorHandler(err.message, 'err');\n            }\n          });\n        }\n      },\n      'member_mute': {\n        id: 'member_mute',\n        title: formatMessage(messages.mute),\n        handler: this.topicPermissionSetter.bind(this, '-P')\n      },\n      'member_unmute': {\n        id: 'member_unmute',\n        title: formatMessage(messages.unmute),\n        handler: this.topicPermissionSetter.bind(this, '+P')\n      },\n      'member_block': {\n        id: 'member_block',\n        title: formatMessage(messages.block),\n        handler: this.topicPermissionSetter.bind(this, '-JP')\n      },\n      'member_unblock': {\n        id: 'member_unblock',\n        title: formatMessage(messages.unblock),\n        handler: this.topicPermissionSetter.bind(this, '+JP')\n      }\n    };\n  }\n  componentDidMount() {\n    document.addEventListener('mousedown', this.handlePageClick, false);\n    document.addEventListener('keyup', this.handleEscapeKey, false);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('mousedown', this.handlePageClick, false);\n    document.removeEventListener('keyup', this.handleEscapeKey, false);\n  }\n  handlePageClick(e) {\n    if (this.selfRef.current.contains(e.target)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.hide();\n  }\n  handleEscapeKey(e) {\n    if (e.keyCode === 27) {\n      this.props.hide();\n    }\n  }\n  handleClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.hide();\n    let item = this.props.items[e.currentTarget.dataset.id];\n    if (typeof item == 'string') {\n      item = this.MenuItems[item];\n    }\n    if (!item) {\n      console.error(\"Invalid menu item ID\", e.currentTarget.dataset.id);\n    } else {\n      this.props.onAction(item.id, item.handler(this.props.params, this.props.onError), this.props.params);\n    }\n  }\n  deleteMessages(all, hard, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      console.warn(\"Topic not found: \", params.topicName);\n      return;\n    }\n    if (!all && topic.cancelSend(params.seq)) {\n      return;\n    }\n    const promise = all ? topic.delMessagesAll(hard) : params.replace > 0 ? topic.delMessagesEdits(params.replace, hard) : topic.delMessagesList([params.seq], hard);\n    return promise.catch(err => {\n      if (errorHandler) {\n        errorHandler(err.message, 'err');\n      }\n    });\n  }\n  retryMessage(params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic || !topic.flushMessage(params.seq)) {\n      return;\n    }\n    const msg = topic.createMessage(params.content, false);\n    return topic.publishDraft(msg).catch(err => {\n      if (errorHandler) {\n        errorHandler(err.message, 'err');\n      }\n    });\n  }\n  pinMessage(pin, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      return;\n    }\n    topic.pinMessage(params.seq, pin).catch(err => errorHandler ? errorHandler(err.message, 'err') : null);\n  }\n  topicPermissionSetter(mode, params, errorHandler) {\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (!topic) {\n      console.warn(\"Topic not found\", params.topicName);\n      return;\n    }\n    let result = topic.updateMode(params.user, mode);\n    if (errorHandler) {\n      result = result.catch(err => errorHandler(err.message, 'err'));\n    }\n    return result;\n  }\n  replyToMessage(params, errorHandler) {\n    params.pickReply(params.seq, params.content, params.userFrom, params.userName, errorHandler);\n  }\n  editMessage(params, errorHandler) {\n    params.editMessage(params.replace || params.seq, params.content, errorHandler);\n  }\n  render() {\n    const menu = [];\n    let count = 0;\n    this.props.items.forEach(item => {\n      if (typeof item == 'string') {\n        item = this.MenuItems[item];\n      }\n      if (item && item.title) {\n        const className = item.disabled ? 'disabled' : undefined;\n        menu.push(item.title == '-' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n          className: \"separator\",\n          key: count\n        }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n          className: className,\n          onClick: this.handleClick,\n          \"data-id\": count,\n          key: count\n        }, item.title));\n      }\n      count++;\n    });\n    const hSize = 12 * _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE;\n    const vSize = _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE * (0.7 + menu.length * 2.5);\n    const left = this.props.bounds.right - this.props.clickAt.x < hSize ? this.props.clickAt.x - this.props.bounds.left - hSize : this.props.clickAt.x - this.props.bounds.left;\n    const top = this.props.bounds.bottom - this.props.clickAt.y < vSize ? this.props.clickAt.y - this.props.bounds.top - vSize : this.props.clickAt.y - this.props.bounds.top;\n    const position = {\n      left: left + 'px',\n      top: top + 'px'\n    };\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"menu\",\n      style: position,\n      ref: this.selfRef\n    }, menu);\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContextMenu));\n\n/***/ }),\n\n/***/ \"./src/widgets/cropper.jsx\":\n/*!*********************************!*\\\n  !*** ./src/widgets/cropper.jsx ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Cropper; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst DEFAULT_MAX_ZOOM = 8;\nclass Cropper extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      panX: 0,\n      panY: 0,\n      originX: 0,\n      originY: 0,\n      zoom: 1,\n      minZoom: 0.001,\n      maxZoom: DEFAULT_MAX_ZOOM\n    };\n    this.overlay = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.cutout = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.preview = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.boundingBox = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.imageWidth = 0;\n    this.imageHeight = 0;\n    this.mouseX = 0;\n    this.mouseY = 0;\n    this.prevDistance = 0;\n    this.cutoutRect = {};\n    this.bBoxRect = {};\n    this.originX = 0;\n    this.originY = 0;\n    this.initScaling = this.initScaling.bind(this);\n    this.onZoom = this.onZoom.bind(this);\n    this.handleZoom = this.handleZoom.bind(this);\n    this.mouseDown = this.mouseDown.bind(this);\n    this.mouseUp = this.mouseUp.bind(this);\n    this.mouseMove = this.mouseMove.bind(this);\n    this.mouseTouch = this.mouseTouch.bind(this);\n    this.positionAll = this.positionAll.bind(this);\n    this.translate = this.translate.bind(this);\n  }\n  componentDidMount() {\n    this.overlay.current.addEventListener('mousedown', this.mouseDown, {\n      passive: true\n    });\n    this.overlay.current.addEventListener('touchstart', this.mouseDown, {\n      passive: true\n    });\n    this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n    this.originX = this.bBoxRect.width / 2;\n    this.originY = this.bBoxRect.height / 2;\n    this.cutoutRect = this.cutout.current.getBoundingClientRect();\n  }\n  componentWillUnmount() {\n    if (this.overlay.current) {\n      this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n      this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n    }\n  }\n  positionAll(panX, panY, zoom) {\n    this.setState({\n      panX: panX,\n      panY: panY,\n      zoom: zoom,\n      originX: this.originX - panX,\n      originY: this.originY - panY\n    });\n    const left = (this.originX - panX) * zoom - this.originX;\n    const top = (this.originY - panY) * zoom - this.originY;\n    this.props.onChange((left + this.cutoutRect.left - this.bBoxRect.left) / zoom, (top + this.cutoutRect.top - this.bBoxRect.top) / zoom, this.cutoutRect.width / zoom, this.cutoutRect.height / zoom, zoom);\n  }\n  static checkBound(currPan, img, cutout, delta) {\n    let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n    if (nextDiff == 0) {\n      currPan += delta;\n    } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n      currPan += delta;\n    }\n    return currPan;\n  }\n  initScaling() {\n    const imgRect = this.preview.current.getBoundingClientRect();\n    this.imageWidth = imgRect.width;\n    this.imageHeight = imgRect.height;\n    const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n    this.setState({\n      minZoom: minZoom,\n      maxZoom: minZoom * DEFAULT_MAX_ZOOM\n    });\n    const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n    const panX = this.cutoutRect.left - this.bBoxRect.left - (imgRect.width - this.cutoutRect.width) / 2;\n    const panY = this.cutoutRect.top - this.bBoxRect.top - (imgRect.height - this.cutoutRect.height) / 2;\n    this.positionAll(panX, panY, zoom);\n  }\n  onZoom(e) {\n    this.handleZoom(e.target.value);\n  }\n  handleZoom(zoom) {\n    let panX = this.state.panX;\n    let panY = this.state.panY;\n    const imgLeft = this.originX - (this.originX - panX) * zoom;\n    const imgRight = imgLeft + this.imageWidth * zoom;\n    const imgTop = this.originY - (this.originY - panY) * zoom;\n    const imgBottom = imgTop + this.imageHeight * zoom;\n    const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n    const coRight = coLeft + this.cutoutRect.width;\n    const coTop = this.cutoutRect.top - this.bBoxRect.top;\n    const coBottom = coTop + this.cutoutRect.height;\n    if (coLeft < imgLeft) {\n      panX -= (imgLeft - coLeft) / zoom;\n    } else if (coRight > imgRight) {\n      panX += (coRight - imgRight) / zoom;\n    }\n    if (coTop < imgTop) {\n      panY -= (imgTop - coTop) / zoom;\n    } else if (coBottom > imgBottom) {\n      panY += (coBottom - imgBottom) / zoom;\n    }\n    this.positionAll(panX, panY, zoom);\n  }\n  mouseDown(e) {\n    if (e.touches) {\n      this.mouseX = e.touches[0].pageX;\n      this.mouseY = e.touches[0].pageY;\n    } else {\n      this.mouseX = e.pageX;\n      this.mouseY = e.pageY;\n    }\n    window.addEventListener('mousemove', this.mouseMove, {\n      passive: false\n    });\n    window.addEventListener('touchmove', this.mouseTouch, {\n      passive: false\n    });\n    window.addEventListener('mouseup', this.mouseUp, {\n      passive: true\n    });\n    window.addEventListener('touchend', this.mouseUp, {\n      passive: true\n    });\n    document.body.style['userSelect'] = 'none';\n  }\n  translate(pageX, pageY) {\n    const dX = (pageX - this.mouseX) / this.state.zoom;\n    const dY = (pageY - this.mouseY) / this.state.zoom;\n    this.mouseX = pageX;\n    this.mouseY = pageY;\n    const imgRect = this.preview.current.getBoundingClientRect();\n    const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right], [this.cutoutRect.left, this.cutoutRect.right], dX);\n    const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom], [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n    this.positionAll(panX, panY, this.state.zoom);\n  }\n  mouseMove(e) {\n    e.preventDefault();\n    this.translate(e.pageX, e.pageY);\n  }\n  mouseTouch(e) {\n    e.preventDefault();\n    if (e.touches.length == 1) {\n      this.translate(e.touches[0].pageX, e.touches[0].pageY);\n      return;\n    }\n    const [touch0, touch1] = e.touches;\n    const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) + (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n    if (!this.prevDistance) {\n      this.prevDistance = distance / this.state.zoom;\n    }\n    let scale = distance / this.prevDistance;\n    this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n  }\n  mouseUp(e) {\n    window.removeEventListener('mousemove', this.mouseMove);\n    window.removeEventListener('touchmove', this.mouseTouch);\n    window.removeEventListener('mouseup', this.mouseUp);\n    window.removeEventListener('touchend', this.mouseUp);\n    document.body.style['userSelect'] = '';\n    this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n  }\n  render() {\n    const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n    const orig = `${this.state.originX}px ${this.state.originY}px`;\n    const overlay = {\n      top: `${this.originY - this.state.originY * this.state.zoom}px`,\n      left: `${this.originX - this.state.originX * this.state.zoom}px`,\n      width: `${this.imageWidth * this.state.zoom}px`,\n      height: `${this.imageHeight * this.state.zoom}px`\n    };\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"cropper\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"bounding-box\",\n      ref: this.boundingBox\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      src: this.props.source,\n      className: \"preview\",\n      alt: \"\",\n      style: {\n        transform: t3d,\n        transformOrigin: orig\n      },\n      ref: this.preview,\n      onLoad: this.initScaling\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"cutout circle\",\n      ref: this.cutout\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"overlay\",\n      style: overlay,\n      ref: this.overlay\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"zoom-wrapper\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"range\",\n      className: \"zoomer\",\n      step: \"0.001\",\n      min: this.state.minZoom,\n      max: this.state.maxZoom,\n      value: this.state.zoom,\n      onChange: this.onZoom\n    })));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/error-panel.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/error-panel.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ErrorPanel; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu-cancel.jsx */ \"./src/widgets/menu-cancel.jsx\");\n\n\nclass ErrorPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      show: false\n    };\n    this.hide = this.hide.bind(this);\n  }\n  componentDidUpdate(prevProps) {\n    if (prevProps.level !== this.props.level) {\n      this.setState({\n        show: !!this.props.level\n      });\n    }\n  }\n  hide() {\n    this.setState({\n      show: false\n    });\n    if (this.props.onClearError) {\n      this.props.onClearError();\n    }\n  }\n  render() {\n    const icons = {\n      err: 'error',\n      warn: 'warning',\n      info: 'info'\n    };\n    const level = icons[this.props.level] || '';\n    const className = 'info-box ' + level;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"icon\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, 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\", {\n      href: \"#\",\n      style: {\n        whiteSpace: 'nowrap'\n      },\n      onClick: e => {\n        e.preventDefault();\n        this.props.action();\n      }\n    }, this.props.actionText)) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"cancel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      onCancel: this.hide\n    })));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/file-progress.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/file-progress.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ FileProgress; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass FileProgress extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"uploader\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      style: {\n        width: this.props.progress * 100 + \"%\"\n      }\n    })), this.props.progress < 0.999 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onCancel();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"close\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"action_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"cancel\"\n      }]\n    })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"upload_finishing\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"finishing...\"\n      }]\n    }));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/forward-dialog.jsx\":\n/*!****************************************!*\\\n  !*** ./src/widgets/forward-dialog.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ForwardDialog; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-list.jsx */ \"./src/widgets/contact-list.jsx\");\n/* harmony import */ var _search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./search-contacts.jsx */ \"./src/widgets/search-contacts.jsx\");\n\n\n\n\n\nclass ForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      query: null\n    };\n    this.handleEscapeKey = this.handleEscapeKey.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n    this.handleSearchContacts = this.handleSearchContacts.bind(this);\n    this.handleContactSelected = this.handleContactSelected.bind(this);\n  }\n  componentDidMount() {\n    this.props.onInitFind();\n  }\n  handleEscapeKey(e) {\n    if (e.keyCode === 27) {\n      this.props.hide(false);\n    }\n  }\n  handleClose(e) {\n    e.preventDefault();\n    this.props.hide(false);\n  }\n  handleSearchContacts(query) {\n    this.setState({\n      query: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query\n    });\n    this.props.onSearchContacts(query);\n  }\n  handleContactSelected(uid) {\n    this.props.onTopicSelected(uid);\n    this.props.hide(true);\n  }\n  render() {\n    let contacts = this.state.query != null ? this.props.searchResults : this.props.contacts;\n    contacts = contacts.filter(c => {\n      return c.name != this.props.topicSelected && c.acs.isJoiner() && c.acs.isWriter();\n    });\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"alert-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"forward-dialog\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"title with-control\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"forward_to\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Forward to\"\n      }],\n      desription: \"Title of the contact selector dialog when forwarding a message\"\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleClose\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"close\")))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"forward_to_search_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Search contacts\"\n      }]\n    }, search_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      placeholder: search_placeholder,\n      onSearchContacts: this.handleSearchContacts\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"search_no_results\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Search returned no results\"\n      }]\n    }, not_found_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      contacts: contacts,\n      myUserId: this.props.myUserId,\n      emptyListMessage: not_found_placeholder,\n      showOnline: false,\n      showUnread: false,\n      showContextMenu: false,\n      onTopicSelected: this.handleContactSelected\n    }))));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/host-selector.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/host-selector.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ HostSelector; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\nclass HostSelector extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      hostName: props.serverAddress,\n      changed: false\n    };\n    this.handleHostNameChange = this.handleHostNameChange.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  handleHostNameChange(e) {\n    this.setState({\n      hostName: e.target.value,\n      changed: true\n    });\n  }\n  handleEditingFinished() {\n    if (this.state.changed) {\n      this.setState({\n        changed: false\n      });\n      this.props.onServerAddressChange(this.state.hostName.trim());\n    }\n  }\n  handleKeyDown(e) {\n    if (e.key == 'Enter') {\n      this.handleEditingFinished();\n    }\n  }\n  render() {\n    const hostOptions = [];\n    for (let key in _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS) {\n      let item = _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS[key];\n      hostOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n        key: item,\n        value: item\n      }));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"search\",\n      id: \"host-name\",\n      placeholder: this.props.hostName,\n      list: \"known-hosts\",\n      className: \"quoted\",\n      value: this.state.hostName,\n      onChange: this.handleHostNameChange,\n      onBlur: this.handleEditingFinished,\n      onKeyDown: this.handleKeyDown,\n      required: true\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"datalist\", {\n      id: \"known-hosts\"\n    }, hostOptions));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/in-place-edit.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/in-place-edit.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ InPlaceEdit; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./visible-password.jsx */ \"./src/widgets/visible-password.jsx\");\n\n\nclass InPlaceEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.state = {\n      active: props.active,\n      initialValue: props.value || '',\n      value: props.value || '',\n      valid: true\n    };\n    this.handeTextChange = this.handeTextChange.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n    this.handleStartEditing = this.handleStartEditing.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n    this.handlePasswordFinished = this.handlePasswordFinished.bind(this);\n  }\n  componentDidUpdate(prevProps, prevState) {\n    const newValue = this.props.value || '';\n    if (prevState.initialValue != newValue && !prevState.active) {\n      this.setState({\n        initialValue: newValue,\n        value: newValue\n      });\n    }\n  }\n  handeTextChange(e) {\n    this.setState({\n      value: e.target.value || ''\n    });\n    if (this.props.validator) {\n      Promise.resolve(this.props.validator(e.target.value)).then(valid => {\n        this.setState({\n          valid: valid\n        });\n      }).catch(err => {\n        if (err) {\n          this.setState({\n            valid: false\n          });\n        }\n      });\n    }\n  }\n  handleKeyDown(e) {\n    if (e.keyCode === 27) {\n      this.setState({\n        value: this.props.value,\n        active: false\n      });\n    } else if (e.keyCode === 13) {\n      this.handleEditingFinished(e);\n    }\n  }\n  handleStartEditing() {\n    if (!this.props.readOnly) {\n      this.setState({\n        active: true\n      }, _ => {\n        if (this.selfRef.current) {\n          this.selfRef.current.focus();\n        }\n      });\n    }\n  }\n  handleEditingFinished(event) {\n    const value = this.state.value.trim();\n    if (this.props.required && (!event.target.checkValidity() || !value)) {\n      this.setState({\n        value: this.props.value,\n        active: false\n      });\n      return;\n    }\n    this.setState({\n      active: false\n    });\n    if ((value || this.props.value) && value !== this.props.value && this.state.valid) {\n      this.props.onFinished(value);\n    }\n  }\n  handlePasswordFinished(value) {\n    this.setState({\n      active: false\n    });\n    if (value && value !== this.props.value) {\n      this.props.onFinished(value);\n    }\n  }\n  render() {\n    if (!this.state.active) {\n      let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;\n      let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');\n      if (!spanText) {\n        spanText = this.props.placeholder;\n        spanClass += ' placeholder';\n      }\n      if (!this.props.multiline || this.props.multiline == 1) {\n        spanClass += ' short';\n      }\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: spanClass,\n        onClick: this.handleStartEditing\n      }, this.props.iconLeft && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons light-gray\"\n      }, this.props.iconLeft), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, spanText), this.props.iconRight && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons light-gray\"\n      }, this.props.iconRight));\n    }\n    let element;\n    const attr = {};\n    if (this.props.type == 'password') {\n      element = _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n      attr.onFinished = this.handlePasswordFinished;\n    } else {\n      if (this.props.multiline > 1) {\n        element = 'textarea';\n        attr.rows = this.props.multiline;\n        attr.className = 'in-place-edit';\n      } else {\n        element = 'input';\n        attr.type = this.props.type || 'text';\n        attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left' : this.props.iconRight ? ' with-icon-right' : '');\n        if (this.props.maxLength) {\n          attr.maxLength = this.props.maxLength;\n        }\n      }\n      attr.value = this.state.value;\n      attr.className += this.state.valid ? '' : ' invalid';\n      attr.ref = this.selfRef;\n      attr.onChange = this.handeTextChange;\n      attr.onKeyDown = this.handleKeyDown;\n      attr.onBlur = this.handleEditingFinished;\n    }\n    attr.placeholder = this.props.placeholder;\n    attr.required = this.props.required ? 'required' : '';\n    attr.autoComplete = this.props.autoComplete;\n    attr.autoFocus = true;\n    if (this.props.spellCheck !== undefined) {\n      attr.spellCheck = this.props.spellCheck ? 'true' : 'false';\n    }\n    if (this.props.iconLeft || this.props.iconRight) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.props.iconLeft && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons light-gray\"\n      }, this.props.iconLeft), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null), this.props.iconRight && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons light-gray\"\n      }, this.props.iconRight));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/inline-video.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/inline-video.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ InlineVideo; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\nclass InlineVideo extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.videoRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.handleClick = this.handleClick.bind(this);\n  }\n  handleClick(e) {\n    if (this.props.onClick) {\n      this.props.onClick(e);\n    }\n  }\n  render() {\n    const duration = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__.secondsToTime)(this.props['data-duration'] / 1000);\n    const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"play-control\"\n    }, this.props.onClick ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons white x-big\"\n    }, \"play_arrow\") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      src: \"img/broken_video.png\",\n      style: {\n        filter: 'invert(100%)'\n      },\n      width: \"36\",\n      height: \"36\"\n    })), duration ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"duration\"\n    }, duration) : null);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/lazy-image.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/lazy-image.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LazyImage; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass LazyImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\n      style: Object.assign({\n        padding: '4px'\n      }, this.props.style),\n      className: this.props.className,\n      alt: this.props.alt,\n      onClick: this.props.onClick\n    };\n  }\n  componentDidMount() {\n    this.props.whenDone.promise.then(data => this.setState({\n      src: data.src,\n      style: {\n        ...this.state.style,\n        padding: 0\n      }\n    })).catch(_ => this.setState({\n      src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'\n    }));\n  }\n  componentWillUnmount() {\n    this.props.whenDone.cancel();\n  }\n  componentDidUpdate(prevProps) {\n    if (prevProps.whenDone != this.props.whenDone) {\n      this.setState({\n        src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\n        style: {\n          ...this.state.style,\n          padding: '4px'\n        }\n      });\n      this.props.whenDone.promise.then(data => this.setState({\n        src: data.src,\n        style: {\n          ...this.state.style,\n          padding: 0\n        }\n      })).catch(_ => this.setState({\n        src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'\n      }));\n    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.state);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/letter-tile.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/letter-tile.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LetterTile; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\nclass LetterTile extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    let avatar;\n    if (this.props.avatar === true) {\n      if (tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isSelfTopicName(this.props.topic)) {\n        avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n          className: \"avatar self\",\n          alt: \"avatar\",\n          src: _config_js__WEBPACK_IMPORTED_MODULE_4__.SELF_AVATAR_URI\n        });\n      } else {\n        const isGroup = tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isGroupTopicName(this.props.topic);\n        const iconColor = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.idToColorClass)(this.props.topic, isGroup);\n        if (this.props.topic && this.props.title && this.props.title.trim()) {\n          const letter = this.props.title.trim().charAt(0);\n          const className = 'lettertile ' + iconColor + (this.props.deleted ? ' disabled' : '');\n          avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n            className: className\n          }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, letter));\n        } else {\n          const className = 'material-icons ' + iconColor + (this.props.deleted ? ' disabled' : '');\n          avatar = isGroup ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n            className: className\n          }, \"group\") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n            className: className\n          }, \"person\");\n        }\n      }\n    } else if (this.props.avatar) {\n      const url = this.props.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.props.avatar, 'image'));\n      const className = 'avatar' + (this.props.deleted ? ' deleted' : '');\n      avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n        className: className,\n        alt: \"avatar\",\n        src: url,\n        onError: e => {\n          e.target.onerror = null;\n          e.target.src = \"img/broken_image.png\";\n        }\n      });\n    } else {\n      avatar = null;\n    }\n    return avatar;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/load-spinner.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/load-spinner.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LoadSpinner; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass LoadSpinner extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const className = 'load-spinner-box' + (this.props.large ? ' large' : '') + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n    return this.props.show ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: className\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"loader-spinner\"\n    })) : null;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/menu-cancel.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/menu-cancel.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ MenuCancel; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass MenuCancel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onCancel();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"close\"));\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/widgets/menu-contacts.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/menu-contacts.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ MenuContacts; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass MenuContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNewTopic();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"chat\")), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onSettings();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"settings\")));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/menu-start.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/menu-start.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ MenuStart; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass MenuStart extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onSignUp();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"person_add\")), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onSettings();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"settings\")));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/new-topic-by-id.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/new-topic-by-id.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcodejs */ \"qrcodejs\");\n/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(qrcodejs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ \"./src/config.js\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_2__.defineMessages)({\n  invalid_id: {\n    id: \"error_invalid_id\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Invalid ID\"\n    }]\n  }\n});\nclass NewTopicById extends (react__WEBPACK_IMPORTED_MODULE_1___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.qrCodeRef = react__WEBPACK_IMPORTED_MODULE_1___default().createRef();\n    this.state = {\n      groupId: ''\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n  componentDidMount() {\n    new (qrcodejs__WEBPACK_IMPORTED_MODULE_0___default())(this.qrCodeRef.current, {\n      text: this.props.myURI,\n      width: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE,\n      height: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE\n    });\n  }\n  handleChange(e) {\n    this.setState({\n      groupId: e.target.value\n    });\n  }\n  handleKeyPress(e) {\n    if (e.key === 'Enter') {\n      this.handleSubmit(e);\n    }\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.groupId) {\n      const name = this.state.groupId.trim();\n      const prefix = name.substring(0, 3);\n      if (name.length > 3 && ['usr', 'grp', 'chn'].includes(prefix)) {\n        this.props.onSubmit(name);\n      } else {\n        this.props.onError(this.props.intl.formatMessage(messages.invalid_id), 'err');\n      }\n    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"panel-form\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {\n      id: \"group_user_id_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Group or User ID\"\n      }]\n    }, prompt => react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"input\", {\n      type: \"text\",\n      placeholder: prompt,\n      value: this.state.groupId,\n      onChange: this.handleChange,\n      onKeyDown: this.handleKeyPress,\n      required: true,\n      autoFocus: true\n    }))), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {\n      id: \"button_subscribe\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Subscribe\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"br\", null), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {\n      id: \"label_scan_id\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Scan my ID:\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"qr-code\",\n      ref: this.qrCodeRef\n    })));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_2__.injectIntl)(NewTopicById));\n\n/***/ }),\n\n/***/ \"./src/widgets/new-topic-group.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/new-topic-group.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ NewTopicGroup; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./avatar-crop.jsx */ \"./src/widgets/avatar-crop.jsx\");\n/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-upload.jsx */ \"./src/widgets/avatar-upload.jsx\");\n/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tag-manager.jsx */ \"./src/widgets/tag-manager.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\n\n\n\nclass NewTopicGroup extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.fullName = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.state = {\n      fullName: '',\n      private: '',\n      description: '',\n      imageUrl: null,\n      tags: [],\n      isChannel: false,\n      newAvatar: null,\n      newAvatarMime: null\n    };\n    this.handleFieldEdit = this.handleFieldEdit.bind(this);\n    this.handleImageChanged = this.handleImageChanged.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.handleTagsChanged = this.handleTagsChanged.bind(this);\n    this.handleChannelToggle = this.handleChannelToggle.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n  componentDidMount() {}\n  handleFieldEdit(name, e) {\n    this.setState({\n      [name]: e.target.value || ''\n    });\n  }\n  handleImageChanged(mime, img) {\n    this.setState({\n      newAvatar: img,\n      newAvatarMime: mime\n    });\n  }\n  handleAvatarCropped(mime, blob, width, height) {\n    const url = blob ? URL.createObjectURL(blob) : null;\n    this.setState({\n      imageUrl: url,\n      newAvatar: null,\n      newAvatarMime: null\n    });\n    if (blob) {\n      this.uploadAvatar(mime, blob, width, height);\n    }\n  }\n  handleAvatarCropCancel() {\n    this.setState({\n      newAvatar: null,\n      newAvatarMime: null\n    });\n  }\n  uploadAvatar(mime, blob, width, height) {\n    const readyToUpload = image => {\n      let {\n        mime,\n        blob\n      } = image;\n      if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_AVATAR_BYTES) {\n        const uploader = this.props.tinode.getLargeFileHelper();\n        uploader.upload(blob).then(url => this.setState({\n          imageUrl: url\n        })).catch(err => this.props.onError(err.message, 'err'));\n      } else {\n        (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.blobToBase64)(blob).then(b64 => this.setState({\n          imageUrl: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.makeImageUrl)({\n            data: b64.bits,\n            type: mime\n          })\n        }));\n      }\n    };\n    if (width > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || width != height) {\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));\n    } else {\n      readyToUpload({\n        mime: mime,\n        blob: blob,\n        width: width,\n        height: height\n      });\n    }\n  }\n  handleTagsChanged(tags) {\n    this.setState({\n      tags: tags\n    });\n  }\n  handleChannelToggle() {\n    this.setState({\n      isChannel: !this.state.isChannel\n    });\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    const fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.fullName.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);\n    const comment = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.private.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);\n    const description = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.description.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TOPIC_DESCRIPTION_LENGTH);\n    if (fn) {\n      this.props.onSubmit(fn, description, this.state.imageUrl, comment, this.state.tags, this.state.isChannel);\n    }\n  }\n  render() {\n    if (this.state.newAvatar) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        avatar: this.state.newAvatar,\n        mime: this.state.newAvatarMime,\n        onSubmit: this.handleAvatarCropped,\n        onCancel: this.handleAvatarCropCancel,\n        onError: this.props.onError\n      });\n    }\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      className: \"panel-form\",\n      onSubmit: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"center\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      avatar: this.state.imageUrl,\n      onError: this.props.onError,\n      onImageUpdated: this.handleImageChanged\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\",\n      htmlFor: \"new-topic-fn\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_topic_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Name\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"topic_name_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Freeform name of the group\"\n      }]\n    }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"new-topic-fn\",\n      placeholder: placeholder,\n      ref: this.fullName,\n      value: this.state.fullName,\n      onChange: this.handleFieldEdit.bind(this, 'fullName'),\n      autoFocus: true,\n      required: true,\n      tabIndex: 0\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\",\n      htmlFor: \"new-topic-priv\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_private\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Private comment\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"private_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Visible to you only\"\n      }]\n    }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"new-topic-priv\",\n      placeholder: placeholder,\n      value: this.state.private,\n      onChange: this.handleFieldEdit.bind(this, 'private'),\n      tabIndex: 1\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\",\n      htmlFor: \"new-topic-desc\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"description_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description (optional)\"\n      }]\n    }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"new-topic-desc\",\n      placeholder: placeholder,\n      value: this.state.description,\n      onChange: this.handleFieldEdit.bind(this, 'description'),\n      tabIndex: 2\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      checked: this.state.isChannel,\n      tabIndex: 3,\n      onChange: this.handleChannelToggle\n    }), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      onClick: this.handleChannelToggle\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"channel_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"This is a channel\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_tag_manager\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Tags (search & discovery)\"\n      }]\n    }, title => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      tinode: this.props.tinode,\n      tags: this.state.tags,\n      activated: true,\n      onTagsChanged: this.handleTagsChanged,\n      tabIndex: 4,\n      title: title\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: submitClasses\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_create\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Create\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/search-contacts.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/search-contacts.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ SearchContacts; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass SearchContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      edited: false,\n      search: this.props.initialQuery || ''\n    };\n    this.handleSearchChange = this.handleSearchChange.bind(this);\n    this.handleSearch = this.handleSearch.bind(this);\n    this.handleClear = this.handleClear.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  componentWillUnmount() {\n    if (this.state.edited) {\n      this.setState({\n        search: '',\n        edited: false\n      });\n      this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);\n    }\n  }\n  handleSearchChange(e) {\n    this.setState({\n      search: e.target.value\n    });\n  }\n  handleSearch(e) {\n    e.preventDefault();\n    const query = this.state.search.trim();\n    this.setState({\n      edited: query.length > 0\n    });\n    this.props.onSearchContacts(query.length > 0 ? query : tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);\n  }\n  handleClear(e) {\n    e.preventDefault();\n    if (this.state.edited) {\n      this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);\n    }\n    this.setState({\n      search: '',\n      edited: false\n    });\n  }\n  handleKeyDown(e) {\n    if (e.key === 'Enter') {\n      this.handleSearch(e);\n    } else if (e.key === 'Escape') {\n      e.stopPropagation();\n      this.handleClear(e);\n    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons search\"\n    }, \"search\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      className: \"search\",\n      type: \"text\",\n      placeholder: this.props.placeholder,\n      value: this.state.search,\n      onChange: this.handleSearchChange,\n      onKeyDown: this.handleKeyDown,\n      required: true,\n      autoFocus: true\n    }), this.state.search ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleClear\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"highlight_off\")) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"\\xA0\"))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/side-navbar.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/side-navbar.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ SideNavbar; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _button_back_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./button-back.jsx */ \"./src/widgets/button-back.jsx\");\n/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ \"./src/widgets/contact-badges.jsx\");\n/* harmony import */ var _menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./menu-contacts.jsx */ \"./src/widgets/menu-contacts.jsx\");\n/* harmony import */ var _menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./menu-start.jsx */ \"./src/widgets/menu-start.jsx\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\nclass SideNavbar extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const icon_badges = [];\n    if (this.props.trustedBadges) {\n      this.props.trustedBadges.forEach(b => {\n        icon_badges.push({\n          icon: b,\n          color: 'badge-inv'\n        });\n      });\n    }\n    let avatar = null;\n    if (this.props.tinode) {\n      avatar = this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_6__.sanitizeUrlForMime)(this.props.avatar, 'image'));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"side-caption-panel\",\n      className: \"caption-panel\"\n    }, this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_button_back_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      onBack: this.props.onCancel\n    }) : null, avatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"self-avatar\",\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: avatar,\n      topic: this.props.myUserId,\n      title: this.props.title\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"sidepanel-title\",\n      className: \"panel-title\"\n    }, this.props.title, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      badges: icon_badges\n    })), this.props.state === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      onSignUp: this.props.onSignUp,\n      onSettings: this.props.onSettings\n    }) : this.props.state === 'contacts' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      onNewTopic: this.props.onNewTopic,\n      onSettings: this.props.onSettings\n    }) : null);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/tag-manager.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/tag-manager.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TagManager; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ \"./src/widgets/chip-input.jsx\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\nclass TagManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      tags: this.props.tags || [],\n      alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(this.props.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || '',\n      tagInput: '',\n      activated: this.props.activated\n    };\n    this.handleTagInput = this.handleTagInput.bind(this);\n    this.handleAddTag = this.handleAddTag.bind(this);\n    this.handleRemoveTag = this.handleRemoveTag.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  static getDerivedStateFromProps(nextProps, prevState) {\n    const tags = nextProps.tags || [];\n    if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_5__.arrayEqual)(tags, prevState.tags) && !prevState.activated) {\n      return {\n        tags: tags || [],\n        alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || ''\n      };\n    }\n    return null;\n  }\n  handleTagInput(text) {\n    this.setState({\n      tagInput: text\n    });\n    if (text.length > 0) {\n      const last = text[text.length - 1];\n      if (text[0] == '\"') {\n        if (text.length > 1 && last == '\"') {\n          this.handleAddTag(text.substring(1, text.length - 1));\n        }\n      } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n        this.handleAddTag(text.substring(0, text.length - 1).trim());\n      }\n    }\n  }\n  handleAddTag(tag) {\n    const maxTagCount = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_COUNT, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_COUNT);\n    if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n      const tags = this.state.tags.slice(0);\n      tags.push(tag);\n      this.setState({\n        tags: tags,\n        tagInput: ''\n      });\n      if (this.props.onTagsChanged) {\n        this.props.onTagsChanged(tags);\n      }\n      return tags;\n    }\n    return this.state.tags;\n  }\n  handleRemoveTag(tag, index) {\n    const tags = this.state.tags.slice(0);\n    tags.splice(index, 1);\n    this.setState({\n      tags: tags\n    });\n    if (this.props.onTagsChanged) {\n      this.props.onTagsChanged(tags);\n    }\n  }\n  handleSubmit() {\n    let tags = this.handleAddTag(this.state.tagInput.trim());\n    tags = tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.setUniqueTag(tags, this.state.alias);\n    this.props.onSubmit(tags);\n    this.setState({\n      activated: false,\n      tags: this.props.tags || []\n    });\n  }\n  handleCancel() {\n    this.setState({\n      activated: false,\n      tagInput: '',\n      tags: this.props.tags || []\n    });\n    if (this.props.onCancel) {\n      this.props.onCancel();\n    }\n  }\n  render() {\n    const minTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MIN_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MIN_TAG_LENGTH);\n    const maxTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_LENGTH);\n    let tags = [];\n    if (this.state.activated) {\n      this.state.tags.forEach(tag => {\n        if (tag != this.state.alias) {\n          tags.push({\n            user: tag,\n            invalid: tag.length < minTagLength || tag.length > maxTagLength\n          });\n        }\n      });\n    } else {\n      this.state.tags.forEach(tag => {\n        if (tag != this.state.alias) {\n          tags.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n            className: \"badge\",\n            key: tags.length\n          }, tag));\n        }\n      });\n      if (tags.length == 0) {\n        tags = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"tags_not_found\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"No tags defined. Add some.\"\n          }]\n        }));\n      }\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, this.props.title)), this.state.activated ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tags_editor_no_tags\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Add some tags\"\n      }]\n    }, add_tags_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      tinode: this.props.tinode,\n      chips: tags,\n      avatarDisabled: true,\n      prompt: add_tags_prompt,\n      tabIndex: this.props.tabIndex,\n      onEnter: this.handleAddTag,\n      onFocusLost: this.handleAddTag,\n      onCancel: this.handleCancel,\n      onChipRemoved: this.handleRemoveTag,\n      filterFunc: this.handleTagInput\n    })), this.props.onSubmit || this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"tag-manager-buttons\",\n      className: \"dialog-buttons panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"outline\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))) : null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.setState({\n          activated: true\n        });\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"edit\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_manage_tags\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Manage\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tags)));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/the-card-mini.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/the-card-mini.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  unknown_name: {\n    id: \"unknown_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unknown\"\n    }]\n  }\n});\nclass TheCardMini extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleDownload = this.handleDownload.bind(this);\n    this.handleMessage = this.handleMessage.bind(this);\n  }\n  handleDownload(e) {\n    e.preventDefault();\n    try {\n      const vcard = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.exportVCard(this.props.content);\n      const blob = new Blob([vcard], {\n        type: 'text/vcard'\n      });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.style.display = 'none';\n      a.href = url;\n      a.download = (this.props.content.fn || 'contact') + '.vcf';\n      document.body.appendChild(a);\n      a.click();\n      window.URL.revokeObjectURL(url);\n      document.body.removeChild(a);\n    } catch (err) {\n      console.error(\"Failed to download vcard\", err);\n      if (this.props.onError) {\n        this.props.onError(\"Failed to download vcard\", 'err');\n      }\n    }\n  }\n  handleMessage(e) {}\n  render() {\n    const card = this.props.content;\n    if (!card) {\n      return null;\n    }\n    const uid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFirstTinodeID(card);\n    const contacts = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getEmails(card).concat(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhones(card));\n    const org = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getOrg(card);\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"contact-card\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"contact-body\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      authorizeURL: this.props.authorizeURL,\n      topic: uid || 'usr123XXX',\n      avatar: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhotoUrl(card) || true,\n      title: card.fn\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"name-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"name\"\n    }, card.fn || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, messages.unknown_name)), org && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"org\"\n    }, org))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"contact-actions\"\n    }, uid ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      className: \"flat-button\",\n      \"data-val\": uid,\n      onClick: this.props.onChatClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"chat_now\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Chat\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"divider\"\n    })) : contacts.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      className: \"flat-button\",\n      \"data-val\": contacts.join(','),\n      onClick: this.props.onFindClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"find_user\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Find\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"divider\"\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      className: \"flat-button\",\n      onClick: this.handleDownload\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"save_action\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Save\"\n      }]\n    }))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TheCardMini));\n\n/***/ }),\n\n/***/ \"./src/widgets/topic-desc-edit.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/topic-desc-edit.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-crop.jsx */ \"./src/widgets/avatar-crop.jsx\");\n/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./avatar-upload.jsx */ \"./src/widgets/avatar-upload.jsx\");\n/* harmony import */ var _in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./in-place-edit.jsx */ \"./src/widgets/in-place-edit.jsx\");\n/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tag-manager.jsx */ \"./src/widgets/tag-manager.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  alias_invalid: {\n    id: \"alias_invalid\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"(invalid)\"\n    }]\n  },\n  alias_already_taken: {\n    id: \"alias_already_taken\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"(already taken)\"\n    }]\n  },\n  self_topic_name: {\n    id: \"self_topic_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Saved messages\"\n    }]\n  },\n  self_topic_comment: {\n    id: \"self_topic_comment\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Notes, messages, links, files saved for posterity\"\n    }]\n  }\n});\nconst ALIAS_AVAILABILITY_CHECK_DELAY = 1000;\nclass TopicDescEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    const acs = topic.getAccessMode();\n    const isSelf = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.topic);\n    this.state = {\n      isMe: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isMeTopicName(this.props.topic),\n      isSelf: isSelf,\n      owner: acs && acs.isOwner(),\n      fullName: topic.public ? topic.public.fn : isSelf ? this.props.intl.formatMessage(messages.self_topic_name) : null,\n      private: topic.private ? topic.private.comment : null,\n      description: topic.public ? topic.public.note : isSelf ? this.props.intl.formatMessage(messages.self_topic_comment) : null,\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)(topic.public ? topic.public.photo : null),\n      tags: topic.tags() || [],\n      newAvatar: null,\n      newAvatarMime: null,\n      aliasError: ''\n    };\n    this.previousOnTags = null;\n    this.aliasCheckTimer = null;\n    this.aliasCheckPromise = null;\n    this.tnNewTags = this.tnNewTags.bind(this);\n    this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);\n    this.handleImageUpdated = this.handleImageUpdated.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.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);\n    this.handleAliasUpdate = this.handleAliasUpdate.bind(this);\n    this.handleDescriptionUpdate = this.handleDescriptionUpdate.bind(this);\n    this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n    this.validateAlias = this.validateAlias.bind(this);\n    this.cancelValidator = this.cancelValidator.bind(this);\n  }\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    this.previousOnTags = topic.onTagsUpdated;\n    topic.onTagsUpdated = this.tnNewTags;\n  }\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onTagsUpdated = this.previousOnTags;\n    this.cancelValidator();\n  }\n  tnNewTags(tags) {\n    this.setState({\n      tags: tags\n    });\n  }\n  handleFullNameUpdate(fn) {\n    fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__.truncateString)(fn.trim(), _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);\n    if (fn && this.state.fullName !== fn) {\n      this.setState({\n        fullName: fn\n      });\n      this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(fn, null));\n    }\n  }\n  handlePrivateUpdate(comment) {\n    comment = comment.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);\n    if (this.state.private !== comment) {\n      this.setState({\n        private: comment\n      });\n      this.props.onUpdateTopicDesc(this.props.topic, null, comment || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR);\n    }\n  }\n  handleDescriptionUpdate(desc) {\n    desc = desc.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TOPIC_DESCRIPTION_LENGTH);\n    if (desc) {\n      this.setState({\n        description: desc\n      });\n      this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, null, null, desc));\n    }\n  }\n  handleImageUpdated(mime, img) {\n    this.setState({\n      newAvatar: img,\n      newAvatarMime: mime\n    });\n    if (!img) {\n      this.setState({\n        avatar: null\n      });\n      this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR));\n    }\n  }\n  handleAvatarCropped(mime, blob, width, height) {\n    const url = blob ? URL.createObjectURL(blob) : null;\n    this.setState({\n      avatar: url,\n      newAvatar: null,\n      newAvatarMime: null\n    });\n    if (blob) {\n      this.uploadAvatar(mime, blob, width, height);\n    }\n  }\n  uploadAvatar(mime, blob, width, height) {\n    const readyToUpload = image => {\n      let {\n        mime,\n        blob\n      } = image;\n      if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_AVATAR_BYTES) {\n        const uploader = this.props.tinode.getLargeFileHelper();\n        uploader.upload(blob).then(url => this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, url))).catch(err => this.props.onError(err.message, 'err'));\n      } else {\n        (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.blobToBase64)(blob).then(b64 => {\n          const du = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)({\n            data: b64.bits,\n            type: mime\n          });\n          this.setState({\n            source: du\n          });\n          this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, du));\n        });\n      }\n    };\n    if (width > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || width != height) {\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));\n    } else {\n      readyToUpload({\n        mime: mime,\n        blob: blob,\n        width: width,\n        height: height\n      });\n    }\n  }\n  handleAvatarCropCancel() {\n    this.setState({\n      newAvatar: null,\n      newAvatarMime: null\n    });\n  }\n  handleAliasUpdate(alias) {\n    alias = (alias || '').trim();\n    const tags = alias ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.setUniqueTag(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS + alias.toLowerCase()) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.clearTagPrefix(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS);\n    this.handleTagsUpdated(tags);\n  }\n  validateAlias(alias) {\n    this.cancelValidator();\n    alias = alias.trim();\n    if (!alias) {\n      this.setState({\n        aliasError: ''\n      });\n      return true;\n    }\n    const valid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isValidTagValue(alias);\n    if (!valid) {\n      this.setState({\n        aliasError: this.props.intl.formatMessage(messages.alias_invalid)\n      });\n      return false;\n    }\n    this.setState({\n      aliasError: ''\n    });\n    const fnd = this.props.tinode.getFndTopic();\n    if (!fnd) {\n      this.setState({\n        aliasError: ''\n      });\n      return true;\n    }\n    this.aliasCheckPromise = {};\n    const validationPromise = new Promise((resolve, reject) => {\n      this.aliasCheckPromise.resolve = resolve;\n      this.aliasCheckPromise.reject = reject;\n    });\n    this.aliasCheckTimer = setTimeout(_ => {\n      this.aliasCheckTimer = null;\n      fnd.checkTagUniqueness(`${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${alias}`, this.props.topic).then(ok => {\n        this.aliasCheckPromise.resolve(ok);\n        this.setState({\n          aliasError: ok ? '' : this.props.intl.formatMessage(messages.alias_already_taken)\n        });\n      }).catch(err => {\n        this.aliasCheckPromise.reject(err);\n        this.setState({\n          aliasError: err.message\n        });\n      });\n    }, ALIAS_AVAILABILITY_CHECK_DELAY);\n    return validationPromise;\n  }\n  cancelValidator() {\n    if (this.aliasCheckTimer) {\n      clearTimeout(this.aliasCheckTimer);\n      this.aliasCheckTimer = null;\n      this.aliasCheckPromise.reject(null);\n    }\n  }\n  handleTagsUpdated(tags) {\n    if ((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {\n      return;\n    }\n    this.props.onUpdateTags(tags);\n  }\n  render() {\n    if (this.state.newAvatar) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n        avatar: this.state.newAvatar,\n        mime: this.state.newAvatarMime,\n        onSubmit: this.handleAvatarCropped,\n        onCancel: this.handleAvatarCropCancel,\n        onError: this.props.onError\n      });\n    }\n    const editable = this.state.isMe || this.state.owner && !this.state.isSelf;\n    let alias = this.state.tags && this.state.tags.find(t => t.startsWith('alias:'));\n    if (alias) {\n      alias = alias.substring(6);\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"center\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      tinode: this.props.tinode,\n      avatar: this.state.avatar,\n      readOnly: !editable,\n      uid: this.props.topic,\n      title: this.state.fullName,\n      onImageUpdated: this.handleImageUpdated,\n      onError: this.props.onError\n    })), this.state.isMe ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_your_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Your name\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"full_name_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Full name, e.g. John Doe\"\n      }]\n    }, full_name_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      placeholder: full_name_placeholder,\n      value: this.state.fullName,\n      required: true,\n      onFinished: this.handleFullNameUpdate\n    })))) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_topic_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Name\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"topic_name_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Freeform name of the group\"\n      }]\n    }, group_name_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      placeholder: group_name_placeholder,\n      readOnly: !editable,\n      value: this.state.fullName,\n      required: true,\n      maxLength: 32,\n      onFinished: this.handleFullNameUpdate\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_private\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Private comment\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"private_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Visible to you only\"\n      }]\n    }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      placeholder: private_placeholder,\n      value: this.state.private,\n      onFinished: this.handlePrivateUpdate\n    }))))), editable || alias ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: 'small ' + (this.state.aliasError ? 'invalid' : '')\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_alias_edit\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Alias\"\n      }]\n    }), \" \", this.state.aliasError)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"alias_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Alias (optional)\"\n      }]\n    }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      placeholder: private_placeholder,\n      readOnly: !editable,\n      value: alias,\n      validator: this.validateAlias,\n      iconLeft: \"alternate_email\",\n      maxLength: 24,\n      spellCheck: false,\n      onFinished: this.handleAliasUpdate\n    })))) : null, editable || this.state.description ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"description_editing_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description (optional)\"\n      }]\n    }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      placeholder: private_placeholder,\n      readOnly: !editable,\n      value: this.state.description,\n      multiline: 2,\n      onFinished: this.handleDescriptionUpdate\n    })))) : null), editable && !this.state.isMe ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_tag_manager\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Tags (search & discovery)\"\n      }]\n    }, title_tag_manager => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      tinode: this.props.tinode,\n      title: title_tag_manager,\n      activated: false,\n      tags: this.state.tags,\n      onSubmit: this.handleTagsUpdated\n    }))) : null);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TopicDescEdit));\n\n/***/ }),\n\n/***/ \"./src/widgets/unread-badge.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/unread-badge.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ UnreadBadge; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass UnreadBadge extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    return this.props.count > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"unread\"\n    }, this.props.count > 9 ? \"9+\" : this.props.count) : null;\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/uploading-image.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/uploading-image.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ UploadingImage; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file-progress.jsx */ \"./src/widgets/file-progress.jsx\");\n\n\nclass UploadingImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"inline-image\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"rounded-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n      progress: this.props.progress,\n      onCancel: this.props.onCancelUpload\n    })));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/visible-password.jsx\":\n/*!******************************************!*\\\n  !*** ./src/widgets/visible-password.jsx ***!\n  \\******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ VisiblePassword; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.inputRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.state = {\n      value: this.props.value || '',\n      visible: false\n    };\n    this.handleVisibility = this.handleVisibility.bind(this);\n    this.handeTextChange = this.handeTextChange.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n    this.handleEditingFinished = this.handleEditingFinished.bind(this);\n  }\n  componentDidMount() {\n    if (this.props.autoFocus) {\n      this.inputRef.current.focus();\n    }\n  }\n  handeTextChange(e) {\n    this.setState({\n      value: e.target.value\n    });\n    if (this.props.onChange) {\n      this.props.onChange(e);\n    }\n  }\n  handleVisibility(e) {\n    e.preventDefault();\n    this.setState({\n      visible: !this.state.visible\n    });\n  }\n  handleKeyDown(e) {\n    if (e.keyCode == 27) {\n      this.setState({\n        value: this.props.value || '',\n        visible: false\n      });\n      if (this.props.onFinished) {\n        this.props.onFinished();\n      }\n    } else if (e.keyCode == 13) {\n      this.handleEditingFinished();\n    }\n  }\n  handleEditingFinished(e) {\n    if (e) {\n      let currentTarget = e.currentTarget;\n      setTimeout(_ => {\n        if (!currentTarget.contains(document.activeElement)) {\n          if (this.props.onFinished) {\n            this.props.onFinished(this.state.value);\n          }\n        }\n      }, 0);\n    } else if (this.props.onFinished) {\n      this.props.onFinished(this.state.value.trim());\n    }\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      tabIndex: \"-1\",\n      className: \"group-focus\",\n      onBlur: this.handleEditingFinished\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      className: \"with-icon-right\",\n      type: this.state.visible ? 'text' : 'password',\n      value: this.state.value,\n      placeholder: this.props.placeholder,\n      maxLength: 32,\n      required: this.props.required ? 'required' : '',\n      autoFocus: this.props.autoFocus ? 'autoFocus' : '',\n      autoComplete: this.props.autoComplete,\n      onChange: this.handeTextChange,\n      onKeyDown: this.handleKeyDown,\n      ref: this.inputRef\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      onClick: this.handleVisibility\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons clickable light-gray\"\n    }, this.state.visible ? 'visibility' : 'visibility_off')));\n  }\n}\n\n/***/ }),\n\n/***/ \"qrcodejs\":\n/*!*************************!*\\\n  !*** external \"QRCode\" ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = QRCode;\n\n/***/ }),\n\n/***/ \"react\":\n/*!************************!*\\\n  !*** external \"React\" ***!\n  \\************************/\n/***/ (function(module) {\n\nmodule.exports = React;\n\n/***/ }),\n\n/***/ \"react-dom\":\n/*!***************************!*\\\n  !*** external \"ReactDOM\" ***!\n  \\***************************/\n/***/ (function(module) {\n\nmodule.exports = ReactDOM;\n\n/***/ }),\n\n/***/ \"react-intl\":\n/*!****************************!*\\\n  !*** external \"ReactIntl\" ***!\n  \\****************************/\n/***/ (function(module) {\n\nmodule.exports = ReactIntl;\n\n/***/ }),\n\n/***/ \"tinode-sdk\":\n/*!*************************!*\\\n  !*** external \"tinode\" ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = tinode;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Check if module exists (development only)\n/******/ \t\tif (__webpack_modules__[moduleId] === undefined) {\n/******/ \t\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n/******/ \t\t\te.code = 'MODULE_NOT_FOUND';\n/******/ \t\t\tthrow e;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = __webpack_modules__;\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/create fake namespace object */\n/******/ \t!function() {\n/******/ \t\tvar getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\n/******/ \t\tvar leafPrototypes;\n/******/ \t\t// create a fake namespace object\n/******/ \t\t// mode & 1: value is a module id, require it\n/******/ \t\t// mode & 2: merge all properties of value into the ns\n/******/ \t\t// mode & 4: return value when already ns object\n/******/ \t\t// mode & 16: return value when it's Promise-like\n/******/ \t\t// mode & 8|1: behave like require\n/******/ \t\t__webpack_require__.t = function(value, mode) {\n/******/ \t\t\tif(mode & 1) value = this(value);\n/******/ \t\t\tif(mode & 8) return value;\n/******/ \t\t\tif(typeof value === 'object' && value) {\n/******/ \t\t\t\tif((mode & 4) && value.__esModule) return value;\n/******/ \t\t\t\tif((mode & 16) && typeof value.then === 'function') return value;\n/******/ \t\t\t}\n/******/ \t\t\tvar ns = Object.create(null);\n/******/ \t\t\t__webpack_require__.r(ns);\n/******/ \t\t\tvar def = {};\n/******/ \t\t\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n/******/ \t\t\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n/******/ \t\t\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n/******/ \t\t\t}\n/******/ \t\t\tdef['default'] = function() { return value; };\n/******/ \t\t\t__webpack_require__.d(ns, def);\n/******/ \t\t\treturn ns;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/ensure chunk */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.f = {};\n/******/ \t\t// This file contains only the entry chunk.\n/******/ \t\t// The chunk loading function for additional chunks\n/******/ \t\t__webpack_require__.e = function(chunkId) {\n/******/ \t\t\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n/******/ \t\t\t\t__webpack_require__.f[key](chunkId, promises);\n/******/ \t\t\t\treturn promises;\n/******/ \t\t\t}, []));\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/get javascript chunk filename */\n/******/ \t!function() {\n/******/ \t\t// This function allow to reference async chunks\n/******/ \t\t__webpack_require__.u = function(chunkId) {\n/******/ \t\t\t// return url for filenames based on template\n/******/ \t\t\treturn \"\" + chunkId + \".dev.js\";\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/load script */\n/******/ \t!function() {\n/******/ \t\tvar inProgress = {};\n/******/ \t\tvar dataWebpackPrefix = \"tinode-webapp:\";\n/******/ \t\t// loadScript function to load a script via script tag\n/******/ \t\t__webpack_require__.l = function(url, done, key, chunkId) {\n/******/ \t\t\tif(inProgress[url]) { inProgress[url].push(done); return; }\n/******/ \t\t\tvar script, needAttach;\n/******/ \t\t\tif(key !== undefined) {\n/******/ \t\t\t\tvar scripts = document.getElementsByTagName(\"script\");\n/******/ \t\t\t\tfor(var i = 0; i < scripts.length; i++) {\n/******/ \t\t\t\t\tvar s = scripts[i];\n/******/ \t\t\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t\tif(!script) {\n/******/ \t\t\t\tneedAttach = true;\n/******/ \t\t\t\tscript = document.createElement('script');\n/******/ \t\t\n/******/ \t\t\t\tscript.charset = 'utf-8';\n/******/ \t\t\t\tif (__webpack_require__.nc) {\n/******/ \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t\t\t}\n/******/ \t\t\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n/******/ \t\t\n/******/ \t\t\t\tscript.src = url;\n/******/ \t\t\t}\n/******/ \t\t\tinProgress[url] = [done];\n/******/ \t\t\tvar onScriptComplete = function(prev, event) {\n/******/ \t\t\t\t// avoid mem leaks in IE.\n/******/ \t\t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\t\tclearTimeout(timeout);\n/******/ \t\t\t\tvar doneFns = inProgress[url];\n/******/ \t\t\t\tdelete inProgress[url];\n/******/ \t\t\t\tscript.parentNode && script.parentNode.removeChild(script);\n/******/ \t\t\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n/******/ \t\t\t\tif(prev) return prev(event);\n/******/ \t\t\t}\n/******/ \t\t\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n/******/ \t\t\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n/******/ \t\t\tscript.onload = onScriptComplete.bind(null, script.onload);\n/******/ \t\t\tneedAttach && document.head.appendChild(script);\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/publicPath */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.p = \"/umd/\";\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/jsonp chunk loading */\n/******/ \t!function() {\n/******/ \t\t// no baseURI\n/******/ \t\t\n/******/ \t\t// object to store loaded and loading chunks\n/******/ \t\t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n/******/ \t\t// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n/******/ \t\tvar installedChunks = {\n/******/ \t\t\t\"index\": 0\n/******/ \t\t};\n/******/ \t\t\n/******/ \t\t__webpack_require__.f.j = function(chunkId, promises) {\n/******/ \t\t\t\t// JSONP chunk loading for javascript\n/******/ \t\t\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n/******/ \t\t\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n/******/ \t\t\n/******/ \t\t\t\t\t// a Promise means \"currently loading\".\n/******/ \t\t\t\t\tif(installedChunkData) {\n/******/ \t\t\t\t\t\tpromises.push(installedChunkData[2]);\n/******/ \t\t\t\t\t} else {\n/******/ \t\t\t\t\t\tif(true) { // all chunks have JS\n/******/ \t\t\t\t\t\t\t// setup Promise in chunk cache\n/******/ \t\t\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n/******/ \t\t\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n/******/ \t\t\n/******/ \t\t\t\t\t\t\t// start chunk loading\n/******/ \t\t\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n/******/ \t\t\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n/******/ \t\t\t\t\t\t\tvar error = new Error();\n/******/ \t\t\t\t\t\t\tvar loadingEnded = function(event) {\n/******/ \t\t\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n/******/ \t\t\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n/******/ \t\t\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n/******/ \t\t\t\t\t\t\t\t\tif(installedChunkData) {\n/******/ \t\t\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n/******/ \t\t\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n/******/ \t\t\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n/******/ \t\t\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n/******/ \t\t\t\t\t\t\t\t\t\terror.type = errorType;\n/******/ \t\t\t\t\t\t\t\t\t\terror.request = realSrc;\n/******/ \t\t\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n/******/ \t\t\t\t\t\t\t\t\t}\n/******/ \t\t\t\t\t\t\t\t}\n/******/ \t\t\t\t\t\t\t};\n/******/ \t\t\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t};\n/******/ \t\t\n/******/ \t\t// no prefetching\n/******/ \t\t\n/******/ \t\t// no preloaded\n/******/ \t\t\n/******/ \t\t// no HMR\n/******/ \t\t\n/******/ \t\t// no HMR manifest\n/******/ \t\t\n/******/ \t\t// no on chunks loaded\n/******/ \t\t\n/******/ \t\t// install a JSONP callback for chunk loading\n/******/ \t\tvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n/******/ \t\t\tvar chunkIds = data[0];\n/******/ \t\t\tvar moreModules = data[1];\n/******/ \t\t\tvar runtime = data[2];\n/******/ \t\t\t// add \"moreModules\" to the modules object,\n/******/ \t\t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\t\tvar moduleId, chunkId, i = 0;\n/******/ \t\t\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n/******/ \t\t\t\tfor(moduleId in moreModules) {\n/******/ \t\t\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n/******/ \t\t\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif(runtime) var result = runtime(__webpack_require__);\n/******/ \t\t\t}\n/******/ \t\t\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n/******/ \t\t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\t\tchunkId = chunkIds[i];\n/******/ \t\t\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n/******/ \t\t\t\t\tinstalledChunks[chunkId][0]();\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t\t}\n/******/ \t\t\n/******/ \t\t}\n/******/ \t\t\n/******/ \t\tvar chunkLoadingGlobal = self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || [];\n/******/ \t\tchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\n/******/ \t\tchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.\n!function() {\n/*!**********************!*\\\n  !*** ./src/index.js ***!\n  \\**********************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ \"./node_modules/react-dom/client.js\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _views_tinode_web_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./views/tinode-web.jsx */ \"./src/views/tinode-web.jsx\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/navigation.js */ \"./src/lib/navigation.js\");\n\n\n\n\n\nif (typeof FIREBASE_INIT != 'undefined' && FIREBASE_INIT && FIREBASE_INIT.measurementId) {\n  const head = document.getElementsByTagName('head')[0];\n  let script = document.createElement('script');\n  script.src = 'https://www.googletagmanager.com/gtag/js?id=' + FIREBASE_INIT.measurementId;\n  script.async = true;\n  head.prepend(script);\n  window.dataLayer = window.dataLayer || [];\n  function gtag() {\n    dataLayer.push(arguments);\n  }\n  gtag('js', new Date());\n  gtag('config', FIREBASE_INIT.measurementId);\n}\nconst messageLoader = {\n  'ar': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_ar_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/ar.json */ \"./src/i18n.min/ar.json\", 19)),\n  'de': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_de_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/de.json */ \"./src/i18n.min/de.json\", 19)),\n  'en': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_en_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/en.json */ \"./src/i18n.min/en.json\", 19)),\n  'es': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_es_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/es.json */ \"./src/i18n.min/es.json\", 19)),\n  'fr': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_fr_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/fr.json */ \"./src/i18n.min/fr.json\", 19)),\n  'it': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_it_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/it.json */ \"./src/i18n.min/it.json\", 19)),\n  'ko': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_ko_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/ko.json */ \"./src/i18n.min/ko.json\", 19)),\n  'ro': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_ro_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/ro.json */ \"./src/i18n.min/ro.json\", 19)),\n  'ru': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_ru_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/ru.json */ \"./src/i18n.min/ru.json\", 19)),\n  'th': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_th_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/th.json */ \"./src/i18n.min/th.json\", 19)),\n  'uk': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_uk_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/uk.json */ \"./src/i18n.min/uk.json\", 19)),\n  'vi': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_vi_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/vi.json */ \"./src/i18n.min/vi.json\", 19)),\n  'zh': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_zh_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/zh.json */ \"./src/i18n.min/zh.json\", 19)),\n  'zh-TW': _ => __webpack_require__.e(/*! import() */ \"src_i18n_min_zh-TW_json\").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/zh-TW.json */ \"./src/i18n.min/zh-TW.json\", 19))\n};\nconst rtl = ['ar', 'fa', 'he', 'ur'];\nconst {\n  params\n} = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].parseUrlHash(window.location.hash);\nconst language = params && params.hl || navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage || 'en';\nconst normalized = language.replace('_', '-');\nconst baseLanguage = normalized.split('-')[0].toLowerCase();\nconst htmlLang = messageLoader[normalized] ? language : messageLoader[baseLanguage] ? baseLanguage : 'en';\nconst html = document.getElementsByTagName('html')[0];\nhtml.setAttribute('lang', htmlLang);\nif (rtl.includes(baseLanguage)) {\n  html.setAttribute('dir', 'rtl');\n}\nconst root = (0,react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot)(document.getElementById('mountPoint'));\nmessageLoader[htmlLang]().then(messages => root.render(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.IntlProvider, {\n  locale: language,\n  messages: messages,\n  textComponent: (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment)\n}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_tinode_web_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null))));\n}();\n/******/ })()\n;\n//# sourceMappingURL=index.dev.js.map"
  },
  {
    "path": "umd/index.prod.js",
    "content": "!function(){\"use strict\";var e,t,s,a,n={221:function(e,t,s){s.d(t,{A:function(){return l}});var a=s(1594),n=s.n(a),i=s(8181);class r extends n().Component{constructor(e){super(e),this.state={panX:0,panY:0,originX:0,originY:0,zoom:1,minZoom:.001,maxZoom:8},this.overlay=n().createRef(),this.cutout=n().createRef(),this.preview=n().createRef(),this.boundingBox=n().createRef(),this.imageWidth=0,this.imageHeight=0,this.mouseX=0,this.mouseY=0,this.prevDistance=0,this.cutoutRect={},this.bBoxRect={},this.originX=0,this.originY=0,this.initScaling=this.initScaling.bind(this),this.onZoom=this.onZoom.bind(this),this.handleZoom=this.handleZoom.bind(this),this.mouseDown=this.mouseDown.bind(this),this.mouseUp=this.mouseUp.bind(this),this.mouseMove=this.mouseMove.bind(this),this.mouseTouch=this.mouseTouch.bind(this),this.positionAll=this.positionAll.bind(this),this.translate=this.translate.bind(this)}componentDidMount(){this.overlay.current.addEventListener(\"mousedown\",this.mouseDown,{passive:!0}),this.overlay.current.addEventListener(\"touchstart\",this.mouseDown,{passive:!0}),this.bBoxRect=this.boundingBox.current.getBoundingClientRect(),this.originX=this.bBoxRect.width/2,this.originY=this.bBoxRect.height/2,this.cutoutRect=this.cutout.current.getBoundingClientRect()}componentWillUnmount(){this.overlay.current&&(this.overlay.current.removeEventListener(\"mousedown\",this.mouseDown),this.overlay.current.removeEventListener(\"touchstart\",this.mouseDown))}positionAll(e,t,s){this.setState({panX:e,panY:t,zoom:s,originX:this.originX-e,originY:this.originY-t});const a=(this.originX-e)*s-this.originX,n=(this.originY-t)*s-this.originY;this.props.onChange((a+this.cutoutRect.left-this.bBoxRect.left)/s,(n+this.cutoutRect.top-this.bBoxRect.top)/s,this.cutoutRect.width/s,this.cutoutRect.height/s,s)}static checkBound(e,t,s,a){let n=Math.min(0,s[0]-t[0]-a,t[1]-s[1]+a);return(0==n||Math.min(0,s[0]-t[0],t[1]-s[1])<n)&&(e+=a),e}initScaling(){const e=this.preview.current.getBoundingClientRect();this.imageWidth=e.width,this.imageHeight=e.height;const t=Math.max(this.cutoutRect.width/e.width,this.cutoutRect.height/e.height);this.setState({minZoom:t,maxZoom:8*t});const s=Math.max(this.bBoxRect.width/e.width,this.bBoxRect.height/e.height),a=this.cutoutRect.left-this.bBoxRect.left-(e.width-this.cutoutRect.width)/2,n=this.cutoutRect.top-this.bBoxRect.top-(e.height-this.cutoutRect.height)/2;this.positionAll(a,n,s)}onZoom(e){this.handleZoom(e.target.value)}handleZoom(e){let t=this.state.panX,s=this.state.panY;const a=this.originX-(this.originX-t)*e,n=a+this.imageWidth*e,i=this.originY-(this.originY-s)*e,r=i+this.imageHeight*e,o=this.cutoutRect.left-this.bBoxRect.left,l=o+this.cutoutRect.width,c=this.cutoutRect.top-this.bBoxRect.top,d=c+this.cutoutRect.height;o<a?t-=(a-o)/e:l>n&&(t+=(l-n)/e),c<i?s-=(i-c)/e:d>r&&(s+=(d-r)/e),this.positionAll(t,s,e)}mouseDown(e){e.touches?(this.mouseX=e.touches[0].pageX,this.mouseY=e.touches[0].pageY):(this.mouseX=e.pageX,this.mouseY=e.pageY),window.addEventListener(\"mousemove\",this.mouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.mouseTouch,{passive:!1}),window.addEventListener(\"mouseup\",this.mouseUp,{passive:!0}),window.addEventListener(\"touchend\",this.mouseUp,{passive:!0}),document.body.style.userSelect=\"none\"}translate(e,t){const s=(e-this.mouseX)/this.state.zoom,a=(t-this.mouseY)/this.state.zoom;this.mouseX=e,this.mouseY=t;const n=this.preview.current.getBoundingClientRect(),i=r.checkBound(this.state.panX,[n.left,n.right],[this.cutoutRect.left,this.cutoutRect.right],s),o=r.checkBound(this.state.panY,[n.top,n.bottom],[this.cutoutRect.top,this.cutoutRect.bottom],a);this.positionAll(i,o,this.state.zoom)}mouseMove(e){e.preventDefault(),this.translate(e.pageX,e.pageY)}mouseTouch(e){if(e.preventDefault(),1==e.touches.length)return void this.translate(e.touches[0].pageX,e.touches[0].pageY);const[t,s]=e.touches,a=Math.sqrt((t.pageX-s.pageX)*(t.pageX-s.pageX)+(t.pageY-s.pageY)*(t.pageY-s.pageY));this.prevDistance||(this.prevDistance=a/this.state.zoom);let n=a/this.prevDistance;this.handleZoom(Math.max(this.minZoom,Math.min(this.maxZoom,n)))}mouseUp(e){window.removeEventListener(\"mousemove\",this.mouseMove),window.removeEventListener(\"touchmove\",this.mouseTouch),window.removeEventListener(\"mouseup\",this.mouseUp),window.removeEventListener(\"touchend\",this.mouseUp),document.body.style.userSelect=\"\",this.positionAll(this.state.panX,this.state.panY,this.state.zoom)}render(){const e=`translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`,t=`${this.state.originX}px ${this.state.originY}px`,s={top:this.originY-this.state.originY*this.state.zoom+\"px\",left:this.originX-this.state.originX*this.state.zoom+\"px\",width:this.imageWidth*this.state.zoom+\"px\",height:this.imageHeight*this.state.zoom+\"px\"};return n().createElement(\"div\",{className:\"cropper\"},n().createElement(\"div\",{className:\"bounding-box\",ref:this.boundingBox},n().createElement(\"img\",{src:this.props.source,className:\"preview\",alt:\"\",style:{transform:e,transformOrigin:t},ref:this.preview,onLoad:this.initScaling}),n().createElement(\"div\",{className:\"cutout circle\",ref:this.cutout}),n().createElement(\"div\",{className:\"overlay\",style:s,ref:this.overlay})),n().createElement(\"div\",{className:\"zoom-wrapper\"},n().createElement(\"input\",{type:\"range\",className:\"zoomer\",step:\"0.001\",min:this.state.minZoom,max:this.state.maxZoom,value:this.state.zoom,onChange:this.onZoom})))}}var o=s(6110);class l extends n().PureComponent{constructor(e){super(e),this.state={top:0,left:0,width:0,height:0,scale:1},this.handleSubmit=this.handleSubmit.bind(this),this.handleChange=this.handleChange.bind(this)}handleChange(e,t,s,a,n){this.setState({left:e,top:t,width:s,height:a,scale:n})}handleSubmit(){(0,o.CO)(this.props.mime,this.props.avatar,this.state.left,this.state.top,this.state.width,this.state.height,this.state.scale).then(e=>{this.props.onSubmit(e.mime,e.blob,e.width,e.height)}).catch(e=>{this.props.onError(e)})}render(){return n().createElement(\"div\",{className:\"panel-form\"},n().createElement(\"div\",{className:\"panel-form-row\"},n().createElement(r,{source:this.props.avatar,onChange:this.handleChange})),n().createElement(\"div\",{className:\"dialog-buttons\"},this.props.onCancel?n().createElement(\"button\",{className:\"secondary\",onClick:this.props.onCancel},n().createElement(i.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})):null,n().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},n().createElement(i.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))))}}},257:function(e,t,s){s.d(t,{i:function(){return a}});const a=\"0.25.2\"},504:function(e,t,s){s.d(t,{A:function(){return r}});var a=s(1594),n=s.n(a);const i={muted:\"notifications_off\",banned:\"block\",staff:\"verified_user\"};class r extends n().PureComponent{render(){let e=null;return this.props.badges&&this.props.badges.length>0?(e=[],this.props.badges.forEach(t=>{const s=t.color?\" \"+t.color:\"\";t.icon?e.push(n().createElement(\"i\",{className:\"material-icons as-badge\"+s,key:t.key||t.icon},i[t.icon]||t.icon)):e.push(n().createElement(\"span\",{className:\"badge\"+s,key:t.key||t.name},t.name))}),n().createElement(n().Fragment,null,e)):null}}},635:function(e,t,s){var a=s(1594),n=s.n(a),i=s(8181);const r={staff:\"verified_user\"},o=(0,i.defineMessages)({badge_verified:{id:\"badge_verified\",defaultMessage:[{type:0,value:\"Verified/official\"}]},badge_staff:{id:\"badge_staff\",defaultMessage:[{type:0,value:\"Staff-managed\"}]},badge_danger:{id:\"badge_danger\",defaultMessage:[{type:0,value:\"Untrustworthy\"}]}});class l extends n().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t=null;return this.props.trustedBadges&&this.props.trustedBadges.length>0?(t=[],this.props.trustedBadges.forEach(s=>{const a=this.props.short?null:e(o[\"badge_\"+s]),i=\"material-icons \"+s+\"-color\";t.push(n().createElement(\"div\",{className:\"trusted-badge\",key:s},n().createElement(\"i\",{className:i},r[s]||s),\" \",a))}),n().createElement(n().Fragment,null,t)):null}}t.A=(0,i.injectIntl)(l)},1013:function(e,t,s){s.d(t,{A:function(){return i}});var a=s(1594),n=s.n(a);class i extends n().PureComponent{render(){const e=\"load-spinner-box\"+(this.props.large?\" large\":\"\")+(this.props.clear?\" clear\":\"\")+(this.props.centered?\" centered\":\"\");return this.props.show?n().createElement(\"div\",{className:e},n().createElement(\"div\",{className:\"loader-spinner\"})):null}}},1166:function(e,t,s){s.d(t,{A:function(){return i}});var a=s(1594),n=s.n(a);class i extends n().PureComponent{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(){this.props.onChange(this.props.name,!this.props.checked)}render(){let e,t=[\"material-icons\"];Array.isArray(this.props.className)?t.push(...this.props.className):this.props.className&&t.push(this.props.className),this.props.onChange?this.props.checked?(t.push(\"blue\",\"clickable\"),e=\"check_box\"):!1===this.props.checked?(t.push(\"blue\",\"clickable\"),e=\"check_box_outline_blank\"):(t.push(\"lt-blue\"),e=\"indeterminate_check_box\"):e=this.props.checked?\"check_box\":\"check_box_outline_blank\";let s={className:t.join(\" \"),id:this.props.id};return this.props.onChange&&(s.onClick=this.handleChange),n().createElement(\"i\",s,e)}}},1334:function(e,t,s){s.d(t,{A:function(){return r}});var a=s(1594),n=s.n(a),i=s(3913);class r extends n().PureComponent{constructor(e){super(e),this.state={show:!1},this.hide=this.hide.bind(this)}componentDidUpdate(e){e.level!==this.props.level&&this.setState({show:!!this.props.level})}hide(){this.setState({show:!1}),this.props.onClearError&&this.props.onClearError()}render(){const e={err:\"error\",warn:\"warning\",info:\"info\"}[this.props.level]||\"\",t=\"info-box \"+e;return n().createElement(\"div\",{className:t},n().createElement(\"div\",{className:\"icon\"},n().createElement(\"i\",{className:\"material-icons\"},e)),n().createElement(\"span\",null,this.props.text,this.props.action?n().createElement(n().Fragment,null,\"  \",n().createElement(\"a\",{href:\"#\",style:{whiteSpace:\"nowrap\"},onClick:e=>{e.preventDefault(),this.props.action()}},this.props.actionText)):null),n().createElement(\"div\",{className:\"cancel\"},n().createElement(i.A,{onCancel:this.hide})))}}},1485:function(e,t,s){s.d(t,{A:function(){return r}});var a=s(1594),n=s.n(a),i=s(6789);class r extends n().Component{constructor(e){super(e),this.selfRef=n().createRef(),this.state={active:e.active,initialValue:e.value||\"\",value:e.value||\"\",valid:!0},this.handeTextChange=this.handeTextChange.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleStartEditing=this.handleStartEditing.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handlePasswordFinished=this.handlePasswordFinished.bind(this)}componentDidUpdate(e,t){const s=this.props.value||\"\";t.initialValue==s||t.active||this.setState({initialValue:s,value:s})}handeTextChange(e){this.setState({value:e.target.value||\"\"}),this.props.validator&&Promise.resolve(this.props.validator(e.target.value)).then(e=>{this.setState({valid:e})}).catch(e=>{e&&this.setState({valid:!1})})}handleKeyDown(e){27===e.keyCode?this.setState({value:this.props.value,active:!1}):13===e.keyCode&&this.handleEditingFinished(e)}handleStartEditing(){this.props.readOnly||this.setState({active:!0},e=>{this.selfRef.current&&this.selfRef.current.focus()})}handleEditingFinished(e){const t=this.state.value.trim();!this.props.required||e.target.checkValidity()&&t?(this.setState({active:!1}),(t||this.props.value)&&t!==this.props.value&&this.state.valid&&this.props.onFinished(t)):this.setState({value:this.props.value,active:!1})}handlePasswordFinished(e){this.setState({active:!1}),e&&e!==this.props.value&&this.props.onFinished(e)}render(){if(!this.state.active){let e=\"password\"==this.props.type?\"••••••••\":this.state.value,t=\"in-place-edit\"+(this.props.readOnly?\" disabled\":\"\");return e||(e=this.props.placeholder,t+=\" placeholder\"),this.props.multiline&&1!=this.props.multiline||(t+=\" short\"),n().createElement(\"span\",{className:t,onClick:this.handleStartEditing},this.props.iconLeft&&n().createElement(\"i\",{className:\"material-icons light-gray\"},this.props.iconLeft),n().createElement(\"span\",null,e),this.props.iconRight&&n().createElement(\"i\",{className:\"material-icons light-gray\"},this.props.iconRight))}let e;const t={};return\"password\"==this.props.type?(e=i.A,t.onFinished=this.handlePasswordFinished):(this.props.multiline>1?(e=\"textarea\",t.rows=this.props.multiline,t.className=\"in-place-edit\"):(e=\"input\",t.type=this.props.type||\"text\",t.className=\"in-place-edit\"+(this.props.iconLeft?\" with-icon-left\":this.props.iconRight?\" with-icon-right\":\"\"),this.props.maxLength&&(t.maxLength=this.props.maxLength)),t.value=this.state.value,t.className+=this.state.valid?\"\":\" invalid\",t.ref=this.selfRef,t.onChange=this.handeTextChange,t.onKeyDown=this.handleKeyDown,t.onBlur=this.handleEditingFinished),t.placeholder=this.props.placeholder,t.required=this.props.required?\"required\":\"\",t.autoComplete=this.props.autoComplete,t.autoFocus=!0,void 0!==this.props.spellCheck&&(t.spellCheck=this.props.spellCheck?\"true\":\"false\"),this.props.iconLeft||this.props.iconRight?n().createElement(n().Fragment,null,this.props.iconLeft&&n().createElement(\"i\",{className:\"material-icons light-gray\"},this.props.iconLeft),n().createElement(e,t,null),this.props.iconRight&&n().createElement(\"i\",{className:\"material-icons light-gray\"},this.props.iconRight)):n().createElement(e,t,null)}}},1594:function(e){e.exports=React},1781:function(e){e.exports=JSON.parse('{\"patt\":[{\"name\":\"a00.png\",\"size\":200},{\"name\":\"a01.jpg\",\"size\":384},{\"name\":\"a02.jpg\",\"size\":384},{\"name\":\"a03.jpg\",\"size\":384},{\"name\":\"a04.png\",\"size\":400},{\"name\":\"a05.jpg\",\"size\":400},{\"name\":\"a06.jpg\",\"size\":256},{\"name\":\"a07.jpg\",\"size\":384},{\"name\":\"a08.jpg\",\"size\":384},{\"name\":\"a09.jpg\",\"size\":400},{\"name\":\"a10.jpg\",\"size\":256},{\"name\":\"a11.png\",\"size\":200}],\"img\":[{\"name\":\"w01.jpg\",\"pr\":\"p01.jpg\"},{\"name\":\"w02.jpg\",\"pr\":\"p02.jpg\"},{\"name\":\"w03.jpg\",\"pr\":\"p03.jpg\"},{\"name\":\"w04.jpg\",\"pr\":\"p04.jpg\"},{\"name\":\"w05.jpg\",\"pr\":\"p05.jpg\"},{\"name\":\"w06.jpg\",\"pr\":\"p06.jpg\"},{\"name\":\"w07.jpg\",\"pr\":\"p07.jpg\"},{\"name\":\"w08.jpg\",\"pr\":\"p08.jpg\"},{\"name\":\"w09.jpg\",\"pr\":\"p09.jpg\"},{\"name\":\"w10.jpg\",\"pr\":\"p10.jpg\"},{\"name\":\"w11.jpg\",\"pr\":\"p11.jpg\"},{\"name\":\"w12.jpg\",\"pr\":\"p12.jpg\"},{\"name\":\"w13.jpg\",\"pr\":\"p13.jpg\"},{\"name\":\"w14.jpg\",\"pr\":\"p14.jpg\"},{\"name\":\"w15.jpg\",\"pr\":\"p15.jpg\"},{\"name\":\"w16.jpg\",\"pr\":\"p16.jpg\"},{\"name\":\"w17.jpg\",\"pr\":\"p17.jpg\"},{\"name\":\"w18.jpg\",\"pr\":\"p18.jpg\"},{\"name\":\"w19.jpg\",\"pr\":\"p19.jpg\"},{\"name\":\"w20.jpg\",\"pr\":\"p20.jpg\"},{\"name\":\"w21.jpg\",\"pr\":\"p21.jpg\"},{\"name\":\"w22.jpg\",\"pr\":\"p22.jpg\"},{\"name\":\"w23.jpg\",\"pr\":\"p23.jpg\"},{\"name\":\"w24.jpg\",\"pr\":\"p24.jpg\"}]}')},3307:function(e,t,s){s.d(t,{A:function(){return d}});var a=s(1594),n=s.n(a),i=s(8181),r=s(5874),o=s(4532),l=s(9027),c=s(3540);class d extends n().Component{constructor(e){super(e),this.state={tags:this.props.tags||[],alias:o.Tinode.tagByPrefix(this.props.tags,o.Tinode.TAG_ALIAS)||\"\",tagInput:\"\",activated:this.props.activated},this.handleTagInput=this.handleTagInput.bind(this),this.handleAddTag=this.handleAddTag.bind(this),this.handleRemoveTag=this.handleRemoveTag.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){const s=e.tags||[];return(0,c.af)(s,t.tags)||t.activated?null:{tags:s||[],alias:o.Tinode.tagByPrefix(s,o.Tinode.TAG_ALIAS)||\"\"}}handleTagInput(e){if(this.setState({tagInput:e}),e.length>0){const t=e[e.length-1];'\"'==e[0]?e.length>1&&'\"'==t&&this.handleAddTag(e.substring(1,e.length-1)):\",\"!=t&&\" \"!=t&&\";\"!=t&&'\"'!=t||this.handleAddTag(e.substring(0,e.length-1).trim())}}handleAddTag(e){const t=this.props.tinode.getServerParam(o.Tinode.MAX_TAG_COUNT,l.GB);if(e.length>0&&this.state.tags.length<t){const t=this.state.tags.slice(0);return t.push(e),this.setState({tags:t,tagInput:\"\"}),this.props.onTagsChanged&&this.props.onTagsChanged(t),t}return this.state.tags}handleRemoveTag(e,t){const s=this.state.tags.slice(0);s.splice(t,1),this.setState({tags:s}),this.props.onTagsChanged&&this.props.onTagsChanged(s)}handleSubmit(){let e=this.handleAddTag(this.state.tagInput.trim());e=o.Tinode.setUniqueTag(e,this.state.alias),this.props.onSubmit(e),this.setState({activated:!1,tags:this.props.tags||[]})}handleCancel(){this.setState({activated:!1,tagInput:\"\",tags:this.props.tags||[]}),this.props.onCancel&&this.props.onCancel()}render(){const e=this.props.tinode.getServerParam(o.Tinode.MIN_TAG_LENGTH,l.rn),t=this.props.tinode.getServerParam(o.Tinode.MAX_TAG_LENGTH,l.Ti);let s=[];return this.state.activated?this.state.tags.forEach(a=>{a!=this.state.alias&&s.push({user:a,invalid:a.length<e||a.length>t})}):(this.state.tags.forEach(e=>{e!=this.state.alias&&s.push(n().createElement(\"span\",{className:\"badge\",key:s.length},e))}),0==s.length&&(s=n().createElement(\"i\",null,n().createElement(i.FormattedMessage,{id:\"tags_not_found\",defaultMessage:[{type:0,value:\"No tags defined. Add some.\"}]})))),n().createElement(\"div\",{className:\"panel-form-column\"},n().createElement(\"div\",{className:\"panel-form-row\"},n().createElement(\"label\",{className:\"small\"},this.props.title)),this.state.activated?n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"tags_editor_no_tags\",defaultMessage:[{type:0,value:\"Add some tags\"}]},e=>n().createElement(r.A,{tinode:this.props.tinode,chips:s,avatarDisabled:!0,prompt:e,tabIndex:this.props.tabIndex,onEnter:this.handleAddTag,onFocusLost:this.handleAddTag,onCancel:this.handleCancel,onChipRemoved:this.handleRemoveTag,filterFunc:this.handleTagInput})),this.props.onSubmit||this.props.onCancel?n().createElement(\"div\",{id:\"tag-manager-buttons\",className:\"dialog-buttons panel-form-row\"},n().createElement(\"button\",{className:\"outline\",onClick:this.handleCancel},n().createElement(i.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),n().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},n().createElement(i.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]}))):null):n().createElement(\"div\",{className:\"quoted\"},n().createElement(\"a\",{href:\"#\",className:\"flat-button\",onClick:e=>{e.preventDefault(),this.setState({activated:!0})}},n().createElement(\"i\",{className:\"material-icons\"},\"edit\"),\"  \",n().createElement(i.FormattedMessage,{id:\"title_manage_tags\",defaultMessage:[{type:0,value:\"Manage\"}]})),n().createElement(n().Fragment,null,s)))}}},3540:function(e,t,s){s.d(t,{FH:function(){return u},Jf:function(){return h},Jt:function(){return l},KY:function(){return f},LO:function(){return m},MC:function(){return b},OM:function(){return i},YO:function(){return d},af:function(){return o},iE:function(){return g},k6:function(){return r},t7:function(){return v},wk:function(){return p},xH:function(){return c}});var a=s(4532),n=s(9027);function i(e){const t=document.getElementById(\"shortcut-icon\"),s=document.head||document.getElementsByTagName(\"head\")[0],a=document.createElement(\"link\");a.type=\"image/png\",a.id=\"shortcut-icon\",a.rel=\"shortcut icon\",a.href=\"img/logo32x32\"+(e>0?\"a\":\"\")+\".png\",t&&s.removeChild(t),s.appendChild(a),document.title=(e>0?\"(\"+e+\") \":\"\")+\"Tinode\"}function r(e,t,s,n){let i=null;if((e=e&&e.trim())&&(i={fn:e}),\"string\"==typeof(n=n&&n.trim())&&(i=i||{},i.note=n||a.Tinode.DEL_CHAR),t){i=i||{};let e=s;const n=/^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);n?(e=n[1],i.photo={data:t.substring(t.indexOf(\",\")+1),ref:a.Tinode.DEL_CHAR}):i.photo={data:a.Tinode.DEL_CHAR,ref:t},i.photo.type=(e||\"image/jpeg\").substring(6)}return i}function o(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t))return!1;if(e.length!=t.length)return!1;e.sort(),t.sort();for(let s=0,a=e.length;s<a;s++)if(e[s]!==t[s])return!1;return!0}function l(e){return e=e.trim(),/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(e)?e.replaceAll(/[- ().]*/g,\"\"):null}function c(e){return e=e.trim(),/^[a-z0-9_.+-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.test(e)?e:null}function d(e){return e&&!/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(e.replace(/\\\\/g,\"/\"))}function h(e,t){if(\"string\"!=typeof e)return e;if(e=(e=e.replace(/[^\\x21-\\x7E]/gim,\"\").trim()).replace(/\\\\/g,\"/\"),!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(e))return e;if(/^blob:http/.test(e))return e;const s=Array.isArray(t)?t.join(\"|\"):\"http|https\";return new RegExp(\"^((\"+s+\"):|//)\",\"i\").test(e)?e:null}function p(e,t){if(!e)return null;const s=h(e);if(s)return s;return new RegExp(`data:${t}/[-+.a-z0-9]+;base64,`,\"i\").test(e.trim())?e:null}function u(e){if(e.startsWith(\"data:\")||e.startsWith(\"blob:\"))return e;let t=\"\",s=\"\";const a=e.indexOf(\"#\");a>0&&(s=e.substring(a+1),e=e.substring(0,a));const n=e.indexOf(\"?\");n>0&&(t=e.substring(n+1),e=e.substring(0,n));const i=new URLSearchParams(t);return i.append(\"asatt\",\"1\"),`${e}?${i.toString()}`+(s?`#${s}`:\"\")}function m(e){switch(e){case a.Tinode.MESSAGE_STATUS_SENDING:return{name:\"access_time\"};case a.Tinode.MESSAGE_STATUS_FAILED:case a.Tinode.MESSAGE_STATUS_FATAL:return{name:\"warning\",color:\"danger-color\"};case a.Tinode.MESSAGE_STATUS_SENT:return{name:\"done\"};case a.Tinode.MESSAGE_STATUS_RECEIVED:return{name:\"done_all\"};case a.Tinode.MESSAGE_STATUS_READ:return{name:\"done_all\",color:\"blue\"}}return null}function g(e){let t=!1;return{promise:e instanceof Error?Promise.reject(e):new Promise((s,a)=>{e.then(e=>t?a({isCanceled:!0}):s(e),e=>a(t?{isCanceled:!0}:e))}),cancel(){t=!0}}}function f(){const e=s(1781)[n.S.type][n.S.index];return{name:`../${n.S.path}${e.name}`,size:e.size}}function v(e){const t=e.split(\"/\");return t[t.length-1]}function b(e){const t=v(e),a=s(1781);for(const e in a)for(let s=0;s<a[e].length;s++)if(a[e][s].name==t)return e;return null}},3832:function(e,t,s){s.d(t,{Gv:function(){return a},No:function(){return n},O5:function(){return o},d1:function(){return r},ww:function(){return i}});const a=0,n=1,i=2,r=3,o=\"started\"},3913:function(e,t,s){s.d(t,{A:function(){return i}});var a=s(1594),n=s.n(a);class i extends n().PureComponent{render(){return n().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onCancel()}},n().createElement(\"i\",{className:\"material-icons\"},\"close\"))}}},4152:function(e,t,s){s.d(t,{A:function(){return m}});var a=s(1594),n=s.n(a),i=s(8181),r=s(4532),o=s(6005);class l extends n().PureComponent{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onAction(this.props.action)}render(){const{formatMessage:e}=this.props.intl;return n().createElement(\"li\",{onClick:this.handleClick,className:\"action\"},n().createElement(\"div\",{className:\"action-text\"},e(this.props.title,this.props.values)))}}var c=(0,i.injectIntl)(l),d=s(6110),h=s(9027);const p=(0,i.defineMessages)({badge_you:{id:\"badge_you\",defaultMessage:[{type:0,value:\"you\"}]},badge_owner:{id:\"badge_owner\",defaultMessage:[{type:0,value:\"owner\"}]}});class u extends n().PureComponent{render(){const{formatMessage:e}=this.props.intl,t=Array.isArray(this.props.topicSelected),s=[];let a=0;if(this.props.showSelfTopic){const e=t?this.props.topicSelected.indexOf(\"slf\")>-1:\"slf\"===this.props.topicSelected;s.push(n().createElement(o.A,{tinode:this.props.tinode,avatar:!0,showMode:this.props.showMode,selected:e,showCheckmark:t,onSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,index:s.length,item:\"slf\",key:\"slf\"})),a++}if(this.props.contacts&&this.props.contacts.length>0){const i={};this.props.contacts.forEach(l=>{if(l.action)s.push(n().createElement(c,{title:l.title,action:l.action,values:l.values,key:l.action,onAction:this.props.onAction}));else{const c=this.props.showMode?l.user:l.topic||l.user;if(i[c])return;if(i[c]=!0,this.props.filterFunc&&this.props.filter){const e=[c];if(l.private&&l.private.comment&&e.push((\"\"+l.private.comment).toLowerCase()),l.public&&l.public.fn&&e.push((\"\"+l.public.fn).toLowerCase()),!this.props.filterFunc(this.props.filter,e))return}const u=r.Tinode.isChannelTopicName(c),m=!u&&r.Tinode.isGroupTopicName(c),g=t?this.props.topicSelected.indexOf(c)>-1:this.props.topicSelected===c,f=[];this.props.showMode&&(c==this.props.myUserId&&f.push({name:e(p.badge_you),color:\"green\"}),l.acs&&l.acs.isOwner()&&f.push({name:e(p.badge_owner),color:\"blue\"}));const v=Array.isArray(l.private)?l.private.join(\",\"):l.private?l.private.comment:null;let b,w,y,E;if(!this.props.showMode&&l.latestMessage){const e=l.latestMessage();e&&(w=e.head?e.head.forwarded:null,E=e._status||l.msgStatus(e,!0),y=e.from!=this.props.myUserId,e.content&&(b=\"string\"==typeof e.content?e.content.substr(0,h.sT):r.Drafty.preview(e.content,h.sT)))}s.push(n().createElement(o.A,{tinode:this.props.tinode,title:l.public?l.public.fn:null,avatar:(0,d.to)(l.public?l.public.photo:null),comment:v,preview:b,previewIsResponse:y,forwarded:w,received:E,unread:this.props.showUnread?l.unread:0,now:l.online&&this.props.connected,acs:l.acs,showMode:this.props.showMode,badges:f,showCheckmark:t,selected:g,pinned:l.pinned,showOnline:this.props.showOnline&&!u,isChannel:u,isGroup:m,showContextMenu:this.props.showContextMenu,isVerified:l.trusted&&l.trusted.verified,isStaff:l.trusted&&l.trusted.staff,isDangerous:l.trusted&&l.trusted.danger,deleted:l._deleted,onSelected:this.props.onTopicSelected,item:c,index:s.length,key:c})),a++}},this)}return n().createElement(\"div\",{className:this.props.noScroll?null:\"scrollable-panel\"},0==a?n().createElement(\"div\",{className:\"center-medium-text\",style:{whiteSpace:\"pre-line\"}},this.props.emptyListMessage):null,s.length>0?n().createElement(\"ul\",{className:\"contact-box\"},s):null)}}var m=(0,i.injectIntl)(u)},4532:function(e){e.exports=tinode},5053:function(e,t,s){var a=s(1594),n=s.n(a),i=s(8181),r=s(8589),o=s(6110);const l=\"#666C\",c=(0,i.defineMessages)({icon_title_play:{id:\"icon_title_play\",defaultMessage:[{type:0,value:\"Play recording\"}]}});class d extends n().PureComponent{constructor(e){super(e);let t=(0,o.F8)(this.props.preview);(!Array.isArray(t)||t.length<16)&&(t=null),this.state={canPlay:!1,playing:!1,currentTime:\"0:00\",duration:this.props.duration>0?(0,r.Ye)(this.props.duration/1e3):\"-:--\",longMin:this.props.duration>=6e5,preview:t},this.initAudio=this.initAudio.bind(this),this.initCanvas=this.initCanvas.bind(this),this.resampleBars=this.resampleBars.bind(this),this.visualize=this.visualize.bind(this),this.handlePlay=this.handlePlay.bind(this),this.handleSeek=this.handleSeek.bind(this),this.handleError=this.handleError.bind(this),this.audioPlayer=null,this.viewBuffer=[],this.canvasRef=n().createRef()}componentDidMount(){this.props.src&&this.initAudio(),this.initCanvas()}componentWillUnmount(){this.audioPlayer&&(this.audioPlayer.onloadedmetadata=null,this.audioPlayer.ontimeupdate=null,this.audioPlayer.onended=null,this.audioPlayer.pause(),this.audioPlayer=null)}componentDidUpdate(e){if(this.props.src!=e.src&&this.initAudio(),this.props.preview!=e.preview){let e=(0,o.F8)(this.props.preview);(!Array.isArray(e)||e.length<16)&&(e=null),this.setState({preview:e},this.initCanvas)}}initAudio(){this.audioPlayer=new Audio(this.props.src),this.audioPlayer.onloadedmetadata=e=>this.setState({canPlay:!0}),this.audioPlayer.ontimeupdate=e=>this.setState({currentTime:(0,r.Ye)(this.audioPlayer.currentTime,this.state.longMin)}),this.audioPlayer.onended=e=>{this.audioPlayer.currentTime=0,this.setState({playing:!1,currentTime:(0,r.Ye)(0,this.state.longMin)})}}initCanvas(){this.canvasRef.current.width=2*this.canvasRef.current.offsetWidth,this.canvasRef.current.height=2*this.canvasRef.current.offsetHeight,this.canvasContext=this.canvasRef.current.getContext(\"2d\"),this.canvasContext.lineCap=\"round\",this.viewBuffer=this.resampleBars(this.state.preview),this.visualize()}visualize(){if(!this.canvasRef.current)return;const e=this.effectiveWidth,t=this.canvasRef.current.height;this.canvasContext.lineWidth=6;const s=a=>{if(this.canvasRef.current&&this.audioPlayer&&(this.canvasContext.clearRect(0,0,this.canvasRef.current.width,t),this.viewBuffer)){this.state.playing&&window.requestAnimationFrame(s);const a=this.props.duration?Math.max(0,Math.min(1e3*this.audioPlayer.currentTime/this.props.duration,1))*(e-12):-1;this.canvasContext.beginPath(),this.canvasContext.strokeStyle=l;for(let e=0;e<this.viewBuffer.length;e++){let s=1+10*e+3,n=Math.max(this.viewBuffer[e]*t*.9,1);const i=s<a?l:\"#888A\";this.canvasContext.strokeStyle!=i&&(this.canvasContext.stroke(),this.canvasContext.beginPath(),this.canvasContext.strokeStyle=i),this.canvasContext.moveTo(s,.5*(t-n)),this.canvasContext.lineTo(s,.5*(t+n))}this.canvasContext.stroke(),this.props.duration&&(this.canvasContext.beginPath(),this.canvasContext.arc(a+12,.5*t,12,0,2*Math.PI),this.canvasContext.fillStyle=\"#1781d7\",this.canvasContext.fill())}};s()}resampleBars(e){const t=(this.canvasRef.current.width-4)/10|0;if(this.effectiveWidth=10*t+4,!Array.isArray(e)||0==e.length)return Array.apply(null,Array(t)).map(e=>.01);const s=e.length/t;let a=[],n=-1;for(let i=0;i<t;i++){let t=i*s|0,r=(i+1)*s|0;if(r==t)a[i]=e[t];else{let s=0;for(let a=t;a<r;a++)s+=e[a];a[i]=Math.max(0,s/(r-t))}n=Math.max(a[i],n)}return n>0?a.map(e=>e/n):Array.apply(null,Array(t)).map(e=>.01)}handlePlay(e){e.preventDefault(),this.state.canPlay&&(this.state.playing?(this.audioPlayer.pause(),this.setState({playing:!1})):this.audioPlayer.readyState>=2&&(this.audioPlayer.play(),this.setState({playing:!0},this.visualize)))}handleError(e){console.error(e)}handleSeek(e){if(e.preventDefault(),e.target&&this.props.duration){const t=e.target.getBoundingClientRect(),s=(e.clientX-t.left)/this.effectiveWidth*2;this.audioPlayer.currentTime=this.props.duration*s/1e3,this.setState({currentTime:(0,r.Ye)(this.audioPlayer.currentTime,this.state.longMin)}),this.state.playing||this.visualize()}}render(){const e=\"material-icons\"+(this.props.short?\"\":\" large\")+(this.state.canPlay?\"\":\" disabled\"),t=n().createElement(\"a\",{href:\"#\",onClick:this.handlePlay,title:this.props.intl.formatMessage(c.icon_title_play)},n().createElement(\"i\",{className:e},this.state.playing?\"pause_circle\":this.state.canPlay?\"play_circle\":\"not_interested\"));return n().createElement(\"div\",{className:\"audio-player\"},this.props.short?n().createElement(n().Fragment,null,n().createElement(\"canvas\",{className:\"playback\",ref:this.canvasRef,onClick:this.handleSeek}),t):n().createElement(n().Fragment,null,t,n().createElement(\"div\",null,n().createElement(\"canvas\",{className:\"playback\",ref:this.canvasRef,onClick:this.handleSeek}),n().createElement(\"div\",{className:\"timer\"},this.state.currentTime,\"/\",this.state.duration))))}}t.A=(0,i.injectIntl)(d)},5206:function(e){e.exports=ReactDOM},5338:function(e,t,s){var a=s(5206);t.H=a.createRoot,a.hydrateRoot},5791:function(e,t,s){s.d(t,{e3:function(){return C},TU:function(){return T},NV:function(){return D}});var a=s(1594),n=s.n(a),i=s(8181),r=s(4532),o=s(5053),l=s(8589);class c extends n().PureComponent{render(){const e=[\"busy\",\"declined\",\"disconnected\",\"missed\"].includes(this.props.callState),t=\"material-icons medium \"+(e?\"red\":\"green\"),s=this.props.incoming?e?\"call_missed\":\"call_received\":e?\"call_missed_outgoing\":\"call_made\",a=this.props.incoming?n().createElement(i.FormattedMessage,{id:\"calls_incoming\",defaultMessage:[{type:0,value:\"Incoming call\"}]}):n().createElement(i.FormattedMessage,{id:\"calls_outgoing\",defaultMessage:[{type:0,value:\"Outgoing call\"}]});let r;if(e)switch(this.props.callState){case\"busy\":r=n().createElement(i.FormattedMessage,{id:\"call_busy\",defaultMessage:[{type:0,value:\"busy\"}]});break;case\"declined\":r=n().createElement(i.FormattedMessage,{id:\"call_declined\",defaultMessage:[{type:0,value:\"declined\"}]});break;case\"missed\":r=this.props.incoming?n().createElement(i.FormattedMessage,{id:\"call_missed\",defaultMessage:[{type:0,value:\"missed\"}]}):n().createElement(i.FormattedMessage,{id:\"call_cancelled\",defaultMessage:[{type:0,value:\"cancelled\"}]});break;default:r=n().createElement(i.FormattedMessage,{id:\"call_disconnected\",defaultMessage:[{type:0,value:\"disconnected\"}]})}else r=n().createElement(\"span\",null,(0,l.Ye)(this.props.duration/1e3));return n().createElement(\"div\",{className:\"call-message\"},n().createElement(\"div\",null,n().createElement(\"i\",{className:\"material-icons big gray\"},\"call\")),n().createElement(\"div\",{className:\"flex-column narrow\"},n().createElement(\"div\",null,a),n().createElement(\"div\",{className:\"duration\"},n().createElement(\"i\",{className:t},s),\" \",r)))}}class d extends n().PureComponent{render(){const e=[\"busy\",\"declined\",\"disconnected\",\"missed\"].includes(this.props.callState),t=this.props.incoming?e?\"call_missed\":\"call_received\":e?\"call_missed_outgoing\":\"call_made\";let s;if(e)switch(this.props.callState){case\"busy\":s=n().createElement(i.FormattedMessage,{id:\"call_busy\",defaultMessage:[{type:0,value:\"busy\"}]});break;case\"declined\":s=n().createElement(i.FormattedMessage,{id:\"call_declined\",defaultMessage:[{type:0,value:\"declined\"}]});break;case\"missed\":s=this.props.incoming?n().createElement(i.FormattedMessage,{id:\"call_missed\",defaultMessage:[{type:0,value:\"missed\"}]}):n().createElement(i.FormattedMessage,{id:\"call_cancelled\",defaultMessage:[{type:0,value:\"cancelled\"}]});break;default:s=n().createElement(i.FormattedMessage,{id:\"call_disconnected\",defaultMessage:[{type:0,value:\"disconnected\"}]})}else s=[\"accepted\",\"started\"].includes(this.props.callState)&&!this.props.duration?n().createElement(i.FormattedMessage,{id:\"call_in_progress\",defaultMessage:[{type:0,value:\"in progress\"}]}):n().createElement(\"span\",null,(0,l.Ye)(this.props.duration/1e3));return n().createElement(n().Fragment,null,n().createElement(\"div\",{className:\"composed-material\"},n().createElement(\"i\",{className:\"material-icons\"},\"call\"),n().createElement(\"i\",{className:\"material-icons second\"},t)),\" \",s)}}class h extends n().PureComponent{constructor(e){super(e),this.videoRef=n().createRef(),this.handleClick=this.handleClick.bind(this)}handleClick(e){this.props.onClick&&this.props.onClick(e)}render(){const e=(0,l.Ye)(this.props[\"data-duration\"]/1e3),t=\"inline-video\"+(this.props.onClick?\" image-clickable\":\"\");return n().createElement(\"div\",{className:t},n().createElement(\"img\",this.props),n().createElement(\"div\",{className:\"play-control\"},this.props.onClick?n().createElement(\"i\",{className:\"material-icons white x-big\"},\"play_arrow\"):n().createElement(\"img\",{src:\"img/broken_video.png\",style:{filter:\"invert(100%)\"},width:\"36\",height:\"36\"})),e?n().createElement(\"div\",{className:\"duration\"},e):null)}}class p extends n().PureComponent{constructor(e){super(e),this.state={src:this.props.isvideo?\"img/blankvid.png\":\"img/blankimg.png\",style:Object.assign({padding:\"4px\"},this.props.style),className:this.props.className,alt:this.props.alt,onClick:this.props.onClick}}componentDidMount(){this.props.whenDone.promise.then(e=>this.setState({src:e.src,style:{...this.state.style,padding:0}})).catch(e=>this.setState({src:this.props.isvideo?\"img/broken_video.png\":\"img/broken_image.png\"}))}componentWillUnmount(){this.props.whenDone.cancel()}componentDidUpdate(e){e.whenDone!=this.props.whenDone&&(this.setState({src:this.props.isvideo?\"img/blankvid.png\":\"img/blankimg.png\",style:{...this.state.style,padding:\"4px\"}}),this.props.whenDone.promise.then(e=>this.setState({src:e.src,style:{...this.state.style,padding:0}})).catch(e=>this.setState({src:this.props.isvideo?\"img/broken_video.png\":\"img/broken_image.png\"})))}render(){return n().createElement(\"img\",this.state)}}var u=s(6904);const m=(0,i.defineMessages)({unknown_name:{id:\"unknown_name\",defaultMessage:[{type:0,value:\"Unknown\"}]}});class g extends n().PureComponent{constructor(e){super(e),this.handleDownload=this.handleDownload.bind(this),this.handleMessage=this.handleMessage.bind(this)}handleDownload(e){e.preventDefault();try{const e=r.TheCard.exportVCard(this.props.content),t=new Blob([e],{type:\"text/vcard\"}),s=URL.createObjectURL(t),a=document.createElement(\"a\");a.style.display=\"none\",a.href=s,a.download=(this.props.content.fn||\"contact\")+\".vcf\",document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(s),document.body.removeChild(a)}catch(e){console.error(\"Failed to download vcard\",e),this.props.onError&&this.props.onError(\"Failed to download vcard\",\"err\")}}handleMessage(e){}render(){const e=this.props.content;if(!e)return null;const t=r.TheCard.getFirstTinodeID(e),s=r.TheCard.getEmails(e).concat(r.TheCard.getPhones(e)),a=r.TheCard.getOrg(e);return n().createElement(\"div\",{className:\"contact-card\"},n().createElement(\"div\",{className:\"contact-body\"},n().createElement(\"div\",{className:\"avatar-box\"},n().createElement(u.A,{authorizeURL:this.props.authorizeURL,topic:t||\"usr123XXX\",avatar:r.TheCard.getPhotoUrl(e)||!0,title:e.fn})),n().createElement(\"div\",{className:\"name-box\"},n().createElement(\"div\",{className:\"name\"},e.fn||n().createElement(i.FormattedMessage,m.unknown_name)),a&&n().createElement(\"div\",{className:\"org\"},a))),n().createElement(\"div\",{className:\"contact-actions\"},t?n().createElement(n().Fragment,null,n().createElement(\"a\",{className:\"flat-button\",\"data-val\":t,onClick:this.props.onChatClick},n().createElement(i.FormattedMessage,{id:\"chat_now\",defaultMessage:[{type:0,value:\"Chat\"}]})),n().createElement(\"div\",{className:\"divider\"})):s.length>0?n().createElement(n().Fragment,null,n().createElement(\"a\",{className:\"flat-button\",\"data-val\":s.join(\",\"),onClick:this.props.onFindClick},n().createElement(i.FormattedMessage,{id:\"find_user\",defaultMessage:[{type:0,value:\"Find\"}]})),n().createElement(\"div\",{className:\"divider\"})):null,n().createElement(\"a\",{className:\"flat-button\",onClick:this.handleDownload},n().createElement(i.FormattedMessage,{id:\"save_action\",defaultMessage:[{type:0,value:\"Save\"}]}))))}}var f=(0,i.injectIntl)(g),v=s(9895);class b extends n().PureComponent{constructor(e){super(e)}render(){return n().createElement(\"div\",{className:\"inline-image\"},n().createElement(\"img\",this.props),n().createElement(\"div\",{className:\"rounded-container\"},n().createElement(v.A,{progress:this.props.progress,onCancel:this.props.onCancelUpload})))}}var w=s(9027),y=s(6110),E=s(3540);const S=(0,i.defineMessages)({drafty_form:{id:\"drafty_form\",defaultMessage:[{type:0,value:\"Form:\"}]},drafty_attachment:{id:\"drafty_attachment\",defaultMessage:[{type:0,value:\"Attachment\"}]},drafty_image:{id:\"drafty_image\",defaultMessage:[{type:0,value:\"Picture\"}]},drafty_video:{id:\"drafty_video\",defaultMessage:[{type:0,value:\"Video recording\"}]},drafty_unknown:{id:\"drafty_unknown\",defaultMessage:[{type:0,value:\"Unsupported\"}]}});function C(e,t,s,a,i){if(i.includes(\"QQ\"))return N.call(this,e,t,s,a);if(!e)return s;let d=r.Drafty.tagName(e),h=r.Drafty.attrValue(e,t)||{};switch(h.key=a,e){case\"AU\":h.src&&(h.src=this.authorizeURL((0,E.wk)(h.src,\"audio\")),h.duration=t.duration>0?0|t.duration:void 0,h.preview=t.preview,h.loading=\"lazy\"),d=o.A,s=null;break;case\"BR\":s=null;break;case\"EX\":case\"RW\":break;case\"HL\":h.className=\"highlight\";break;case\"HD\":d=null,s=null;break;case\"IM\":d=_.call(this,d,t,h),s=null;break;case\"BN\":h.onClick=e=>this.onHandleClick(e,\"form_button\");let e=n().Children.map(s,e=>\"string\"==typeof e?e:void 0);e&&0!=e.length||(e=[h.name]),h[\"data-title\"]=e.join(\"\");break;case\"LN\":h&&(h.href=\"string\"==typeof h.href?(0,E.Jf)(h.href,w.kA):\"\");break;case\"MN\":h.className=\"mention\",t&&(h.className+=\" \"+(0,l.kJ)(t.val,!1,!0));break;case\"FM\":h.className=\"bot-form\";break;case\"QQ\":h.className=\"reply-quote\",h.onClick=e=>this.onHandleClick(e,\"quote\");break;case\"TC\":d=f,h.content=t,h.authorizeURL=this.authorizeURL,h.onChatClick=e=>this.onHandleClick(e,\"contact_chat\"),h.onFindClick=e=>this.onHandleClick(e,\"contact_find\"),s=null;break;case\"VC\":d=c,s=null,t&&(h.callState=t.state,h.incoming=t.incoming,h.duration=t.duration);break;case\"VD\":d=M.call(this,d,t,h),s=null;break;default:if(!d){d=n().Fragment,h={key:a};let e=s;Array.isArray(s)&&s.join(\"\").trim()||(e=[n().createElement(\"span\",{key:\"x1\",className:\"gray\"},this.formatMessage(S.drafty_unknown))]),s=[n().createElement(\"i\",{key:\"x0\",className:\"material-icons gray\"},\"extension\"),\" \"].concat(e)}}return d?n().createElement(d,h,s):s}function _(e,t,s){if(!t)return s.src=\"img/broken_image.png\",s.style={width:w._g+\"px\",height:w._g+\"px\"},e;s.className=\"inline-image\";const a=(0,y.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*w.JS,34.5*w.JS):34.5*w.JS,24*w.JS,!1)||{dstWidth:w._j,dstHeight:w._j};return s.style={width:a.dstWidth+\"px\",height:a.dstHeight+\"px\",minWidth:a.dstWidth+\"px\",minHeight:a.dstHeight+\"px\"},r.Drafty.isProcessing(t)?e=b:(s.src=this.authorizeURL((0,E.wk)(s.src,\"image\")),s.alt=t.name,s.src?(Math.max(t.width||0,t.height||0)>w._g&&(s.onClick=e=>this.onHandleClick(e,\"image\"),s.className+=\" image-clickable\"),s.loading=\"lazy\"):s.src=null),e}function M(e,t,s){if(!t)return s.src=\"img/broken_video.png\",s.style={width:w._g+\"px\",height:w._g+\"px\"},e;s.className=\"inline-image\";const a=(0,y.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*w.JS,34.5*w.JS):34.5*w.JS,24*w.JS,!1)||{dstWidth:w.qV,dstHeight:w.qV};return s.style={width:a.dstWidth+\"px\",height:a.dstHeight+\"px\",minWidth:a.dstWidth+\"px\",minHeight:a.dstHeight+\"px\"},r.Drafty.isProcessing(t)?e=b:(s.src=this.authorizeURL((0,E.wk)(s.src,\"image\")),s.alt=t.name,(t.ref||t.val)&&(s.onClick=e=>this.onHandleClick(e,\"video\"),s.loading=\"lazy\"),e=h),e}function T(e,t,s,a){if(!e)return s;let i=r.Drafty.tagName(e);const o={key:a};switch(e){case\"AU\":i=n().Fragment,s=[n().createElement(\"i\",{key:\"au\",className:\"material-icons\"},\"mic\"),\" \",(0,l.Ye)(t.duration/1e3)];break;case\"BR\":i=n().Fragment,s=[\" \"];break;case\"HL\":o.className=\"highlight preview\";break;case\"LN\":case\"MN\":i=\"span\";break;case\"IM\":i=n().Fragment,s=[n().createElement(\"i\",{key:\"im\",className:\"material-icons\"},\"photo\"),\" \",this.formatMessage(S.drafty_image)];break;case\"BN\":i=\"span\",o.className=\"flat-button faux\";break;case\"FM\":i=n().Fragment,s=[n().createElement(\"i\",{key:\"fm\",className:\"material-icons\"},\"dashboard\"),this.formatMessage(S.drafty_form)].concat(\" \",s||[]);break;case\"RW\":i=n().Fragment;break;case\"EX\":if(t){if(r.Drafty.isFormResponseType(t.mime))return null;delete t.val,delete t.ref}i=n().Fragment,s=[n().createElement(\"i\",{key:\"ex\",className:\"material-icons\"},\"attachment\"),\" \",this.formatMessage(S.drafty_attachment)];break;case\"VC\":i=d,t&&(o.callState=t.state,o.incoming=t.incoming,o.duration=t.duration),s=null;break;case\"QQ\":case\"HD\":i=null,s=null;break;case\"TC\":i=n().Fragment,s=[n().createElement(\"i\",{key:\"tc\",className:\"material-icons\"},\"contact_mail\"),\" \",r.TheCard.getFn(t)||this.formatMessage(S.drafty_unknown)];break;case\"VD\":i=n().Fragment,s=[n().createElement(\"i\",{key:\"im\",className:\"material-icons\"},\"play_circle_outline\"),\" \",this.formatMessage(S.drafty_video)];break;default:i||(i=n().Fragment,s=[n().createElement(\"i\",{key:\"x0\",className:\"material-icons gray\"},\"extension\"),\" \",this.formatMessage(S.drafty_unknown)])}return i?n().createElement(i,o,s):s}function k(e,t){return e.style={width:w._g+\"px\",height:w._g+\"px\",maxWidth:w._g+\"px\",maxHeight:w._g+\"px\"},e.className=\"inline-image\",e.alt=this.formatMessage(S.drafty_image),e.src=t&&e.src||\"img/broken_image.png\",e.title=e.alt,e}function A(e,t){const s=(0,y.ae)(t.width,t.height,w.iq,w._g);return e.style={width:s.width+\"px\",height:s.height+\"px\",maxWidth:w.iq+\"px\",maxHeight:w._g+\"px\"},e.className=\"inline-image\",e.alt=this.formatMessage(S.drafty_video),e.title=e.alt,e.src=t&&e.src||\"img/broken_video.png\",e}function N(e,t,s,a){if([\"BR\",\"EX\",\"IM\",\"MN\",\"VD\"].includes(e)){let i=r.Drafty.tagName(e),o=r.Drafty.attrValue(e,t)||{};switch(o.key=a,e){case\"BR\":s=null;break;case\"IM\":o=k.call(this,o,t),s=[n().createElement(\"img\",o,null),\" \",o.alt],i=n().Fragment,o={key:a};break;case\"VD\":o=A.call(this,o,t),s=[n().createElement(\"img\",o,null),\" \",o.alt],i=n().Fragment,o={key:a};break;case\"MN\":i=\"span\",o.className=\"mention\",t&&(o.className+=\" \"+(0,l.kJ)(t.val,!1,!0));break;case\"EX\":let e;if(t){if(r.Drafty.isFormResponseType(t.mime))return null;e=t.name,delete t.val,delete t.ref}i=n().Fragment,s=[n().createElement(\"i\",{key:\"ex\",className:\"material-icons\"},\"attachment\"),(0,l.Tu)(e,16)||this.formatMessage(S.drafty_attachment)]}return n().createElement(i,o,s)}return T.call(this,e,t,s,a)}function I(e,t){let s,a,n,i;if(t?(a=e.preview,i=e.premime||\"image/jpeg\",n=e.preref):(a=e.val,i=e.mime,n=e.ref),a){const e=(0,y.i)(a,i);if(!e)throw new Error(\"Invalid image\");s=Promise.resolve(e)}else{if(!n)throw new Error(\"Missing image data\");s=fetch(this.authorizeURL((0,E.wk)(n,\"image\"))).then(e=>{if(e.ok)return e.blob();throw new Error(`Image fetch unsuccessful: ${e.status} ${e.statusText}`)})}return s.then(e=>(0,y.ag)(e,t?w.iq:w._g,w._g,-1,!t)).then(s=>(t?e.premime=s.mime:e.mime=s.mime,e.size=s.blob.size,e.width=s.width,e.height=s.height,delete e.ref,delete e.preref,e.src=URL.createObjectURL(s.blob),(0,y.Sk)(s.blob))).then(s=>(t?e.preview=s.bits:e.val=s.bits,e)).catch(t=>{throw delete e.val,delete e.preview,delete e.src,e.width=w._g,e.height=w._g,t})}function D(e,t,s,a,i){if(\"IM\"==e||\"VD\"==e){const i=\"IM\"==e?k.call(this,{key:a},t):A.call(this,{key:a},t);let r;try{r=(0,E.iE)(I.call(this,t,\"VD\"==e))}catch(e){console.warn(\"Failed to quote image:\",e.message),r=(0,E.iE)(e)}return i.whenDone=r,s=[n().createElement(p,i,null),\" \",i.alt],n().createElement(n().Fragment,{key:a},s)}if(\"QQ\"==e){if(i.includes(\"QQ\"))return n().createElement(\"span\",{key:a},[n().createElement(\"i\",{key:\"qq\",className:\"material-icons\"},\"format_quote\"),\" \"]);const e=r.Drafty.attrValue(\"QQ\",t)||{};return e.key=a,e.className=\"reply-quote\",n().createElement(r.Drafty.tagName(\"QQ\"),e,s)}return N.call(this,e,t,s,a)}},5874:function(e,t,s){s.d(t,{A:function(){return l}});var a=s(1594),n=s.n(a),i=s(6904);class r extends n().PureComponent{constructor(e){super(e),this.handleCancel=this.handleCancel.bind(this)}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.topic,this.props.index)}render(){const e=this.props.title||this.props.topic,t=this.props.invalid?\"chip invalid\":\"chip\";return n().createElement(\"div\",{className:t},this.props.noAvatar?n().createElement(\"span\",{className:\"spacer\"}):n().createElement(\"div\",{className:\"avatar-box\"},n().createElement(i.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:this.props.avatar||!0,topic:this.props.topic,title:this.props.title})),n().createElement(\"span\",null,e),this.props.onCancel&&!this.props.required?n().createElement(\"a\",{href:\"#\",onClick:this.handleCancel},\"×\"):n().createElement(\"span\",{className:\"spacer\"}))}}var o=s(6110);class l extends n().Component{constructor(e){super(e),this.state=l.deriveStateFromProps(e),this.state.input=\"\",this.state.focused=!1,this.handleTextInput=this.handleTextInput.bind(this),this.removeChipAt=this.removeChipAt.bind(this),this.handleChipCancel=this.handleChipCancel.bind(this),this.handleFocusGained=this.handleFocusGained.bind(this),this.handleFocusLost=this.handleFocusLost.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}static deriveStateFromProps(e){return{sortedChips:l.sortChips(e.chips,e.staticMembers),chipIndex:l.indexChips(e.chips)}}componentDidUpdate(e,t){e.chips==this.props.chips&&e.staticMembers==this.props.staticMembers&&e.prompt==this.props.prompt||this.setState(l.deriveStateFromProps(this.props)),(!t||this.props.chips.length>t.sortedChips.length)&&this.setState({input:\"\"})}static indexChips(e){const t={};let s=0;return e.forEach(e=>{t[e.user]=s,s++}),t}static sortChips(e,t){const s=[],a=[];return e.forEach(e=>{t&&t.includes(e.user)?s.push(e):a.push(e)}),s.concat(a)}handleTextInput(e){this.setState({input:e.target.value}),this.props.filterFunc&&this.props.filterFunc(e.target.value)}removeChipAt(e){const t=this.state.sortedChips[e];this.props.onChipRemoved(t.user,this.state.chipIndex[t.user])}handleChipCancel(e,t){this.removeChipAt(t)}handleFocusGained(){this.setState({focused:!0})}handleFocusLost(){this.setState({focused:!1}),this.props.onFocusLost&&this.props.onFocusLost(this.state.input)}handleKeyDown(e){if(\"Backspace\"===e.key){if(0==this.state.input.length&&this.state.sortedChips.length>0){const e=this.state.sortedChips.length-1;this.state.sortedChips[e].user!==this.props.staticMembers&&this.removeChipAt(e)}}else\"Enter\"===e.key?this.props.onEnter&&this.props.onEnter(this.state.input):\"Escape\"===e.key&&this.props.onCancel&&this.props.onCancel()}render(){const e=[];let t=0;const s=this.props.staticMembers||[];this.state.sortedChips.forEach(a=>{e.push(n().createElement(r,{tinode:this.props.tinode,onCancel:this.handleChipCancel,avatar:(0,o.to)(a.public?a.public.photo:null),title:a.public?a.public.fn:void 0,noAvatar:this.props.avatarDisabled,topic:a.user,required:s.includes(a.user),invalid:a.invalid,index:t,key:a.user})),t++});const a=\"chip-input\"+(this.state.focused?\" focused\":\"\"),i=!(this.props.tabIndex>0);return n().createElement(\"div\",{className:a},e,n().createElement(\"input\",{type:\"text\",placeholder:this.props.prompt,onChange:this.handleTextInput,onFocus:this.handleFocusGained,onBlur:this.handleFocusLost,onKeyDown:this.handleKeyDown,value:this.state.input,tabIndex:this.props.tabIndex,autoFocus:i}))}}},6005:function(e,t,s){s.d(t,{A:function(){return g}});var a=s(1594),n=s.n(a),i=s(8181),r=s(4532),o=s(504),l=s(6904);class c extends n().PureComponent{render(){return this.props.count>0?n().createElement(\"span\",{className:\"unread\"},this.props.count>9?\"9+\":this.props.count):null}}var d=s(5791),h=s(3540),p=s(8589);const u=(0,i.defineMessages)({self_topic_name:{id:\"self_topic_name\",defaultMessage:[{type:0,value:\"Saved messages\"}]},self_topic_comment:{id:\"self_topic_comment\",defaultMessage:[{type:0,value:\"Notes, messages, links, files saved for posterity\"}]}});class m extends n().Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onSelected&&this.props.onSelected(this.props.item,this.props.index)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.props.item,topicTitle:this.props.title,y:e.pageY,x:e.pageX})}render(){let e=this.props.title;const t=r.Tinode.isSelfTopicName(this.props.item);e?e.length>30&&(e=(0,p.W5)(e,30)):e=t?this.props.intl.formatMessage(u.self_topic_name):n().createElement(\"i\",null,n().createElement(i.FormattedMessage,{id:\"unnamed_topic\",defaultMessage:[{type:0,value:\"Unnamed\"}]}));const s=this.props.now?\"online\":\"offline\",a=!this.props.avatar||this.props.avatar,m=this.props.badges?this.props.badges.slice():[],g=[];let f;this.props.isVerified&&g.push({icon:\"verified\",color:\"verified-color\"}),this.props.isStaff&&g.push({icon:\"staff\",color:\"staff-color\"}),this.props.isDangerous&&g.push({icon:\"dangerous\",color:\"danger-color\"}),this.props.acs&&(this.props.showMode&&m.push({name:this.props.acs.getMode(),key:\"mode\"}),this.props.acs.isMuted()&&g.push({icon:\"muted\"}),this.props.acs.isJoiner()||g.push({icon:\"banned\"})),\"string\"==typeof this.props.preview?f=this.props.preview:r.Drafty.isValid(this.props.preview)?f=n().createElement(n().Fragment,null,r.Drafty.format(this.props.preview,d.TU,{formatMessage:this.props.intl.formatMessage,previewIsResponse:this.props.previewIsResponse})):this.props.preview&&(f=n().createElement(n().Fragment,null,n().createElement(\"i\",{className:\"material-icons gray\"},\"warning_amber\"),\" \",n().createElement(\"i\",{className:\"gray\"},n().createElement(i.FormattedMessage,{id:\"invalid_content\",defaultMessage:[{type:0,value:\"invalid content\"}]}))));const v=(0,h.LO)(this.props.received),b=v?n().createElement(\"i\",{className:\"material-icons small space-right\"+(v.color?\" \"+v.color:\"\")},v.name):null,w=\"contact-title\"+(this.props.deleted?\" deleted\":\"\"),y=f||this.props.comment||(t?this.props.intl.formatMessage(u.self_topic_comment):\" \"),E=this.props.showCheckmark?null:this.props.selected?\"selected\":this.props.pinned?\"tpinned\":null;return n().createElement(\"li\",{className:E,onClick:this.handleClick},n().createElement(\"div\",{className:\"avatar-box\"},n().createElement(l.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:a,title:this.props.title,topic:this.props.item,deleted:this.props.deleted}),this.props.deleted?n().createElement(\"i\",{className:\"deleted material-icons\"},\"cancel\"):!t&&this.props.showOnline?n().createElement(\"span\",{className:s}):this.props.showCheckmark&&this.props.selected?n().createElement(\"i\",{className:\"checkmark material-icons\"},\"check_circle\"):null),n().createElement(\"div\",{className:\"text-box\"},n().createElement(\"div\",null,n().createElement(\"span\",{className:w},e),this.props.isGroup?n().createElement(\"i\",{className:\"material-icons as-badge\"},\"group\"):null,this.props.isChannel?n().createElement(\"i\",{className:\"material-icons as-badge\"},\"podcasts\"):null,t?null:n().createElement(o.A,{badges:g}),this.props.deleted?null:n().createElement(c,{count:this.props.unread})),this.props.showMode?n().createElement(\"span\",null,n().createElement(o.A,{badges:m})):this.props.small?null:n().createElement(\"div\",{className:\"contact-comment\"},b,n().createElement(\"span\",null,y))),this.props.showContextMenu?n().createElement(\"span\",{className:\"menuTrigger\"},n().createElement(\"a\",{href:\"#\",onClick:this.handleContextClick},n().createElement(\"i\",{className:\"material-icons\"},\"expand_more\"))):null)}}var g=(0,i.injectIntl)(m)},6110:function(e,t,s){s.d(t,{$Z:function(){return m},CO:function(){return d},F8:function(){return v},Pv:function(){return f},QJ:function(){return b},Sk:function(){return p},ae:function(){return o},ag:function(){return c},bB:function(){return h},i:function(){return g},iJ:function(){return u},to:function(){return r}});var a=s(4532);const n=[\"image/jpeg\",\"image/gif\",\"image/png\",\"image/svg\",\"image/svg+xml\"],i=[\"jpg\",\"gif\",\"png\",\"svg\",\"svg\"];function r(e){if(e&&\"object\"==typeof e){if(e.ref)return e.ref;if(e.data&&e.type){return\"data:\"+(e.type.startsWith(\"image/\")?e.type:\"image/\"+e.type)+\";base64,\"+e.data}}return null}function o(e,t,s,a,n){if(t|=0,s|=0,a|=0,(e|=0)<=0||t<=0||s<=0||a<=0)return null;n&&(s=a=Math.min(s,a));const i=Math.min(Math.min(e,s)/e,Math.min(t,a)/t),r={dstWidth:e*i|0,dstHeight:t*i|0};return n?(r.dstWidth=r.dstHeight=Math.min(r.dstWidth,r.dstHeight),r.srcWidth=r.srcHeight=Math.min(e,t),r.xoffset=(e-r.srcWidth)/2|0,r.yoffset=(t-r.srcWidth)/2|0):(r.xoffset=r.yoffset=0,r.srcWidth=e,r.srcHeight=t),r}function l(e,t){const s=n.indexOf(t);if(s<0||!e)return e;const a=i[s],r=e.lastIndexOf(\".\");return r>=0&&(e=e.substring(0,r)),e+\".\"+a}function c(e,t,s,a,i){return new Promise((r,c)=>{const d=new Image;d.crossOrigin=\"Anonymous\",d.onerror=function(e){c(new Error(\"Image format unrecognized\"))},d.onload=async function(){URL.revokeObjectURL(d.src);const h=o(d.width,d.height,t,s,i);if(!h)return void c(new Error(\"Invalid image\"));let p=document.createElement(\"canvas\");p.width=h.dstWidth,p.height=h.dstHeight;let u=p.getContext(\"2d\");u.imageSmoothingEnabled=!0,u.drawImage(d,h.xoffset,h.yoffset,h.srcWidth,h.srcHeight,0,0,h.dstWidth,h.dstHeight);const m=n.includes(e.type)?e.type:\"image/jpeg\";let g=await new Promise(e=>p.toBlob(e,m));if(g){for(;a>0&&g.length>a;)h.dstWidth=.70710678118*h.dstWidth|0,h.dstHeight=.70710678118*h.dstHeight|0,p.width=h.dstWidth,p.height=h.dstHeight,u=p.getContext(\"2d\"),u.clearRect(0,0,p.width,p.height),u.drawImage(d,h.xoffset,h.yoffset,h.srcWidth,h.srcHeight,0,0,h.dstWidth,h.dstHeight),g=await new Promise(e=>p.toBlob(e,m));p=null,r({mime:m,blob:g,width:h.dstWidth,height:h.dstHeight,name:l(e.name,m)})}else c(new Error(\"Unsupported image format\"))},d.src=URL.createObjectURL(e)})}function d(e,t,s,a,i,r,o){return new Promise((l,c)=>{const d=new Image;d.crossOrigin=\"Anonymous\",d.onerror=e=>{c(new Error(\"Image format unrecognized\"))},d.onload=t=>{URL.revokeObjectURL(d.src);let h=document.createElement(\"canvas\");h.width=i*o,h.height=r*o;let p=h.getContext(\"2d\");p.imageSmoothingEnabled=!0,p.drawImage(d,s,a,i,r,0,0,h.width,h.height),e=n.includes(e)?e:\"image/jpeg\",h.toBlob(t=>{h=null,t?l({mime:e,blob:t,width:i,height:r}):c(new Error(\"Unsupported image format\"))},e)},d.src=t})}function h(e){return new Promise((t,s)=>{const a=new FileReader;a.onerror=e=>{s(a.error)},a.onload=s=>{t({mime:e.type,bits:a.result.split(\",\")[1],name:e.name})},a.readAsDataURL(e)})}function p(e){return new Promise((t,s)=>{const a=new FileReader;a.onerror=e=>{s(a.error)},a.onload=s=>{t({mime:e.type,bits:a.result.split(\",\")[1]})},a.readAsDataURL(e)})}function u(e,t,s,a){const n=(e.clipboardData||e.originalEvent.clipboardData||{}).items;if(!n||!n.length)return!1;for(let e in n){const i=n[e];if(\"file\"===i.kind){const e=i.getAsFile();if(!e){console.error(\"Failed to get file object from pasted file item\",i.kind,i.type),a(\"Failed to get file object from pasted file item\");continue}return e.type&&\"image\"==e.type.split(\"/\")[0]?t(e):s(e),!0}}return!1}function m(e){if(e){e=e.replace(/-/g,\"+\").replace(/_/g,\"/\");try{e=btoa(atob(e))}catch(t){console.error(\"Failed to base64 re-encode string.\",t),e=null}}return e}function g(e,t){if(!e)return null;try{const s=atob(e),a=s.length,n=new ArrayBuffer(a),i=new Uint8Array(n);for(let e=0;e<a;e++)i[e]=s.charCodeAt(e);return new Blob([n],{type:t})}catch(e){console.error(\"Failed to convert base64 to blob: \",e)}return null}function f(e){if(!Array.isArray(e))return null;try{let t=\"\";return new Uint8Array(e).forEach(e=>t+=String.fromCharCode(e)),window.btoa(t)}catch(e){}return null}function v(e){const t=[];try{return[...window.atob(e)].forEach(e=>{t.push(e.charCodeAt(0))}),t}catch(e){}return null}function b(e){return new Promise((t,s)=>{const n=new FileReader;n.onerror=e=>{s(n.error)},n.onload=e=>{const i=a.TheCard.importVCard(n.result);i?t(i):s(new Error(\"Failed to parse vCard\"))},n.readAsText(e)})}},6789:function(e,t,s){s.d(t,{A:function(){return i}});var a=s(1594),n=s.n(a);class i extends n().PureComponent{constructor(e){super(e),this.inputRef=n().createRef(),this.state={value:this.props.value||\"\",visible:!1},this.handleVisibility=this.handleVisibility.bind(this),this.handeTextChange=this.handeTextChange.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this)}componentDidMount(){this.props.autoFocus&&this.inputRef.current.focus()}handeTextChange(e){this.setState({value:e.target.value}),this.props.onChange&&this.props.onChange(e)}handleVisibility(e){e.preventDefault(),this.setState({visible:!this.state.visible})}handleKeyDown(e){27==e.keyCode?(this.setState({value:this.props.value||\"\",visible:!1}),this.props.onFinished&&this.props.onFinished()):13==e.keyCode&&this.handleEditingFinished()}handleEditingFinished(e){if(e){let t=e.currentTarget;setTimeout(e=>{t.contains(document.activeElement)||this.props.onFinished&&this.props.onFinished(this.state.value)},0)}else this.props.onFinished&&this.props.onFinished(this.state.value.trim())}render(){return n().createElement(\"div\",{tabIndex:\"-1\",className:\"group-focus\",onBlur:this.handleEditingFinished},n().createElement(\"input\",{className:\"with-icon-right\",type:this.state.visible?\"text\":\"password\",value:this.state.value,placeholder:this.props.placeholder,maxLength:32,required:this.props.required?\"required\":\"\",autoFocus:this.props.autoFocus?\"autoFocus\":\"\",autoComplete:this.props.autoComplete,onChange:this.handeTextChange,onKeyDown:this.handleKeyDown,ref:this.inputRef}),n().createElement(\"span\",{onClick:this.handleVisibility},n().createElement(\"i\",{className:\"material-icons clickable light-gray\"},this.state.visible?\"visibility\":\"visibility_off\")))}}},6904:function(e,t,s){s.d(t,{A:function(){return c}});var a=s(1594),n=s.n(a),i=s(4532),r=s(8589),o=s(3540),l=s(9027);class c extends n().PureComponent{render(){let e;if(!0===this.props.avatar)if(i.Tinode.isSelfTopicName(this.props.topic))e=n().createElement(\"img\",{className:\"avatar self\",alt:\"avatar\",src:l.Yd});else{const t=i.Tinode.isGroupTopicName(this.props.topic),s=(0,r.kJ)(this.props.topic,t);if(this.props.topic&&this.props.title&&this.props.title.trim()){const t=this.props.title.trim().charAt(0),a=\"lettertile \"+s+(this.props.deleted?\" disabled\":\"\");e=n().createElement(\"div\",{className:a},n().createElement(\"div\",null,t))}else{const a=\"material-icons \"+s+(this.props.deleted?\" disabled\":\"\");e=t?n().createElement(\"i\",{className:a},\"group\"):n().createElement(\"i\",{className:a},\"person\")}}else if(this.props.avatar){const t=this.props.authorizeURL((0,o.wk)(this.props.avatar,\"image\")),s=\"avatar\"+(this.props.deleted?\" deleted\":\"\");e=n().createElement(\"img\",{className:s,alt:\"avatar\",src:t,onError:e=>{e.target.onerror=null,e.target.src=\"img/broken_image.png\"}})}else e=null;return e}}},7151:function(e,t,s){s.d(t,{A:function(){return a}});class a{static parseUrlHash(e){const t=e.split(\"?\",2),s={};let a=[];return t[0]&&(a=t[0].replace(\"#\",\"\").split(\"/\")),t[1]&&t[1].split(\"&\").forEach(e=>{const t=e.indexOf(\"=\");t>0&&(s[e.slice(0,t)]=decodeURIComponent(e.slice(t+1)))}),{path:a,params:s}}static navigateTo(e){window.location.hash=e}static composeUrlHash(e,t){let s=e.join(\"/\");const a=[];for(const e in t)t.hasOwnProperty(e)&&void 0!==t[e]&&a.push(e+\"=\"+encodeURIComponent(t[e]));return a.length>0&&(s+=\"?\"+a.join(\"&\")),s}static addUrlParam(e,t,s){const n=a.parseUrlHash(e);return n.params[t]=s,a.composeUrlHash(n.path,n.params)}static removeUrlParam(e,t){const s=a.parseUrlHash(e);return delete s.params[t],a.composeUrlHash(s.path,s.params)}static removeUrlParams(e,t){Array.isArray(t)||(t=[t]);const s=a.parseUrlHash(e);for(const e of t)delete s.params[e];return a.composeUrlHash(s.path,s.params)}static setUrlSidePanel(e,t){const s=a.parseUrlHash(e);return s.path[0]=t,a.composeUrlHash(s.path,s.params)}static setUrlInfoPanel(e,t){const s=a.parseUrlHash(e);return t?s.params.info=t:delete s.params.info,a.composeUrlHash(s.path,s.params)}static setUrlTopic(e,t){const s=a.parseUrlHash(e);return s.path[1]=t,delete s.params.info,a.composeUrlHash(s.path,s.params)}}},8089:function(e,t,s){s.d(t,{A:function(){return b}});var a=s(1594),n=s.n(a),i=s(8181),r=s(4532),o=s(221),l=s(9418),c=s(1485),d=s(3307),h=s(9027),p=s(6110),u=s(8589),m=s(3540);const g=(0,i.defineMessages)({alias_invalid:{id:\"alias_invalid\",defaultMessage:[{type:0,value:\"(invalid)\"}]},alias_already_taken:{id:\"alias_already_taken\",defaultMessage:[{type:0,value:\"(already taken)\"}]},self_topic_name:{id:\"self_topic_name\",defaultMessage:[{type:0,value:\"Saved messages\"}]},self_topic_comment:{id:\"self_topic_comment\",defaultMessage:[{type:0,value:\"Notes, messages, links, files saved for posterity\"}]}});class f extends n().Component{constructor(e){super(e);const t=this.props.tinode.getTopic(this.props.topic),s=t.getAccessMode(),a=r.Tinode.isSelfTopicName(this.props.topic);this.state={isMe:r.Tinode.isMeTopicName(this.props.topic),isSelf:a,owner:s&&s.isOwner(),fullName:t.public?t.public.fn:a?this.props.intl.formatMessage(g.self_topic_name):null,private:t.private?t.private.comment:null,description:t.public?t.public.note:a?this.props.intl.formatMessage(g.self_topic_comment):null,avatar:(0,p.to)(t.public?t.public.photo:null),tags:t.tags()||[],newAvatar:null,newAvatarMime:null,aliasError:\"\"},this.previousOnTags=null,this.aliasCheckTimer=null,this.aliasCheckPromise=null,this.tnNewTags=this.tnNewTags.bind(this),this.handleFullNameUpdate=this.handleFullNameUpdate.bind(this),this.handleImageUpdated=this.handleImageUpdated.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handlePrivateUpdate=this.handlePrivateUpdate.bind(this),this.handleAliasUpdate=this.handleAliasUpdate.bind(this),this.handleDescriptionUpdate=this.handleDescriptionUpdate.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this),this.validateAlias=this.validateAlias.bind(this),this.cancelValidator=this.cancelValidator.bind(this)}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);this.previousOnTags=e.onTagsUpdated,e.onTagsUpdated=this.tnNewTags}componentWillUnmount(){this.props.tinode.getTopic(this.props.topic).onTagsUpdated=this.previousOnTags,this.cancelValidator()}tnNewTags(e){this.setState({tags:e})}handleFullNameUpdate(e){(e=(0,u.W5)(e.trim(),h.tS))&&this.state.fullName!==e&&(this.setState({fullName:e}),this.props.onUpdateTopicDesc(this.props.topic,(0,m.k6)(e,null)))}handlePrivateUpdate(e){e=e.trim().substring(0,h.tS),this.state.private!==e&&(this.setState({private:e}),this.props.onUpdateTopicDesc(this.props.topic,null,e||r.Tinode.DEL_CHAR))}handleDescriptionUpdate(e){(e=e.trim().substring(0,h.lQ))&&(this.setState({description:e}),this.props.onUpdateTopicDesc(this.props.topic,(0,m.k6)(null,null,null,e)))}handleImageUpdated(e,t){this.setState({newAvatar:t,newAvatarMime:e}),t||(this.setState({avatar:null}),this.props.onUpdateTopicDesc(this.props.topic,(0,m.k6)(null,r.Tinode.DEL_CHAR)))}handleAvatarCropped(e,t,s,a){const n=t?URL.createObjectURL(t):null;this.setState({avatar:n,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}uploadAvatar(e,t,s,a){const n=e=>{let{mime:t,blob:s}=e;if(s.size>h.Z7){this.props.tinode.getLargeFileHelper().upload(s).then(e=>this.props.onUpdateTopicDesc(this.props.topic,(0,m.k6)(null,e))).catch(e=>this.props.onError(e.message,\"err\"))}else(0,p.Sk)(s).then(e=>{const s=(0,p.to)({data:e.bits,type:t});this.setState({source:s}),this.props.onUpdateTopicDesc(this.props.topic,(0,m.k6)(null,s))})};s>h.eQ||a>h.eQ||s!=a?(0,p.ag)(t,h.eQ,h.eQ,h.qy,!0).then(e=>n(e)).catch(e=>this.props.onError(e.message,\"err\")):n({mime:e,blob:t,width:s,height:a})}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}handleAliasUpdate(e){const t=(e=(e||\"\").trim())?r.Tinode.setUniqueTag(this.state.tags,r.Tinode.TAG_ALIAS+e.toLowerCase()):r.Tinode.clearTagPrefix(this.state.tags,r.Tinode.TAG_ALIAS);this.handleTagsUpdated(t)}validateAlias(e){if(this.cancelValidator(),!(e=e.trim()))return this.setState({aliasError:\"\"}),!0;if(!r.Tinode.isValidTagValue(e))return this.setState({aliasError:this.props.intl.formatMessage(g.alias_invalid)}),!1;this.setState({aliasError:\"\"});const t=this.props.tinode.getFndTopic();if(!t)return this.setState({aliasError:\"\"}),!0;this.aliasCheckPromise={};const s=new Promise((e,t)=>{this.aliasCheckPromise.resolve=e,this.aliasCheckPromise.reject=t});return this.aliasCheckTimer=setTimeout(s=>{this.aliasCheckTimer=null,t.checkTagUniqueness(`${r.Tinode.TAG_ALIAS}${e}`,this.props.topic).then(e=>{this.aliasCheckPromise.resolve(e),this.setState({aliasError:e?\"\":this.props.intl.formatMessage(g.alias_already_taken)})}).catch(e=>{this.aliasCheckPromise.reject(e),this.setState({aliasError:e.message})})},1e3),s}cancelValidator(){this.aliasCheckTimer&&(clearTimeout(this.aliasCheckTimer),this.aliasCheckTimer=null,this.aliasCheckPromise.reject(null))}handleTagsUpdated(e){(0,m.af)(this.state.tags.slice(0),e.slice(0))||this.props.onUpdateTags(e)}render(){if(this.state.newAvatar)return n().createElement(o.A,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});const e=this.state.isMe||this.state.owner&&!this.state.isSelf;let t=this.state.tags&&this.state.tags.find(e=>e.startsWith(\"alias:\"));return t&&(t=t.substring(6)),n().createElement(n().Fragment,null,n().createElement(\"div\",{className:\"panel-form-column\"},n().createElement(\"center\",null,n().createElement(l.A,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!e,uid:this.props.topic,title:this.state.fullName,onImageUpdated:this.handleImageUpdated,onError:this.props.onError})),this.state.isMe?n().createElement(\"div\",{className:\"group\"},n().createElement(\"label\",{className:\"small\"},n().createElement(i.FormattedMessage,{id:\"label_your_name\",defaultMessage:[{type:0,value:\"Your name\"}]})),n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"full_name_prompt\",defaultMessage:[{type:0,value:\"Full name, e.g. John Doe\"}]},e=>n().createElement(c.A,{placeholder:e,value:this.state.fullName,required:!0,onFinished:this.handleFullNameUpdate})))):n().createElement(n().Fragment,null,n().createElement(\"div\",{className:\"group\"},n().createElement(\"div\",null,n().createElement(\"label\",{className:\"small\"},n().createElement(i.FormattedMessage,{id:\"label_topic_name\",defaultMessage:[{type:0,value:\"Name\"}]}))),n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"topic_name_editing_placeholder\",defaultMessage:[{type:0,value:\"Freeform name of the group\"}]},t=>n().createElement(c.A,{placeholder:t,readOnly:!e,value:this.state.fullName,required:!0,maxLength:32,onFinished:this.handleFullNameUpdate})))),n().createElement(\"div\",{className:\"group\"},n().createElement(\"div\",null,n().createElement(\"label\",{className:\"small\"},n().createElement(i.FormattedMessage,{id:\"label_private\",defaultMessage:[{type:0,value:\"Private comment\"}]}))),n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"private_editing_placeholder\",defaultMessage:[{type:0,value:\"Visible to you only\"}]},e=>n().createElement(c.A,{placeholder:e,value:this.state.private,onFinished:this.handlePrivateUpdate}))))),e||t?n().createElement(\"div\",{className:\"group\"},n().createElement(\"div\",null,n().createElement(\"label\",{className:\"small \"+(this.state.aliasError?\"invalid\":\"\")},n().createElement(i.FormattedMessage,{id:\"label_alias_edit\",defaultMessage:[{type:0,value:\"Alias\"}]}),\" \",this.state.aliasError)),n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"alias_editing_placeholder\",defaultMessage:[{type:0,value:\"Alias (optional)\"}]},s=>n().createElement(c.A,{placeholder:s,readOnly:!e,value:t,validator:this.validateAlias,iconLeft:\"alternate_email\",maxLength:24,spellCheck:!1,onFinished:this.handleAliasUpdate})))):null,e||this.state.description?n().createElement(\"div\",{className:\"group\"},n().createElement(\"div\",null,n().createElement(\"label\",{className:\"small\"},n().createElement(i.FormattedMessage,{id:\"label_description\",defaultMessage:[{type:0,value:\"Description\"}]}))),n().createElement(\"div\",null,n().createElement(i.FormattedMessage,{id:\"description_editing_placeholder\",defaultMessage:[{type:0,value:\"Description (optional)\"}]},t=>n().createElement(c.A,{placeholder:t,readOnly:!e,value:this.state.description,multiline:2,onFinished:this.handleDescriptionUpdate})))):null),e&&!this.state.isMe?n().createElement(n().Fragment,null,n().createElement(\"div\",{className:\"hr\"}),n().createElement(i.FormattedMessage,{id:\"title_tag_manager\",defaultMessage:[{type:0,value:\"Tags (search & discovery)\"}]},e=>n().createElement(d.A,{tinode:this.props.tinode,title:e,activated:!1,tags:this.state.tags,onSubmit:this.handleTagsUpdated}))):null)}}var v=(0,i.injectIntl)(f);class b extends n().Component{constructor(e){super(e);this.props.tinode.getTopic(this.props.topic).getAccessMode();this.state={tags:[]},this.previousTagsUpdated=void 0,this.onTagsUpdated=this.onTagsUpdated.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this)}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(t.onTagsUpdated!=this.onTagsUpdated&&(\"grp\"==t.getType()?(this.previousTagsUpdated=t.onTagsUpdated,t.onTagsUpdated=this.onTagsUpdated):this.previousTagsUpdated=void 0),this.state.topic!=e.topic&&this.setState({topic:e.topic}))}componentWillUnmount(){this.props.tinode.getTopic(this.props.topic).onTagsUpdated=this.previousTagsUpdated}onTagsUpdated(e){this.setState({tags:e}),this.previousTagsUpdated&&this.previousTagsUpdated!=this.onTagsUpdated&&this.previousTagsUpdated(e)}handleTagsUpdated(e){(0,m.af)(this.state.tags.slice(0),e.slice(0))||this.props.onUpdateTagsRequest(this.props.topic,e)}render(){return n().createElement(\"div\",{className:\"scrollable-panel\"},n().createElement(v,{tinode:this.props.tinode,topic:this.props.topic,onUpdateTopicDesc:this.props.onUpdateTopicDesc,onUpdateTags:this.handleTagsUpdated,onError:this.props.onError}))}}},8181:function(e){e.exports=ReactIntl},8262:function(e,t,s){s.d(t,{A:function(){return a}});class a{static setObject(e,t){localStorage.setItem(e,JSON.stringify(t))}static getObject(e){const t=localStorage.getItem(e);return t&&JSON.parse(t)}static updateObject(e,t){const s=this.getObject(e);this.setObject(e,Object.assign(s||{},t))}static removeItem(e){localStorage.removeItem(e)}}},8589:function(e,t,s){function a(e,t){t=t||window.navigator.userLanguage||window.navigator.language;const s=new Date;return e.getFullYear()==s.getFullYear()?e.getMonth()==s.getMonth()&&e.getDate()==s.getDate()?e.toLocaleTimeString(t,{hour12:!1,hour:\"2-digit\",minute:\"2-digit\"}):e.toLocaleDateString(t,{hour12:!1,month:\"short\",day:\"numeric\",hour:\"2-digit\",minute:\"2-digit\"}):e.toLocaleDateString(t,{year:\"numeric\",month:\"short\",day:\"numeric\"})}function n(e,t){t=t||window.navigator.userLanguage||window.navigator.language;const s=new Date,a=Math.floor((e.getTime()-6e4*e.getTimezoneOffset())/864e5)-Math.floor((s.getTime()-6e4*s.getTimezoneOffset())/864e5);return Math.abs(a)<2?new Intl.RelativeTimeFormat(t,{numeric:\"auto\"}).format(a,\"day\"):new Intl.DateTimeFormat(t).format(e)}function i(e,t){if(\"number\"!=typeof e)return\"\";let s=(0|Math.floor(e/60))%60,a=0|Math.floor(e/3600);(t||a>0)&&(s=s<10?`0${s}`:s);let n=(0|e)%60;return n=n<10?`0${n}`:n,0==a?`${s}:${n}`:`${a}:${s}:${n}`}function r(e){if(!e||0==e)return\"0 Bytes\";const t=[\"Bytes\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\"],s=Math.min(0|Math.floor(Math.log2(e)/10),t.length-1),a=e/Math.pow(1024,s),n=s>0?a<3?2:a<30?1:0:0;return a.toFixed(n)+\" \"+t[s]}function o(e,t){return\"string\"!=typeof e?e:e.length>t?e.slice(0,t/2-1)+\"…\"+e.slice(1-t/2):e}function l(e,t,s){return(t?\"lt-\":\"dk-\")+(s?\"fg-\":\"bg-\")+(a=e,Math.abs(function(e){let t=0;e=\"\"+e;for(let s=0;s<e.length;s++)t=(t<<5)-t+e.charCodeAt(s),t&=t;return t}(a))%16);var a}function c(e){const t=e.toUpperCase().split(\"\").map(e=>127397+e.charCodeAt());return String.fromCodePoint(...t)}function d(e,t){if(\"string\"!=typeof e)return e;if(e.length<=t)return e;return/[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/.test(e)?\"…\"+e.slice(0,t-1):e.slice(0,t-1)+\"…\"}s.d(t,{Tu:function(){return o},W5:function(){return d},Ye:function(){return i},cq:function(){return a},kJ:function(){return l},lX:function(){return r},lb:function(){return c},mf:function(){return n}})},9027:function(e,t,s){s.d(t,{C3:function(){return a},Cx:function(){return T},D3:function(){return m},DT:function(){return N},GB:function(){return p},H1:function(){return E},HX:function(){return r},J:function(){return c},JS:function(){return f},Lq:function(){return n},NR:function(){return l},QG:function(){return _},RS:function(){return B},Rz:function(){return R},S:function(){return Z},SE:function(){return i},TR:function(){return F},Ti:function(){return h},Tn:function(){return V},U3:function(){return o},Uv:function(){return Q},V9:function(){return q},VJ:function(){return g},Yd:function(){return G},Z7:function(){return b},ZW:function(){return $},_g:function(){return k},_j:function(){return w},bn:function(){return Y},cL:function(){return X},cZ:function(){return u},eQ:function(){return v},fi:function(){return j},gb:function(){return J},hB:function(){return U},hT:function(){return W},iB:function(){return O},iq:function(){return A},kA:function(){return z},lQ:function(){return D},mp:function(){return S},mu:function(){return x},qV:function(){return y},qy:function(){return C},rl:function(){return H},rn:function(){return d},sT:function(){return P},tS:function(){return I},wj:function(){return M},wl:function(){return L},yS:function(){return K}});const a=\"TinodeWeb/\"+(s(257).i||\"0.24\"),n=\"AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K\",i={hosted:\"web.tinode.co\",local:\"localhost:6060\"},r=i.hosted,o=!0,l=3e3,c=1500,d=2,h=96,p=16,u=\"JRWPS\",m=\"N\",g=640,f=13,v=384,b=4096,w=32,y=128,E=24,S=262144,C=1<<23,_=1024,M=64,T=96,k=36,A=48,N=4,I=60,D=360,x=24,P=80,R=30,F=84,U=48,L=2e3,O=6e5,j=\"mailto:support@tinode.co\",B=\"https://tinode.co/privacy.html\",q=\"https://tinode.co/terms.html\",H=!1,z=[\"http\",\"https\",\"ftp\",\"ftps\"],V=128,W=8e4,$=1e3,K=3*f,G=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=\",Y=3e3,J=\"auto\",X=10,Q=\"application/json\",Z={type:\"patt\",index:0,path:\"img/bkg/\"}},9418:function(e,t,s){s.d(t,{A:function(){return c}});var a=s(1594),n=s.n(a),i=s(6904),r=s(1013),o=s(3540),l=s(9027);class c extends n().Component{constructor(e){super(e),this.state={source:e.avatar},this.handleFileReceived=this.handleFileReceived.bind(this)}componentDidUpdate(e){this.props.avatar!=e.avatar&&this.setState({source:this.props.avatar})}handleFileReceived(e){const t=e.target.files[0];this.props.onImageUpdated(t.type,URL.createObjectURL(t),t.name),e.target.value=\"\"}render(){const e=\"file-input-avatar-\"+(\"\"+Math.random()).substring(0,4),t=\"avatar-upload\"+(this.props.readOnly?\" read-only\":\"\");return n().createElement(\"div\",{className:t},this.props.readOnly||!this.state.source?null:n().createElement(\"a\",{href:\"#\",className:\"clear-avatar\",onClick:e=>{e.preventDefault(),this.props.onImageUpdated()}},n().createElement(\"i\",{className:\"material-icons\"},\"clear\")),this.state.source?n().createElement(\"img\",{src:this.props.tinode.authorizeURL((0,o.wk)(this.state.source,\"image\")),className:\"preview\"}):this.props.readOnly&&this.props.uid?n().createElement(\"div\",{className:\"avatar-box\"},n().createElement(i.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:!0,topic:this.props.uid,title:this.props.title})):n().createElement(\"div\",{className:\"blank\"},l.eQ,\"×\",l.eQ),this.props.readOnly?null:n().createElement(\"input\",{type:\"file\",id:e,className:\"inputfile hidden\",accept:\"image/*\",onChange:this.handleFileReceived}),this.props.readOnly?null:n().createElement(\"label\",{htmlFor:e,className:\"round\"},n().createElement(\"i\",{className:\"material-icons\"},\"file_upload\")),n().createElement(r.A,{show:this.props.uploading,large:!0,clear:!0,centered:!0}))}}},9593:function(e){e.exports=QRCode},9895:function(e,t,s){s.d(t,{A:function(){return r}});var a=s(1594),n=s.n(a),i=s(8181);class r extends n().PureComponent{render(){return n().createElement(\"div\",{className:\"uploader\"},n().createElement(\"div\",null,n().createElement(\"span\",{style:{width:100*this.props.progress+\"%\"}})),this.props.progress<.999?n().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onCancel()}},n().createElement(\"i\",{className:\"material-icons\"},\"close\"),\" \",n().createElement(i.FormattedMessage,{id:\"action_cancel\",defaultMessage:[{type:0,value:\"cancel\"}]})):n().createElement(i.FormattedMessage,{id:\"upload_finishing\",defaultMessage:[{type:0,value:\"finishing...\"}]}))}}}},i={};function r(e){var t=i[e];if(void 0!==t)return t.exports;var s=i[e]={exports:{}};return n[e].call(s.exports,s,s.exports,r),s.exports}r.m=n,r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},r.t=function(s,a){if(1&a&&(s=this(s)),8&a)return s;if(\"object\"==typeof s&&s){if(4&a&&s.__esModule)return s;if(16&a&&\"function\"==typeof s.then)return s}var n=Object.create(null);r.r(n);var i={};e=e||[null,t({}),t([]),t(t)];for(var o=2&a&&s;(\"object\"==typeof o||\"function\"==typeof o)&&!~e.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach(function(e){i[e]=function(){return s[e]}});return i.default=function(){return s},r.d(n,i),n},r.d=function(e,t){for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.f={},r.e=function(e){return Promise.all(Object.keys(r.f).reduce(function(t,s){return r.f[s](e,t),t},[]))},r.u=function(e){return e+\".prod.js\"},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s={},a=\"tinode-webapp:\",r.l=function(e,t,n,i){if(s[e])s[e].push(t);else{var o,l;if(void 0!==n)for(var c=document.getElementsByTagName(\"script\"),d=0;d<c.length;d++){var h=c[d];if(h.getAttribute(\"src\")==e||h.getAttribute(\"data-webpack\")==a+n){o=h;break}}o||(l=!0,(o=document.createElement(\"script\")).charset=\"utf-8\",r.nc&&o.setAttribute(\"nonce\",r.nc),o.setAttribute(\"data-webpack\",a+n),o.src=e),s[e]=[t];var p=function(t,a){o.onerror=o.onload=null,clearTimeout(u);var n=s[e];if(delete s[e],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach(function(e){return e(a)}),t)return t(a)},u=setTimeout(p.bind(null,void 0,{type:\"timeout\",target:o}),12e4);o.onerror=p.bind(null,o.onerror),o.onload=p.bind(null,o.onload),l&&document.head.appendChild(o)}},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.p=\"/umd/\",function(){var e={57:0};r.f.j=function(t,s){var a=r.o(e,t)?e[t]:void 0;if(0!==a)if(a)s.push(a[2]);else{var n=new Promise(function(s,n){a=e[t]=[s,n]});s.push(a[2]=n);var i=r.p+r.u(t),o=new Error;r.l(i,function(s){if(r.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var n=s&&(\"load\"===s.type?\"missing\":s.type),i=s&&s.target&&s.target.src;o.message=\"Loading chunk \"+t+\" failed.\\n(\"+n+\": \"+i+\")\",o.name=\"ChunkLoadError\",o.type=n,o.request=i,a[1](o)}},\"chunk-\"+t,t)}};var t=function(t,s){var a,n,i=s[0],o=s[1],l=s[2],c=0;if(i.some(function(t){return 0!==e[t]})){for(a in o)r.o(o,a)&&(r.m[a]=o[a]);if(l)l(r)}for(t&&t(s);c<i.length;c++)n=i[c],r.o(e,n)&&e[n]&&e[n][0](),e[n]=0},s=self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))}();var o=r(1594),l=r.n(o),c=r(5338),d=r(8181);const h=function(e){const t=[];let s=0;for(let a=0;a<e.length;a++){let n=e.charCodeAt(a);n<128?t[s++]=n:n<2048?(t[s++]=n>>6|192,t[s++]=63&n|128):55296==(64512&n)&&a+1<e.length&&56320==(64512&e.charCodeAt(a+1))?(n=65536+((1023&n)<<10)+(1023&e.charCodeAt(++a)),t[s++]=n>>18|240,t[s++]=n>>12&63|128,t[s++]=n>>6&63|128,t[s++]=63&n|128):(t[s++]=n>>12|224,t[s++]=n>>6&63|128,t[s++]=63&n|128)}return t},p={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+\"+/=\"},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+\"-_.\"},HAS_NATIVE_SUPPORT:\"function\"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error(\"encodeByteArray takes an array as a parameter\");this.init_();const s=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,a=[];for(let t=0;t<e.length;t+=3){const n=e[t],i=t+1<e.length,r=i?e[t+1]:0,o=t+2<e.length,l=o?e[t+2]:0,c=n>>2,d=(3&n)<<4|r>>4;let h=(15&r)<<2|l>>6,p=63&l;o||(p=64,i||(h=64)),a.push(s[c],s[d],s[h],s[p])}return a.join(\"\")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(h(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let s=0,a=0;for(;s<e.length;){const n=e[s++];if(n<128)t[a++]=String.fromCharCode(n);else if(n>191&&n<224){const i=e[s++];t[a++]=String.fromCharCode((31&n)<<6|63&i)}else if(n>239&&n<365){const i=((7&n)<<18|(63&e[s++])<<12|(63&e[s++])<<6|63&e[s++])-65536;t[a++]=String.fromCharCode(55296+(i>>10)),t[a++]=String.fromCharCode(56320+(1023&i))}else{const i=e[s++],r=e[s++];t[a++]=String.fromCharCode((15&n)<<12|(63&i)<<6|63&r)}}return t.join(\"\")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();const s=t?this.charToByteMapWebSafe_:this.charToByteMap_,a=[];for(let t=0;t<e.length;){const n=s[e.charAt(t++)],i=t<e.length?s[e.charAt(t)]:0;++t;const r=t<e.length?s[e.charAt(t)]:64;++t;const o=t<e.length?s[e.charAt(t)]:64;if(++t,null==n||null==i||null==r||null==o)throw new u;const l=n<<2|i>>4;if(a.push(l),64!==r){const e=i<<4&240|r>>2;if(a.push(e),64!==o){const e=r<<6&192|o;a.push(e)}}}return a},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e<this.ENCODED_VALS.length;e++)this.byteToCharMap_[e]=this.ENCODED_VALS.charAt(e),this.charToByteMap_[this.byteToCharMap_[e]]=e,this.byteToCharMapWebSafe_[e]=this.ENCODED_VALS_WEBSAFE.charAt(e),this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[e]]=e,e>=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};class u extends Error{constructor(){super(...arguments),this.name=\"DecodeBase64StringError\"}}const m=function(e){return function(e){const t=h(e);return p.encodeByteArray(t,!0)}(e).replace(/\\./g,\"\")},g=function(e){try{return p.decodeString(e,!0)}catch(e){console.error(\"base64Decode failed: \",e)}return null};const f=()=>function(){if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error(\"Unable to locate global object.\")}().__FIREBASE_DEFAULTS__,v=()=>{try{return f()||(()=>{if(\"undefined\"==typeof process||void 0===process.env)return;const e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0})()||(()=>{if(\"undefined\"==typeof document)return;let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}const t=e&&g(e[1]);return t&&JSON.parse(t)})()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}},b=()=>{var e;return null===(e=v())||void 0===e?void 0:e.config};class w{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}wrapCallback(e){return(t,s)=>{t?this.reject(t):this.resolve(s),\"function\"==typeof e&&(this.promise.catch(()=>{}),1===e.length?e(t):e(t,s))}}}function y(){try{return\"object\"==typeof indexedDB}catch(e){return!1}}function E(){return new Promise((e,t)=>{try{let s=!0;const a=\"validate-browser-context-for-indexeddb-analytics-module\",n=self.indexedDB.open(a);n.onsuccess=()=>{n.result.close(),s||self.indexedDB.deleteDatabase(a),e(!0)},n.onupgradeneeded=()=>{s=!1},n.onerror=()=>{var e;t((null===(e=n.error)||void 0===e?void 0:e.message)||\"\")}}catch(e){t(e)}})}class S extends Error{constructor(e,t,s){super(t),this.code=e,this.customData=s,this.name=\"FirebaseError\",Object.setPrototypeOf(this,S.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,C.prototype.create)}}class C{constructor(e,t,s){this.service=e,this.serviceName=t,this.errors=s}create(e,...t){const s=t[0]||{},a=`${this.service}/${e}`,n=this.errors[e],i=n?function(e,t){return e.replace(_,(e,s)=>{const a=t[s];return null!=a?String(a):`<${s}?>`})}(n,s):\"Error\",r=`${this.serviceName}: ${i} (${a}).`;return new S(a,r,s)}}const _=/\\{\\$([^}]+)}/g;function M(e,t){if(e===t)return!0;const s=Object.keys(e),a=Object.keys(t);for(const n of s){if(!a.includes(n))return!1;const s=e[n],i=t[n];if(T(s)&&T(i)){if(!M(s,i))return!1}else if(s!==i)return!1}for(const e of a)if(!s.includes(e))return!1;return!0}function T(e){return null!==e&&\"object\"==typeof e}function k(e){return e&&e._delegate?e._delegate:e}class A{constructor(e,t,s){this.name=e,this.instanceFactory=t,this.type=s,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode=\"LAZY\",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}const N=\"[DEFAULT]\";class I{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const e=new w;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{const s=this.getOrInitializeService({instanceIdentifier:t});s&&e.resolve(s)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;const s=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),a=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(!this.isInitialized(s)&&!this.shouldAutoInitialize()){if(a)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:s})}catch(e){if(a)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if(function(e){return\"EAGER\"===e.instantiationMode}(e))try{this.getOrInitializeService({instanceIdentifier:N})}catch(e){}for(const[e,t]of this.instancesDeferred.entries()){const s=this.normalizeInstanceIdentifier(e);try{const e=this.getOrInitializeService({instanceIdentifier:s});t.resolve(e)}catch(e){}}}}clearInstance(e=N){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter(e=>\"INTERNAL\"in e).map(e=>e.INTERNAL.delete()),...e.filter(e=>\"_delete\"in e).map(e=>e._delete())])}isComponentSet(){return null!=this.component}isInitialized(e=N){return this.instances.has(e)}getOptions(e=N){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:t={}}=e,s=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(s))throw Error(`${this.name}(${s}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const a=this.getOrInitializeService({instanceIdentifier:s,options:t});for(const[e,t]of this.instancesDeferred.entries()){s===this.normalizeInstanceIdentifier(e)&&t.resolve(a)}return a}onInit(e,t){var s;const a=this.normalizeInstanceIdentifier(t),n=null!==(s=this.onInitCallbacks.get(a))&&void 0!==s?s:new Set;n.add(e),this.onInitCallbacks.set(a,n);const i=this.instances.get(a);return i&&e(i,a),()=>{n.delete(e)}}invokeOnInitCallbacks(e,t){const s=this.onInitCallbacks.get(t);if(s)for(const a of s)try{a(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let s=this.instances.get(e);if(!s&&this.component&&(s=this.component.instanceFactory(this.container,{instanceIdentifier:(a=e,a===N?void 0:a),options:t}),this.instances.set(e,s),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(s,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,s)}catch(e){}var a;return s||null}normalizeInstanceIdentifier(e=N){return this.component?this.component.multipleInstances?e:N:e}shouldAutoInitialize(){return!!this.component&&\"EXPLICIT\"!==this.component.instantiationMode}}class D{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const t=new I(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}const x=[];var P;!function(e){e[e.DEBUG=0]=\"DEBUG\",e[e.VERBOSE=1]=\"VERBOSE\",e[e.INFO=2]=\"INFO\",e[e.WARN=3]=\"WARN\",e[e.ERROR=4]=\"ERROR\",e[e.SILENT=5]=\"SILENT\"}(P||(P={}));const R={debug:P.DEBUG,verbose:P.VERBOSE,info:P.INFO,warn:P.WARN,error:P.ERROR,silent:P.SILENT},F=P.INFO,U={[P.DEBUG]:\"log\",[P.VERBOSE]:\"log\",[P.INFO]:\"info\",[P.WARN]:\"warn\",[P.ERROR]:\"error\"},L=(e,t,...s)=>{if(t<e.logLevel)return;const a=(new Date).toISOString(),n=U[t];if(!n)throw new Error(`Attempted to log a message with an invalid logType (value: ${t})`);console[n](`[${a}]  ${e.name}:`,...s)};let O,j;const B=new WeakMap,q=new WeakMap,H=new WeakMap,z=new WeakMap,V=new WeakMap;let W={get(e,t,s){if(e instanceof IDBTransaction){if(\"done\"===t)return q.get(e);if(\"objectStoreNames\"===t)return e.objectStoreNames||H.get(e);if(\"store\"===t)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return G(e[t])},set(e,t,s){return e[t]=s,!0},has(e,t){return e instanceof IDBTransaction&&(\"done\"===t||\"store\"===t)||t in e}};function $(e){return e!==IDBDatabase.prototype.transaction||\"objectStoreNames\"in IDBTransaction.prototype?(j||(j=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(Y(this),t),G(B.get(this))}:function(...t){return G(e.apply(Y(this),t))}:function(t,...s){const a=e.call(Y(this),t,...s);return H.set(a,t.sort?t.sort():[t]),G(a)}}function K(e){return\"function\"==typeof e?$(e):(e instanceof IDBTransaction&&function(e){if(q.has(e))return;const t=new Promise((t,s)=>{const a=()=>{e.removeEventListener(\"complete\",n),e.removeEventListener(\"error\",i),e.removeEventListener(\"abort\",i)},n=()=>{t(),a()},i=()=>{s(e.error||new DOMException(\"AbortError\",\"AbortError\")),a()};e.addEventListener(\"complete\",n),e.addEventListener(\"error\",i),e.addEventListener(\"abort\",i)});q.set(e,t)}(e),t=e,(O||(O=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,W):e);var t}function G(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,s)=>{const a=()=>{e.removeEventListener(\"success\",n),e.removeEventListener(\"error\",i)},n=()=>{t(G(e.result)),a()},i=()=>{s(e.error),a()};e.addEventListener(\"success\",n),e.addEventListener(\"error\",i)});return t.then(t=>{t instanceof IDBCursor&&B.set(t,e)}).catch(()=>{}),V.set(t,e),t}(e);if(z.has(e))return z.get(e);const t=K(e);return t!==e&&(z.set(e,t),V.set(t,e)),t}const Y=e=>V.get(e);function J(e,t,{blocked:s,upgrade:a,blocking:n,terminated:i}={}){const r=indexedDB.open(e,t),o=G(r);return a&&r.addEventListener(\"upgradeneeded\",e=>{a(G(r.result),e.oldVersion,e.newVersion,G(r.transaction),e)}),s&&r.addEventListener(\"blocked\",e=>s(e.oldVersion,e.newVersion,e)),o.then(e=>{i&&e.addEventListener(\"close\",()=>i()),n&&e.addEventListener(\"versionchange\",e=>n(e.oldVersion,e.newVersion,e))}).catch(()=>{}),o}function X(e,{blocked:t}={}){const s=indexedDB.deleteDatabase(e);return t&&s.addEventListener(\"blocked\",e=>t(e.oldVersion,e)),G(s).then(()=>{})}const Q=[\"get\",\"getKey\",\"getAll\",\"getAllKeys\",\"count\"],Z=[\"put\",\"add\",\"delete\",\"clear\"],ee=new Map;function te(e,t){if(!(e instanceof IDBDatabase)||t in e||\"string\"!=typeof t)return;if(ee.get(t))return ee.get(t);const s=t.replace(/FromIndex$/,\"\"),a=t!==s,n=Z.includes(s);if(!(s in(a?IDBIndex:IDBObjectStore).prototype)||!n&&!Q.includes(s))return;const i=async function(e,...t){const i=this.transaction(e,n?\"readwrite\":\"readonly\");let r=i.store;return a&&(r=r.index(t.shift())),(await Promise.all([r[s](...t),n&&i.done]))[0]};return ee.set(t,i),i}W=(e=>({...e,get:(t,s,a)=>te(t,s)||e.get(t,s,a),has:(t,s)=>!!te(t,s)||e.has(t,s)}))(W);class se{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map(e=>{if(function(e){const t=e.getComponent();return\"VERSION\"===(null==t?void 0:t.type)}(e)){const t=e.getImmediate();return`${t.library}/${t.version}`}return null}).filter(e=>e).join(\" \")}}const ae=\"@firebase/app\",ne=\"0.13.2\",ie=new class{constructor(e){this.name=e,this._logLevel=F,this._logHandler=L,this._userLogHandler=null,x.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in P))throw new TypeError(`Invalid value \"${e}\" assigned to \\`logLevel\\``);this._logLevel=e}setLogLevel(e){this._logLevel=\"string\"==typeof e?R[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if(\"function\"!=typeof e)throw new TypeError(\"Value assigned to `logHandler` must be a function\");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,P.DEBUG,...e),this._logHandler(this,P.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,P.VERBOSE,...e),this._logHandler(this,P.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,P.INFO,...e),this._logHandler(this,P.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,P.WARN,...e),this._logHandler(this,P.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,P.ERROR,...e),this._logHandler(this,P.ERROR,...e)}}(\"@firebase/app\"),re=\"@firebase/app-compat\",oe=\"@firebase/analytics-compat\",le=\"@firebase/analytics\",ce=\"@firebase/app-check-compat\",de=\"@firebase/app-check\",he=\"@firebase/auth\",pe=\"@firebase/auth-compat\",ue=\"@firebase/database\",me=\"@firebase/data-connect\",ge=\"@firebase/database-compat\",fe=\"@firebase/functions\",ve=\"@firebase/functions-compat\",be=\"@firebase/installations\",we=\"@firebase/installations-compat\",ye=\"@firebase/messaging\",Ee=\"@firebase/messaging-compat\",Se=\"@firebase/performance\",Ce=\"@firebase/performance-compat\",_e=\"@firebase/remote-config\",Me=\"@firebase/remote-config-compat\",Te=\"@firebase/storage\",ke=\"@firebase/storage-compat\",Ae=\"@firebase/firestore\",Ne=\"@firebase/ai\",Ie=\"@firebase/firestore-compat\",De=\"firebase\",xe=\"[DEFAULT]\",Pe={[ae]:\"fire-core\",[re]:\"fire-core-compat\",[le]:\"fire-analytics\",[oe]:\"fire-analytics-compat\",[de]:\"fire-app-check\",[ce]:\"fire-app-check-compat\",[he]:\"fire-auth\",[pe]:\"fire-auth-compat\",[ue]:\"fire-rtdb\",[me]:\"fire-data-connect\",[ge]:\"fire-rtdb-compat\",[fe]:\"fire-fn\",[ve]:\"fire-fn-compat\",[be]:\"fire-iid\",[we]:\"fire-iid-compat\",[ye]:\"fire-fcm\",[Ee]:\"fire-fcm-compat\",[Se]:\"fire-perf\",[Ce]:\"fire-perf-compat\",[_e]:\"fire-rc\",[Me]:\"fire-rc-compat\",[Te]:\"fire-gcs\",[ke]:\"fire-gcs-compat\",[Ae]:\"fire-fst\",[Ie]:\"fire-fst-compat\",[Ne]:\"fire-vertex\",\"fire-js\":\"fire-js\",[De]:\"fire-js-all\"},Re=new Map,Fe=new Map,Ue=new Map;function Le(e,t){try{e.container.addComponent(t)}catch(s){ie.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,s)}}function Oe(e){const t=e.name;if(Ue.has(t))return ie.debug(`There were multiple attempts to register component ${t}.`),!1;Ue.set(t,e);for(const t of Re.values())Le(t,e);for(const t of Fe.values())Le(t,e);return!0}function je(e,t){const s=e.container.getProvider(\"heartbeat\").getImmediate({optional:!0});return s&&s.triggerHeartbeat(),e.container.getProvider(t)}const Be=new C(\"app\",\"Firebase\",{\"no-app\":\"No Firebase App '{$appName}' has been created - call initializeApp() first\",\"bad-app-name\":\"Illegal App name: '{$appName}'\",\"duplicate-app\":\"Firebase App named '{$appName}' already exists with different options or config\",\"app-deleted\":\"Firebase App named '{$appName}' already deleted\",\"server-app-deleted\":\"Firebase Server App has been deleted\",\"no-options\":\"Need to provide options, when not being deployed to hosting via source.\",\"invalid-app-argument\":\"firebase.{$appName}() takes either no argument or a Firebase App instance.\",\"invalid-log-argument\":\"First argument to `onLog` must be null or a function.\",\"idb-open\":\"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.\",\"idb-get\":\"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.\",\"idb-set\":\"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.\",\"idb-delete\":\"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.\",\"finalization-registry-not-supported\":\"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.\",\"invalid-server-app-environment\":\"FirebaseServerApp is not for use in browser environments.\"});class qe{constructor(e,t,s){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=s,this.container.addComponent(new A(\"app\",()=>this,\"PUBLIC\"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw Be.create(\"app-deleted\",{appName:this._name})}}function He(e,t={}){let s=e;if(\"object\"!=typeof t){t={name:t}}const a=Object.assign({name:xe,automaticDataCollectionEnabled:!0},t),n=a.name;if(\"string\"!=typeof n||!n)throw Be.create(\"bad-app-name\",{appName:String(n)});if(s||(s=b()),!s)throw Be.create(\"no-options\");const i=Re.get(n);if(i){if(M(s,i.options)&&M(a,i.config))return i;throw Be.create(\"duplicate-app\",{appName:n})}const r=new D(n);for(const e of Ue.values())r.addComponent(e);const o=new qe(s,a,r);return Re.set(n,o),o}function ze(e,t,s){var a;let n=null!==(a=Pe[e])&&void 0!==a?a:e;s&&(n+=`-${s}`);const i=n.match(/\\s|\\//),r=t.match(/\\s|\\//);if(i||r){const e=[`Unable to register library \"${n}\" with version \"${t}\":`];return i&&e.push(`library name \"${n}\" contains illegal characters (whitespace or \"/\")`),i&&r&&e.push(\"and\"),r&&e.push(`version name \"${t}\" contains illegal characters (whitespace or \"/\")`),void ie.warn(e.join(\" \"))}Oe(new A(`${n}-version`,()=>({library:n,version:t}),\"VERSION\"))}const Ve=\"firebase-heartbeat-store\";let We=null;function $e(){return We||(We=J(\"firebase-heartbeat-database\",1,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(Ve)}catch(e){console.warn(e)}}}).catch(e=>{throw Be.create(\"idb-open\",{originalErrorMessage:e.message})})),We}async function Ke(e,t){try{const s=(await $e()).transaction(Ve,\"readwrite\"),a=s.objectStore(Ve);await a.put(t,Ge(e)),await s.done}catch(e){if(e instanceof S)ie.warn(e.message);else{const t=Be.create(\"idb-set\",{originalErrorMessage:null==e?void 0:e.message});ie.warn(t.message)}}}function Ge(e){return`${e.name}!${e.options.appId}`}class Ye{constructor(e){this.container=e,this._heartbeatsCache=null;const t=this.container.getProvider(\"app\").getImmediate();this._storage=new Xe(t),this._heartbeatsCachePromise=this._storage.read().then(e=>(this._heartbeatsCache=e,e))}async triggerHeartbeat(){var e,t;try{const s=this.container.getProvider(\"platform-logger\").getImmediate().getPlatformInfoString(),a=Je();if(null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)&&(this._heartbeatsCache=await this._heartbeatsCachePromise,null==(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats)))return;if(this._heartbeatsCache.lastSentHeartbeatDate===a||this._heartbeatsCache.heartbeats.some(e=>e.date===a))return;if(this._heartbeatsCache.heartbeats.push({date:a,agent:s}),this._heartbeatsCache.heartbeats.length>30){const e=function(e){if(0===e.length)return-1;let t=0,s=e[0].date;for(let a=1;a<e.length;a++)e[a].date<s&&(s=e[a].date,t=a);return t}(this._heartbeatsCache.heartbeats);this._heartbeatsCache.heartbeats.splice(e,1)}return this._storage.overwrite(this._heartbeatsCache)}catch(e){ie.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)||0===this._heartbeatsCache.heartbeats.length)return\"\";const t=Je(),{heartbeatsToSend:s,unsentEntries:a}=function(e,t=1024){const s=[];let a=e.slice();for(const n of e){const e=s.find(e=>e.agent===n.agent);if(e){if(e.dates.push(n.date),Qe(s)>t){e.dates.pop();break}}else if(s.push({agent:n.agent,dates:[n.date]}),Qe(s)>t){s.pop();break}a=a.slice(1)}return{heartbeatsToSend:s,unsentEntries:a}}(this._heartbeatsCache.heartbeats),n=m(JSON.stringify({version:2,heartbeats:s}));return this._heartbeatsCache.lastSentHeartbeatDate=t,a.length>0?(this._heartbeatsCache.heartbeats=a,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),n}catch(e){return ie.warn(e),\"\"}}}function Je(){return(new Date).toISOString().substring(0,10)}class Xe{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!y()&&E().then(()=>!0).catch(()=>!1)}async read(){if(await this._canUseIndexedDBPromise){const e=await async function(e){try{const t=(await $e()).transaction(Ve),s=await t.objectStore(Ve).get(Ge(e));return await t.done,s}catch(e){if(e instanceof S)ie.warn(e.message);else{const t=Be.create(\"idb-get\",{originalErrorMessage:null==e?void 0:e.message});ie.warn(t.message)}}}(this.app);return(null==e?void 0:e.heartbeats)?e:{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){const s=await this.read();return Ke(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:s.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){const s=await this.read();return Ke(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:s.lastSentHeartbeatDate,heartbeats:[...s.heartbeats,...e.heartbeats]})}}}function Qe(e){return m(JSON.stringify({version:2,heartbeats:e})).length}var Ze;Ze=\"\",Oe(new A(\"platform-logger\",e=>new se(e),\"PRIVATE\")),Oe(new A(\"heartbeat\",e=>new Ye(e),\"PRIVATE\")),ze(ae,ne,Ze),ze(ae,ne,\"esm2017\"),ze(\"fire-js\",\"\");ze(\"firebase\",\"11.10.0\",\"app\");const et=\"@firebase/installations\",tt=\"0.6.18\",st=1e4,at=`w:${tt}`,nt=\"FIS_v2\",it=36e5,rt=new C(\"installations\",\"Installations\",{\"missing-app-config-values\":'Missing App configuration value: \"{$valueName}\"',\"not-registered\":\"Firebase Installation is not registered.\",\"installation-not-found\":\"Firebase Installation not found.\",\"request-failed\":'{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\"app-offline\":\"Could not process request. Application offline.\",\"delete-pending-registration\":\"Can't delete installation while there is a pending registration request.\"});function ot(e){return e instanceof S&&e.code.includes(\"request-failed\")}function lt({projectId:e}){return`https://firebaseinstallations.googleapis.com/v1/projects/${e}/installations`}function ct(e){return{token:e.token,requestStatus:2,expiresIn:(t=e.expiresIn,Number(t.replace(\"s\",\"000\"))),creationTime:Date.now()};var t}async function dt(e,t){const s=(await t.json()).error;return rt.create(\"request-failed\",{requestName:e,serverCode:s.code,serverMessage:s.message,serverStatus:s.status})}function ht({apiKey:e}){return new Headers({\"Content-Type\":\"application/json\",Accept:\"application/json\",\"x-goog-api-key\":e})}function pt(e,{refreshToken:t}){const s=ht(e);return s.append(\"Authorization\",function(e){return`${nt} ${e}`}(t)),s}async function ut(e){const t=await e();return t.status>=500&&t.status<600?e():t}function mt(e){return new Promise(t=>{setTimeout(t,e)})}const gt=/^[cdef][\\w-]{21}$/;function ft(){try{const e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;const t=function(e){const t=(s=e,btoa(String.fromCharCode(...s)).replace(/\\+/g,\"-\").replace(/\\//g,\"_\"));var s;return t.substr(0,22)}(e);return gt.test(t)?t:\"\"}catch(e){return\"\"}}function vt(e){return`${e.appName}!${e.appId}`}const bt=new Map;function wt(e,t){const s=vt(e);yt(s,t),function(e,t){const s=St();s&&s.postMessage({key:e,fid:t});Ct()}(s,t)}function yt(e,t){const s=bt.get(e);if(s)for(const e of s)e(t)}let Et=null;function St(){return!Et&&\"BroadcastChannel\"in self&&(Et=new BroadcastChannel(\"[Firebase] FID Change\"),Et.onmessage=e=>{yt(e.data.key,e.data.fid)}),Et}function Ct(){0===bt.size&&Et&&(Et.close(),Et=null)}const _t=\"firebase-installations-store\";let Mt=null;function Tt(){return Mt||(Mt=J(\"firebase-installations-database\",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(_t)}})),Mt}async function kt(e,t){const s=vt(e),a=(await Tt()).transaction(_t,\"readwrite\"),n=a.objectStore(_t),i=await n.get(s);return await n.put(t,s),await a.done,i&&i.fid===t.fid||wt(e,t.fid),t}async function At(e){const t=vt(e),s=(await Tt()).transaction(_t,\"readwrite\");await s.objectStore(_t).delete(t),await s.done}async function Nt(e,t){const s=vt(e),a=(await Tt()).transaction(_t,\"readwrite\"),n=a.objectStore(_t),i=await n.get(s),r=t(i);return void 0===r?await n.delete(s):await n.put(r,s),await a.done,!r||i&&i.fid===r.fid||wt(e,r.fid),r}async function It(e){let t;const s=await Nt(e.appConfig,s=>{const a=function(e){const t=e||{fid:ft(),registrationStatus:0};return Pt(t)}(s),n=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine){return{installationEntry:t,registrationPromise:Promise.reject(rt.create(\"app-offline\"))}}const s={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},a=async function(e,t){try{const s=await async function({appConfig:e,heartbeatServiceProvider:t},{fid:s}){const a=lt(e),n=ht(e),i=t.getImmediate({optional:!0});if(i){const e=await i.getHeartbeatsHeader();e&&n.append(\"x-firebase-client\",e)}const r={fid:s,authVersion:nt,appId:e.appId,sdkVersion:at},o={method:\"POST\",headers:n,body:JSON.stringify(r)},l=await ut(()=>fetch(a,o));if(l.ok){const e=await l.json();return{fid:e.fid||s,registrationStatus:2,refreshToken:e.refreshToken,authToken:ct(e.authToken)}}throw await dt(\"Create Installation\",l)}(e,t);return kt(e.appConfig,s)}catch(s){throw ot(s)&&409===s.customData.serverCode?await At(e.appConfig):await kt(e.appConfig,{fid:t.fid,registrationStatus:0}),s}}(e,s);return{installationEntry:s,registrationPromise:a}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:Dt(e)}:{installationEntry:t}}(e,a);return t=n.registrationPromise,n.installationEntry});return\"\"===s.fid?{installationEntry:await t}:{installationEntry:s,registrationPromise:t}}async function Dt(e){let t=await xt(e.appConfig);for(;1===t.registrationStatus;)await mt(100),t=await xt(e.appConfig);if(0===t.registrationStatus){const{installationEntry:t,registrationPromise:s}=await It(e);return s||t}return t}function xt(e){return Nt(e,e=>{if(!e)throw rt.create(\"installation-not-found\");return Pt(e)})}function Pt(e){return 1===(t=e).registrationStatus&&t.registrationTime+st<Date.now()?{fid:e.fid,registrationStatus:0}:e;var t}async function Rt({appConfig:e,heartbeatServiceProvider:t},s){const a=function(e,{fid:t}){return`${lt(e)}/${t}/authTokens:generate`}(e,s),n=pt(e,s),i=t.getImmediate({optional:!0});if(i){const e=await i.getHeartbeatsHeader();e&&n.append(\"x-firebase-client\",e)}const r={installation:{sdkVersion:at,appId:e.appId}},o={method:\"POST\",headers:n,body:JSON.stringify(r)},l=await ut(()=>fetch(a,o));if(l.ok){return ct(await l.json())}throw await dt(\"Generate Auth Token\",l)}async function Ft(e,t=!1){let s;const a=await Nt(e.appConfig,a=>{if(!Lt(a))throw rt.create(\"not-registered\");const n=a.authToken;if(!t&&function(e){return 2===e.requestStatus&&!function(e){const t=Date.now();return t<e.creationTime||e.creationTime+e.expiresIn<t+it}(e)}(n))return a;if(1===n.requestStatus)return s=async function(e,t){let s=await Ut(e.appConfig);for(;1===s.authToken.requestStatus;)await mt(100),s=await Ut(e.appConfig);const a=s.authToken;return 0===a.requestStatus?Ft(e,t):a}(e,t),a;{if(!navigator.onLine)throw rt.create(\"app-offline\");const t=function(e){const t={requestStatus:1,requestTime:Date.now()};return Object.assign(Object.assign({},e),{authToken:t})}(a);return s=async function(e,t){try{const s=await Rt(e,t),a=Object.assign(Object.assign({},t),{authToken:s});return await kt(e.appConfig,a),s}catch(s){if(!ot(s)||401!==s.customData.serverCode&&404!==s.customData.serverCode){const s=Object.assign(Object.assign({},t),{authToken:{requestStatus:0}});await kt(e.appConfig,s)}else await At(e.appConfig);throw s}}(e,t),t}});return s?await s:a.authToken}function Ut(e){return Nt(e,e=>{if(!Lt(e))throw rt.create(\"not-registered\");const t=e.authToken;return 1===(s=t).requestStatus&&s.requestTime+st<Date.now()?Object.assign(Object.assign({},e),{authToken:{requestStatus:0}}):e;var s})}function Lt(e){return void 0!==e&&2===e.registrationStatus}async function Ot(e,t=!1){const s=e;await async function(e){const{registrationPromise:t}=await It(e);t&&await t}(s);return(await Ft(s,t)).token}function jt(e){return rt.create(\"missing-app-config-values\",{valueName:e})}const Bt=\"installations\",qt=e=>{const t=je(e.getProvider(\"app\").getImmediate(),Bt).getImmediate();return{getId:()=>async function(e){const t=e,{installationEntry:s,registrationPromise:a}=await It(t);return a?a.catch(console.error):Ft(t).catch(console.error),s.fid}(t),getToken:e=>Ot(t,e)}};Oe(new A(Bt,e=>{const t=e.getProvider(\"app\").getImmediate(),s=function(e){if(!e||!e.options)throw jt(\"App Configuration\");if(!e.name)throw jt(\"App Name\");const t=[\"projectId\",\"apiKey\",\"appId\"];for(const s of t)if(!e.options[s])throw jt(s);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t);return{app:t,appConfig:s,heartbeatServiceProvider:je(t,\"heartbeat\"),_delete:()=>Promise.resolve()}},\"PUBLIC\")),Oe(new A(\"installations-internal\",qt,\"PRIVATE\")),ze(et,tt),ze(et,tt,\"esm2017\");const Ht=\"BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4\",zt=\"google.c.a.c_id\",Vt=1e4;var Wt,$t;function Kt(e){const t=new Uint8Array(e);return btoa(String.fromCharCode(...t)).replace(/=/g,\"\").replace(/\\+/g,\"-\").replace(/\\//g,\"_\")}function Gt(e){const t=(e+\"=\".repeat((4-e.length%4)%4)).replace(/\\-/g,\"+\").replace(/_/g,\"/\"),s=atob(t),a=new Uint8Array(s.length);for(let e=0;e<s.length;++e)a[e]=s.charCodeAt(e);return a}!function(e){e[e.DATA_MESSAGE=1]=\"DATA_MESSAGE\",e[e.DISPLAY_NOTIFICATION=3]=\"DISPLAY_NOTIFICATION\"}(Wt||(Wt={})),function(e){e.PUSH_RECEIVED=\"push-received\",e.NOTIFICATION_CLICKED=\"notification-clicked\"}($t||($t={}));const Yt=\"fcm_token_details_db\",Jt=\"fcm_token_object_Store\";const Xt=\"firebase-messaging-store\";let Qt=null;function Zt(){return Qt||(Qt=J(\"firebase-messaging-database\",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(Xt)}})),Qt}async function es(e){const t=ss(e),s=await Zt(),a=await s.transaction(Xt).objectStore(Xt).get(t);if(a)return a;{const t=await async function(e){if(\"databases\"in indexedDB){const e=(await indexedDB.databases()).map(e=>e.name);if(!e.includes(Yt))return null}let t=null;return(await J(Yt,5,{upgrade:async(s,a,n,i)=>{var r;if(a<2)return;if(!s.objectStoreNames.contains(Jt))return;const o=i.objectStore(Jt),l=await o.index(\"fcmSenderId\").get(e);if(await o.clear(),l)if(2===a){const e=l;if(!e.auth||!e.p256dh||!e.endpoint)return;t={token:e.fcmToken,createTime:null!==(r=e.createTime)&&void 0!==r?r:Date.now(),subscriptionOptions:{auth:e.auth,p256dh:e.p256dh,endpoint:e.endpoint,swScope:e.swScope,vapidKey:\"string\"==typeof e.vapidKey?e.vapidKey:Kt(e.vapidKey)}}}else if(3===a){const e=l;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:Kt(e.auth),p256dh:Kt(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:Kt(e.vapidKey)}}}else if(4===a){const e=l;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:Kt(e.auth),p256dh:Kt(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:Kt(e.vapidKey)}}}}})).close(),await X(Yt),await X(\"fcm_vapid_details_db\"),await X(\"undefined\"),function(e){if(!e||!e.subscriptionOptions)return!1;const{subscriptionOptions:t}=e;return\"number\"==typeof e.createTime&&e.createTime>0&&\"string\"==typeof e.token&&e.token.length>0&&\"string\"==typeof t.auth&&t.auth.length>0&&\"string\"==typeof t.p256dh&&t.p256dh.length>0&&\"string\"==typeof t.endpoint&&t.endpoint.length>0&&\"string\"==typeof t.swScope&&t.swScope.length>0&&\"string\"==typeof t.vapidKey&&t.vapidKey.length>0}(t)?t:null}(e.appConfig.senderId);if(t)return await ts(e,t),t}}async function ts(e,t){const s=ss(e),a=(await Zt()).transaction(Xt,\"readwrite\");return await a.objectStore(Xt).put(t,s),await a.done,t}function ss({appConfig:e}){return e.appId}const as=new C(\"messaging\",\"Messaging\",{\"missing-app-config-values\":'Missing App configuration value: \"{$valueName}\"',\"only-available-in-window\":\"This method is available in a Window context.\",\"only-available-in-sw\":\"This method is available in a service worker context.\",\"permission-default\":\"The notification permission was not granted and dismissed instead.\",\"permission-blocked\":\"The notification permission was not granted and blocked instead.\",\"unsupported-browser\":\"This browser doesn't support the API's required to use the Firebase SDK.\",\"indexed-db-unsupported\":\"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\"failed-service-worker-registration\":\"We are unable to register the default service worker. {$browserErrorMessage}\",\"token-subscribe-failed\":\"A problem occurred while subscribing the user to FCM: {$errorInfo}\",\"token-subscribe-no-token\":\"FCM returned no token when subscribing the user to push.\",\"token-unsubscribe-failed\":\"A problem occurred while unsubscribing the user from FCM: {$errorInfo}\",\"token-update-failed\":\"A problem occurred while updating the user from FCM: {$errorInfo}\",\"token-update-no-token\":\"FCM returned no token when updating the user to push.\",\"use-sw-after-get-token\":\"The useServiceWorker() method may only be called once and must be called before calling getToken() to ensure your service worker is used.\",\"invalid-sw-registration\":\"The input to useServiceWorker() must be a ServiceWorkerRegistration.\",\"invalid-bg-handler\":\"The input to setBackgroundMessageHandler() must be a function.\",\"invalid-vapid-key\":\"The public VAPID key must be a string.\",\"use-vapid-key-after-get-token\":\"The usePublicVapidKey() method may only be called once and must be called before calling getToken() to ensure your VAPID key is used.\"});async function ns(e,t){const s={method:\"DELETE\",headers:await rs(e)};try{const a=await fetch(`${is(e.appConfig)}/${t}`,s),n=await a.json();if(n.error){const e=n.error.message;throw as.create(\"token-unsubscribe-failed\",{errorInfo:e})}}catch(e){throw as.create(\"token-unsubscribe-failed\",{errorInfo:null==e?void 0:e.toString()})}}function is({projectId:e}){return`https://fcmregistrations.googleapis.com/v1/projects/${e}/registrations`}async function rs({appConfig:e,installations:t}){const s=await t.getToken();return new Headers({\"Content-Type\":\"application/json\",Accept:\"application/json\",\"x-goog-api-key\":e.apiKey,\"x-goog-firebase-installations-auth\":`FIS ${s}`})}function os({p256dh:e,auth:t,endpoint:s,vapidKey:a}){const n={web:{endpoint:s,auth:t,p256dh:e}};return a!==Ht&&(n.web.applicationPubKey=a),n}async function ls(e){const t=await async function(e,t){const s=await e.pushManager.getSubscription();if(s)return s;return e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:Gt(t)})}(e.swRegistration,e.vapidKey),s={vapidKey:e.vapidKey,swScope:e.swRegistration.scope,endpoint:t.endpoint,auth:Kt(t.getKey(\"auth\")),p256dh:Kt(t.getKey(\"p256dh\"))},a=await es(e.firebaseDependencies);if(a){if(function(e,t){const s=t.vapidKey===e.vapidKey,a=t.endpoint===e.endpoint,n=t.auth===e.auth,i=t.p256dh===e.p256dh;return s&&a&&n&&i}(a.subscriptionOptions,s))return Date.now()>=a.createTime+6048e5?async function(e,t){try{const s=await async function(e,t){const s=await rs(e),a=os(t.subscriptionOptions),n={method:\"PATCH\",headers:s,body:JSON.stringify(a)};let i;try{const s=await fetch(`${is(e.appConfig)}/${t.token}`,n);i=await s.json()}catch(e){throw as.create(\"token-update-failed\",{errorInfo:null==e?void 0:e.toString()})}if(i.error){const e=i.error.message;throw as.create(\"token-update-failed\",{errorInfo:e})}if(!i.token)throw as.create(\"token-update-no-token\");return i.token}(e.firebaseDependencies,t),a=Object.assign(Object.assign({},t),{token:s,createTime:Date.now()});return await ts(e.firebaseDependencies,a),s}catch(e){throw e}}(e,{token:a.token,createTime:Date.now(),subscriptionOptions:s}):a.token;try{await ns(e.firebaseDependencies,a.token)}catch(e){console.warn(e)}return ds(e.firebaseDependencies,s)}return ds(e.firebaseDependencies,s)}async function cs(e){const t=await es(e.firebaseDependencies);t&&(await ns(e.firebaseDependencies,t.token),await async function(e){const t=ss(e),s=(await Zt()).transaction(Xt,\"readwrite\");await s.objectStore(Xt).delete(t),await s.done}(e.firebaseDependencies));const s=await e.swRegistration.pushManager.getSubscription();return!s||s.unsubscribe()}async function ds(e,t){const s=await async function(e,t){const s=await rs(e),a=os(t),n={method:\"POST\",headers:s,body:JSON.stringify(a)};let i;try{const t=await fetch(is(e.appConfig),n);i=await t.json()}catch(e){throw as.create(\"token-subscribe-failed\",{errorInfo:null==e?void 0:e.toString()})}if(i.error){const e=i.error.message;throw as.create(\"token-subscribe-failed\",{errorInfo:e})}if(!i.token)throw as.create(\"token-subscribe-no-token\");return i.token}(e,t),a={token:s,createTime:Date.now(),subscriptionOptions:t};return await ts(e,a),a.token}function hs(e){const t={from:e.from,collapseKey:e.collapse_key,messageId:e.fcmMessageId};return function(e,t){if(!t.notification)return;e.notification={};const s=t.notification.title;s&&(e.notification.title=s);const a=t.notification.body;a&&(e.notification.body=a);const n=t.notification.image;n&&(e.notification.image=n);const i=t.notification.icon;i&&(e.notification.icon=i)}(t,e),function(e,t){if(!t.data)return;e.data=t.data}(t,e),function(e,t){var s,a,n,i,r;if(!t.fcmOptions&&!(null===(s=t.notification)||void 0===s?void 0:s.click_action))return;e.fcmOptions={};const o=null!==(n=null===(a=t.fcmOptions)||void 0===a?void 0:a.link)&&void 0!==n?n:null===(i=t.notification)||void 0===i?void 0:i.click_action;o&&(e.fcmOptions.link=o);const l=null===(r=t.fcmOptions)||void 0===r?void 0:r.analytics_label;l&&(e.fcmOptions.analyticsLabel=l)}(t,e),t}function ps(e){return as.create(\"missing-app-config-values\",{valueName:e})}!function(e,t){const s=[];for(let a=0;a<e.length;a++)s.push(e.charAt(a)),a<t.length&&s.push(t.charAt(a));s.join(\"\")}(\"AzSCbw63g1R0nCw85jG8\",\"Iaya3yLKwmgvh7cF0q4\");class us{constructor(e,t,s){this.deliveryMetricsExportedToBigQueryEnabled=!1,this.onBackgroundMessageHandler=null,this.onMessageHandler=null,this.logEvents=[],this.isLogServiceStarted=!1;const a=function(e){if(!e||!e.options)throw ps(\"App Configuration Object\");if(!e.name)throw ps(\"App Name\");const t=[\"projectId\",\"apiKey\",\"appId\",\"messagingSenderId\"],{options:s}=e;for(const e of t)if(!s[e])throw ps(e);return{appName:e.name,projectId:s.projectId,apiKey:s.apiKey,appId:s.appId,senderId:s.messagingSenderId}}(e);this.firebaseDependencies={app:e,appConfig:a,installations:t,analyticsProvider:s}}_delete(){return Promise.resolve()}}async function ms(e){try{e.swRegistration=await navigator.serviceWorker.register(\"/firebase-messaging-sw.js\",{scope:\"/firebase-cloud-messaging-push-scope\"}),e.swRegistration.update().catch(()=>{}),await async function(e){return new Promise((t,s)=>{const a=setTimeout(()=>s(new Error(\"Service worker not registered after 10000 ms\")),Vt),n=e.installing||e.waiting;e.active?(clearTimeout(a),t()):n?n.onstatechange=e=>{var s;\"activated\"===(null===(s=e.target)||void 0===s?void 0:s.state)&&(n.onstatechange=null,clearTimeout(a),t())}:(clearTimeout(a),s(new Error(\"No incoming service worker found.\")))})}(e.swRegistration)}catch(e){throw as.create(\"failed-service-worker-registration\",{browserErrorMessage:null==e?void 0:e.message})}}async function gs(e,t){if(!navigator)throw as.create(\"only-available-in-window\");if(\"default\"===Notification.permission&&await Notification.requestPermission(),\"granted\"!==Notification.permission)throw as.create(\"permission-blocked\");return await async function(e,t){t?e.vapidKey=t:e.vapidKey||(e.vapidKey=Ht)}(e,null==t?void 0:t.vapidKey),await async function(e,t){if(t||e.swRegistration||await ms(e),t||!e.swRegistration){if(!(t instanceof ServiceWorkerRegistration))throw as.create(\"invalid-sw-registration\");e.swRegistration=t}}(e,null==t?void 0:t.serviceWorkerRegistration),ls(e)}async function fs(e,t,s){const a=function(e){switch(e){case $t.NOTIFICATION_CLICKED:return\"notification_open\";case $t.PUSH_RECEIVED:return\"notification_foreground\";default:throw new Error}}(t);(await e.firebaseDependencies.analyticsProvider.get()).logEvent(a,{message_id:s[zt],message_name:s[\"google.c.a.c_l\"],message_time:s[\"google.c.a.ts\"],message_device_time:Math.floor(Date.now()/1e3)})}async function vs(e,t){const s=t.data;if(!s.isFirebaseMessaging)return;e.onMessageHandler&&s.messageType===$t.PUSH_RECEIVED&&(\"function\"==typeof e.onMessageHandler?e.onMessageHandler(hs(s)):e.onMessageHandler.next(hs(s)));const a=s.data;var n;\"object\"==typeof(n=a)&&n&&zt in n&&\"1\"===a[\"google.c.a.e\"]&&await fs(e,s.messageType,a)}const bs=\"@firebase/messaging\",ws=\"0.12.22\",ys=e=>{const t=e.getProvider(\"messaging\").getImmediate();return{getToken:e=>gs(t,e)}};async function Es(){try{await E()}catch(e){return!1}return\"undefined\"!=typeof window&&y()&&!(\"undefined\"==typeof navigator||!navigator.cookieEnabled)&&\"serviceWorker\"in navigator&&\"PushManager\"in window&&\"Notification\"in window&&\"fetch\"in window&&ServiceWorkerRegistration.prototype.hasOwnProperty(\"showNotification\")&&PushSubscription.prototype.hasOwnProperty(\"getKey\")}function Ss(e=function(e=xe){const t=Re.get(e);if(!t&&e===xe&&b())return He();if(!t)throw Be.create(\"no-app\",{appName:e});return t}()){return Es().then(e=>{if(!e)throw as.create(\"unsupported-browser\")},e=>{throw as.create(\"indexed-db-unsupported\")}),je(k(e),\"messaging\").getImmediate()}async function Cs(e,t){return gs(e=k(e),t)}function _s(e){return async function(e){if(!navigator)throw as.create(\"only-available-in-window\");return e.swRegistration||await ms(e),cs(e)}(e=k(e))}function Ms(e,t){return function(e,t){if(!navigator)throw as.create(\"only-available-in-window\");return e.onMessageHandler=t,()=>{e.onMessageHandler=null}}(e=k(e),t)}Oe(new A(\"messaging\",e=>{const t=new us(e.getProvider(\"app\").getImmediate(),e.getProvider(\"installations-internal\").getImmediate(),e.getProvider(\"analytics-internal\"));return navigator.serviceWorker.addEventListener(\"message\",e=>vs(t,e)),t},\"PUBLIC\")),Oe(new A(\"messaging-internal\",ys,\"PRIVATE\")),ze(bs,ws),ze(bs,ws,\"esm2017\");var Ts=r(4532);class ks extends l().PureComponent{render(){return l().createElement(\"div\",{className:\"alert-container\"},l().createElement(\"div\",{className:\"alert\"},l().createElement(\"div\",{className:\"title\"},this.props.title),l().createElement(\"div\",{className:\"content\"},this.props.content),l().createElement(\"div\",{className:\"dialog-buttons\"},this.props.onReject?l().createElement(\"button\",{className:\"outline\",onClick:this.props.onReject},this.props.reject||l().createElement(d.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})):null,this.props.onConfirm?l().createElement(\"button\",{className:\"primary\",onClick:this.props.onConfirm},this.props.confirm||l().createElement(d.FormattedMessage,{id:\"button_ok\",defaultMessage:[{type:0,value:\"OK\"}]})):null)))}}var As=r(9027);const Ns=(0,d.defineMessages)({info:{id:\"menu_item_info\",defaultMessage:[{type:0,value:\"Info\"}]},clear_messages:{id:\"menu_item_clear_messages\",defaultMessage:[{type:0,value:\"Clear messages\"}]},clear_for_all:{id:\"menu_item_clear_messages_for_all\",defaultMessage:[{type:0,value:\"Clear for All\"}]},delete:{id:\"menu_item_delete\",defaultMessage:[{type:0,value:\"Delete\"}]},delete_for_all:{id:\"menu_item_delete_for_all\",defaultMessage:[{type:0,value:\"Delete for All\"}]},send_retry:{id:\"menu_item_send_retry\",defaultMessage:[{type:0,value:\"Retry\"}]},mute:{id:\"menu_item_mute\",defaultMessage:[{type:0,value:\"Mute\"}]},unmute:{id:\"menu_item_unmute\",defaultMessage:[{type:0,value:\"Unmute\"}]},reply:{id:\"menu_item_reply\",defaultMessage:[{type:0,value:\"Reply\"}]},forward:{id:\"menu_item_forward\",defaultMessage:[{type:0,value:\"Forward\"}]},edit:{id:\"menu_item_edit\",defaultMessage:[{type:0,value:\"Edit\"}]},topic_delete:{id:\"menu_item_delete_topic\",defaultMessage:[{type:0,value:\"Delete\"}]},topic_delete_warning:{id:\"topic_delete_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to delete this conversation? It cannot be undone.\"}]},delete_messages_warning:{id:\"delete_messages_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to delete all messages for everyone? It cannot be undone.\"}]},unblock:{id:\"menu_item_unblock\",defaultMessage:[{type:0,value:\"Unblock\"}]},block:{id:\"menu_item_block\",defaultMessage:[{type:0,value:\"Block\"}]},topic_block_warning:{id:\"topic_block_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to block this conversation?\"}]},member_delete:{id:\"menu_item_member_delete\",defaultMessage:[{type:0,value:\"Remove\"}]},archive:{id:\"menu_item_archive_topic\",defaultMessage:[{type:0,value:\"Archive\"}]},unarchive:{id:\"menu_item_restore_topic\",defaultMessage:[{type:0,value:\"Restore\"}]},edit_permissions:{id:\"menu_item_edit_permissions\",defaultMessage:[{type:0,value:\"Edit permissions\"}]},clear_messages_warning:{id:\"clear_messages_warning\",defaultMessage:[{type:0,value:\"Are you sure you want to clear all messages? It cannot be undone.\"}]},pin_message:{id:\"pin_message\",defaultMessage:[{type:0,value:\"Pin\"}]},unpin_message:{id:\"unpin_message\",defaultMessage:[{type:0,value:\"Unpin\"}]},pin_chat:{id:\"pin_chat\",defaultMessage:[{type:0,value:\"Pin\"}]},unpin_chat:{id:\"unpin_chat\",defaultMessage:[{type:0,value:\"Unpin\"}]}});class Is extends l().Component{constructor(e){super(e),this.selfRef=l().createRef();const{formatMessage:t}=e.intl;this.handlePageClick=this.handlePageClick.bind(this),this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClick=this.handleClick.bind(this),this.MenuItems={topic_info:{id:\"topic_info\",title:t(Ns.info),handler:null},messages_clear:{id:\"messages_clear\",title:t(Ns.clear_messages),handler:(s,a)=>e.onShowAlert(s.topicTitle||t(Ns.clear_messages),t(Ns.clear_messages_warning),e=>{this.deleteMessages(!0,!1,s,a)},null,!0,null)},messages_clear_hard:{id:\"messages_clear_hard\",title:t(Ns.clear_for_all),handler:(s,a)=>e.onShowAlert(s.topicTitle||t(Ns.clear_for_all),t(Ns.delete_messages_warning),e=>this.deleteMessages(!0,!0,s,a),null,!0,null)},message_delete:{id:\"message_delete\",title:t(Ns.delete),handler:(e,t)=>this.deleteMessages(!1,!1,e,t)},message_delete_hard:{id:\"message_delete_hard\",title:t(Ns.delete_for_all),handler:(e,t)=>this.deleteMessages(!1,!0,e,t)},message_delete_generic:{id:\"message_delete_generic\",title:t(Ns.delete),handler:(e,t)=>this.deleteMessages(!1,!0,e,t)},menu_item_send_retry:{id:\"menu_item_send_retry\",title:t(Ns.send_retry),handler:(e,t)=>this.retryMessage(e,t)},menu_item_reply:{id:\"menu_item_reply\",title:t(Ns.reply),handler:(e,t)=>this.replyToMessage(e,t)},menu_item_forward:{id:\"menu_item_forward\",title:t(Ns.forward),handler:e=>{}},menu_item_edit:{id:\"menu_item_edit\",title:t(Ns.edit),handler:(e,t)=>this.editMessage(e,t)},menu_item_pin:{id:\"menu_item_pin\",title:t(Ns.pin_message),handler:(e,t)=>this.pinMessage(!0,e,t)},menu_item_unpin:{id:\"menu_item_unpin\",title:t(Ns.unpin_message),handler:(e,t)=>this.pinMessage(!1,e,t)},topic_unmute:{id:\"topic_unmute\",title:t(Ns.unmute),handler:this.topicPermissionSetter.bind(this,\"+P\")},topic_mute:{id:\"topic_mute\",title:t(Ns.mute),handler:this.topicPermissionSetter.bind(this,\"-P\")},topic_unblock:{id:\"topic_unblock\",title:t(Ns.unblock),handler:this.topicPermissionSetter.bind(this,\"+JP\")},topic_block:{id:\"topic_block\",title:t(Ns.block),handler:(s,a)=>e.onShowAlert(s.topicTitle||t(Ns.block),t(Ns.topic_block_warning),e=>this.topicPermissionSetter(\"-JP\",s,a).then(e=>(this.props.onTopicRemoved(s.topicName),e)),null,!0,null)},topic_delete:{id:\"topic_delete\",title:t(Ns.topic_delete),handler:(s,a)=>e.onShowAlert(s.topicTitle||t(Ns.topic_delete),t(Ns.topic_delete_warning),e=>{const t=this.props.tinode.getTopic(s.topicName);if(t)return t.delTopic(!0).catch(e=>{a&&a(e.message,\"err\")});console.warn(\"Topic not found: \",s.topicName)},null,!0,null)},topic_archive:{id:\"topic_archive\",title:t(Ns.archive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!0).catch(e=>{t&&t(e.message,\"err\")});console.warn(\"Topic not found: \",e.topicName)}},topic_restore:{id:\"topic_restore\",title:t(Ns.unarchive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!1).catch(e=>{t&&t(e.message,\"err\")});console.warn(\"Topic not found: \",e.topicName)}},topic_pin:{id:\"topic_pin\",title:t(Ns.pin_chat),handler:(e,t)=>{const s=this.props.tinode.getMeTopic();if(s)return s.pinTopic(e.topicName,!0).catch(e=>{t&&t(e.message,\"err\")});console.warn(\"'me' topic not found\")}},topic_unpin:{id:\"topic_unpin\",title:t(Ns.unpin_chat),handler:(e,t)=>{const s=this.props.tinode.getMeTopic();if(s)return s.pinTopic(e.topicName,!1).catch(e=>{t&&t(e.message,\"err\")});console.warn(\"'me' topic not found\")}},permissions:{id:\"permissions\",title:t(Ns.edit_permissions),handler:null},member_delete:{id:\"member_delete\",title:t(Ns.member_delete),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s&&e.user)return s.delSubscription(e.user).catch(e=>{t&&t(e.message,\"err\")});console.warn(\"Topic or user not found: '\"+e.topicName+\"', '\"+e.user+\"'\")}},member_mute:{id:\"member_mute\",title:t(Ns.mute),handler:this.topicPermissionSetter.bind(this,\"-P\")},member_unmute:{id:\"member_unmute\",title:t(Ns.unmute),handler:this.topicPermissionSetter.bind(this,\"+P\")},member_block:{id:\"member_block\",title:t(Ns.block),handler:this.topicPermissionSetter.bind(this,\"-JP\")},member_unblock:{id:\"member_unblock\",title:t(Ns.unblock),handler:this.topicPermissionSetter.bind(this,\"+JP\")}}}componentDidMount(){document.addEventListener(\"mousedown\",this.handlePageClick,!1),document.addEventListener(\"keyup\",this.handleEscapeKey,!1)}componentWillUnmount(){document.removeEventListener(\"mousedown\",this.handlePageClick,!1),document.removeEventListener(\"keyup\",this.handleEscapeKey,!1)}handlePageClick(e){this.selfRef.current.contains(e.target)||(e.preventDefault(),e.stopPropagation(),this.props.hide())}handleEscapeKey(e){27===e.keyCode&&this.props.hide()}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.hide();let t=this.props.items[e.currentTarget.dataset.id];\"string\"==typeof t&&(t=this.MenuItems[t]),t?this.props.onAction(t.id,t.handler(this.props.params,this.props.onError),this.props.params):console.error(\"Invalid menu item ID\",e.currentTarget.dataset.id)}deleteMessages(e,t,s,a){const n=this.props.tinode.getTopic(s.topicName);if(!n)return void console.warn(\"Topic not found: \",s.topicName);if(!e&&n.cancelSend(s.seq))return;return(e?n.delMessagesAll(t):s.replace>0?n.delMessagesEdits(s.replace,t):n.delMessagesList([s.seq],t)).catch(e=>{a&&a(e.message,\"err\")})}retryMessage(e,t){const s=this.props.tinode.getTopic(e.topicName);if(!s||!s.flushMessage(e.seq))return;const a=s.createMessage(e.content,!1);return s.publishDraft(a).catch(e=>{t&&t(e.message,\"err\")})}pinMessage(e,t,s){const a=this.props.tinode.getTopic(t.topicName);a&&a.pinMessage(t.seq,e).catch(e=>s?s(e.message,\"err\"):null)}topicPermissionSetter(e,t,s){const a=this.props.tinode.getTopic(t.topicName);if(!a)return void console.warn(\"Topic not found\",t.topicName);let n=a.updateMode(t.user,e);return s&&(n=n.catch(e=>s(e.message,\"err\"))),n}replyToMessage(e,t){e.pickReply(e.seq,e.content,e.userFrom,e.userName,t)}editMessage(e,t){e.editMessage(e.replace||e.seq,e.content,t)}render(){const e=[];let t=0;this.props.items.forEach(s=>{if(\"string\"==typeof s&&(s=this.MenuItems[s]),s&&s.title){const a=s.disabled?\"disabled\":void 0;e.push(\"-\"==s.title?l().createElement(\"li\",{className:\"separator\",key:t}):l().createElement(\"li\",{className:a,onClick:this.handleClick,\"data-id\":t,key:t},s.title))}t++});const s=12*As.JS,a=As.JS*(.7+2.5*e.length),n={left:(this.props.bounds.right-this.props.clickAt.x<s?this.props.clickAt.x-this.props.bounds.left-s:this.props.clickAt.x-this.props.bounds.left)+\"px\",top:(this.props.bounds.bottom-this.props.clickAt.y<a?this.props.clickAt.y-this.props.bounds.top-a:this.props.clickAt.y-this.props.bounds.top)+\"px\"};return l().createElement(\"ul\",{className:\"menu\",style:n,ref:this.selfRef},e)}}var Ds=(0,d.injectIntl)(Is),xs=r(4152);class Ps extends l().PureComponent{constructor(e){super(e),this.state={edited:!1,search:this.props.initialQuery||\"\"},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:\"\",edited:!1}),this.props.onSearchContacts(Ts.Tinode.DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();const t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:Ts.Tinode.DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(Ts.Tinode.DEL_CHAR),this.setState({search:\"\",edited:!1})}handleKeyDown(e){\"Enter\"===e.key?this.handleSearch(e):\"Escape\"===e.key&&(e.stopPropagation(),this.handleClear(e))}render(){return l().createElement(\"div\",{className:\"panel-form\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"i\",{className:\"material-icons search\"},\"search\"),l().createElement(\"input\",{className:\"search\",type:\"text\",placeholder:this.props.placeholder,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}),this.state.search?l().createElement(\"a\",{href:\"#\",onClick:this.handleClear},l().createElement(\"i\",{className:\"material-icons\"},\"highlight_off\")):l().createElement(\"span\",null,l().createElement(\"i\",{className:\"material-icons\"},\" \"))))}}class Rs extends l().Component{constructor(e){super(e),this.state={query:null},this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this)}componentDidMount(){this.props.onInitFind()}handleEscapeKey(e){27===e.keyCode&&this.props.hide(!1)}handleClose(e){e.preventDefault(),this.props.hide(!1)}handleSearchContacts(e){this.setState({query:Ts.Tinode.isNullValue(e)?null:e}),this.props.onSearchContacts(e)}handleContactSelected(e){this.props.onTopicSelected(e),this.props.hide(!0)}render(){let e=null!=this.state.query?this.props.searchResults:this.props.contacts;return e=e.filter(e=>e.name!=this.props.topicSelected&&e.acs.isJoiner()&&e.acs.isWriter()),l().createElement(\"div\",{className:\"alert-container\"},l().createElement(\"div\",{className:\"forward-dialog\"},l().createElement(\"div\",{className:\"title with-control\"},l().createElement(\"div\",null,l().createElement(d.FormattedMessage,{id:\"forward_to\",defaultMessage:[{type:0,value:\"Forward to\"}],desription:\"Title of the contact selector dialog when forwarding a message\"})),l().createElement(\"div\",null,l().createElement(\"a\",{href:\"#\",onClick:this.handleClose},l().createElement(\"i\",{className:\"material-icons\"},\"close\")))),l().createElement(d.FormattedMessage,{id:\"forward_to_search_placeholder\",defaultMessage:[{type:0,value:\"Search contacts\"}]},e=>l().createElement(Ps,{placeholder:e,onSearchContacts:this.handleSearchContacts})),l().createElement(d.FormattedMessage,{id:\"search_no_results\",defaultMessage:[{type:0,value:\"Search returned no results\"}]},t=>l().createElement(xs.A,{tinode:this.props.tinode,contacts:e,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected}))))}}var Fs=r(635),Us=r(6904),Ls=r(3832),Os=r(6110),js=r(8589);const Bs=new Audio(\"audio/call-in.m4a\");class qs extends l().Component{constructor(e){super(e),this.state={topic:null,fullName:void 0,avatar:null,trustedBadges:[],previousMetaDesc:void 0},this.resetDesc=this.resetDesc.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.handleRejectCall=this.handleRejectCall.bind(this),this.handleAcceptCall=this.handleAcceptCall.bind(this),this.ringTimer=null}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.resetDesc(e),this.props.callState==Ls.ww&&(Bs.play().catch(e=>{}),this.ringTimer=setInterval(e=>{Bs.play().catch(e=>{})},2e3),this.props.onRinging(this.props.topic,this.props.seq)))}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e)))}componentWillUnmount(){null!=this.ringTimer&&(clearInterval(this.ringTimer),Bs.pause());const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc)}resetDesc(e){const t=[];if(e.trusted)for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({fullName:(0,js.W5)(e.public?e.public.fn:void 0,As.tS),avatar:(0,Os.to)(e.public?e.public.photo:null),trustedBadges:t})}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}handleAcceptCall(){this.props.onAcceptCall(this.props.topic)}handleRejectCall(){this.props.onReject(this.props.topic,this.props.seq),this.props.onClose()}render(){return l().createElement(\"div\",{className:\"alert-container\"},l().createElement(\"div\",{className:\"incoming-call\"},l().createElement(\"div\",{className:\"caller-card incoming pulse\"},l().createElement(\"div\",{className:\"avatar-box\"},l().createElement(Us.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:this.state.avatar||!0,topic:this.props.topic,title:this.state.fullName})),l().createElement(\"div\",{className:\"caller-name\"},(0,js.W5)(this.state.fullName,As.mu),l().createElement(Fs.A,{short:!0,trustedBadges:this.state.trustedBadges}))),l().createElement(\"div\",{id:\"controls\"},this.props.callState==Ls.ww?l().createElement(l().Fragment,null,l().createElement(\"button\",{className:\"danger\",onClick:this.handleRejectCall},l().createElement(\"i\",{className:\"material-icons\"},\"call_end\")),l().createElement(\"button\",{className:\"positive\",onClick:this.handleAcceptCall},l().createElement(\"i\",{className:\"material-icons\"},\"call\"))):null)))}}var Hs=r(1334),zs=r(1013);class Vs extends l().PureComponent{render(){return l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onBack()}},l().createElement(\"i\",{className:\"material-icons\"},\"arrow_back\"))}}var Ws=r(504);class $s extends l().PureComponent{render(){return l().createElement(\"div\",null,l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onNewTopic()}},l().createElement(\"i\",{className:\"material-icons\"},\"chat\")),\" \",l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onSettings()}},l().createElement(\"i\",{className:\"material-icons\"},\"settings\")))}}class Ks extends l().PureComponent{render(){return l().createElement(\"div\",null,l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onSignUp()}},l().createElement(\"i\",{className:\"material-icons\"},\"person_add\")),\" \",l().createElement(\"a\",{href:\"#\",onClick:e=>{e.preventDefault(),this.props.onSettings()}},l().createElement(\"i\",{className:\"material-icons\"},\"settings\")))}}var Gs=r(3540);class Ys extends l().PureComponent{render(){const e=[];this.props.trustedBadges&&this.props.trustedBadges.forEach(t=>{e.push({icon:t,color:\"badge-inv\"})});let t=null;return this.props.tinode&&(t=this.props.tinode.authorizeURL((0,Gs.wk)(this.props.avatar,\"image\"))),l().createElement(\"div\",{id:\"side-caption-panel\",className:\"caption-panel\"},this.props.onCancel?l().createElement(Vs,{onBack:this.props.onCancel}):null,t?l().createElement(\"div\",{id:\"self-avatar\",className:\"avatar-box\"},l().createElement(Us.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:t,topic:this.props.myUserId,title:this.props.title})):null,l().createElement(\"div\",{id:\"sidepanel-title\",className:\"panel-title\"},this.props.title,l().createElement(Ws.A,{badges:e})),\"login\"===this.props.state?l().createElement(Ks,{onSignUp:this.props.onSignUp,onSettings:this.props.onSettings}):\"contacts\"===this.props.state?l().createElement($s,{onNewTopic:this.props.onNewTopic,onSettings:this.props.onSettings}):null)}}var Js=r(8089);const Xs=(0,d.defineMessages)({archived_contacts_title:{id:\"archived_contacts\",defaultMessage:[{type:0,value:\"Archived contacts (\"},{type:1,value:\"count\"},{type:0,value:\")\"}]}});class Qs extends l().Component{constructor(e){super(e),this.handleAction=this.handleAction.bind(this),this.state=Qs.deriveStateFromProps(e)}static deriveStateFromProps(e){const t=[];let s=0,a=0;const n=e.tinode.getMeTopic();return e.chatList.forEach(i=>{const r=i.acs&&!i.acs.isJoiner();i.pinned=n.pinnedTopicRank(i.topic),r&&e.blocked&&t.push(i),r||e.blocked||(i.private&&i.private.arch?e.archive?t.push(i):a++:e.archive||(t.push(i),s+=i.unread>0?1:0))}),t.sort((e,t)=>{const s=t.pinned-e.pinned;return 0!=s?s:(t.touched||0)-(e.touched||0)}),a>0&&t.push({action:\"archive\",title:Xs.archived_contacts_title,values:{count:a}}),{contactList:t,unreadThreads:s}}componentDidUpdate(e,t){if(e.chatList!=this.props.chatList||e.archive!=this.props.archive||e.blocked!=this.props.blocked){const e=Qs.deriveStateFromProps(this.props);this.setState(e),e.unreadThreads!=t.unreadThreads&&(0,Gs.OM)(e.unreadThreads)}}handleAction(e){this.props.onShowArchive()}render(){return l().createElement(d.FormattedMessage,{id:\"contacts_not_found\",defaultMessage:[{type:0,value:\"You have no chats\\\\n¯∖_(ツ)_/¯\"}]},e=>l().createElement(xs.A,{tinode:this.props.tinode,connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction}))}}class Zs extends l().PureComponent{constructor(e){super(e),this.state={colorSchema:e.colorSchema||\"auto\",textSize:10*e.textSize||\"100\",sendOnEnter:e.sendOnEnter||\"plain\"},this.isMac=(navigator.userAgentData&&navigator.userAgentData.platform||navigator.platform).toLowerCase().startsWith(\"mac\"),this.handleColorSchemaSelected=this.handleColorSchemaSelected.bind(this),this.handleTextSizeChanged=this.handleTextSizeChanged.bind(this),this.handleSendOnEnterSelected=this.handleSendOnEnterSelected.bind(this)}handleColorSchemaSelected(e){this.setState({colorSchema:e.currentTarget.value}),this.props.onChangeColorSchema(e.currentTarget.value)}handleTextSizeChanged(e){this.setState({textSize:e.currentTarget.value}),this.props.onTextSizeChanged(e.currentTarget.value/10|0)}handleSendOnEnterSelected(e){this.setState({sendOnEnter:e.currentTarget.value}),this.props.onSendOnEnterChanged(e.currentTarget.value)}render(){return l().createElement(\"div\",{id:\"settings-form\",className:\"scrollable-panel\"},l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_color_schema\",defaultMessage:[{type:0,value:\"Theme:\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"ul\",{className:\"quoted\"},l().createElement(\"li\",{key:\"system\"},l().createElement(\"input\",{type:\"radio\",id:\"system\",name:\"color-scheme-select\",value:\"auto\",checked:\"auto\"==this.state.colorSchema,onChange:this.handleColorSchemaSelected}),\" \",l().createElement(\"label\",{htmlFor:\"system\"},l().createElement(d.FormattedMessage,{id:\"color_schema_system\",defaultMessage:[{type:0,value:\"System default\"}]}),\" \",l().createElement(\"img\",{src:\"img/routine.svg\",style:{verticalAlign:\"top\",width:\"1.6rem\",height:\"1.6rem\"}}))),l().createElement(\"li\",{key:\"light\"},l().createElement(\"input\",{type:\"radio\",id:\"light\",name:\"color-scheme-select\",value:\"light\",checked:\"light\"==this.state.colorSchema,onChange:this.handleColorSchemaSelected}),\" \",l().createElement(\"label\",{htmlFor:\"light\"},l().createElement(d.FormattedMessage,{id:\"color_schema_light\",defaultMessage:[{type:0,value:\"Light\"}]}),\" \",l().createElement(\"i\",{className:\"material-icons orange large\"},\"light_mode\"))),l().createElement(\"li\",{key:\"dark\"},l().createElement(\"input\",{type:\"radio\",id:\"dark\",name:\"color-scheme-select\",value:\"dark\",checked:\"dark\"==this.state.colorSchema,onChange:this.handleColorSchemaSelected}),\" \",l().createElement(\"label\",{htmlFor:\"dark\"},l().createElement(d.FormattedMessage,{id:\"color_schema_dark\",defaultMessage:[{type:0,value:\"Dark\"}]}),\" \",l().createElement(\"i\",{className:\"material-icons blue large\"},\"dark_mode\")))))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-row clean-clickable\"},l().createElement(\"a\",{onClick:this.props.onSelectWallpapers,className:\"flat-button\"},l().createElement(\"i\",{className:\"material-icons\"},\"wallpaper\"),\" \",l().createElement(d.FormattedMessage,{id:\"wallpapers\",defaultMessage:[{type:0,value:\"Wallpapers\"}]}))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_text_size\",defaultMessage:[{type:0,value:\"Text size:\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"input\",{type:\"range\",id:\"text_size\",name:\"text_size\",min:\"80\",max:\"120\",step:\"10\",list:\"text_size_options\",value:this.state.textSize,onChange:this.handleTextSizeChanged})),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"datalist\",{id:\"text_size_options\"},l().createElement(\"option\",{value:\"80\",label:\"80%\"}),l().createElement(\"option\",{value:\"90\",label:\"90%\"}),l().createElement(\"option\",{value:\"100\",label:\"100%\"}),l().createElement(\"option\",{value:\"110\",label:\"110%\"}),l().createElement(\"option\",{value:\"120\",label:\"120%\"})))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_keyboard\",defaultMessage:[{type:0,value:\"Keyboard:\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"ul\",{className:\"quoted\"},l().createElement(\"li\",{key:\"plain\"},l().createElement(\"input\",{type:\"radio\",id:\"plain\",name:\"send-select\",value:\"plain\",checked:\"plain\"==this.state.sendOnEnter,onChange:this.handleSendOnEnterSelected}),\" \",l().createElement(\"label\",{htmlFor:\"send_plain\"},l().createElement(d.FormattedMessage,{id:\"send_plain\",defaultMessage:[{type:0,value:\"Send on Enter\"}]}),\" \"),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"span\",{className:\"small gray\"},l().createElement(d.FormattedMessage,{id:\"send_plain_explained\",defaultMessage:[{type:0,value:\"Press Shift + Enter for new line\"}]})))),l().createElement(\"li\",{key:\"command\"},l().createElement(\"input\",{type:\"radio\",id:\"command\",name:\"send-select\",value:\"command\",checked:\"command\"==this.state.sendOnEnter,onChange:this.handleSendOnEnterSelected}),\" \",l().createElement(\"label\",{htmlFor:\"send_command\"},l().createElement(d.FormattedMessage,{id:\"send_command\",defaultMessage:[{type:0,value:\"Send on \"},{type:1,value:\"key\"}],values:{key:this.isMac?\"⌘ + Enter\":\"Ctrl + Enter\"}}),\" \"),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"span\",{className:\"small gray\"},l().createElement(d.FormattedMessage,{id:\"send_command_explained\",defaultMessage:[{type:0,value:\"Press Enter for new line\"}]})))))))}}var ea=r(1166);class ta extends l().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){\"sound\"==e?this.props.onToggleMessageSounds(t):\"alert\"==e&&this.props.onTogglePushNotifications(t)}render(){return l().createElement(\"div\",{className:\"scrollable-panel\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{htmlFor:\"message-sound\"},l().createElement(d.FormattedMessage,{id:\"label_message_sound\",defaultMessage:[{type:0,value:\"Message sound:\"}]})),l().createElement(ea.A,{name:\"sound\",id:\"message-sound\",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{htmlFor:\"desktop-alerts\"},this.props.desktopAlertsEnabled?l().createElement(d.FormattedMessage,{id:\"label_push_notifications\",defaultMessage:[{type:0,value:\"Notification alerts:\"}]}):l().createElement(d.FormattedMessage,{id:\"label_push_notifications_disabled\",defaultMessage:[{type:0,value:\"Notification alerts (requires HTTPS):\"}]})),l().createElement(ea.A,{name:\"alert\",id:\"desktop-alerts\",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})))}}class sa extends l().PureComponent{render(){return l().createElement(\"div\",{className:\"scrollable-panel\"},l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"a\",{href:As.fi,className:\"flat-button\",target:\"_blank\"},l().createElement(\"i\",{className:\"material-icons\"},\"email\"),\"  \",l().createElement(d.FormattedMessage,{id:\"link_contact_us\",defaultMessage:[{type:0,value:\"Contact Us\"}]})),l().createElement(\"a\",{href:As.V9,className:\"flat-button\",target:\"_blank\"},l().createElement(\"i\",{className:\"material-icons\"},\"description\"),\"  \",l().createElement(d.FormattedMessage,{id:\"link_terms_of_service\",defaultMessage:[{type:0,value:\"Terms of Service\"}]})),l().createElement(\"a\",{href:As.RS,className:\"flat-button\",target:\"_blank\"},l().createElement(\"i\",{className:\"material-icons\"},\"policy\"),\"  \",l().createElement(d.FormattedMessage,{id:\"link_privacy_policy\",defaultMessage:[{type:0,value:\"Privacy Policy\"}]}))),l().createElement(\"div\",{className:\"hr\"}),l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_client\",defaultMessage:[{type:0,value:\"Client:\"}]})),As.C3),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_sdk\",defaultMessage:[{type:0,value:\"SDK:\"}]})),Ts.Tinode.getLibrary()),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_server\",defaultMessage:[{type:0,value:\"Server:\"}]})),this.props.serverVersion),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_server_address\",defaultMessage:[{type:0,value:\"Server address:\"}]})),this.props.serverAddress)))}}var aa=r(6789);class na extends l().Component{constructor(e){super(e),this.state={login:e.login,password:\"\",hostName:e.serverAddress,saveToken:e.persist},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){this.props.onPersistenceChange(!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){let e=\"primary\";return this.props.disabled&&(e+=\" disabled\"),l().createElement(\"form\",{id:\"login-form\",onSubmit:this.handleSubmit},l().createElement(d.FormattedMessage,{id:\"login_prompt\",defaultMessage:[{type:0,value:\"Login\"}]},e=>l().createElement(\"input\",{type:\"text\",id:\"inputLogin\",placeholder:e,autoComplete:\"username\",autoCorrect:\"off\",autoCapitalize:\"none\",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0})),l().createElement(d.FormattedMessage,{id:\"password_prompt\",defaultMessage:[{type:0,value:\"Password\"}]},e=>l().createElement(aa.A,{type:\"password\",id:\"inputPassword\",placeholder:e,autoComplete:\"current-password\",value:this.state.password,onChange:this.handlePasswordChange,required:!0})),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(ea.A,{id:\"save-token\",name:\"save-token\",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),l().createElement(\"label\",{htmlFor:\"save-token\"},\" \",l().createElement(d.FormattedMessage,{id:\"stay_logged_in\",defaultMessage:[{type:0,value:\"Stay logged in\"}]})),l().createElement(\"a\",{href:\"#reset\"},l().createElement(d.FormattedMessage,{id:\"forgot_password_link\",defaultMessage:[{type:0,value:\"Forgot password?\"}]}))),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:e,type:\"submit\"},l().createElement(d.FormattedMessage,{id:\"button_sign_in\",defaultMessage:[{type:0,value:\"Sign in\"}]}))))}}var ia=r(9593),ra=r.n(ia);const oa=(0,d.defineMessages)({invalid_id:{id:\"error_invalid_id\",defaultMessage:[{type:0,value:\"Invalid ID\"}]}});class la extends l().PureComponent{constructor(e){super(e),this.qrCodeRef=l().createRef(),this.state={groupId:\"\"},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){new(ra())(this.qrCodeRef.current,{text:this.props.myURI,width:As.Tn,height:As.Tn})}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){\"Enter\"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){const e=this.state.groupId.trim(),t=e.substring(0,3);e.length>3&&[\"usr\",\"grp\",\"chn\"].includes(t)?this.props.onSubmit(e):this.props.onError(this.props.intl.formatMessage(oa.invalid_id),\"err\")}}render(){return l().createElement(\"div\",{className:\"panel-form\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"group_user_id_prompt\",defaultMessage:[{type:0,value:\"Group or User ID\"}]},e=>l().createElement(\"input\",{type:\"text\",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyDown:this.handleKeyPress,required:!0,autoFocus:!0}))),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:\"button_subscribe\",defaultMessage:[{type:0,value:\"Subscribe\"}]}))),l().createElement(\"br\",null),l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_scan_id\",defaultMessage:[{type:0,value:\"Scan my ID:\"}]})),l().createElement(\"div\",{className:\"qr-code\",ref:this.qrCodeRef})))}}var ca=(0,d.injectIntl)(la),da=r(221),ha=r(9418),pa=r(3307);class ua extends l().PureComponent{constructor(e){super(e),this.fullName=l().createRef(),this.state={fullName:\"\",private:\"\",description:\"\",imageUrl:null,tags:[],isChannel:!1,newAvatar:null,newAvatarMime:null},this.handleFieldEdit=this.handleFieldEdit.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){}handleFieldEdit(e,t){this.setState({[e]:t.target.value||\"\"})}handleImageChanged(e,t){this.setState({newAvatar:t,newAvatarMime:e})}handleAvatarCropped(e,t,s,a){const n=t?URL.createObjectURL(t):null;this.setState({imageUrl:n,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,t,s,a){const n=e=>{let{mime:t,blob:s}=e;if(s.size>As.Z7){this.props.tinode.getLargeFileHelper().upload(s).then(e=>this.setState({imageUrl:e})).catch(e=>this.props.onError(e.message,\"err\"))}else(0,Os.Sk)(s).then(e=>this.setState({imageUrl:(0,Os.to)({data:e.bits,type:t})}))};s>As.eQ||a>As.eQ||s!=a?(0,Os.ag)(t,As.eQ,As.eQ,As.qy,!0).then(e=>n(e)).catch(e=>this.props.onError(e.message,\"err\")):n({mime:e,blob:t,width:s,height:a})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=(0,js.W5)(this.state.fullName.trim(),As.tS),s=(0,js.W5)(this.state.private.trim(),As.tS),a=(0,js.W5)(this.state.description.trim(),As.lQ);t&&this.props.onSubmit(t,a,this.state.imageUrl,s,this.state.tags,this.state.isChannel)}render(){if(this.state.newAvatar)return l().createElement(da.A,{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\"),l().createElement(\"form\",{className:\"panel-form\",onSubmit:this.handleSubmit},l().createElement(\"div\",{className:\"panel-form-column\"},l().createElement(\"center\",null,l().createElement(ha.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onError:this.props.onError,onImageUpdated:this.handleImageChanged})),l().createElement(\"div\",{className:\"group\"},l().createElement(\"label\",{className:\"small\",htmlFor:\"new-topic-fn\"},l().createElement(d.FormattedMessage,{id:\"label_topic_name\",defaultMessage:[{type:0,value:\"Name\"}]})),l().createElement(d.FormattedMessage,{id:\"topic_name_editing_placeholder\",defaultMessage:[{type:0,value:\"Freeform name of the group\"}]},e=>l().createElement(\"input\",{type:\"text\",id:\"new-topic-fn\",placeholder:e,ref:this.fullName,value:this.state.fullName,onChange:this.handleFieldEdit.bind(this,\"fullName\"),autoFocus:!0,required:!0,tabIndex:0}))),l().createElement(\"div\",{className:\"group\"},l().createElement(\"label\",{className:\"small\",htmlFor:\"new-topic-priv\"},l().createElement(d.FormattedMessage,{id:\"label_private\",defaultMessage:[{type:0,value:\"Private comment\"}]})),l().createElement(d.FormattedMessage,{id:\"private_editing_placeholder\",defaultMessage:[{type:0,value:\"Visible to you only\"}]},e=>l().createElement(\"input\",{type:\"text\",id:\"new-topic-priv\",placeholder:e,value:this.state.private,onChange:this.handleFieldEdit.bind(this,\"private\"),tabIndex:1}))),l().createElement(\"div\",{className:\"group\"},l().createElement(\"label\",{className:\"small\",htmlFor:\"new-topic-desc\"},l().createElement(d.FormattedMessage,{id:\"label_description\",defaultMessage:[{type:0,value:\"Description\"}]})),l().createElement(d.FormattedMessage,{id:\"description_editing_placeholder\",defaultMessage:[{type:0,value:\"Description (optional)\"}]},e=>l().createElement(\"input\",{type:\"text\",id:\"new-topic-desc\",placeholder:e,value:this.state.description,onChange:this.handleFieldEdit.bind(this,\"description\"),tabIndex:2})))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(ea.A,{checked:this.state.isChannel,tabIndex:3,onChange:this.handleChannelToggle}),\" \",l().createElement(\"label\",{onClick:this.handleChannelToggle},l().createElement(d.FormattedMessage,{id:\"channel_prompt\",defaultMessage:[{type:0,value:\"This is a channel\"}]}))),l().createElement(d.FormattedMessage,{id:\"title_tag_manager\",defaultMessage:[{type:0,value:\"Tags (search & discovery)\"}]},e=>l().createElement(pa.A,{tinode:this.props.tinode,tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tabIndex:4,title:e})),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:e},l().createElement(d.FormattedMessage,{id:\"button_create\",defaultMessage:[{type:0,value:\"Create\"}]}))))}}var ma=r(7151);const ga=(0,d.defineMessages)({search_for_contacts:{id:\"search_for_contacts\",defaultMessage:[{type:0,value:\"Use search to find contacts\"}]},search_no_results:{id:\"search_no_results\",defaultMessage:[{type:0,value:\"Search returned no results\"}]},search_placeholder:{id:\"search_placeholder\",defaultMessage:[{type:0,value:\"List like alice@example.com, +17025550003...\"}]}});class fa extends l().Component{constructor(e){super(e);const t=ma.A.parseUrlHash(window.location.hash).params,s=t.tab||\"find\",a=\"find\"==s&&t.q||null;this.state={tabSelected:s,searchQuery:a},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleSearchResultSelected=this.handleSearchResultSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),ma.A.navigateTo(ma.A.addUrlParam(window.location.hash,\"tab\",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){if(e=e.trim()||Ts.Tinode.DEL_CHAR,!/[\\s,:]/.test(e)&&e!=Ts.Tinode.DEL_CHAR){const t=(0,Gs.xH)(e);if(t)e=`${Ts.Tinode.TAG_EMAIL}${t}`;else{const t=(0,Gs.Jt)(e);t?e=`${Ts.Tinode.TAG_PHONE}${t}`:(\"@\"==e[0]&&(e=e.substring(1)),e=`${Ts.Tinode.TAG_ALIAS}${e},${e}`)}}this.props.onSearchContacts(e),this.setState({searchQuery:Ts.Tinode.isNullValue(e)?null:e})}handleSearchResultSelected(e){\"find\"==this.state.tabSelected&&(ma.A.navigateTo(ma.A.removeUrlParams(window.location.hash,[\"tab\",\"q\"])),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,n,i){ma.A.navigateTo(ma.A.removeUrlParams(window.location.hash,[\"tab\",\"q\"])),this.props.onCreateTopic(void 0,{public:(0,Gs.k6)(e,s,null,t),private:a,tags:n},i)}handleGroupByID(e){ma.A.navigateTo(ma.A.removeUrlParams(window.location.hash,[\"tab\",\"q\"])),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?ga.search_no_results:ga.search_for_contacts),s=e(ga.search_placeholder);return l().createElement(\"div\",{className:\"flex-column\"},l().createElement(\"ul\",{className:\"tabbar\"},l().createElement(\"li\",{className:\"find\"===this.state.tabSelected?\"active\":null},l().createElement(\"a\",{href:\"#\",\"data-id\":\"find\",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:\"tabtitle_find_user\",defaultMessage:[{type:0,value:\"find\"}]}))),l().createElement(\"li\",{className:\"grp\"===this.state.tabSelected?\"active\":null},l().createElement(\"a\",{href:\"#\",\"data-id\":\"grp\",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:\"tabtitle_new_group\",defaultMessage:[{type:0,value:\"new group\"}]}))),l().createElement(\"li\",{className:\"byid\"===this.state.tabSelected?\"active\":null},l().createElement(\"a\",{href:\"#\",\"data-id\":\"byid\",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:\"tabtitle_group_by_id\",defaultMessage:[{type:0,value:\"by id\"}]})))),\"grp\"===this.state.tabSelected?l().createElement(ua,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit,onError:this.props.onError}):\"byid\"===this.state.tabSelected?l().createElement(ca,{myURI:Ts.Tinode.URI_TOPIC_ID_PREFIX+this.props.tinode.getCurrentUserID(),onSubmit:this.handleGroupByID,onError:this.props.onError}):l().createElement(\"div\",{className:\"flex-column\"},l().createElement(Ps,{placeholder:s,initialQuery:this.state.searchQuery||\"\",onSearchContacts:this.handleSearchContacts}),l().createElement(xs.A,{tinode:this.props.tinode,contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showSelfTopic:!this.state.searchQuery,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleSearchResultSelected})))}}var va=(0,d.injectIntl)(fa);class ba extends l().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}handleKeyDown(e){\"Enter\"==e.key&&this.handleEditingFinished()}render(){const e=[];for(let t in As.SE){let s=As.SE[t];e.push(l().createElement(\"option\",{key:s,value:s}))}return l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"input\",{type:\"search\",id:\"host-name\",placeholder:this.props.hostName,list:\"known-hosts\",className:\"quoted\",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,onKeyDown:this.handleKeyDown,required:!0}),l().createElement(\"datalist\",{id:\"known-hosts\"},e))}}class wa extends l().PureComponent{constructor(e){super(e),this.state={transport:e.transport||\"def\",serverAddress:e.serverAddress,secureConnection:e.secureConnection},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this),this.handleToggleSecure=this.handleToggleSecure.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}handleToggleSecure(e){this.setState({secureConnection:!this.state.secureConnection})}render(){const e={def:\"default\",ws:\"websocket\",lp:\"long polling\"},t=[];return[\"def\",\"ws\",\"lp\"].forEach(s=>{const a=\"transport-\"+s,n=e[s];t.push(l().createElement(\"li\",{key:s},l().createElement(\"input\",{type:\"radio\",id:a,name:\"transport-select\",value:s,checked:this.state.transport===s,onChange:this.handleTransportSelected}),l().createElement(\"label\",{htmlFor:a},n)))}),l().createElement(\"form\",{id:\"settings-form\",className:\"panel-form\",onSubmit:this.handleSubmit},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_server_to_use\",defaultMessage:[{type:0,value:\"Server to use:\"}]}))),l().createElement(ba,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(ea.A,{id:\"secure-connection\",name:\"secure-connection\",checked:this.state.secureConnection,className:\"quoted\",onChange:this.handleToggleSecure}),l().createElement(\"label\",{htmlFor:\"secure-connection\"},l().createElement(d.FormattedMessage,{id:\"label_use_secure_connection\",defaultMessage:[{type:0,value:\"Use secure connection\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small\"},l().createElement(d.FormattedMessage,{id:\"label_wire_transport\",defaultMessage:[{type:0,value:\"Wire transport:\"}]}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"ul\",{className:\"quoted\"},t)),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{type:\"submit\",className:\"primary\"},l().createElement(d.FormattedMessage,{id:\"button_update\",defaultMessage:[{type:0,value:\"Update\"}]}))))}}const ya=(0,d.defineMessages)({phone:{id:\"phone_dative\",defaultMessage:[{type:0,value:\"phone\"}]},email:{id:\"email_dative\",defaultMessage:[{type:0,value:\"email\"}]}});class Ea extends l().PureComponent{constructor(e){super(e),this.state={code:e.credCode||\"\",codeReceived:e.credCode},this.handleCodeChange=this.handleCodeChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){return e.credCode!=t.codeReceived?{code:e.credCode||\"\",codeReceived:e.credCode}:t}componentDidMount(){this.props.credCode&&this.props.onSubmit(this.props.credMethod,this.props.credCode,this.props.credToken)}componentDidUpdate(e,t){this.state.codeReceived&&this.state.code&&this.state.code!=t.code&&this.props.onSubmit(this.props.credMethod,this.state.code,this.props.credToken)}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\\d]/g,\"\")})}handleKeyPress(e){\"Enter\"===e.key?this.handleSubmit(e):\"Escape\"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim(),this.props.credToken)}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t={email:e(ya.email),tel:e(ya.phone)}[this.props.credMethod]||this.props.credMethod;return l().createElement(\"div\",{className:\"panel-form\"},l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(\"label\",{className:\"small gray\",htmlFor:\"enter-confirmation-code\"},l().createElement(d.FormattedMessage,{id:\"enter_confirmation_code_prompt\",defaultMessage:[{type:0,value:\"Confirmation code\"}],values:{method:t}}))),l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"numeric_confirmation_code_prompt\",defaultMessage:[{type:0,value:\"Numbers only\"}]},e=>l().createElement(\"input\",{type:\"text\",id:\"enter-confirmation-code\",placeholder:e,value:this.state.code,onChange:this.handleCodeChange,onKeyDown:this.handleKeyPress,required:!0}))),l().createElement(\"div\",{className:\"dialog-buttons\"},l().createElement(\"button\",{className:\"secondary\",onClick:this.handleCancel},l().createElement(d.FormattedMessage,{id:\"button_cancel\",defaultMessage:[{type:0,value:\"Cancel\"}]})),l().createElement(\"button\",{className:\"primary\",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:\"button_confirm\",defaultMessage:[{type:0,value:\"Confirm\"}]}))))}}var Sa=(0,d.injectIntl)(Ea);const Ca=l().lazy(e=>Promise.all([r.e(892),r.e(330),r.e(271)]).then(r.bind(r,4271))),_a=l().lazy(e=>Promise.all([r.e(892),r.e(330),r.e(996)]).then(r.bind(r,3996))),Ma=l().lazy(e=>r.e(352).then(r.bind(r,2352))),Ta=l().lazy(e=>Promise.all([r.e(892),r.e(330),r.e(993)]).then(r.bind(r,3993))),ka=l().lazy(e=>r.e(827).then(r.bind(r,3827))),Aa=(0,d.defineMessages)({login:{id:\"sidepanel_title_login\",defaultMessage:[{type:0,value:\"Sign In\"}]},register:{id:\"sidepanel_title_register\",defaultMessage:[{type:0,value:\"Create Account\"}]},settings:{id:\"sidepanel_title_settings\",defaultMessage:[{type:0,value:\"Settings\"}]},edit:{id:\"sidepanel_title_account_settings\",defaultMessage:[{type:0,value:\"Account Settings\"}]},general:{id:\"panel_title_general\",defaultMessage:[{type:0,value:\"General\"}]},security:{id:\"panel_title_security\",defaultMessage:[{type:0,value:\"Security\"}]},crop:{id:\"panel_title_crop\",defaultMessage:[{type:0,value:\"Drag to Adjust\"}]},notif:{id:\"sidepanel_title_acc_notifications\",defaultMessage:[{type:0,value:\"Notifications\"}]},acc_general:{id:\"sidepanel_title_acc_general\",defaultMessage:[{type:0,value:\"General\"}]},support:{id:\"sidepanel_title_acc_support\",defaultMessage:[{type:0,value:\"Support\"}]},newtpk:{id:\"sidepanel_title_newtpk\",defaultMessage:[{type:0,value:\"Start New Chat\"}]},cred:{id:\"sidepanel_title_cred\",defaultMessage:[{type:0,value:\"Confirm Credentials\"}]},reset:{id:\"sidepanel_title_reset\",defaultMessage:[{type:0,value:\"Reset Password\"}]},archive:{id:\"sidepanel_title_archive\",defaultMessage:[{type:0,value:\"Archived Chats\"}]},blocked:{id:\"sidepanel_title_blocked\",defaultMessage:[{type:0,value:\"Blocked Chats\"}]},wallpapers:{id:\"wallpapers\",defaultMessage:[{type:0,value:\"Wallpapers\"}]}});class Na extends l().PureComponent{constructor(e){super(e),this.handleNewTopic=this.handleNewTopic.bind(this)}handleNewTopic(){this.props.onNavigate(\"newtpk\")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?\"contacts\":\"login\");let s,a,n,i;return\"contacts\"==t?(s=this.props.title,a=!this.props.avatar||this.props.avatar,n=this.props.trustedBadges):(s=e(Aa[t]),a=!1,n=null),-1==[\"login\",\"contacts\"].indexOf(t)&&(i=this.props.onCancel),l().createElement(\"div\",{id:\"sidepanel\"},l().createElement(Ys,{state:t,title:s,avatar:a,tinode:this.props.tinode,trustedBadges:n,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:i}),l().createElement(Hs.A,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),l().createElement(zs.A,{show:this.props.loadSpinnerVisible}),\"login\"===t?l().createElement(na,{login:this.props.login,disabled:this.props.loginDisabled,persist:this.props.persist,onLogin:this.props.onLoginRequest,onPersistenceChange:this.props.onPersistenceChange}):\"register\"===t?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(_a,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError})):\"settings\"===t?l().createElement(wa,{transport:this.props.transport,serverAddress:this.props.serverAddress,secureConnection:this.props.secureConnection,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):\"edit\"===t?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(Ca,{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,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onError:this.props.onError})):\"general\"===t||\"crop\"===t?l().createElement(Js.A,{topic:\"me\",tinode:this.props.tinode,myUserId:this.props.myUserId,reqCredMethod:this.props.reqCredMethod,onUpdateTopicDesc:this.props.onUpdateAccountDesc,onUpdateTagsRequest:this.props.onUpdateAccountTags,onError:this.props.onError}):\"acc_general\"===t?l().createElement(Zs,{colorSchema:this.props.colorSchema,onSelectWallpapers:this.props.onSelectWallpapers,textSize:this.props.textSize,sendOnEnter:this.props.sendOnEnter,onChangeColorSchema:this.props.onChangeColorSchema,onTextSizeChanged:this.props.onTextSizeChanged,onSendOnEnterChanged:this.props.onSendOnEnterChanged}):\"notif\"===t?l().createElement(ta,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds}):\"security\"===t?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(Ma,{tinode:this.props.tinode,incognitoMode:this.props.incognitoMode,onUpdateAccountDesc:this.props.onUpdateAccountDesc,onUpdatePassword:this.props.onUpdatePassword,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked,onToggleIncognitoMode:this.props.onToggleIncognitoMode})):\"support\"===t?l().createElement(sa,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):\"wallpapers\"===t?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(ka,{wallpaper:this.props.wallpaper,wallpaperSize:this.props.wallpaperSize,wallpaperBlur:this.props.wallpaperBlur,colorSchema:\"auto\"!==this.props.colorSchema?this.props.colorSchema:this.props.systemColorSchema,onWallpaperSelected:this.props.onWallpaperSelected})):\"contacts\"===t||\"archive\"==t||\"blocked\"==t?l().createElement(Qs,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:\"archive\"==t,blocked:\"blocked\"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):\"newtpk\"===t?l().createElement(va,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):\"cred\"===t?l().createElement(Sa,{credCode:this.props.credCode,credMethod:this.props.credMethod,credToken:this.props.credToken,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel}):\"reset\"===t?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",{className:\"panel-form-row\"},l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(Ta,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword,onCancel:this.props.onCancel,onError:this.props.onError})):null)}}var Ia=(0,d.injectIntl)(Na),Da=r(257);function xa(){let e=As.HX;return\"object\"==typeof window.location&&(\"file:\"==window.location.protocol||\"localhost\"==window.location.hostname?e=As.SE.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?\":\"+window.location.port:\"\"))),e}function Pa(){return\"object\"==typeof window.location&&\"https:\"==window.location.protocol}var Ra=r(8262);const Fa=l().lazy(e=>r.e(316).then(r.bind(r,4316))),Ua=l().lazy(e=>r.e(747).then(r.bind(r,7747))),La=l().lazy(e=>r.e(429).then(r.bind(r,6429))),Oa=new Audio(\"audio/msg.m4a\"),ja=(0,d.defineMessages)({reconnect_countdown:{id:\"reconnect_countdown\",defaultMessage:[{type:0,value:\"Disconnected. Reconnecting in \"},{type:1,value:\"seconds\"},{type:0,value:\"…\"}]},reconnect_now:{id:\"reconnect_now\",defaultMessage:[{type:0,value:\"Try now\"}]},push_init_failed:{id:\"push_init_failed\",defaultMessage:[{type:0,value:\"Failed to initialize push notifications\"}]},invalid_security_token:{id:\"invalid_security_token\",defaultMessage:[{type:0,value:\"Invalid security token\"}]},no_connection:{id:\"no_connection\",defaultMessage:[{type:0,value:\"No connection\"}]},code_doesnot_match:{id:\"code_doesnot_match\",defaultMessage:[{type:0,value:\"Code does not match\"}]},menu_item_info:{id:\"menu_item_info\",defaultMessage:[{type:0,value:\"Info\"}]},menu_item_audio_call:{id:\"menu_item_audio_call\",defaultMessage:[{type:0,value:\"Call\"}]},menu_item_video_call:{id:\"menu_item_video_call\",defaultMessage:[{type:0,value:\"Video call\"}]},cred_confirmed_successfully:{id:\"cred_confirmed_successfully\",defaultMessage:[{type:0,value:\"Confirmed successfully\"}]},password_reset_success:{id:\"password_reset_success\",defaultMessage:[{type:0,value:\"Password reset successfully\"}]},select_country:{id:\"select_country\",defaultMessage:[{type:0,value:\"Select country\"}]}});class Ba extends l().Component{constructor(e){super(e),this.selfRef=l().createRef(),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleColorSchemeChange=this.handleColorSchemeChange.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handlePersistenceChange=this.handlePersistenceChange.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdatePasswordRequest=this.handleUpdatePasswordRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleChangeColorSchema=this.handleChangeColorSchema.bind(this),this.handleChangeTextSize=this.handleChangeTextSize.bind(this),this.handleSendOnEnter=this.handleSendOnEnter.bind(this),this.handleSelectWallpapers=this.handleSelectWallpapers.bind(this),this.handleWallpaperSelected=this.handleWallpaperSelected.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initFCMessaging=this.initFCMessaging.bind(this),this.toggleFCMToken=this.toggleFCMToken.bind(this),this.handlePushMessage=this.handlePushMessage.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdateRequest=this.handleTagsUpdateRequest.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteTopicRequest=this.handleDeleteTopicRequest.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShareTheCard=this.handleShareTheCard.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this),this.handleShowCountrySelector=this.handleShowCountrySelector.bind(this),this.handleShowForwardDialog=this.handleShowForwardDialog.bind(this),this.handleHideForwardDialog=this.handleHideForwardDialog.bind(this),this.handleStartVideoCall=this.handleStartVideoCall.bind(this),this.handleStartAudioCall=this.handleStartAudioCall.bind(this),this.handleInfoMessage=this.handleInfoMessage.bind(this),this.handleDataMessage=this.handleDataMessage.bind(this),this.handleCallClose=this.handleCallClose.bind(this),this.handleCallInvite=this.handleCallInvite.bind(this),this.handleCallRinging=this.handleCallRinging.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.handleCallSendOffer=this.handleCallSendOffer.bind(this),this.handleCallIceCandidate=this.handleCallIceCandidate.bind(this),this.handleCallSendAnswer=this.handleCallSendAnswer.bind(this),this.handleCallAccept=this.handleCallAccept.bind(this),this.sendMessageToTopic=this.sendMessageToTopic.bind(this),this.callTimeoutTimer=null}getBlankState(){const e=Ra.A.getObject(\"settings\")||{},t=!!Ra.A.getObject(\"keep-logged-in\");if(!e.wallpaper){const t=(0,Gs.KY)();e.wallpaper=t.name||\"\",e.wallpaperSize=t.size||0,e.wallpaperBlur=0}return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||xa(),secureConnection:void 0===e.secureConnection?Pa():e.secureConnection,serverVersion:\"no connection\",messageSounds:!e.messageSoundsOff,incognitoMode:!1,colorSchema:e.colorSchema||As.gb,systemColorSchema:window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\",wallpaper:e.wallpaper,wallpaperSize:e.wallpaperSize,wallpaperBlur:0,textSize:e.textSize||As.cL,sendOnEnter:e.sendOnEnter||\"plain\",desktopAlerts:t&&!!e.desktopAlerts,desktopAlertsEnabled:(Pa()||\"object\"==typeof window.location&&\"localhost\"==window.location.hostname)&&void 0!==He&&\"undefined\"!=typeof navigator&&\"undefined\"!=typeof FIREBASE_INIT,firebaseToken:t?Ra.A.getObject(\"firebase-token\"):null,applicationVisible:!document.hidden,errorText:\"\",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:\"login\",sidePanelTitle:null,sidePanelAvatar:null,myTrustedBadges:[],loadSpinnerVisible:!1,login:\"\",password:\"\",persist:t,myUserId:null,liveConnection:navigator.onLine,topicSelected:\"\",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=As.VJ,infoPanel:void 0,mobilePanel:\"sidepanel\",callTopic:void 0,callState:Ls.Gv,callAudioOnly:void 0,callShouldStart:!1,contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],forwardDialogVisible:!1,forwardMessage:null,alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],reqCredMethod:void 0,credMethod:void 0,credCode:void 0,credToken:void 0,requestedTopic:void 0}}componentDidMount(){if(window.addEventListener(\"resize\",this.handleResize),this.handleOnlineOn=e=>{this.handleOnline(!0)},window.addEventListener(\"online\",this.handleOnlineOn),this.handleOnlineOff=e=>{this.handleOnline(!1)},window.addEventListener(\"offline\",this.handleOnlineOff),window.addEventListener(\"hashchange\",this.handleHashRoute),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",this.handleColorSchemeChange),document.addEventListener(\"visibilitychange\",this.handleVisibilityEvent),document.addEventListener(\"keydown\",this.handleEscapeKey),document.documentElement.style.colorScheme=\"auto\"==this.state.colorSchema?\"light dark\":this.state.colorSchema,document.documentElement.style.setProperty(\"--message-text-size\",`${this.state.textSize}pt`),this.applyWallpaperSettings(this.state.wallpaper,this.state.wallpaperSize,this.state.wallpaperBlur,\"auto\"==this.state.colorSchema?this.state.systemColorSchema:this.state.colorSchema),\"function\"==typeof BroadcastChannel){new BroadcastChannel(\"tinode-sw\").addEventListener(\"message\",this.handlePushMessage)}else console.warn(\"Your browser does not support BroadcastChannel. Some features will not be available\");this.lastWakeUpCheck=(new Date).getTime(),this.wakeUpTicker=setInterval(e=>{const t=(new Date).getTime();t-this.lastWakeUpCheck>As.hT&&this.handleOnlineOn(),this.lastWakeUpCheck=t},As.ZW),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),new Promise((e,t)=>{this.tinode=Ba.tnSetup(this.state.serverAddress,Pa(),this.state.transport,this.props.intl.locale,this.state.persist,e),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage}).then(e=>{this.state.desktopAlertsEnabled&&this.initFCMessaging().catch(e=>{}),this.resetContactList();const t=this.state.persist?Ra.A.getObject(\"auth-token\"):void 0;t&&(this.setState({autoLogin:!0}),t.expires=new Date(t.expires),this.tinode.setAuthToken(t),this.tinode.connect().catch(e=>{this.handleError(e.message,\"err\")}));const s=ma.A.parseUrlHash(window.location.hash);if([\"cred\",\"reset\",\"register\"].includes(s.path[0]))this.handleHashRoute();else{this.setState({requestedTopic:s.path[1]});const e=s.params&&s.params.cred_done?ma.A.addUrlParam(\"\",\"cred_done\",s.params.cred_done):\"\";ma.A.navigateTo(e)}})}componentWillUnmount(){window.removeEventListener(\"resize\",this.handleResize),window.removeEventListener(\"hashchange\",this.handleHashRoute),window.removeEventListener(\"online\",this.handleOnlineOn),window.removeEventListener(\"offline\",this.handleOnlineOff),window.matchMedia(\"(prefers-color-scheme: dark)\").removeEventListener(\"change\",this.handleColorSchemeChange),document.removeEventListener(\"visibilitychange\",this.handleVisibilityEvent),document.removeEventListener(\"keydown\",this.handleEscapeKey),clearInterval(this.wakeUpTicker)}static tnSetup(e,t,s,a,n,i){const r=new Ts.Tinode({appName:As.C3,host:e,apiKey:As.Lq,transport:s,secure:t,persist:n},i);return r.setHumanLanguage(a),r.enableLogging(As.U3,!0),r}handlePushMessage(e){this.tinode.oobNotification(e.data||{})}initFCMessaging(){const{formatMessage:e,locale:t}=this.props.intl,s=(t,s)=>{console.error(t,s),this.handleError(e(ja.push_init_failed),\"err\"),this.setState({firebaseToken:null}),Ra.A.updateObject(\"settings\",{desktopAlerts:!1})};try{return this.fcm=Ss(He(FIREBASE_INIT,As.C3)),navigator.serviceWorker.getRegistration(\"/service-worker.js\").then(e=>e||navigator.serviceWorker.register(\"/service-worker.js\").then(e=>(this.checkForAppUpdate(e),e))).then(e=>((e.active||e.installing).postMessage(JSON.stringify({locale:t,version:Da.i})),Ba.requestFCMToken(this.fcm,e))).then(e=>{const t=Ra.A.getObject(\"keep-logged-in\");e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e),t&&Ra.A.setObject(\"firebase-token\",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),t&&Ra.A.updateObject(\"settings\",{desktopAlerts:!0}),Ms(this.fcm,e=>{this.handlePushMessage(e)})}).catch(e=>{throw s(e),e})}catch(e){return s(e),Promise.reject(e)}}static requestFCMToken(e,t){return Cs(e,{serviceWorkerRegistration:t,vapidKey:FIREBASE_INIT.messagingVapidKey}).then(t=>{if(t)return t;if(\"undefined\"!=typeof Notification)return Notification.requestPermission().then(t=>{if(\"granted\"===t)return Cs(e,{serviceWorkerRegistration:reg,vapidKey:FIREBASE_INIT.messagingVapidKey}).then(e=>{if(e)return e;throw new Error(\"Failed to initialize notifications\")});throw new Error(\"No permission to send notifications: \"+t)});throw new Error(\"Notifications are not supported\")})}handleResize(){const e=document.documentElement.clientWidth<=As.VJ;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}handleEscapeKey(e){\"Escape\"!==e.key&&27!==e.keyCode||(this.setState({topicSelected:null,errorText:\"\",errorLevel:null,mobilePanel:\"sidepanel\",topicSelectedOnline:!1,topicSelectedAcs:null,infoPanel:void 0,forwardMessage:null,contextMenuVisible:!1,forwardDialogVisible:!1,alertVisible:!1}),ma.A.navigateTo(ma.A.setUrlTopic(\"\",null)))}checkForAppUpdate(e){e.onupdatefound=t=>{const s=e.installing;s.onstatechange=e=>{if(\"installed\"==s.state&&navigator.serviceWorker.controller){const e=l().createElement(l().Fragment,null,l().createElement(d.FormattedMessage,{id:\"update_available\",defaultMessage:[{type:0,value:\"Update available.\"}]}),\" \",l().createElement(\"a\",{href:\"\"},l().createElement(d.FormattedMessage,{id:\"reload_update\",defaultMessage:[{type:0,value:\"Reload\"}]})),\".\");this.handleError(e,\"info\")}}}}handleHashRoute(){const e=ma.A.parseUrlHash(window.location.hash),t={infoPanel:e.params.info,newTopicTabSelected:e.params.tab};if(e.path&&e.path.length>0){[\"acc_general\",\"archive\",\"blocked\",\"contacts\",\"cred\",\"crop\",\"edit\",\"general\",\"newtpk\",\"notif\",\"register\",\"reset\",\"security\",\"settings\",\"support\",\"wallpapers\",\"\"].includes(e.path[0])?t.sidePanelSelected=e.path[0]:console.warn(\"Unknown sidepanel view\",e.path[0]);let s=e.path[1]||null;s!=this.state.topicSelected&&(Ts.Tinode.topicType(s)?t.mobilePanel=\"topic-view\":(s=null,t.mobilePanel=\"sidepanel\"),Object.assign(t,{topicSelected:s,topicSelectedAcs:this.tinode.getTopicAccessMode(s)}))}else Object.assign(t,{sidePanelSelected:\"\",topicSelected:null});e.params.method&&(t.credMethod=e.params.method),e.params.code&&(t.credCode=e.params.code),e.params.token&&(t.credToken=e.params.token),e.params.cred_done&&Object.assign(t,Ba.stateForError(this.props.intl.formatMessage(ja.cred_confirmed_successfully),\"info\")),this.setState(t)}handleOnline(e){e?(this.handleError(),clearInterval(this.reconnectCountdown),this.tinode.reconnect()):this.handleError(this.props.intl.formatMessage(ja.no_connection),\"warn\"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}static stateForError(e,t,s,a){return{errorText:e,errorLevel:t,errorAction:s,errorActionText:a,callShouldStart:!1}}handleError(e,t,s,a){this.setState(Ba.stateForError(e,t,s,a))}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError(\"\",null),this.tinode.isConnected()?this.doLogin(e,t,null,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch(e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,\"err\")}),this.state.desktopAlertsEnabled&&!this.state.firebaseToken&&this.initFCMessaging()}handlePersistenceChange(e){e?this.tinode.initStorage().then(e=>{Ra.A.setObject(\"keep-logged-in\",!0),this.setState({persist:!0})}):this.tinode.clearStorage().then(e=>{Ra.A.setObject(\"keep-logged-in\",!1),this.setState({persist:!1})})}handleConnected(){clearInterval(this.reconnectCountdown),this.handleError();const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+\" \"+(e.build?e.build:\"none\"),reqCredMethod:((e.reqCred||{}).auth||[])[0]||\"email\"}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,null,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then(e=>{this.handleError()}).catch(e=>{this.handleError(e.message,\"err\")});const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=a,this.reconnectCountdown=setInterval(e=>{if(a<-10)return clearInterval(this.reconnectCountdown),void this.tinode.reconnect();const t=a>99?(0,js.Ye)(a):a;this.handleError(s(ja.reconnect_countdown,{seconds:t}),\"warn\",e=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()},s(ja.reconnect_now)),a-=1},1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:\"Disconnected\",errorLevel:e&&e.message?\"err\":\"warn\",loginDisabled:!1,contextMenuVisible:!1,forwardDialogVisible:!1,serverVersion:\"no connection\"})}doLogin(e,t,s,a){if(this.tinode.isAuthenticated())return void ma.A.navigateTo(\"\");let n=s||(this.tinode.getAuthToken()||{}).token;if(!(e&&t||n))return ma.A.navigateTo(\"\"),void this.setState({loginDisabled:!1});a=Ts.Tinode.credential(a);let i,r=this.tinode.isConnected()?Promise.resolve():this.tinode.connect();e&&t?(n=null,this.setState({password:null}),i=r.then(s=>this.tinode.loginBasic(e,t,a))):i=r.then(e=>this.tinode.loginToken(n,a)),i.then(e=>{e.code>=300&&\"validate credentials\"===e.text?(this.setState({loadSpinnerVisible:!1}),a&&this.handleError(this.props.intl.formatMessage(ja.code_doesnot_match),\"warn\"),Ba.navigateToCredentialsView(e.params)):this.handleLoginSuccessful()}).catch(e=>{const t=e.code>=500;this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:t}),this.handleError(e.message,\"err\"),console.warn(\"Login failed\",e),t||(n&&this.handleLogout(),ma.A.navigateTo(\"\"))})}static navigateToCredentialsView(e){const t=ma.A.parseUrlHash(window.location.hash);t.path[0]=\"cred\",t.params.method=e.cred[0],t.params.token=e.token,t.params.code=e.code,ma.A.navigateTo(ma.A.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),Ra.A.getObject(\"keep-logged-in\")&&Ra.A.setObject(\"auth-token\",this.tinode.getAuthToken());const e=this.state.requestedTopic||this.state.topicSelected,t=this.tinode.getMeTopic();t.onMetaDesc=this.tnMeMetaDesc,t.onContactUpdate=this.tnMeContactUpdate,t.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,credToken:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0,requestedTopic:void 0}),t.subscribe(t.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch(e=>{this.tinode.disconnect(),localStorage.removeItem(\"auth-token\"),this.handleError(e.message,\"err\"),ma.A.navigateTo(\"\")}).finally(e=>{this.setState({loadSpinnerVisible:!1})});let s=ma.A.setUrlSidePanel(window.location.hash,\"contacts\");e&&(s=ma.A.setUrlTopic(s,e)),ma.A.navigateTo(s)}tnMeMetaDesc(e){if(e){if(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:(0,Os.to)(e.public.photo)}),e.trusted){const t=[];for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({myTrustedBadges:t})}e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()}),Ba.checkIfPinsUpdated(e,this.state.chatList)&&this.resetContactList()}}tnMeContactUpdate(e,t){if(\"on\"==e||\"off\"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:\"on\"==e});else if(\"read\"==e)this.resetContactList();else if(\"msg\"==e&&t){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&Oa.play().catch(e=>{}),this.resetContactList()}else\"recv\"==e||(\"gone\"==e||\"unsub\"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):\"acs\"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):\"del\"==e||\"upd\"==e||\"call\"==e||console.info(\"Unsupported (yet) presence update:\",e,\"in\",(t||{}).topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)Ts.Tinode.isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0);const t=this.tinode.getMeTopic();t.contacts(t=>{t.topic||t.user||(t.topic=t.name),e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)});const s=new Date(0);e.chatList.sort((e,a)=>{const n=t.pinnedTopicRank(a.topic)-t.pinnedTopicRank(e.topic);return 0!=n?n:(a.touched||s).getTime()-(e.touched||s).getTime()}),e.searchableContacts=Ba.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}static checkIfPinsUpdated(e,t){for(let s=0;s<t.length;s++){const a=t[s];if(!!e.pinnedTopicRank(a.topic)!=a.pinned)return!0}return!1}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch(e=>{this.handleError(e.message,\"err\")})}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts(t=>{e.push(t)}),this.setState({searchResults:e,searchableContacts:Ba.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then(e=>t.getMeta(t.startMetaQuery().withSub().build())).catch(e=>this.handleError(e.message,\"err\"))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:\"\",errorLevel:null,mobilePanel:\"topic-view\",infoPanel:void 0}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e),forwardMessage:null}),ma.A.navigateTo(ma.A.setUrlTopic(\"\",e)))):(this.setState({topicSelected:null,errorText:\"\",errorLevel:null,mobilePanel:\"sidepanel\",topicSelectedOnline:!1,topicSelectedAcs:null,infoPanel:void 0,forwardMessage:null}),ma.A.navigateTo(ma.A.setUrlTopic(\"\",null)))}handleHideMessagesView(){this.setState({mobilePanel:\"sidepanel\"}),ma.A.navigateTo(ma.A.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s,a){const n=this.tinode.getTopic(this.state.topicSelected);return this.sendMessageToTopic(n,e,t,s,a)}sendMessageToTopic(e,t,s,a,n){(t=e.createMessage(t,!1))._uploader=a,n&&(t.head=Object.assign(t.head||{},n));const i=[];if(s&&i.push(s),!e.isSubscribed()){const s=e.subscribe().then(s=>{let a=[];e.queuedMessages(s=>{s._sending||s.seq==t.seq||(s.head&&s.head.webrtc?a.push(s.seq):e.isSubscribed()&&e.publishMessage(s))}),a.length>0&&e.delMessagesList(a,!0)});i.push(s)}return e.publishDraft(t,Promise.all(i)).then(t=>(e.isArchived()&&e.archive(!1),t)).catch(e=>this.handleError(e.message,\"err\"))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case\"accept\":const n=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:n}}),s.isP2PType()&&(a=a.then(t=>s.setMeta({sub:{user:e,mode:n}})));break;case\"delete\":a=s.delTopic(!0);break;case\"block\":const i=s.getAccessMode().updateWant(\"-JP\").getWant();a=s.setMeta({sub:{mode:i}}).then(e=>this.handleTopicSelected(null));break;default:console.warn(\"Unknown invitation action\",'\"'+t+'\"\"')}null!=a&&a.catch(e=>this.handleError(e.message,\"err\"))}handleNewAccount(){this.handleError(),ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,\"register\"))}handleNewAccountRequest(e,t,s,a,n){this.handleError(),this.tinode.connect(this.state.serverAddress).then(i=>{let r;return s&&s.photo&&s.photo.ref&&(r=[s.photo.ref]),this.tinode.createAccountBasic(e,t,{public:s,tags:n,cred:Ts.Tinode.credential(a),attachments:r})}).then(e=>{e.code>=300&&\"validate credentials\"==e.text?Ba.navigateToCredentialsView(e.params):this.handleLoginSuccessful(this)}).catch(e=>{this.handleError(e.message,\"err\")})}handleToggleIncognitoMode(e){this.setState({incognitoMode:null});const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?\"-P\":\"+P\").getWant();t.setMeta({sub:{mode:s}}).catch(t=>{this.setState({incognitoMode:!e}),this.handleError(t.message,\"err\")})}handleChangeColorSchema(e){this.setState({colorSchema:e}),Ra.A.updateObject(\"settings\",{colorSchema:e}),document.documentElement.style.colorScheme=\"auto\"==e?\"light dark\":e,this.applyColorSchema(e,this.state.systemColorSchema,this.state.wallpaperSize)}handleColorSchemeChange(e){const t=e.matches?\"dark\":\"light\";this.setState({systemColorSchema:t}),this.applyColorSchema(this.state.colorSchema,t,this.state.wallpaperSize)}applyColorSchema(e,t,s){const a=\"auto\"==e?t:e;document.documentElement.style.setProperty(\"--wallpaper-invert\",\"dark\"==a&&s?\"1\":\"0\"),document.documentElement.style.setProperty(\"--wallpaper-brightness\",\"dark\"!=a||s?\"1\":\"0.5\")}handleSelectWallpapers(){this.handleError(),ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,\"wallpapers\"))}applyWallpaperSettings(e,t,s,a){document.documentElement.style.setProperty(\"--wallpaper-url\",`url('${e}')`),document.documentElement.style.setProperty(\"--wallpaper-repeat\",t?\"repeat\":\"no-repeat\"),document.documentElement.style.setProperty(\"--wallpaper-blur\",t?\"0px\":`${s}px`),document.documentElement.style.setProperty(\"--wallpaper-size\",t?`${t}px`:\"cover\"),document.documentElement.style.setProperty(\"--wallpaper-position\",t?\"unset\":\"center\"),document.documentElement.style.setProperty(\"--wallpaper-invert\",\"dark\"==a&&t?\"1\":\"0\"),document.documentElement.style.setProperty(\"--wallpaper-brightness\",\"dark\"!=a||t?\"1\":\"0.5\")}handleWallpaperSelected(e,t,s){this.handleError(),Ra.A.updateObject(\"settings\",{wallpaper:e,wallpaperSize:t,wallpaperBlur:s}),this.setState({wallpaper:e,wallpaperSize:t,wallpaperBlur:s}),this.applyWallpaperSettings(e,t,s,\"auto\"==this.state.colorSchema?this.state.systemColorSchema:this.state.colorSchema)}handleChangeTextSize(e){this.setState({textSize:0|e}),Ra.A.updateObject(\"settings\",{textSize:e}),document.documentElement.style.setProperty(\"--message-text-size\",`${e}pt`)}handleSendOnEnter(e){this.setState({sendOnEnter:e}),Ra.A.updateObject(\"settings\",{sendOnEnter:e})}handleUpdateAccountTagsRequest(e,t){this.tinode.getMeTopic().setMeta({tags:t}).catch(e=>this.handleError(e.message,\"err\"))}handleSettings(){this.handleError(),ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,this.state.myUserId?\"edit\":\"settings\"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport,a=void 0===e.secureConnection?this.state.secureConnection:e.secureConnection;this.tinode&&(this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=Ba.tnSetup(t,a,s,this.props.intl.locale,Ra.A.getObject(\"keep-logged-in\")),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,this.setState({serverAddress:t,transport:s,secureConnection:a}),Ra.A.setObject(\"settings\",{serverAddress:t,transport:s,secureConnection:a}),ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,\"\"))}handleShowArchive(){ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,this.state.myUserId?\"archive\":\"\"))}handleShowBlocked(){ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,this.state.myUserId?\"blocked\":\"\"))}toggleFCMToken(e){e?(this.setState({desktopAlerts:null}),this.state.firebaseToken?(this.setState({desktopAlerts:!0}),Ra.A.getObject(\"keep-logged-in\")&&Ra.A.updateObject(\"settings\",{desktopAlerts:!0})):this.initFCMessaging()):this.state.firebaseToken&&this.fcm?_s(this.fcm).catch(e=>{console.error(\"Unable to delete token.\",e)}).finally(e=>{Ra.A.updateObject(\"settings\",{desktopAlerts:!1}),localStorage.removeItem(\"firebase-token\"),this.setState({desktopAlerts:!1,firebaseToken:null}),this.tinode.setDeviceToken(null)}):(this.setState({desktopAlerts:!1,firebaseToken:null}),Ra.A.updateObject(\"settings\",{desktopAlerts:!1}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),Ra.A.updateObject(\"settings\",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch(e=>this.handleError(e.message,\"err\"))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch(e=>this.handleError(e.message,\"err\"))}handleCredConfirm(e,t){Ba.navigateToCredentialsView({cred:[e],code:t})}handleSidepanelCancel(){const e=ma.A.parseUrlHash(window.location.hash);let t=\"\";[\"security\",\"support\",\"general\",\"notif\",\"acc_general\"].includes(e.path[0])?t=\"edit\":\"crop\"==e.path[0]?t=\"general\":\"blocked\"==e.path[0]?t=\"security\":\"wallpapers\"==e.path[0]?t=\"acc_general\":this.state.myUserId&&(t=\"contacts\"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab,delete e.params.scheme,delete e.params.token),ma.A.navigateTo(ma.A.composeUrlHash(e.path,e.params)),this.setState({errorText:\"\",errorLevel:null})}basicNavigator(e){ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,e))}infoNavigator(e){ma.A.navigateTo(ma.A.setUrlInfoPanel(window.location.hash,e))}handleStartTopicRequest(e,t,s){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const a={};Ts.Tinode.isP2PTopicName(e)?(a.sub={mode:As.cZ},a.desc={defacs:{auth:As.cZ}}):(e=e||this.tinode.newGroupTopicName(s),t&&(a.desc={public:t.public,private:{comment:t.private}},a.tags=t.tags)),a._topicName=e,this.setState({newTopicParams:a},t=>{this.handleTopicSelected(e)})}handleNewTopicCreated(e,t){let s={};this.state.callShouldStart&&(s={callState:Ls.d1,callShouldStart:!1}),this.state.topicSelected==e&&e!=t&&(s.topicSelected=t),this.setState(s,e=>{ma.A.navigateTo(ma.A.setUrlTopic(\"\",t))})}handleTopicUpdateRequest(e,t,s,a){this.handleError();const n=this.tinode.getTopic(e);if(n){const e={};let i;t&&(t.photo&&(t.photo.ref&&t.photo.ref!=Ts.Tinode.DEL_CHAR?i=[t.photo.ref]:t.photo.data&&t.photo.data!=Ts.Tinode.DEL_CHAR||(t.photo=Ts.Tinode.DEL_CHAR)),e.public=t),\"string\"==typeof s&&(e.private=s===Ts.Tinode.DEL_CHAR?Ts.Tinode.DEL_CHAR:{comment:s}),a&&(e.defacs=a),n.setMeta({desc:e,attachments:i}).catch(e=>this.handleError(e.message,\"err\"))}}handleUnarchive(e){const t=this.tinode.getTopic(e);t&&t.archive(!1).catch(e=>this.handleError(e.message,\"err\"))}handleUpdatePasswordRequest(e){this.handleError(),e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch(e=>this.handleError(e.message,\"err\"))}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch(e=>this.handleError(e.message,\"err\"))}}handleTagsUpdateRequest(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch(e=>this.handleError(e.message,\"err\"))}handleLogout(){let e;(0,Gs.OM)(0),localStorage.removeItem(\"auth-token\"),localStorage.removeItem(\"firebase-token\"),localStorage.removeItem(\"settings\"),this.state.firebaseToken&&_s(this.fcm),document.documentElement.style.colorScheme=\"auto\"==As.gb?\"light dark\":As.gb,document.documentElement.style.setProperty(\"--message-text-size\",`${As.cL}pt`),clearInterval(this.reconnectCountdown),this.tinode?(e=this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()):e=Promose.resolve(),this.setState(this.getBlankState()),e.then(e=>{this.tinode=Ba.tnSetup(this.state.serverAddress,Pa(),this.state.transport,this.props.intl.locale,Ra.A.getObject(\"keep-logged-in\"),e=>{this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,ma.A.navigateTo(\"\")})})}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then(e=>{this.handleLogout()})}handleDeleteTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.delTopic(!0).then(e=>{ma.A.navigateTo(ma.A.setUrlTopic(window.location.hash,\"\"))}).catch(e=>{this.handleError(e.message,\"err\")})}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch(e=>this.handleError(e.message,\"err\"))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then(e=>{ma.A.navigateTo(ma.A.setUrlTopic(window.location.hash,\"\"))}).catch(e=>{this.handleError(e.message,\"err\")})}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,\"-JP\").then(e=>{ma.A.navigateTo(ma.A.setUrlTopic(window.location.hash,\"\"))}).catch(e=>this.handleError(e.message,\"err\"))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.report(\"report\",e),t.updateMode(null,\"-JP\").then(e=>{ma.A.navigateTo(ma.A.setUrlTopic(window.location.hash,\"\"))}).catch(e=>this.handleError(e.message,\"err\")))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:this.selfRef.current.getBoundingClientRect()})}handleShowForwardDialog(e){\"newtpk\"==this.state.sidePanelSelected&&this.handleSidepanelCancel();const t=e.userName?\"➦ \"+e.userName:\"\",s=\"string\"==typeof e.content?Ts.Drafty.init(e.content):Ts.Drafty.forwardedContent(e.content),a=Ts.Drafty.preview(s,As.TR,!0),n=Ts.Drafty.append(Ts.Drafty.appendLineBreak(Ts.Drafty.mention(t,e.userFrom)),s),i=Ts.Drafty.quote(t,e.userFrom,a),r={forwarded:e.topicName+\":\"+e.seq};this.setState({forwardDialogVisible:!0,forwardMessage:{head:r,msg:n,preview:i}})}handleShareTheCard(e){this.setState({forwardDialogVisible:!0,forwardMessage:{content:e,type:e.contentType}})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);if(t._deleted)return[\"topic_delete\"];const s=this.tinode.getMeTopic();let a=!1,n=!1,i=!1,r=!1,o=!1,l=!1,c=!1,d=!1,h=!1,p=!1,u=!1;if(t){r=t.isSubscribed(),l=t.isArchived(),c=s.pinnedTopicRank(e)>0;const d=t.getAccessMode();d&&(a=d.isMuted(),n=!d.isJoiner(),i=!d.isJoiner(\"want\"),o=d.isDeleter(),h=d.isWriter())}return d=h&&!!this.tinode.getServerParam(\"iceServers\"),p=Ts.Tinode.isP2PTopicName(e),u=Ts.Tinode.isSelfTopicName(e),[r?{title:this.props.intl.formatMessage(ja.menu_item_info),handler:this.handleShowInfoView}:null,r&&p&&d?{title:this.props.intl.formatMessage(ja.menu_item_audio_call),handler:this.handleStartAudioCall}:null,r&&p&&d?{title:this.props.intl.formatMessage(ja.menu_item_video_call),handler:this.handleStartVideoCall}:null,r?\"messages_clear\":null,r&&o&&!u?\"messages_clear_hard\":null,u?null:a?n?null:\"topic_unmute\":\"topic_mute\",u?null:i?\"topic_unblock\":\"topic_block\",c?\"topic_unpin\":\"topic_pin\",l?\"topic_restore\":\"topic_archive\",\"topic_delete\"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleHideForwardDialog(e){this.setState({forwardDialogVisible:!1,forwardMessage:e?this.state.forwardMessage:null})}handleContextMenuAction(e,t,s){\"topic_archive\"==e?t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then(e=>{this.handleTopicSelected(null)}):\"menu_item_forward\"==e&&this.handleShowForwardDialog(s)}handleShowAlert(e,t,s,a,n,i){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:n,reject:i}})}handleShowInfoView(){ma.A.navigateTo(ma.A.addUrlParam(window.location.hash,\"info\",\"info\")),this.setState({infoPanel:\"info\"})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.forEach(e=>{a.invite(e,null).catch(e=>this.handleError(e.message,\"err\"))}),s&&s.length>0&&s.forEach(e=>{a.delSubscription(e).catch(e=>this.handleError(e.message,\"err\"))}))}handleValidateCredentialsRequest(e,t,s){this.tinode.isAuthenticated()?this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).then(e=>ma.A.navigateTo(ma.A.setUrlSidePanel(window.location.hash,\"contacts\"))).catch(e=>this.handleError(e.message,\"err\")):(this.setState({credMethod:e,credCode:t,credToken:s}),this.doLogin(null,null,s,{meth:e,resp:t}))}handlePasswordResetRequest(e,t){return this.tinode.connect().then(s=>this.tinode.requestResetAuthSecret(\"basic\",e,t)).catch(e=>{this.handleError(e.message,\"err\")})}handleResetPassword(e,t){const s=(0,Os.$Z)(t.secret);s&&t.scheme?this.tinode.connect().then(a=>this.tinode.updateAccountBasic(null,null,e,{scheme:t.scheme,secret:s})).then(e=>{this.handleError(this.props.intl.formatMessage(ja.password_reset_success),\"info\"),ma.A.navigateTo(\"\")}).catch(e=>{this.handleError(e.message,\"err\")}):this.handleError(this.props.intl.formatMessage(ja.invalid_security_token),\"err\")}handleShowCountrySelector(e,t,s){this.handleShowAlert(this.props.intl.formatMessage(ja.select_country),l().createElement(o.Suspense,{fallback:l().createElement(\"div\",null,l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(Fa,{selected:e,onSubmit:(e,t)=>{this.setState({alertVisible:!1}),s(e,t)}})),null,null,e=>{},null)}handleStartVideoCall(){this.setState({callTopic:this.state.topicSelected,callState:Ls.No,callAudioOnly:!1})}handleStartAudioCall(){this.setState({callTopic:this.state.topicSelected,callState:Ls.No,callAudioOnly:!0})}handleCallInvite(e,t,s,a){switch(s){case Ls.No:const s={webrtc:Ls.O5,aonly:!!a};return this.handleSendMessage(Ts.Drafty.videoCall(a),void 0,void 0,s).then(e=>e.code<200||e.code>=300||!e.params||!e.params.seq?(this.handleCallClose(),e):(this.setState({callSeq:e.params.seq}),e));case Ls.d1:const n=this.tinode.getTopic(e);if(!n)return;n.videoCall(\"accept\",t)}}handleCallRinging(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall(\"ringing\",t)}handleCallHangup(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall(\"hang-up\",t)}handleCallSendOffer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall(\"offer\",t,s)}handleCallIceCandidate(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall(\"ice-candidate\",t,s)}handleCallSendAnswer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall(\"answer\",t,s)}handleCallClose(){this.callTimeoutTimer&&clearTimeout(this.callTimeoutTimer),this.setState({callTopic:void 0,callState:Ls.Gv,callAudioOnly:void 0})}handleCallAccept(e,t,s){const a=this.tinode.getTopic(e);if(a)if(a.isSubscribed()){this.handleTopicSelected(t?e:this.state.callTopic);const a={callState:Ls.d1};t&&(a.callTopic=e,a.callSeq=s),this.setState(a)}else this.setState({callShouldStart:!0},e=>this.handleTopicSelected(this.state.callTopic))}handleInfoMessage(e){if(\"call\"==e.what)switch(e.event){case\"accept\":if(Ts.Tinode.isMeTopicName(e.topic)&&this.tinode.isMe(e.from))return void this.setState({callTopic:null,callState:Ls.Gv,callSeq:null,callAudioOnly:void 0});e.topic==this.state.callTopic&&this.setState({callState:Ls.d1});break;case\"hang-up\":this.handleCallClose()}}handleDataMessage(e){if(e.head&&e.head.webrtc&&e.head.webrtc==Ls.O5&&Ts.Tinode.isP2PTopicName(e.topic)){const t=this.tinode.getTopic(e.topic);if(t){const s=t.latestMsgVersion(e.seq)||e;s.head&&s.head.webrtc&&s.head.webrtc==Ls.O5&&e.from!=this.state.myUserId&&(this.state.callState==Ls.Gv?this.setState({callTopic:e.topic,callState:Ls.ww,callSeq:e.seq,callAudioOnly:!!s.head.aonly}):this.handleCallHangup(e.topic,e.seq))}else console.warn(\"Received vc data message from unknown topic\",e.topic)}}render(){const e=\"auto\"!==this.state.colorSchema?this.state.colorSchema:this.state.systemColorSchema;return l().createElement(\"div\",{id:\"app-container\",ref:this.selfRef},this.state.contextMenuVisible?l().createElement(Ds,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,this.state.forwardDialogVisible?l().createElement(Rs,{tinode:this.tinode,contacts:this.state.chatList,topicSelected:this.state.topicSelected,myUserId:this.state.myUserId,hide:this.handleHideForwardDialog,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,onTopicSelected:this.handleStartTopicRequest}):null,this.state.callTopic&&this.state.callState==Ls.ww?l().createElement(qs,{tinode:this.tinode,topic:this.state.callTopic,seq:this.state.callSeq,callState:this.state.callState,audioOnly:this.state.callAudioOnly,onClose:this.handleCallClose,onRinging:this.handleCallRinging,onAcceptCall:this.handleCallAccept,onReject:this.handleCallHangup}):null,this.state.alertVisible?l().createElement(ks,{title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?e=>this.setState({alertVisible:!1}):null,reject:this.state.alertParams.reject,onConfirm:this.state.alertParams.onConfirm?e=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()}:null,confirm:this.state.alertParams.confirm}):null,this.state.displayMobile&&\"sidepanel\"!=this.state.mobilePanel?null:l().createElement(Ia,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,trustedBadges:this.state.myTrustedBadges,login:this.state.login,persist:this.state.persist,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,credToken:this.state.credToken,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection,serverVersion:this.state.serverVersion,reqCredMethod:this.state.reqCredMethod,textSize:this.state.textSize,colorSchema:this.state.colorSchema,wallpaper:this.state.wallpaper,wallpaperSize:this.state.wallpaperSize,wallpaperBlur:this.state.wallpaperBlur,systemColorSchema:this.state.systemColorSchema,sendOnEnter:this.state.sendOnEnter,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onPersistenceChange:this.handlePersistenceChange,onCreateAccount:this.handleNewAccountRequest,onUpdateAccountDesc:this.handleTopicUpdateRequest,onUpdatePassword:this.handleUpdatePasswordRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.toggleFCMToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onChangeColorSchema:this.handleChangeColorSchema,onTextSizeChanged:this.handleChangeTextSize,onSendOnEnterChanged:this.handleSendOnEnter,onSelectWallpapers:this.handleSelectWallpapers,onWallpaperSelected:this.handleWallpaperSelected,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onShowCountrySelector:this.handleShowCountrySelector,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),!this.state.displayMobile||\"topic-view\"==this.state.mobilePanel&&!this.state.infoPanel?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",null,l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(La,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,topic:this.state.topicSelected,myUserId:this.state.myUserId,myUserName:this.state.sidePanelTitle,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,colorSchema:e,sendOnEnter:this.state.sendOnEnter,wallpaper:this.state.wallpaper,forwardMessage:this.state.forwardMessage,onCancelForwardMessage:this.handleHideForwardDialog,callTopic:this.state.callTopic,callSeq:this.state.callSeq,callState:this.state.callState,callAudioOnly:this.state.callAudioOnly,onCallHangup:this.handleCallHangup,onAcceptCall:this.handleCallAccept,onCallInvite:this.handleCallInvite,onCallSendOffer:this.handleCallSendOffer,onCallIceCandidate:this.handleCallIceCandidate,onCallSendAnswer:this.handleCallSendAnswer,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage,onVideoCallClosed:this.handleCallClose})):null,this.state.infoPanel?l().createElement(o.Suspense,{fallback:l().createElement(\"div\",null,l().createElement(d.FormattedMessage,{id:\"loading_note\",defaultMessage:[{type:0,value:\"Loading...\"}]}))},l().createElement(Ua,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,panel:this.state.infoPanel,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onNavigate:this.infoNavigator,onTopicDescUpdateRequest:this.handleTopicUpdateRequest,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteTopic:this.handleDeleteTopicRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onShareTheCard:this.handleShareTheCard,onTopicTagsUpdateRequest:this.handleTagsUpdateRequest,onTopicUnArchive:this.handleUnarchive,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu})):null)}}var qa=(0,d.injectIntl)(Ba);if(\"undefined\"!=typeof FIREBASE_INIT&&FIREBASE_INIT&&FIREBASE_INIT.measurementId){const Ja=document.getElementsByTagName(\"head\")[0];let Xa=document.createElement(\"script\");function Qa(){dataLayer.push(arguments)}Xa.src=\"https://www.googletagmanager.com/gtag/js?id=\"+FIREBASE_INIT.measurementId,Xa.async=!0,Ja.prepend(Xa),window.dataLayer=window.dataLayer||[],Qa(\"js\",new Date),Qa(\"config\",FIREBASE_INIT.measurementId)}const Ha={ar:e=>r.e(143).then(r.t.bind(r,7143,19)),de:e=>r.e(175).then(r.t.bind(r,2175,19)),en:e=>r.e(399).then(r.t.bind(r,3399,19)),es:e=>r.e(64).then(r.t.bind(r,6064,19)),fr:e=>r.e(500).then(r.t.bind(r,2500,19)),it:e=>r.e(197).then(r.t.bind(r,7197,19)),ko:e=>r.e(186).then(r.t.bind(r,1186,19)),ro:e=>r.e(780).then(r.t.bind(r,8399,19)),ru:e=>r.e(553).then(r.t.bind(r,5553,19)),th:e=>r.e(536).then(r.t.bind(r,2536,19)),uk:e=>r.e(552).then(r.t.bind(r,4552,19)),vi:e=>r.e(297).then(r.t.bind(r,6297,19)),zh:e=>r.e(570).then(r.t.bind(r,570,19)),\"zh-TW\":e=>r.e(744).then(r.t.bind(r,5744,19))},{params:za}=ma.A.parseUrlHash(window.location.hash),Va=za&&za.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||\"en\",Wa=Va.replace(\"_\",\"-\"),$a=Wa.split(\"-\")[0].toLowerCase(),Ka=Ha[Wa]?Va:Ha[$a]?$a:\"en\",Ga=document.getElementsByTagName(\"html\")[0];Ga.setAttribute(\"lang\",Ka),[\"ar\",\"fa\",\"he\",\"ur\"].includes($a)&&Ga.setAttribute(\"dir\",\"rtl\");const Ya=(0,c.H)(document.getElementById(\"mountPoint\"));Ha[Ka]().then(e=>Ya.render(l().createElement(d.IntlProvider,{locale:Va,messages:e,textComponent:l().Fragment},l().createElement(qa,null))))}();\n//# sourceMappingURL=index.prod.js.map"
  },
  {
    "path": "umd/src_i18n_min_ar_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_ar_json\"],{\n\n/***/ \"./src/i18n.min/ar.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/ar.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"ليس لديك محادثات\\\\n¯∖_(ツ)_/¯\",\"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\":\"رمز التأكيد\",\"error_invalid_id\":\"معرف غير صالح\",\"file_attachment_too_large\":\"حجم الملف {size} يتجاوز الحد {limit}.\",\"forgot_password_link\":\"نسيت كلمة المرور؟\",\"full_name_prompt\":\"الاسم الكامل، مثال: جون دو\",\"granted_permissions\":\"ممنوح\",\"group_has_no_members\":\"لا يوجد أعضاء\",\"group_user_id_prompt\":\"معرف المجموعة أو المستخدم\",\"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\":\"المعرف:\",\"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_reply\":\"رد\",\"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\":\"قائمة مثل alice@example.com، +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\":\"بواسطة المعرف\",\"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_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\":\"تم إعادة تعيين كلمة المرور بنجاح\",\"scan_qr_code\":\"مسح رمز QR\",\"alias_already_taken\":\"(مُستخدم بالفعل)\",\"alias_editing_placeholder\":\"الاسم المستعار (اختياري)\",\"alias_invalid\":\"(غير صالح)\",\"label_alias\":\"الاسم المستعار:\",\"label_alias_edit\":\"الاسم المستعار\",\"message_deleted\":\"تم حذف الرسالة\",\"message_not_found\":\"لم يتم العثور على الرسالة\",\"pin_message\":\"تثبيت\",\"select_country\":\"اختر الدولة\",\"self_topic_comment\":\"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل\",\"self_topic_name\":\"الرسائل المحفوظة\",\"text_copied\":\"تم النسخ إلى الحافظة\",\"unpin_message\":\"إلغاء التثبيت\",\"color_schema_dark\":\"داكن\",\"color_schema_light\":\"فاتح\",\"color_schema_system\":\"افتراضي النظام\",\"label_color_schema\":\"‏المظهر:\",\"label_text_size\":\"‏حجم النص:\",\"incognito_mode_description\":\"إخفاء حالة اتصالك ومؤشرات الكتابة.\",\"send_command\":\"إرسال بـ {key}\",\"send_command_explained\":\"اضغط Enter لسطر جديد\",\"send_plain\":\"إرسال بـ Enter\",\"send_plain_explained\":\"اضغط Shift + Enter لسطر جديد\",\"sidepanel_title_acc_general\":\"عام\",\"label_keyboard\":\"لوحة المفاتيح:\",\"pin_chat\":\"تثبيت\",\"unpin_chat\":\"إلغاء التثبيت\",\"subscriber_count\":\"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}\",\"label_member_count\":\"الأعضاء:\",\"label_subscriber_count\":\"المشتركون:\",\"member_count\":\"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}\",\"tabtitle_image\":\"صورة\",\"tabtitle_pattern\":\"نمط\",\"button_restore\":\"استعادة الافتراضي\",\"wallpapers\":\"الخلفيات\",\"label_blur_wallpaper\":\"ضبابية:\",\"label_scan_id\":\"مسح معرفي:\",\"unknown_name\":\"غير معروف\",\"save_action\":\"حفظ\",\"cannot_parse_vcard\":\"تعذّر تحليل ملف vCard.\",\"chat_now\":\"محادثة\",\"find_user\":\"بحث\",\"label_contact_card\":\"بطاقة الاتصال\",\"label_contacts\":\"جهات الاتصال\",\"add_members_prompt\":\"إضافة أعضاء\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_de_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_de_json\"],{\n\n/***/ \"./src/i18n.min/de.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/de.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Anpinnen\",\"unpin_message\":\"Lösen\",\"password_reset_success\":\"Passwort erfolgreich zurückgesetzt\",\"scan_qr_code\":\"QR-Code scannen\",\"self_topic_comment\":\"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert\",\"self_topic_name\":\"Gespeicherte Nachrichten\",\"message_not_found\":\"Nachricht nicht gefunden\",\"message_deleted\":\"Nachricht gelöscht\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(bereits vergeben)\",\"alias_invalid\":\"(ungültig)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Land auswählen\",\"text_copied\":\"In die Zwischenablage kopiert\",\"color_schema_dark\":\"Dunkel\",\"color_schema_light\":\"Hell\",\"color_schema_system\":\"Systemstandard\",\"label_color_schema\":\"Thema:\",\"label_text_size\":\"Textgröße:\",\"incognito_mode_description\":\"Online-Status und Tipp-Indikatoren verbergen.\",\"send_command\":\"Senden mit {key}\",\"send_command_explained\":\"Drücken Sie Enter für eine neue Zeile\",\"send_plain\":\"Senden mit Enter\",\"send_plain_explained\":\"Drücken Sie Shift + Enter für eine neue Zeile\",\"sidepanel_title_acc_general\":\"Allgemein\",\"label_keyboard\":\"Tastatur:\",\"pin_chat\":\"Anheften\",\"unpin_chat\":\"Loslösen\",\"subscriber_count\":\"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}\",\"label_member_count\":\"Mitglieder:\",\"label_subscriber_count\":\"Abonnenten:\",\"member_count\":\"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}\",\"tabtitle_image\":\"Bild\",\"tabtitle_pattern\":\"Muster\",\"button_restore\":\"Standard wiederherstellen\",\"wallpapers\":\"Hintergrundbilder\",\"label_blur_wallpaper\":\"Unschärfe:\",\"label_scan_id\":\"Meine ID scannen:\",\"unknown_name\":\"Unbekannt\",\"save_action\":\"Speichern\",\"cannot_parse_vcard\":\"vCard-Datei konnte nicht verarbeitet werden.\",\"chat_now\":\"Chatten\",\"find_user\":\"Suchen\",\"label_contact_card\":\"Kontaktkarte\",\"label_contacts\":\"Kontakte\",\"add_members_prompt\":\"Mitglieder hinzufügen\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_en_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_en_json\"],{\n\n/***/ \"./src/i18n.min/en.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/en.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\\\\n¯∖_(ツ)_/¯\",\"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\",\"password_reset_success\":\"Password reset successfully\",\"scan_qr_code\":\"Scan QR Code\",\"self_topic_comment\":\"Notes, messages, links, files saved for posterity\",\"self_topic_name\":\"Saved messages\",\"message_not_found\":\"message not found\",\"message_deleted\":\"message deleted\",\"alias_editing_placeholder\":\"Alias (optional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(already taken)\",\"alias_invalid\":\"(invalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Select country\",\"text_copied\":\"Copied to clipboard\",\"color_schema_dark\":\"Dark\",\"color_schema_light\":\"Light\",\"color_schema_system\":\"System default\",\"label_color_schema\":\"Theme:\",\"label_text_size\":\"Text size:\",\"incognito_mode_description\":\"Hide your online status and typing indicators.\",\"send_command\":\"Send on {key}\",\"send_command_explained\":\"Press Enter for new line\",\"send_plain\":\"Send on Enter\",\"send_plain_explained\":\"Press Shift + Enter for new line\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Keyboard:\",\"pin_chat\":\"Pin\",\"unpin_chat\":\"Unpin\",\"subscriber_count\":\"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}\",\"label_member_count\":\"Members:\",\"label_subscriber_count\":\"Subscribers:\",\"member_count\":\"{count, plural, one {{count, number} member} other {{count, number} members}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"pattern\",\"button_restore\":\"Restore default\",\"wallpapers\":\"Wallpapers\",\"label_blur_wallpaper\":\"Blur:\",\"label_scan_id\":\"Scan my ID:\",\"unknown_name\":\"Unknown\",\"save_action\":\"Save\",\"cannot_parse_vcard\":\"Cannot parse vCard file.\",\"chat_now\":\"Chat\",\"find_user\":\"Find\",\"label_contact_card\":\"Contact Card\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"add members\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_es_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_es_json\"],{\n\n/***/ \"./src/i18n.min/es.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/es.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fijar\",\"unpin_message\":\"Desanclar\",\"failed_to_init_audio\":\"Error al inicializar la grabación de audio\",\"password_reset_success\":\"Restablecimiento de contraseña con éxito\",\"scan_qr_code\":\"Escanear código QR\",\"self_topic_comment\":\"Notas, mensajes, enlaces, archivos guardados para la posteridad\",\"self_topic_name\":\"Mensajes guardados\",\"message_not_found\":\"Mensaje no encontrado\",\"message_deleted\":\"Mensaje eliminado\",\"alias_editing_placeholder\":\"Alias (opcional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(ya tomado)\",\"alias_invalid\":\"(inválido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleccionar país\",\"text_copied\":\"Copiado al portapapeles\",\"color_schema_dark\":\"Oscuro\",\"color_schema_light\":\"Claro\",\"color_schema_system\":\"Predeterminado del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Tamaño del texto:\",\"incognito_mode_description\":\"Ocultar tu estado en línea e indicadores de escritura.\",\"send_command\":\"Enviar con {key}\",\"send_command_explained\":\"Presiona Enter para nueva línea\",\"send_plain\":\"Enviar con Enter\",\"send_plain_explained\":\"Presiona Shift + Enter para nueva línea\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Teclado:\",\"pin_chat\":\"Fijar\",\"unpin_chat\":\"Desfijar\",\"subscriber_count\":\"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}\",\"label_member_count\":\"Miembros:\",\"label_subscriber_count\":\"Suscriptores:\",\"member_count\":\"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}\",\"tabtitle_image\":\"imagen\",\"tabtitle_pattern\":\"patrón\",\"button_restore\":\"Restaurar predeterminado\",\"wallpapers\":\"Fondos de pantalla\",\"label_blur_wallpaper\":\"Desenfoque:\",\"label_scan_id\":\"Escanear mi ID:\",\"unknown_name\":\"Desconocido\",\"save_action\":\"Guardar\",\"cannot_parse_vcard\":\"No se puede analizar el archivo vCard.\",\"chat_now\":\"Chatear\",\"find_user\":\"Buscar\",\"label_contact_card\":\"Tarjeta de contacto\",\"label_contacts\":\"Contactos\",\"add_members_prompt\":\"añadir miembros\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_fr_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_fr_json\"],{\n\n/***/ \"./src/i18n.min/fr.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/fr.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\\\\n¯∖_(ツ)_/¯\",\"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é\",\"pin_message\":\"Épingler\",\"unpin_message\":\"Détacher\",\"failed_to_init_audio\":\"Échec de l\\'initialisation de l\\'enregistrement audio\",\"password_reset_success\":\"Mot de passe réinitialisé avec succès\",\"scan_qr_code\":\"Scanner le code QR\",\"self_topic_comment\":\"Notes, messages, liens, fichiers sauvegardés\",\"self_topic_name\":\"Messages sauvegardés\",\"message_not_found\":\"message introuvable\",\"message_deleted\":\"message supprimé\",\"alias_editing_placeholder\":\"Alias (facultatif)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(déjà utilisé)\",\"alias_invalid\":\"(invalide)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Sélectionner un pays\",\"text_copied\":\"Copié dans le presse-papiers\",\"color_schema_dark\":\"Sombre\",\"color_schema_light\":\"Clair\",\"color_schema_system\":\"Thème du système\",\"label_color_schema\":\"Thème :\",\"label_text_size\":\"Taille du texte :\",\"incognito_mode_description\":\"Masquer votre statut en ligne et les indicateurs de frappe.\",\"send_command\":\"Envoyer avec {key}\",\"send_command_explained\":\"Appuyez sur Entrée pour une nouvelle ligne\",\"send_plain\":\"Envoyer avec Entrée\",\"send_plain_explained\":\"Appuyez sur Shift + Entrée pour une nouvelle ligne\",\"sidepanel_title_acc_general\":\"Général\",\"label_keyboard\":\"Clavier :\",\"pin_chat\":\"Épingler\",\"unpin_chat\":\"Désépingler\",\"subscriber_count\":\"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}\",\"label_member_count\":\"Membres :\",\"label_subscriber_count\":\"Abonnés :\",\"member_count\":\"{count, plural, one {{count, number} membre} other {{count, number} membres}}\",\"tabtitle_image\":\"image\",\"tabtitle_pattern\":\"motif\",\"button_restore\":\"Restaurer par défaut\",\"wallpapers\":\"Fonds d\\'écran\",\"label_blur_wallpaper\":\"Flou :\",\"label_scan_id\":\"Scanner mon ID :\",\"unknown_name\":\"Inconnu\",\"save_action\":\"Enregistrer\",\"cannot_parse_vcard\":\"Impossible d\\'analyser le fichier vCard.\",\"chat_now\":\"Discuter\",\"find_user\":\"Rechercher\",\"label_contact_card\":\"Carte de contact\",\"label_contacts\":\"Contacts\",\"add_members_prompt\":\"ajouter des membres\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_it_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_it_json\"],{\n\n/***/ \"./src/i18n.min/it.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/it.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/JSON.parse('{\"action_block_contact\":\"Bloccare contatto\",\"action_cancel\":\"cancella\",\"action_clear_messages\":\"Cancella messaggi\",\"action_delete_messages\":\"Cancella messaggi per tutti\",\"action_leave_chat\":\"Lascia la conversazione\",\"action_report_chat\":\"Report conversazione\",\"archived_contacts\":\"Contatti archiviati ({count})\",\"badge_danger\":\"Sospetto\",\"badge_owner\":\"propietario\",\"badge_staff\":\"Amministrazione\",\"badge_verified\":\"Verificato\",\"badge_you\":\"tu\",\"block_contact_warning\":\"Sei sicuro di bloccare questo contatto?\",\"blocked_contacts_link\":\"Contatti bloccati ({count})\",\"button_add_members\":\"Aggiungi membri\",\"button_cancel\":\"Cancella\",\"button_confirm\":\"Conferma\",\"button_create\":\"Crea\",\"button_delete_account\":\"Elimina account\",\"button_edit\":\"Editare\",\"button_logout\":\"Fine sessione\",\"button_ok\":\"OK\",\"button_reset\":\"Reset\",\"button_send_request\":\"Invia richiesta\",\"button_sign_in\":\"Entrare\",\"button_sign_up\":\"Registrazione\",\"button_subscribe\":\"Sottoscrivi\",\"button_update\":\"Aggiorna\",\"cannot_initiate_file_upload\":\"Non è possibile iniziare il caricamento dell\\'archivio.\",\"channel\":\"canale\",\"channel_prompt\":\"Questo è un canale\",\"chat_invitation\":\"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?\",\"chat_invitation_accept\":\"Accettare\",\"chat_invitation_block\":\"Bloccare\",\"chat_invitation_ignore\":\"Ignorare\",\"clear_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.\",\"code_doesnot_match\":\"Il codice non conicide\",\"contacts_not_found\":\"Non hai chats\\\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Nessun contatto coincide con \\'\\'{query}\\'\\'\",\"credential_email_prompt\":\"La tua mail di registrazione\",\"delete_account\":\"Elimina l\\'account\",\"delete_account_warning\":\"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.\",\"delete_messages_warning\":\"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.\",\"download_action\":\"Scarica\",\"drafty_attachment\":\"Allegato\",\"drafty_form\":\"Form:\",\"drafty_image\":\"Immagine\",\"email_dative\":\"posta elettronica\",\"email_prompt\":\"Posta elettronica, per es. mario@example.com\",\"enable_peers_messaging\":\"Abilitare\",\"enter_confirmation_code_prompt\":\"Inserire il codice di conferma {method}:\",\"error_invalid_id\":\"ID non valido\",\"file_attachment_too_large\":\"La grandezza del file {size} eccede il limite di {limit}.\",\"forgot_password_link\":\"Hai dimenticato la password?\",\"full_name_prompt\":\"Nome completo, per es. Mario Rossi\",\"granted_permissions\":\"Garantito\",\"group_has_no_members\":\"Non hai membri\",\"group_user_id_prompt\":\"ID del gruppo o dell\\'utente\",\"image_caption_prompt\":\"Aggiungi un\\'immagine\",\"invalid_content\":\"contenuto non valido\",\"invalid_security_token\":\"Token di sicurezza invalido\",\"label_client\":\"Cliente:\",\"label_content_type\":\"Tipo di contenuto:\",\"label_default_access_mode\":\"Modalità di accesso predefinito:\",\"label_file_name\":\"Nome del file:\",\"label_group_members\":\"Membri del gruppo:\",\"label_incognito_mode\":\"Modalità incognito:\",\"label_message_sound\":\"Suono del messaggio:\",\"label_muting_topic\":\"Silenziato:\",\"label_other_user\":\"Altri\",\"label_password\":\"Password\",\"label_permissions\":\"Permessi:\",\"label_private\":\"Commento privato\",\"label_push_notifications\":\"Allarmi di notifica:\",\"label_push_notifications_disabled\":\"Allarmi di notifica (richiede HTTPS):\",\"label_reset_password\":\"Invia una mail per il reset della password:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Server:\",\"label_server_address\":\"Indirizzo del server:\",\"label_server_to_use\":\"Server da usare:\",\"label_size\":\"Grandezza:\",\"label_topic_name\":\"Nome dell\\'argomento\",\"label_user_contacts\":\"Contatti\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Tipo di Trasporto:\",\"label_you\":\"Tu:\",\"label_your_name\":\"Il tuo nome\",\"label_your_permissions\":\"I tuoi permessi:\",\"last_seen_timestamp\":\"Ultimo visto\",\"leave_chat_warning\":\"Sei sicuro di voler lasciare questa conversazione?\",\"link_contact_us\":\"Contattaci\",\"link_privacy_policy\":\"Política della privacy\",\"link_terms_of_service\":\"Termini d\\'uso del servizio\",\"login_prompt\":\"Nome dell\\'utente\",\"menu_item_archive_topic\":\"Archivia\",\"menu_item_block\":\"Bloccare\",\"menu_item_clear_messages\":\"Cancella i messaggi\",\"menu_item_clear_messages_for_all\":\"Cancella per tutti\",\"menu_item_delete\":\"Elimina\",\"menu_item_delete_for_all\":\"Elimina per tutti\",\"menu_item_delete_topic\":\"Eliminare\",\"menu_item_edit_permissions\":\"Modifica permessi\",\"menu_item_info\":\"Informazioni\",\"menu_item_member_delete\":\"Eliminare\",\"menu_item_mute\":\"Silenziare\",\"menu_item_restore_topic\":\"Ripristinare\",\"menu_item_send_retry\":\"Riprova\",\"menu_item_unblock\":\"Sblocca\",\"menu_item_unmute\":\"Riattiva le notifiche\",\"message_sending\":\"invio...\",\"message_sending_failed\":\"non è possibile inviare il messaggio\",\"messages_not_readable\":\"nessun accesso ai messaggi\",\"messaging_disabled_prompt\":\"L\\'invio dei messaggi è disabilitato\",\"more_online_members\":\"+{overflow} e oltre\",\"new_message_prompt\":\"Nuovo messaggio\",\"new_password_placeholder\":\"Inserire nuova password\",\"no_connection\":\"Nessuna connessione\",\"no_contacts\":\"Non ci sono contatti :-(\",\"numeric_confirmation_code_prompt\":\"Solo numeri\",\"online_now\":\"in linea\",\"password_prompt\":\"Password\",\"password_unchanged_prompt\":\"Non è cambiata\",\"peers_messaging_disabled\":\"I messaggi punto punto sono disabilitati.\",\"permission_admin\":\"Approvare ({val})\",\"permission_delete\":\"Eliminare ({val})\",\"permission_join\":\"Unisci ({val})\",\"permission_owner\":\"Propietario ({val})\",\"permission_pres\":\"Notifica arrivata ({val})\",\"permission_read\":\"Leggi ({val})\",\"permission_share\":\"Condividi ({val})\",\"permission_write\":\"Scrivi ({val})\",\"phone_dative\":\"telefono\",\"private_editing_placeholder\":\"Visibile solo a te\",\"push_init_failed\":\"Non è possibile inizializzare le notifiche push\",\"reconnect_countdown\":\"Disconnesso. Riconnessione in {seconds}…\",\"reconnect_now\":\"Riprovare\",\"reload_update\":\"Ricaricare\",\"report_chat_warning\":\"Sei sicuro di bloccare e denunciare questa conversazione?\",\"requested_permissions\":\"Sollecito\",\"save_attachment\":\"salva\",\"search_for_contacts\":\"Usa la ricerca per trovare i contatti\",\"search_no_results\":\"La ricerca non ha trovato nessun risultato\",\"search_placeholder\":\"Elenca come: email:mario@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Notifiche\",\"sidepanel_title_acc_support\":\"Supporto\",\"sidepanel_title_account_settings\":\"Impostazioni dell\\'account\",\"sidepanel_title_archive\":\"Chats archiviate\",\"sidepanel_title_blocked\":\"Chats bloccate\",\"sidepanel_title_cred\":\"Conferma le credenziali\",\"sidepanel_title_login\":\"Entra\",\"sidepanel_title_newtpk\":\"Comincia una Nuova Chat\",\"sidepanel_title_register\":\"Creare Account\",\"sidepanel_title_reset\":\"Resetta la Password\",\"sidepanel_title_settings\":\"Impostazioni\",\"stay_logged_in\":\"Rimani loggato\",\"tabtitle_find_user\":\"cerca\",\"tabtitle_group_by_id\":\"per ID\",\"tabtitle_new_group\":\"nuovo gruppo\",\"tags_editor_no_tags\":\"Aggiungi alcune etichette\",\"tags_not_found\":\"Non ci sono etichette definite. Aggiungine alcune.\",\"title_all_contacts\":\"Tutti i contatti\",\"title_group_members\":\"Membri del gruppo\",\"title_manage_tags\":\"Gestisci\",\"title_not_found\":\"Non trovato\",\"title_permissions\":\"Permessi\",\"title_tag_manager\":\"Etichette (trova e scopri)\",\"topic_block_warning\":\"Sei sicuro di voler bloccare questa conversazione?\",\"topic_delete_warning\":\"Sei sicuro di voler eliminare questa conversazione?\",\"topic_name_editing_placeholder\":\"Nome del gruppo\",\"unnamed_topic\":\"Senza nome\",\"update_available\":\"Aggiornamento disponibile.\",\"upload_finishing\":\"sto terminando...\",\"user_not_found\":\"Non trovato\",\"description_editing_placeholder\":\"Descrizione (opzionale)\",\"label_description\":\"Descrizione\",\"button_security\":\"Sicurezza\",\"panel_title_crop\":\"Trascina per aggiustare\",\"panel_title_general\":\"Generale\",\"panel_title_members\":\"Membri\",\"panel_title_security\":\"Sicurezza\",\"panel_title_info\":\"Informazione\",\"permissions_anonymous\":\"Anonimo\",\"permissions_authenticated\":\"Autenticato\",\"topic_delete\":\"Elimina la conversazione\",\"permissions_user\":\"Permessi dell\\'utente\",\"password_reset_email_sent\":\"Una mail con il codice di sicurezza è stata inviata.\",\"label_unarchive_topic\":\"Archiviato:\",\"menu_item_reply\":\"Replica\",\"menu_item_forward\":\"Reinvia\",\"forward_to\":\"Reinvia a\",\"forward_to_search_placeholder\":\"Cerca i contatti\",\"label_new_password\":\"Nuova password\",\"drafty_unknown\":\"Non supportato\",\"calls_incoming\":\"Chiamata in arrivo\",\"calls_outgoing\":\"Chiamata in uscita\",\"calls_you_label\":\"Tu\",\"menu_item_video_call\":\"Videochiamata\",\"already_in_call\":\"Sei già in una chiamata in uscita!\",\"call_cancelled\":\"cancellata\",\"call_missed\":\"persa\",\"call_declined\":\"rifiutata\",\"call_disconnected\":\"disconnessa\",\"label_use_secure_connection\":\"Usa una connessione sicura\",\"cred_confirmed_successfully\":\"Confermato con successo\",\"menu_item_edit\":\"Modifica\",\"editing_message\":\"Edita\",\"message_edited_marker\":\", editando\",\"icon_title_add_image\":\"Aggiungi immagine\",\"icon_title_attach_file\":\"Allega un file\",\"icon_title_delete\":\"Eliminare la registrazione\",\"icon_title_pause\":\"Riproduzione in pausa\",\"icon_title_play\":\"Riproduci la registrazione\",\"icon_title_record_voice\":\"Registra un messaggio vocale\",\"icon_title_resume\":\"Riprendi la riproduzione\",\"icon_title_send\":\"Inviare il messaggio\",\"drag_file\":\"Trascina il file qui\",\"drafty_video\":\"Registrazione video\",\"call_in_progress\":\"avanzamento\",\"menu_item_audio_call\":\"Chiamata\",\"unrecognized_video_format\":\"Il formato di questo video non è riconosciuto\",\"loading_note\":\"Caricando...\",\"password_i_have_code\":\"Ho un codice\",\"label_reset_password_tel\":\"Invia un SMS per resettare la password\",\"mobile_phone_number\":\"Numero di telefono cellulare\",\"password_reset_sms_sent\":\"Un SMS con il codice di sicurezza è stato inviato.\",\"mobile_number_required\":\"E\\' richiesto il numero di telefono cellulare\",\"current_email\":\"Email attuale\",\"current_phone\":\"Numero di telefono attuale\",\"new_email\":\"Nuova email\",\"new_phone_number\":\"Nuovo numero di telefono\",\"change_email\":\"Cambiare l\\'indirizzo di posta elettronica\",\"change_phone\":\"Cambiare numero di telefono\",\"call_busy\":\"occupato\",\"pin_message\":\"Fissare\",\"unpin_message\":\"Rimuovere\",\"failed_to_init_audio\":\"Non è possibile cominciare la registrazione audio\",\"password_reset_success\":\"Il reset della password è avvenuto con successo\",\"scan_qr_code\":\"Scansionare il codice QR\",\"self_topic_comment\":\"Note, messaggi, links e archivi, sono salvati per i posteri\",\"self_topic_name\":\"Messaggi salvati\",\"message_not_found\":\"Messaggi non trovati\",\"message_deleted\":\"Messaggi eliminati\",\"alias_editing_placeholder\":\"Alias (opzionale)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(già utilizzato)\",\"alias_invalid\":\"(invalido)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Seleziona la nazione\",\"text_copied\":\"Copia nella clipboard\",\"incognito_mode_description\":\"Nascondi il tuo stato online e gli indicatori di digitazione.\",\"send_command\":\"Invia con {key}\",\"send_command_explained\":\"Premi Invio per una nuova riga\",\"send_plain\":\"Invia con Invio\",\"send_plain_explained\":\"Premi Shift + Invio per una nuova riga\",\"sidepanel_title_acc_general\":\"Generale\",\"label_keyboard\":\"Tastiera:\",\"color_schema_dark\":\"Scuro\",\"color_schema_light\":\"Chiaro\",\"color_schema_system\":\"Predefinito del sistema\",\"label_color_schema\":\"Tema:\",\"label_text_size\":\"Dimensione testo:\",\"pin_chat\":\"Fissa\",\"unpin_chat\":\"Sblocca\",\"subscriber_count\":\"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Iscritti:\",\"member_count\":\"{count, plural, one {{count, number} membro} other {{count, number} membri}}\",\"tabtitle_image\":\"immagine\",\"tabtitle_pattern\":\"motivo\",\"button_restore\":\"Ripristina predefinito\",\"wallpapers\":\"Sfondi\",\"label_blur_wallpaper\":\"Sfocatura:\",\"label_scan_id\":\"Scansiona il mio ID:\",\"unknown_name\":\"Sconosciuto\",\"save_action\":\"Salva\",\"cannot_parse_vcard\":\"Impossibile analizzare il file vCard.\",\"chat_now\":\"Chatta\",\"find_user\":\"Cerca\",\"label_contact_card\":\"Scheda contatto\",\"label_contacts\":\"Contatti\",\"add_members_prompt\":\"aggiungi membri\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_ko_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_ko_json\"],{\n\n/***/ \"./src/i18n.min/ko.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/ko.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"채팅이없습니다\\\\n¯∖_(ツ)_/¯\",\"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\":\"바쁘다\",\"pin_message\":\"고정\",\"unpin_message\":\"고정 해제\",\"failed_to_init_audio\":\"오디오 녹음 초기화 실패\",\"password_reset_success\":\"비밀번호 재설정 성공\",\"scan_qr_code\":\"QR 코드 스캔\",\"self_topic_comment\":\"후세를 위해 저장된 메모, 메시지, 링크, 파일\",\"self_topic_name\":\"저장된 메시지\",\"message_not_found\":\"메시지를 찾을 수 없음\",\"message_deleted\":\"메시지 삭제됨\",\"alias_editing_placeholder\":\"별칭(선택 사항)\",\"label_alias\":\"별칭:\",\"alias_already_taken\":\"(이미 취함)\",\"alias_invalid\":\"(잘못된)\",\"label_alias_edit\":\"별칭\",\"select_country\":\"국가 선택\",\"text_copied\":\"클립보드에 복사됨\",\"color_schema_dark\":\"어둡게\",\"color_schema_light\":\"밝게\",\"color_schema_system\":\"시스템 기본값\",\"label_color_schema\":\"테마:\",\"label_text_size\":\"텍스트 크기:\",\"incognito_mode_description\":\"온라인 상태와 입력 표시기를 숨깁니다.\",\"send_command\":\"{key}로 전송\",\"send_command_explained\":\"새 줄로 이동하려면 Enter를 누르세요\",\"send_plain\":\"Enter로 전송\",\"send_plain_explained\":\"새 줄로 이동하려면 Shift + Enter를 누르세요\",\"sidepanel_title_acc_general\":\"일반\",\"label_keyboard\":\"키보드:\",\"pin_chat\":\"고정\",\"unpin_chat\":\"고정 해제\",\"subscriber_count\":\"{count, plural, other {구독자 {count, number}명}}\",\"label_member_count\":\"멤버:\",\"label_subscriber_count\":\"구독자:\",\"member_count\":\"{count, plural, other {멤버 {count, number}명}}\",\"tabtitle_image\":\"이미지\",\"tabtitle_pattern\":\"패턴\",\"button_restore\":\"기본값 복원\",\"wallpapers\":\"배경화면\",\"label_blur_wallpaper\":\"흐림:\",\"label_scan_id\":\"내 ID 스캔:\",\"unknown_name\":\"알 수 없음\",\"save_action\":\"저장\",\"cannot_parse_vcard\":\"vCard 파일을 파싱할 수 없습니다.\",\"chat_now\":\"채팅\",\"find_user\":\"찾기\",\"label_contact_card\":\"연락처 카드\",\"label_contacts\":\"연락처\",\"add_members_prompt\":\"멤버 추가\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_ro_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_ro_json\"],{\n\n/***/ \"./src/i18n.min/ro.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/ro.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\\\\n¯∖_(ツ)_/¯\",\"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\",\"pin_message\":\"Fixați\",\"unpin_message\":\"Anulați fixarea\",\"failed_to_init_audio\":\"Inițializarea înregistrării audio a eșuat\",\"password_reset_success\":\"Resetarea parolei cu succes\",\"scan_qr_code\":\"Scanați codul QR\",\"self_topic_comment\":\"Note, mesaje, linkuri, fișiere salvate pentru posteritate\",\"self_topic_name\":\"Mesaje salvate\",\"message_not_found\":\"mesajul nu a fost găsit\",\"message_deleted\":\"mesaj șters\",\"alias_editing_placeholder\":\"Alias (opțional)\",\"label_alias\":\"Alias:\",\"alias_already_taken\":\"(deja luat)\",\"alias_invalid\":\"(nevalid)\",\"label_alias_edit\":\"Alias\",\"select_country\":\"Selectați țara\",\"text_copied\":\"Copiat în clipboard\",\"color_schema_dark\":\"Întunecat\",\"color_schema_light\":\"Luminos\",\"color_schema_system\":\"Implicit sistem\",\"label_color_schema\":\"Temă:\",\"label_text_size\":\"Dimensiune text:\",\"incognito_mode_description\":\"Ascunde statusul tău online și indicatorii de tastare.\",\"send_command\":\"Trimite cu {key}\",\"send_command_explained\":\"Apasă Enter pentru linie nouă\",\"send_plain\":\"Trimite cu Enter\",\"send_plain_explained\":\"Apasă Shift + Enter pentru linie nouă\",\"sidepanel_title_acc_general\":\"General\",\"label_keyboard\":\"Tastatură:\",\"pin_chat\":\"Fixează\",\"unpin_chat\":\"Anulează fixarea\",\"subscriber_count\":\"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}\",\"label_member_count\":\"Membri:\",\"label_subscriber_count\":\"Abonați:\",\"member_count\":\"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}\",\"tabtitle_image\":\"imagine\",\"tabtitle_pattern\":\"model\",\"button_restore\":\"Restabilește implicit\",\"wallpapers\":\"Imagini de fundal\",\"label_blur_wallpaper\":\"Estompare:\",\"label_scan_id\":\"Scanează ID-ul meu:\",\"unknown_name\":\"Necunoscut\",\"save_action\":\"Salvează\",\"cannot_parse_vcard\":\"Nu se poate procesa fișierul vCard.\",\"chat_now\":\"Conversație\",\"find_user\":\"Caută\",\"label_contact_card\":\"Card de contact\",\"label_contacts\":\"Contacte\",\"add_members_prompt\":\"adaugă membri\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_ru_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_ru_json\"],{\n\n/***/ \"./src/i18n.min/ru.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/ru.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"Чатов нет\\\\n¯∖_(ツ)_/¯\",\"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\":\"занято\",\"pin_message\":\"Закрепить\",\"unpin_message\":\"Открепить\",\"failed_to_init_audio\":\"Не удалось инициализировать аудиозапись\",\"password_reset_success\":\"Пароль успешно изменен\",\"scan_qr_code\":\"Отсканируйте QR код\",\"self_topic_comment\":\"Заметки, сообщения, ссылки, файлы, сохраненные для потомков\",\"self_topic_name\":\"Сохраненные сообщения\",\"message_not_found\":\"сообщение не найдено\",\"message_deleted\":\"сообщение удалено\",\"alias_editing_placeholder\":\"Псевдоним (необязательно)\",\"label_alias\":\"Псевдоним:\",\"alias_already_taken\":\"(уже занято)\",\"alias_invalid\":\"(некорректно)\",\"label_alias_edit\":\"Псевдоним\",\"select_country\":\"Выберите страну\",\"text_copied\":\"Скопировано в буфер обмена\",\"color_schema_dark\":\"Тёмная\",\"color_schema_light\":\"Светлая\",\"color_schema_system\":\"Системная\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Размер текста:\",\"incognito_mode_description\":\"Скрывать онлайн статус и индикаторы набора текста.\",\"send_command\":\"Отправлять на {key}\",\"send_command_explained\":\"Нажмать Enter для новой строки\",\"send_plain\":\"Отправлять на Enter\",\"send_plain_explained\":\"Нажимать Shift + Enter для новой строки\",\"sidepanel_title_acc_general\":\"Основные\",\"label_keyboard\":\"Клавиатура:\",\"pin_chat\":\"Закрепить\",\"unpin_chat\":\"Открепить\",\"subscriber_count\":\"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}\",\"label_member_count\":\"Участники:\",\"label_subscriber_count\":\"Подписчики:\",\"member_count\":\"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}\",\"tabtitle_image\":\"картинка\",\"tabtitle_pattern\":\"узор\",\"button_restore\":\"Восстановить по умолчанию\",\"wallpapers\":\"Обои\",\"label_blur_wallpaper\":\"Размытие:\",\"label_scan_id\":\"Отсканируйте мой ID:\",\"unknown_name\":\"Неизвестный\",\"save_action\":\"Сохранить\",\"cannot_parse_vcard\":\"Не удалось обработать файл vCard.\",\"chat_now\":\"Написать\",\"find_user\":\"Найти\",\"label_contact_card\":\"Карточка контакта\",\"label_contacts\":\"Контакты\",\"add_members_prompt\":\"добавить участников\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_th_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_th_json\"],{\n\n/***/ \"./src/i18n.min/th.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/th.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"ไม่พบแชท \\\\n¯∖_(ツ)_/¯\",\"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\":\"รหัสยืนยัน\",\"error_invalid_id\":\"ID ไม่ถูกต้อง\",\"file_attachment_too_large\":\"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.\",\"forgot_password_link\":\"ลืมรหัสผ่าน?\",\"full_name_prompt\":\"ชื่อเต็ม, เช่น John Doe\",\"granted_permissions\":\"ยินยอม\",\"group_has_no_members\":\"ไม่มีสมาชิก\",\"group_user_id_prompt\":\"กลุ่ม หรือ ID ผู้ใช้\",\"image_caption_prompt\":\"คำอธิบายภาพ\",\"invalid_content\":\"เนื้อหาไม่ถูกต้อง\",\"invalid_security_token\":\"security token ไม่ถูกต้อง\",\"label_client\":\"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\":\"การแจ้งเตือน (requires 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\":\"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_reply\":\"ตอบกลับ\",\"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\\'s\",\"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_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\":\"รีเซ็ตรหัสผ่านสำเร็จ\",\"scan_qr_code\":\"สแกนรหัส QR\",\"pin_message\":\"พิน\",\"unpin_message\":\"ปลดหมุด\",\"self_topic_comment\":\"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต\",\"self_topic_name\":\"ข้อความที่บันทึกไว้\",\"message_not_found\":\"ไม่พบข้อความ\",\"message_deleted\":\"ข้อความถูกลบ\",\"alias_editing_placeholder\":\"นามแฝง (ไม่บังคับ)\",\"label_alias\":\"นามแฝง:\",\"alias_already_taken\":\"(ใช้ไปแล้ว)\",\"alias_invalid\":\"(ไม่ถูกต้อง)\",\"label_alias_edit\":\"นามแฝง\",\"select_country\":\"เลือกประเทศ\",\"text_copied\":\"คัดลอกไปยังคลิปบอร์ดแล้ว\",\"color_schema_dark\":\"มืด\",\"color_schema_light\":\"สว่าง\",\"color_schema_system\":\"ค่าเริ่มต้นของระบบ\",\"label_color_schema\":\"ธีม:\",\"label_text_size\":\"ขนาดตัวอักษร:\",\"incognito_mode_description\":\"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ\",\"send_command\":\"ส่งด้วย {key}\",\"send_command_explained\":\"กด Enter เพื่อขึ้นบรรทัดใหม่\",\"send_plain\":\"ส่งด้วย Enter\",\"send_plain_explained\":\"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่\",\"sidepanel_title_acc_general\":\"ทั่วไป\",\"label_keyboard\":\"แป้นพิมพ์:\",\"pin_chat\":\"ปักหมุด\",\"unpin_chat\":\"เลิกปักหมุด\",\"subscriber_count\":\"{count, plural, other {{count, number} ผู้ติดตาม}}\",\"label_member_count\":\"สมาชิก:\",\"label_subscriber_count\":\"ผู้ติดตาม:\",\"member_count\":\"{count, plural, other {{count, number} สมาชิก}}\",\"tabtitle_image\":\"รูปภาพ\",\"tabtitle_pattern\":\"ลายลวดลาย\",\"button_restore\":\"คืนค่าเริ่มต้น\",\"wallpapers\":\"วอลเปเปอร์\",\"label_blur_wallpaper\":\"เบลอ:\",\"label_scan_id\":\"สแกน ID ของฉัน:\",\"unknown_name\":\"ไม่ทราบ\",\"save_action\":\"บันทึก\",\"cannot_parse_vcard\":\"ไม่สามารถอ่านไฟล์ vCard ได้\",\"chat_now\":\"แชท\",\"find_user\":\"ค้นหา\",\"label_contact_card\":\"นามบัตร\",\"label_contacts\":\"ผู้ติดต่อ\",\"add_members_prompt\":\"เพิ่มสมาชิก\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_uk_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_uk_json\"],{\n\n/***/ \"./src/i18n.min/uk.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/uk.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"Чатів немає\\\\n¯∖_(ツ)_/¯\",\"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\":\"Емейл, напр. 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\":\"Надіслати СМС для скидання пароля\",\"mobile_phone_number\":\"Номер мобільного телефону\",\"password_reset_sms_sent\":\"СМС із захисним кодом відправлено.\",\"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\":\"Пароль змінено успішно\",\"scan_qr_code\":\"Відскануйте QR-код\",\"pin_message\":\"закріпити\",\"unpin_message\":\"відкріпити\",\"self_topic_comment\":\"Нотатки, повідомлення, посилання, файли збережені для нащадків\",\"self_topic_name\":\"Збережені повідомлення\",\"message_not_found\":\"повідомлення не знайдено\",\"message_deleted\":\"повідомлення видалено\",\"alias_editing_placeholder\":\"Псевдонім (необов\\'язково)\",\"label_alias\":\"Псевдонім:\",\"alias_already_taken\":\"(вже зайнято)\",\"alias_invalid\":\"(недійсний)\",\"label_alias_edit\":\"Псевдонім\",\"select_country\":\"Виберіть країну\",\"text_copied\":\"Скопійовано в буфер обміну\",\"color_schema_dark\":\"Темна\",\"color_schema_light\":\"Світла\",\"color_schema_system\":\"Системна\",\"label_color_schema\":\"Тема:\",\"label_text_size\":\"Розмір тексту:\",\"incognito_mode_description\":\"Приховати ваш статус онлайн та індикатори набору тексту.\",\"send_command\":\"Надіслати на {key}\",\"send_command_explained\":\"Натисніть Enter для нового рядка\",\"send_plain\":\"Надіслати на Enter\",\"send_plain_explained\":\"Натисніть Shift + Enter для нового рядка\",\"sidepanel_title_acc_general\":\"Загальні\",\"label_keyboard\":\"Клавіатура:\",\"pin_chat\":\"Закріпити\",\"unpin_chat\":\"Відкріпити\",\"subscriber_count\":\"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}\",\"label_member_count\":\"Учасники:\",\"label_subscriber_count\":\"Підписники:\",\"member_count\":\"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}\",\"tabtitle_image\":\"зображення\",\"tabtitle_pattern\":\"візерунок\",\"button_restore\":\"Відновити типові\",\"wallpapers\":\"Шпалери\",\"label_blur_wallpaper\":\"Розмиття:\",\"label_scan_id\":\"Сканувати мій ID:\",\"unknown_name\":\"Невідомий\",\"save_action\":\"Зберегти\",\"cannot_parse_vcard\":\"Не вдалося обробити файл vCard.\",\"chat_now\":\"Написати\",\"find_user\":\"Знайти\",\"label_contact_card\":\"Картка контакту\",\"label_contacts\":\"Контакти\",\"add_members_prompt\":\"додати учасників\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_vi_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_vi_json\"],{\n\n/***/ \"./src/i18n.min/vi.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/vi.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/JSON.parse('{\"action_block_contact\":\"Chặn liên hệ\",\"action_cancel\":\"hủy\",\"action_clear_messages\":\"Xóa tin nhắn\",\"action_delete_messages\":\"Xóa tin nhắn cho tất cả\",\"action_leave_chat\":\"Rời cuộc trò chuyện\",\"action_report_chat\":\"Báo cáo cuộc trò chuyện\",\"archived_contacts\":\"Liên hệ đã lưu trữ ({count})\",\"badge_danger\":\"Không đáng tin\",\"badge_owner\":\"chủ sở hữu\",\"badge_staff\":\"Được quản lý bởi nhân viên\",\"badge_verified\":\"Đã xác minh/chính thức\",\"badge_you\":\"bạn\",\"block_contact_warning\":\"Bạn có chắc muốn chặn liên hệ này?\",\"blocked_contacts_link\":\"Liên hệ bị chặn ({count})\",\"button_add_members\":\"Thêm thành viên\",\"button_cancel\":\"Hủy\",\"button_confirm\":\"Xác nhận\",\"button_create\":\"Tạo\",\"button_delete_account\":\"Xóa tài khoản\",\"button_edit\":\"Sửa\",\"button_logout\":\"Đăng xuất\",\"button_ok\":\"OK\",\"button_reset\":\"Đặt lại\",\"button_send_request\":\"Gửi yêu cầu\",\"button_sign_in\":\"Đăng nhập\",\"button_sign_up\":\"Đăng ký\",\"button_subscribe\":\"Theo dõi\",\"button_update\":\"Cập nhật\",\"cannot_initiate_file_upload\":\"Không thể bắt đầu tải tệp lên.\",\"channel\":\"kênh\",\"channel_prompt\":\"Đây là một kênh\",\"chat_invitation\":\"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?\",\"chat_invitation_accept\":\"Chấp nhận\",\"chat_invitation_block\":\"Chặn\",\"chat_invitation_ignore\":\"Bỏ qua\",\"clear_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.\",\"code_doesnot_match\":\"Mã không khớp\",\"contacts_not_found\":\"Bạn chưa có cuộc trò chuyện nào\\\\n¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"Không có liên hệ nào khớp với \\'\\'{query}\\'\\'\",\"credential_email_prompt\":\"Email đăng ký của bạn\",\"delete_account\":\"Xóa tài khoản\",\"delete_account_warning\":\"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.\",\"delete_messages_warning\":\"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.\",\"download_action\":\"tải xuống\",\"drafty_attachment\":\"Tệp đính kèm\",\"drafty_form\":\"Biểu mẫu:\",\"drafty_image\":\"Hình ảnh\",\"email_dative\":\"email\",\"email_prompt\":\"Email, ví dụ jdoe@example.com\",\"enable_peers_messaging\":\"Bật\",\"enter_confirmation_code_prompt\":\"Mã xác nhận\",\"error_invalid_id\":\"ID không hợp lệ\",\"file_attachment_too_large\":\"Kích thước tệp {size} vượt quá giới hạn {limit}.\",\"forgot_password_link\":\"Quên mật khẩu?\",\"full_name_prompt\":\"Họ và tên, ví dụ John Doe\",\"granted_permissions\":\"Đã cấp\",\"group_has_no_members\":\"Không có thành viên\",\"group_user_id_prompt\":\"ID nhóm hoặc người dùng\",\"image_caption_prompt\":\"Chú thích hình ảnh\",\"invalid_content\":\"nội dung không hợp lệ\",\"invalid_security_token\":\"Mã bảo mật không hợp lệ\",\"label_client\":\"Client:\",\"label_content_type\":\"Kiểu nội dung:\",\"label_default_access_mode\":\"Chế độ truy cập mặc định:\",\"label_file_name\":\"Tên tệp:\",\"label_group_members\":\"Thành viên nhóm:\",\"label_incognito_mode\":\"Chế độ ẩn danh:\",\"label_message_sound\":\"Âm thanh tin nhắn:\",\"label_muting_topic\":\"Đã tắt:\",\"label_other_user\":\"Khác\",\"label_password\":\"Mật khẩu\",\"label_permissions\":\"Quyền:\",\"label_private\":\"Chỉ bạn nhìn thấy\",\"label_push_notifications\":\"Cảnh báo thông báo:\",\"label_push_notifications_disabled\":\"Cảnh báo thông báo (yêu cầu HTTPS):\",\"label_reset_password\":\"Gửi email đặt lại mật khẩu:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Máy chủ:\",\"label_server_address\":\"Địa chỉ máy chủ:\",\"label_server_to_use\":\"Máy chủ sử dụng:\",\"label_size\":\"Kích thước:\",\"label_topic_name\":\"Tên\",\"label_user_contacts\":\"Danh bạ\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Giao thức truyền tải:\",\"label_you\":\"Bạn:\",\"label_your_name\":\"Tên của bạn\",\"label_your_permissions\":\"Quyền của bạn:\",\"last_seen_timestamp\":\"Lần cuối hoạt động: {timestamp}\",\"leave_chat_warning\":\"Bạn có chắc muốn rời cuộc trò chuyện này?\",\"link_contact_us\":\"Liên hệ chúng tôi\",\"link_privacy_policy\":\"Chính sách quyền riêng tư\",\"link_terms_of_service\":\"Điều khoản dịch vụ\",\"login_prompt\":\"Đăng nhập\",\"menu_item_archive_topic\":\"Lưu trữ\",\"menu_item_block\":\"Chặn\",\"menu_item_clear_messages\":\"Xóa tin nhắn\",\"menu_item_clear_messages_for_all\":\"Xóa cho tất cả\",\"menu_item_delete\":\"Xóa\",\"menu_item_delete_for_all\":\"Xóa cho tất cả\",\"menu_item_delete_topic\":\"Xóa\",\"menu_item_edit_permissions\":\"Sửa quyền\",\"menu_item_info\":\"Thông tin\",\"menu_item_member_delete\":\"Xóa\",\"menu_item_mute\":\"Tắt thông báo\",\"menu_item_reply\":\"Trả lời\",\"menu_item_restore_topic\":\"Khôi phục\",\"menu_item_send_retry\":\"Thử lại\",\"menu_item_unblock\":\"Bỏ chặn\",\"menu_item_unmute\":\"Bật thông báo\",\"message_sending\":\"đang gửi...\",\"message_sending_failed\":\"thất bại\",\"messages_not_readable\":\"không có quyền xem tin nhắn\",\"messaging_disabled_prompt\":\"Tin nhắn bị tắt\",\"more_online_members\":\"+{overflow} nữa\",\"new_message_prompt\":\"Tin nhắn mới\",\"new_password_placeholder\":\"Nhập mật khẩu mới\",\"no_connection\":\"Không có kết nối\",\"no_contacts\":\"Bạn chưa có liên hệ nào :-(\",\"numeric_confirmation_code_prompt\":\"Chỉ số\",\"online_now\":\"đang online\",\"password_prompt\":\"Mật khẩu\",\"password_unchanged_prompt\":\"Không thay đổi\",\"peers_messaging_disabled\":\"Tin nhắn của người kia đã bị tắt.\",\"permission_admin\":\"Phê duyệt ({val})\",\"permission_delete\":\"Xóa ({val})\",\"permission_join\":\"Tham gia ({val})\",\"permission_owner\":\"Chủ sở hữu ({val})\",\"permission_pres\":\"Nhận thông báo ({val})\",\"permission_read\":\"Đọc ({val})\",\"permission_share\":\"Chia sẻ ({val})\",\"permission_write\":\"Ghi ({val})\",\"phone_dative\":\"điện thoại\",\"private_editing_placeholder\":\"Chỉ mình bạn nhìn thấy\",\"push_init_failed\":\"Khởi tạo thông báo đẩy thất bại\",\"reconnect_countdown\":\"Mất kết nối. Kết nối lại sau {seconds}…\",\"reconnect_now\":\"Thử ngay\",\"reload_update\":\"Tải lại\",\"report_chat_warning\":\"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?\",\"requested_permissions\":\"Đã yêu cầu\",\"save_attachment\":\"lưu\",\"search_for_contacts\":\"Dùng tìm kiếm để tìm liên hệ\",\"search_no_results\":\"Không có kết quả nào\",\"search_placeholder\":\"Liệt kê như email:alice@example.com, tel:17025550003...\",\"sidepanel_title_acc_notifications\":\"Thông báo\",\"sidepanel_title_acc_support\":\"Hỗ trợ\",\"sidepanel_title_account_settings\":\"Cài đặt tài khoản\",\"sidepanel_title_archive\":\"Cuộc trò chuyện đã lưu trữ\",\"sidepanel_title_blocked\":\"Cuộc trò chuyện bị chặn\",\"sidepanel_title_cred\":\"Xác nhận thông tin\",\"sidepanel_title_login\":\"Đăng nhập\",\"sidepanel_title_newtpk\":\"Bắt đầu cuộc trò chuyện mới\",\"sidepanel_title_register\":\"Tạo tài khoản\",\"sidepanel_title_reset\":\"Đặt lại mật khẩu\",\"sidepanel_title_settings\":\"Cài đặt\",\"stay_logged_in\":\"Giữ tôi đăng nhập\",\"tabtitle_find_user\":\"tìm\",\"tabtitle_group_by_id\":\"theo id\",\"tabtitle_new_group\":\"nhóm mới\",\"tags_editor_no_tags\":\"Thêm vài thẻ\",\"tags_not_found\":\"Chưa có thẻ nào. Hãy thêm một vài thẻ.\",\"title_all_contacts\":\"Tất cả liên hệ\",\"title_group_members\":\"Thành viên nhóm\",\"title_manage_tags\":\"Quản lý\",\"title_not_found\":\"Không tìm thấy\",\"title_permissions\":\"Quyền\",\"title_tag_manager\":\"Thẻ (tìm kiếm & khám phá)\",\"topic_block_warning\":\"Bạn có chắc muốn chặn cuộc trò chuyện này?\",\"topic_delete_warning\":\"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.\",\"topic_name_editing_placeholder\":\"Tên nhóm tự do\",\"unnamed_topic\":\"Chưa đặt tên\",\"update_available\":\"Có bản cập nhật.\",\"upload_finishing\":\"đang hoàn tất...\",\"user_not_found\":\"Không tìm thấy\",\"description_editing_placeholder\":\"Mô tả tùy chọn\",\"label_description\":\"Mô tả\",\"button_security\":\"Bảo mật\",\"panel_title_crop\":\"Kéo để điều chỉnh\",\"panel_title_general\":\"Chung\",\"panel_title_members\":\"Thành viên\",\"panel_title_security\":\"Bảo mật\",\"panel_title_info\":\"Thông tin\",\"permissions_anonymous\":\"Ẩn danh\",\"permissions_authenticated\":\"Đã xác thực\",\"topic_delete\":\"Xóa cuộc trò chuyện\",\"permissions_user\":\"Quyền của người dùng\",\"password_reset_email_sent\":\"Email chứa mã bảo mật đã được gửi.\",\"label_unarchive_topic\":\"Đã lưu trữ:\",\"menu_item_forward\":\"Chuyển tiếp\",\"forward_to\":\"Chuyển tiếp đến\",\"forward_to_search_placeholder\":\"Tìm kiếm liên hệ\",\"label_new_password\":\"Mật khẩu mới\",\"drafty_unknown\":\"Không hỗ trợ\",\"calls_incoming\":\"Cuộc gọi đến\",\"calls_outgoing\":\"Cuộc gọi đi\",\"calls_you_label\":\"Bạn\",\"menu_item_video_call\":\"Gọi video\",\"already_in_call\":\"Bạn đang có một cuộc gọi đang diễn ra!\",\"call_cancelled\":\"đã hủy\",\"call_missed\":\"bỏ lỡ\",\"call_declined\":\"từ chối\",\"call_disconnected\":\"mất kết nối\",\"label_use_secure_connection\":\"Sử dụng kết nối bảo mật\",\"cred_confirmed_successfully\":\"Xác nhận thành công\",\"menu_item_edit\":\"Sửa\",\"editing_message\":\"Đang sửa\",\"message_edited_marker\":\", đã sửa\",\"icon_title_add_image\":\"Thêm hình ảnh\",\"icon_title_attach_file\":\"Đính kèm tệp\",\"icon_title_delete\":\"Xóa\",\"icon_title_pause\":\"Tạm dừng\",\"icon_title_play\":\"Phát\",\"icon_title_record_voice\":\"Ghi âm tin nhắn\",\"icon_title_resume\":\"Tiếp tục\",\"icon_title_send\":\"Gửi tin nhắn\",\"drag_file\":\"Kéo tệp vào đây\",\"drafty_video\":\"Video\",\"call_in_progress\":\"đang diễn ra\",\"menu_item_audio_call\":\"Gọi\",\"unrecognized_video_format\":\"Không nhận dạng được định dạng video này\",\"loading_note\":\"Đang tải...\",\"password_i_have_code\":\"Tôi có mã\",\"label_reset_password_tel\":\"Gửi SMS đặt lại mật khẩu:\",\"mobile_phone_number\":\"Số điện thoại di động\",\"password_reset_sms_sent\":\"Tin nhắn chứa mã bảo mật đã được gửi.\",\"mobile_number_required\":\"Cần số điện thoại di động\",\"current_email\":\"Email hiện tại\",\"current_phone\":\"Số điện thoại hiện tại\",\"new_email\":\"Email mới\",\"new_phone_number\":\"Số điện thoại mới\",\"change_email\":\"Đổi email\",\"change_phone\":\"Đổi số điện thoại\",\"call_busy\":\"bận\",\"failed_to_init_audio\":\"Không thể khởi tạo ghi âm\",\"password_reset_success\":\"Đặt lại mật khẩu thành công\",\"scan_qr_code\":\"Quét mã QR\",\"add_members_prompt\":\"thêm thành viên\",\"alias_already_taken\":\"(đã được sử dụng)\",\"alias_editing_placeholder\":\"Bí danh (tùy chọn)\",\"alias_invalid\":\"(không hợp lệ)\",\"button_restore\":\"Khôi phục mặc định\",\"cannot_parse_vcard\":\"Không thể đọc tệp vCard.\",\"chat_now\":\"Nhắn tin\",\"color_schema_dark\":\"Tối\",\"color_schema_light\":\"Sáng\",\"color_schema_system\":\"Mặc định hệ thống\",\"find_user\":\"Tìm kiếm\",\"incognito_mode_description\":\"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.\",\"label_alias\":\"Bí danh:\",\"label_alias_edit\":\"Bí danh\",\"label_blur_wallpaper\":\"Làm mờ:\",\"label_color_schema\":\"Giao diện:\",\"label_contact_card\":\"Danh thiếp\",\"label_contacts\":\"Danh bạ\",\"label_keyboard\":\"Bàn phím:\",\"label_member_count\":\"Thành viên:\",\"label_scan_id\":\"Quét mã của tôi:\",\"label_subscriber_count\":\"Người theo dõi:\",\"label_text_size\":\"Cỡ chữ:\",\"member_count\":\"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}\",\"message_deleted\":\"tin nhắn đã xóa\",\"message_not_found\":\"không tìm thấy tin nhắn\",\"pin_chat\":\"Ghim\",\"pin_message\":\"Ghim\",\"save_action\":\"Lưu\",\"select_country\":\"Chọn quốc gia\",\"self_topic_comment\":\"Ghi chú, tin nhắn, liên kết, tệp lưu lại\",\"self_topic_name\":\"Tin nhắn đã lưu\",\"send_command\":\"Gửi bằng {key}\",\"send_command_explained\":\"Nhấn Enter để xuống dòng\",\"send_plain\":\"Gửi bằng Enter\",\"send_plain_explained\":\"Nhấn Shift + Enter để xuống dòng\",\"sidepanel_title_acc_general\":\"Chung\",\"subscriber_count\":\"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}\",\"tabtitle_image\":\"hình ảnh\",\"tabtitle_pattern\":\"hoa văn\",\"text_copied\":\"Đã sao chép vào clipboard\",\"unknown_name\":\"Không rõ\",\"unpin_chat\":\"Bỏ ghim\",\"unpin_message\":\"Bỏ ghim\",\"wallpapers\":\"Hình nền\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_zh-TW_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_zh-TW_json\"],{\n\n/***/ \"./src/i18n.min/zh-TW.json\":\n/*!*********************************!*\\\n  !*** ./src/i18n.min/zh-TW.json ***!\n  \\*********************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"您沒有任何對話\\\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置頂消息\",\"unpin_message\":\"取消置頂消息\",\"failed_to_init_audio\":\"初始化錄音失敗\",\"password_reset_success\":\"密碼重置成功\",\"scan_qr_code\":\"掃描二維碼\",\"self_topic_comment\":\"為後代所儲存的註解、訊息、連結、檔案\",\"self_topic_name\":\"已儲存的訊息\",\"message_not_found\":\"未找到訊息\",\"message_deleted\":\"訊息已刪除\",\"alias_editing_placeholder\":\"別名（可選）\",\"label_alias\":\"別名：\",\"alias_already_taken\":\"（已採取）\",\"alias_invalid\":\"（無效）\",\"label_alias_edit\":\"別名\",\"select_country\":\"選擇國家\",\"text_copied\":\"已複製到剪貼簿\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"淺色\",\"color_schema_system\":\"系統預設\",\"label_color_schema\":\"主題：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隱藏您的線上狀態和正在輸入指示器。\",\"send_command\":\"按 {key} 傳送\",\"send_command_explained\":\"按 Enter 換行\",\"send_plain\":\"按 Enter 傳送\",\"send_plain_explained\":\"按 Shift + Enter 換行\",\"sidepanel_title_acc_general\":\"一般\",\"label_keyboard\":\"鍵盤：\",\"pin_chat\":\"置頂\",\"unpin_chat\":\"取消置頂\",\"subscriber_count\":\"{count, plural, other {{count, number} 位訂閱者}}\",\"label_member_count\":\"成員：\",\"label_subscriber_count\":\"訂閱者：\",\"member_count\":\"{count, plural, other {{count, number} 位成員}}\",\"tabtitle_image\":\"圖片\",\"tabtitle_pattern\":\"圖案\",\"button_restore\":\"恢復預設\",\"wallpapers\":\"桌布\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"掃描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"儲存\",\"cannot_parse_vcard\":\"無法解析 vCard 檔案。\",\"chat_now\":\"聊天\",\"find_user\":\"尋找\",\"label_contact_card\":\"聯絡人卡片\",\"label_contacts\":\"聯絡人\",\"add_members_prompt\":\"新增成員\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_i18n_min_zh_json.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_i18n_min_zh_json\"],{\n\n/***/ \"./src/i18n.min/zh.json\":\n/*!******************************!*\\\n  !*** ./src/i18n.min/zh.json ***!\n  \\******************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\":\"你尚无会话\\\\n¯∖_(ツ)_/¯\",\"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\":\"忙碌的\",\"pin_message\":\"置顶消息\",\"unpin_message\":\"取消置顶消息\",\"failed_to_init_audio\":\"初始化录音失败\",\"password_reset_success\":\"密码重置成功\",\"scan_qr_code\":\"扫描二维码\",\"self_topic_comment\":\"为后人保存的注释、消息、链接、文件\",\"self_topic_name\":\"已保存的消息\",\"message_not_found\":\"未找到消息\",\"message_deleted\":\"消息已删除\",\"alias_editing_placeholder\":\"别名（可选）\",\"label_alias\":\"别名：\",\"alias_already_taken\":\"（已占用）\",\"alias_invalid\":\"（无效）\",\"label_alias_edit\":\"别名\",\"select_country\":\"选择国家\",\"text_copied\":\"已复制到剪贴板\",\"color_schema_dark\":\"深色\",\"color_schema_light\":\"浅色\",\"color_schema_system\":\"系统默认\",\"label_color_schema\":\"主题：\",\"label_text_size\":\"文字大小：\",\"incognito_mode_description\":\"隐藏您的在线状态和正在输入指示器。\",\"send_command\":\"按 {key} 发送\",\"send_command_explained\":\"按 Enter 换行\",\"send_plain\":\"按 Enter 发送\",\"send_plain_explained\":\"按 Shift + Enter 换行\",\"sidepanel_title_acc_general\":\"常规\",\"label_keyboard\":\"键盘：\",\"pin_chat\":\"置顶\",\"unpin_chat\":\"取消置顶\",\"subscriber_count\":\"{count, plural, other {{count, number} 位订阅者}}\",\"label_member_count\":\"成员：\",\"label_subscriber_count\":\"订阅者：\",\"member_count\":\"{count, plural, other {{count, number} 位成员}}\",\"tabtitle_image\":\"图片\",\"tabtitle_pattern\":\"图案\",\"button_restore\":\"恢复默认\",\"wallpapers\":\"壁纸\",\"label_blur_wallpaper\":\"模糊：\",\"label_scan_id\":\"扫描我的 ID：\",\"unknown_name\":\"未知\",\"save_action\":\"保存\",\"cannot_parse_vcard\":\"无法解析 vCard 文件。\",\"chat_now\":\"聊天\",\"find_user\":\"查找\",\"label_contact_card\":\"联系人卡片\",\"label_contacts\":\"联系人\",\"add_members_prompt\":\"添加成员\"}');\n\n/***/ })\n\n}]);"
  },
  {
    "path": "umd/src_views_acc-security-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_acc-security-view_jsx\"],{\n\n/***/ \"./src/views/acc-security-view.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/views/acc-security-view.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/in-place-edit.jsx */ \"./src/widgets/in-place-edit.jsx\");\n/* harmony import */ var _widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/permissions-editor.jsx */ \"./src/widgets/permissions-editor.jsx\");\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  delete_account: {\n    id: \"delete_account\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete account\"\n    }]\n  },\n  delete_account_warning: {\n    id: \"delete_account_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to delete your account? It cannot be undone.\"\n    }]\n  }\n});\nclass AccSecurityView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    const me = this.props.tinode.getMeTopic();\n    let blockedCount = 0;\n    me.contacts(c => {\n      if (c.acs && !c.acs.isJoiner()) {\n        blockedCount++;\n      }\n    });\n    const defacs = me.getDefaultAccess();\n    this.state = {\n      auth: defacs ? defacs.auth : null,\n      anon: defacs ? defacs.anon : null,\n      showPermissionEditorFor: undefined,\n      blockedCount: blockedCount\n    };\n    this.handlePasswordUpdate = this.handlePasswordUpdate.bind(this);\n    this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n    this.handleHidePermissionsEditor = this.handleHidePermissionsEditor.bind(this);\n    this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n    this.handleDeleteAccount = this.handleDeleteAccount.bind(this);\n    this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n  }\n  handlePasswordUpdate(pwd) {\n    this.setState({\n      password: pwd\n    });\n    this.props.onUpdatePassword(pwd);\n  }\n  handleLaunchPermissionsEditor(which) {\n    this.setState({\n      showPermissionEditorFor: which,\n      editedPermissions: this.state[which]\n    });\n  }\n  handleHidePermissionsEditor() {\n    this.setState({\n      showPermissionEditorFor: undefined\n    });\n  }\n  handlePermissionsChanged(perm) {\n    let defacs = {};\n    defacs[this.state.showPermissionEditorFor] = perm;\n    this.props.onUpdateAccountDesc('me', undefined, undefined, defacs);\n    let newState = {\n      showPermissionEditorFor: undefined\n    };\n    newState[this.state.showPermissionEditorFor] = perm;\n    this.setState(newState);\n  }\n  handleCheckboxClick(what, checked) {\n    this.props.onToggleIncognitoMode(checked);\n  }\n  handleDeleteAccount(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(messages.delete_account), formatMessage(messages.delete_account_warning), _ => this.props.onDeleteAccount(), null, true, null);\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.showPermissionEditorFor ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      mode: this.state.editedPermissions,\n      skip: \"O\",\n      onSubmit: this.handlePermissionsChanged,\n      onCancel: this.handleHidePermissionsEditor\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_password\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Password\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"password_unchanged_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Unchanged\"\n      }]\n    }, password_unchanged => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      placeholder: password_unchanged,\n      type: \"password\",\n      onFinished: this.handlePasswordUpdate\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"incognito-mode\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_incognito_mode\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Incognito mode:\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      name: \"incognito\",\n      id: \"incognito-mode\",\n      checked: this.props.incognitoMode,\n      onChange: this.handleCheckboxClick\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"incognito_mode_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Hide your online status and typing indicators.\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onLogout();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"exit_to_app\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_logout\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Logout\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: e => {\n        this.handleDeleteAccount(e);\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"delete\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_delete_account\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Delete account\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_default_access_mode\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Default access mode:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"Auth: \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"clickable\",\n      onClick: this.handleLaunchPermissionsEditor.bind(this, 'auth')\n    }, this.state.auth)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"Anon: \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"clickable\",\n      onClick: this.handleLaunchPermissionsEditor.bind(this, 'anon')\n    }, this.state.anon)))), this.state.blockedCount > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"block\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"gray\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onShowBlocked();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"blocked_contacts_link\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Blocked contacts (\"\n      }, {\n        \"type\": 1,\n        \"value\": \"count\"\n      }, {\n        \"type\": 0,\n        \"value\": \")\"\n      }],\n      values: {\n        count: this.state.blockedCount\n      }\n    })))) : null));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AccSecurityView));\n\n/***/ }),\n\n/***/ \"./src/widgets/permissions-editor.jsx\":\n/*!********************************************!*\\\n  !*** ./src/widgets/permissions-editor.jsx ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ \"./src/widgets/contact.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  joiner: {\n    id: \"permission_join\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Join (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  reader: {\n    id: \"permission_read\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Read (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  writer: {\n    id: \"permission_write\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Write (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  preser: {\n    id: \"permission_pres\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Get notified (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  approver: {\n    id: \"permission_admin\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Approve (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  sharer: {\n    id: \"permission_share\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Share (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  deleter: {\n    id: \"permission_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  owner: {\n    id: \"permission_owner\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Owner (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  }\n});\nclass PermissionsEditor extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      mode: (props.mode || '').replace('N', '')\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  handleChange(val) {\n    let mode = this.state.mode;\n    const idx = mode.indexOf(val);\n    if (idx == -1) {\n      mode += val;\n    } else {\n      mode = mode.replace(val, '');\n    }\n    this.setState({\n      mode: mode\n    });\n  }\n  handleSubmit() {\n    const mode = (this.state.mode || 'N').split('').sort().join('');\n    const before = (this.props.mode || 'N').split('').sort().join('');\n    if (mode !== before) {\n      this.props.onSubmit(mode);\n    } else {\n      this.props.onCancel();\n    }\n  }\n  handleCancel() {\n    this.props.onCancel();\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const all = 'JRWPASDO';\n    const names = {\n      'J': formatMessage(messages.joiner, {\n        val: 'J'\n      }),\n      'R': formatMessage(messages.reader, {\n        val: 'R'\n      }),\n      'W': formatMessage(messages.writer, {\n        val: 'W'\n      }),\n      'P': formatMessage(messages.preser, {\n        val: 'P'\n      }),\n      'A': formatMessage(messages.approver, {\n        val: 'A'\n      }),\n      'S': formatMessage(messages.sharer, {\n        val: 'S'\n      }),\n      'D': formatMessage(messages.deleter, {\n        val: 'D'\n      }),\n      'O': formatMessage(messages.owner, {\n        val: 'O'\n      })\n    };\n    let skip = this.props.skip || '';\n    let mode = this.state.mode;\n    let compare = (this.props.compare || '').replace('N', '');\n    let items = [];\n    for (let i = 0; i < all.length; i++) {\n      let c = all.charAt(i);\n      if (skip.indexOf(c) >= 0 && mode.indexOf(c) < 0) {\n        continue;\n      }\n      items.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tr\", {\n        key: c\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", null, names[c]), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", {\n        className: \"checkbox\"\n      }, skip.indexOf(c) < 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: mode.indexOf(c) >= 0,\n        onChange: this.handleChange\n      }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: mode.indexOf(c) >= 0\n      })), this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", {\n        className: \"checkbox\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: compare.indexOf(c) >= 0\n      })) : null));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, this.props.userTitle ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"contact-box small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      item: this.props.item,\n      title: this.props.userTitle,\n      small: true,\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.makeImageUrl)(this.props.userAvatar ? this.props.userAvatar : null)\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_permissions\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Permissions\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"table\", {\n      className: \"permission-editor\"\n    }, this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"thead\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null, this.props.modeTitle), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null, this.props.compareTitle))) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tbody\", null, items)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"outline\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PermissionsEditor));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_acc-security-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_account-settings-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_account-settings-view_jsx\"],{\n\n/***/ \"./src/dcodes.json\":\n/*!*************************!*\\\n  !*** ./src/dcodes.json ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\"}]');\n\n/***/ }),\n\n/***/ \"./src/views/account-settings-view.jsx\":\n/*!*********************************************!*\\\n  !*** ./src/views/account-settings-view.jsx ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AccountSettingsView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ \"./src/widgets/avatar-upload.jsx\");\n/* harmony import */ var _widgets_badge_list_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/badge-list.jsx */ \"./src/widgets/badge-list.jsx\");\n/* harmony import */ var _widgets_credential_edit_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/credential-edit.jsx */ \"./src/widgets/credential-edit.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\n\n\n\n\nfunction _clip(str, length) {\n  return (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_7__.truncateString)(str, length);\n}\nclass AccountSettingsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    const me = this.props.tinode.getMeTopic();\n    this.state = {\n      fullName: _clip(me.public ? me.public.fn : undefined, _config_js__WEBPACK_IMPORTED_MODULE_8__.MAX_TITLE_LENGTH),\n      description: _clip(me.public ? me.public.note : undefined, _config_js__WEBPACK_IMPORTED_MODULE_8__.MAX_TOPIC_DESCRIPTION_LENGTH),\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_6__.makeImageUrl)(me.public ? me.public.photo : null),\n      credentials: me.getCredentials() || [],\n      credEdit: undefined,\n      alias: ((me.tags() || []).find(tag => tag.startsWith('alias:')) || '').substring(6)\n    };\n  }\n  componentDidMount() {\n    const me = this.props.tinode.getMeTopic();\n    me.onCredsUpdated = _ => this.setState({\n      credentials: me.getCredentials()\n    });\n  }\n  componentWillUnmount() {\n    const me = this.props.tinode.getMeTopic();\n    me.onCredsUpdated = null;\n  }\n  render() {\n    if (this.state.credEdit) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_credential_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n        method: this.state.credEdit.meth,\n        val: this.state.credEdit.val,\n        done: this.state.credEdit.done,\n        onShowCountrySelector: this.props.onShowCountrySelector,\n        onCredAdd: this.props.onCredAdd,\n        onCredConfirm: this.props.onCredConfirm,\n        onCancel: _ => this.setState({\n          credEdit: undefined\n        }),\n        onError: this.props.onError\n      });\n    }\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    const credentials = [];\n    this.state.credentials.forEach((cred, idx) => {\n      if (!['email', 'tel'].includes(cred.meth)) {\n        return;\n      }\n      let val = cred.val;\n      if (cred.meth == 'tel') {\n        const number = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__.parsePhoneNumberWithError)(cred.val);\n        val = number ? number.formatInternational() : cred.val;\n      }\n      credentials.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"group quoted\",\n        key: idx\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n        className: \"clickable\",\n        onClick: e => {\n          e.preventDefault();\n          this.setState({\n            credEdit: cred\n          });\n        }\n      }, val), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, \" \", cred.done ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons\"\n      }, \"pending\"), \"\\xA0\", !cred.done || validated[cred.meth] > 1 || this.props.reqCredMethod != cred.meth ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n        href: \"#\",\n        onClick: e => {\n          e.preventDefault();\n          this.props.onCredDelete(cred.meth, cred.val);\n        }\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons\"\n      }, \"delete\")) : null)));\n    });\n    if (credentials.length > 0) {\n      credentials.unshift(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n        className: \"small\",\n        key: 'title'\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"label_user_contacts\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Contacts\"\n        }]\n      })));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button float-right\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('general');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"edit\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_edit\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Edit\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"center\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      avatar: this.state.avatar,\n      readOnly: true,\n      uid: this.props.myUserId,\n      title: this.state.fullName\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_your_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Your name\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"large ellipsized\"\n    }, this.state.fullName)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_user_id\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"ID:\"\n      }]\n    })), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, this.props.myUserId)), this.state.alias ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_alias\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Alias:\"\n      }]\n    })), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, \"@\", this.state.alias)) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_badge_list_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      trustedBadges: this.props.trustedBadges\n    })), this.state.description ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, this.state.description)) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, credentials)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('acc_general');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"tune\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"sidepanel_title_acc_general\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"General\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('notif');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"notifications\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"sidepanel_title_acc_notifications\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Notifications\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('security');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"security\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_security\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Security\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('support');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"contact_support\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"sidepanel_title_acc_support\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Support\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/credential-edit.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/credential-edit.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _phone_edit_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./phone-edit.jsx */ \"./src/widgets/phone-edit.jsx\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  password_reset_email_sent: {\n    id: \"password_reset_email_sent\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"An email with security code has been sent.\"\n    }]\n  },\n  password_reset_sms_sent: {\n    id: \"password_reset_sms_sent\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"A text message with security code has been sent.\"\n    }]\n  }\n});\nclass CredentialEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      code: '',\n      tel: '',\n      email: '',\n      sent: false\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  static formatPhoneNumber(raw) {\n    let number;\n    try {\n      number = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__.parsePhoneNumberWithError)(raw);\n    } catch (err) {}\n    return number ? number.formatInternational() : raw;\n  }\n  handleEmailChange(e) {\n    this.setState({\n      email: e.target.value\n    });\n  }\n  handlePhoneChange(number) {\n    this.setState({\n      tel: number\n    });\n  }\n  handleCodeChange(e) {\n    this.setState({\n      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({\n        sent: true\n      });\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  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    const changeEmail = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"large\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"change_email\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Change email\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"current_email\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Current email\"\n      }]\n    }))));\n    const changePhone = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"large\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"change_phone\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Change phone number\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"current_phone\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Current phone number\"\n      }]\n    }))));\n    const newEmailLabel = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"new_email\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"New email\"\n      }]\n    }));\n    const newEmailInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, newEmailLabel), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"email_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Email, e.g. jdoe@example.com\"\n      }]\n    }, email_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"email\",\n      placeholder: email_prompt,\n      autoComplete: \"email\",\n      value: this.state.email,\n      onChange: this.handleEmailChange,\n      required: true\n    }))));\n    const newPhoneLabel = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"new_phone_number\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"New phone number\"\n      }]\n    }));\n    const newPhoneInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, newPhoneLabel), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      autoFocus: true,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onSubmit: this.handlePhoneChange\n    })));\n    const codeInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"enter_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Confirmation code\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"numeric_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Numbers only\"\n      }]\n    }, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      placeholder: numbers_only,\n      maxLength: 10,\n      value: this.state.code,\n      onChange: this.handleCodeChange,\n      required: true\n    }))));\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      className: \"panel-form-column\",\n      onSubmit: this.handleSubmit\n    }, readyForCode ? this.props.method == 'email' ? newEmailLabel : this.props.method == 'tel' ? newPhoneLabel : null : this.props.method == 'email' ? changeEmail : this.props.method == 'tel' ? changePhone : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"quoted\"\n    }, formattedValue)), readyForCode ? null : this.props.method == 'email' ? newEmailInput : this.props.method == 'tel' ? newPhoneInput : null, readyForCode ? codeInput : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.props.onCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      type: \"submit\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(CredentialEdit));\n\n/***/ }),\n\n/***/ \"./src/widgets/phone-edit.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/phone-edit.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/AsYouType.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js\");\n/* harmony import */ var libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! libphonenumber-js/mobile/examples */ \"./node_modules/libphonenumber-js/examples.mobile.json.js\");\n/* harmony import */ var _dcodes_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dcodes.json */ \"./src/dcodes.json\");\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  mobile_number_required: {\n    id: \"mobile_number_required\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Mobile phone number required\"\n    }]\n  }\n});\nclass PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.codeMap = {};\n    _dcodes_json__WEBPACK_IMPORTED_MODULE_6__.forEach(dc => {\n      this.codeMap[dc.code] = dc.dial;\n    });\n    const code = props.countryCode || 'US';\n    const dial = this.codeMap[code];\n    this.state = {\n      countryCode: code,\n      dialCode: dial,\n      localNumber: '',\n      placeholderNumber: this.placeholderNumber(code, dial)\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  handleChange(e) {\n    const prefix = `+${this.state.dialCode}`;\n    let formatted = new libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__.AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n    formatted = formatted.substring(prefix.length).trim();\n    this.setState({\n      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 = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__.parsePhoneNumberWithError)(`+${raw}`);\n    } catch (err) {}\n    if (!number || !number.isValid()) {\n      this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n      return;\n    }\n    this.inputField.setCustomValidity('');\n    this.props.onSubmit(number.format('E.164'));\n  }\n  handleKeyDown(e) {\n    if (e.key === 'Enter') {\n      this.handleFinished(e);\n    }\n  }\n  showCountrySelector() {\n    this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode, (code, dial) => {\n      this.setState({\n        countryCode: code,\n        dialCode: dial,\n        placeholderNumber: this.placeholderNumber(code, dial)\n      });\n    });\n  }\n  filterNumber(number) {\n    if (!number) {\n      return number;\n    }\n    return number.replace(/[^-\\s().\\d]/g, '');\n  }\n  placeholderNumber(code, dial) {\n    const sample = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__.getExampleNumber)(code, libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n    return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"dial-code\",\n      onClick: this.showCountrySelector\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"country-flag\"\n    }, (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_7__.flagEmoji)(this.state.countryCode), \"\\xA0\"), \"+\", this.state.dialCode, \"\\xA0\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"tel\",\n      ref: ref => {\n        this.inputField = ref;\n      },\n      placeholder: this.state.placeholderNumber,\n      value: this.state.localNumber,\n      onChange: this.handleChange,\n      maxLength: 17,\n      onKeyDown: this.handleKeyDown,\n      onBlur: this.handleFinished,\n      required: true,\n      autoFocus: this.props.autoFocus\n    }));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PhoneEdit));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_account-settings-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_create-account-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_create-account-view_jsx\"],{\n\n/***/ \"./src/dcodes.json\":\n/*!*************************!*\\\n  !*** ./src/dcodes.json ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\"}]');\n\n/***/ }),\n\n/***/ \"./src/views/create-account-view.jsx\":\n/*!*******************************************!*\\\n  !*** ./src/views/create-account-view.jsx ***!\n  \\*******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CreateAccountView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/avatar-crop.jsx */ \"./src/widgets/avatar-crop.jsx\");\n/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ \"./src/widgets/avatar-upload.jsx\");\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/phone-edit.jsx */ \"./src/widgets/phone-edit.jsx\");\n/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ \"./src/widgets/visible-password.jsx\");\n/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/local-storage.js */ \"./src/lib/local-storage.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nclass CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      login: '',\n      password: '',\n      meth: '',\n      email: '',\n      tel: '',\n      fn: '',\n      imageUrl: null,\n      uploadUrl: null,\n      newAvatar: null,\n      newAvatarMime: null,\n      buttonDisabled: false,\n      saveToken: _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getObject('keep-logged-in')\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    props.tinode.connect().catch(err => {\n      this.props.onError(err.message, 'err');\n    });\n  }\n  handleLoginChange(e) {\n    this.setState({\n      login: e.target.value\n    });\n  }\n  handlePasswordChange(password) {\n    this.setState({\n      password: password\n    });\n  }\n  handleEmailChange(e) {\n    this.setState({\n      meth: 'email',\n      email: e.target.value\n    });\n  }\n  handlePhoneChange(number) {\n    this.setState({\n      meth: 'tel',\n      tel: number\n    });\n  }\n  handleFnChange(e) {\n    this.setState({\n      fn: e.target.value\n    });\n  }\n  handleImageChanged(mime, img) {\n    this.setState({\n      newAvatar: img,\n      newAvatarMime: mime\n    });\n    if (!img) {\n      this.setState({\n        imageUrl: null,\n        uploadUrl: null\n      });\n    }\n  }\n  handleToggleSaveToken() {\n    _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].setObject('keep-logged-in', !this.state.saveToken);\n    this.setState({\n      saveToken: !this.state.saveToken\n    });\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    this.props.onCreateAccount(this.state.login.trim(), this.state.password.trim(), (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_9__.theCard)((0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_10__.truncateString)(this.state.fn.trim(), _config_js__WEBPACK_IMPORTED_MODULE_11__.MAX_TITLE_LENGTH), this.state.uploadUrl), {\n      'meth': this.state.meth,\n      'val': this.state.meth == 'email' ? this.state.email : this.state.meth == 'tel' ? this.state.tel : null\n    });\n  }\n  handleAvatarCropped(mime, blob, width, height) {\n    const url = blob ? URL.createObjectURL(blob) : null;\n    this.setState({\n      newAvatar: null,\n      newAvatarMime: null\n    });\n    if (blob) {\n      this.uploadAvatar(mime, blob, width, height);\n    }\n  }\n  handleAvatarCropCancel() {\n    this.setState({\n      newAvatar: null,\n      newAvatarMime: null\n    });\n  }\n  uploadAvatar(mime, blob, width, height) {\n    const readyToUpload = image => {\n      let {\n        mime,\n        blob\n      } = image;\n      this.setState({\n        imageUrl: URL.createObjectURL(blob),\n        buttonDisabled: true\n      });\n      if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_11__.MAX_AVATAR_BYTES) {\n        const uploader = this.props.tinode.getLargeFileHelper();\n        uploader.upload(blob, 'newacc').then(url => this.setState({\n          uploadUrl: url\n        })).catch(err => this.props.onError(err.message, 'err')).finally(_ => this.setState({\n          buttonDisabled: false\n        }));\n      } else {\n        (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.blobToBase64)(blob).then(b64 => this.setState({\n          uploadUrl: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)({\n            data: b64.bits,\n            type: mime\n          })\n        })).finally(_ => this.setState({\n          buttonDisabled: false\n        }));\n      }\n    };\n    if (width > _config_js__WEBPACK_IMPORTED_MODULE_11__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_11__.AVATAR_SIZE || width != height) {\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_11__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_11__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_11__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));\n    } else {\n      readyToUpload({\n        mime: mime,\n        blob: blob,\n        width: width,\n        height: height\n      });\n    }\n  }\n  render() {\n    if (this.state.newAvatar) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        avatar: this.state.newAvatar,\n        mime: this.state.newAvatarMime,\n        onSubmit: this.handleAvatarCropped,\n        onCancel: this.handleAvatarCropCancel,\n        onError: this.props.onError\n      });\n    }\n    let submitClasses = 'primary';\n    if (this.props.disabled) {\n      submitClasses += ' disabled';\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      className: \"panel-form-column\",\n      onSubmit: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"umn\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"login_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Login\"\n      }]\n    }, login_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      placeholder: login_prompt,\n      autoComplete: \"user-name\",\n      value: this.state.login,\n      onChange: this.handleLoginChange,\n      required: true,\n      autoFocus: true\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"password_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Password\"\n      }]\n    }, password_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      placeholder: password_prompt,\n      autoComplete: \"new-password\",\n      value: this.state.password,\n      onFinished: this.handlePasswordChange,\n      required: true\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      avatar: this.state.imageUrl,\n      onImageUpdated: this.handleImageChanged,\n      onError: this.props.onError\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"full_name_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Full name, e.g. John Doe\"\n      }]\n    }, full_name_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      placeholder: full_name_prompt,\n      autoComplete: \"name\",\n      value: this.state.fn,\n      onChange: this.handleFnChange,\n      required: true\n    }))), this.props.reqCredMethod == 'email' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"email_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Email, e.g. jdoe@example.com\"\n      }]\n    }, email_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"email\",\n      placeholder: email_prompt,\n      autoComplete: \"email\",\n      value: this.state.email,\n      onChange: this.handleEmailChange,\n      required: true\n    }))) : this.props.reqCredMethod == 'tel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"mobile_phone_number\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Mobile phone number\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      autoFocus: false,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onSubmit: this.handlePhoneChange\n    }))) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      id: \"save-token\",\n      name: \"save-token\",\n      checked: this.state.saveToken,\n      onChange: this.handleToggleSaveToken\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"stay_logged_in\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Stay logged in\"\n      }]\n    }, stay_logged_in => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"save-token\"\n    }, \"\\xA0\", stay_logged_in))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: submitClasses,\n      type: \"submit\",\n      disabled: this.state.buttonDisabled\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_sign_up\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Sign up\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/phone-edit.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/phone-edit.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/AsYouType.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js\");\n/* harmony import */ var libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! libphonenumber-js/mobile/examples */ \"./node_modules/libphonenumber-js/examples.mobile.json.js\");\n/* harmony import */ var _dcodes_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dcodes.json */ \"./src/dcodes.json\");\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  mobile_number_required: {\n    id: \"mobile_number_required\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Mobile phone number required\"\n    }]\n  }\n});\nclass PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.codeMap = {};\n    _dcodes_json__WEBPACK_IMPORTED_MODULE_6__.forEach(dc => {\n      this.codeMap[dc.code] = dc.dial;\n    });\n    const code = props.countryCode || 'US';\n    const dial = this.codeMap[code];\n    this.state = {\n      countryCode: code,\n      dialCode: dial,\n      localNumber: '',\n      placeholderNumber: this.placeholderNumber(code, dial)\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  handleChange(e) {\n    const prefix = `+${this.state.dialCode}`;\n    let formatted = new libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__.AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n    formatted = formatted.substring(prefix.length).trim();\n    this.setState({\n      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 = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__.parsePhoneNumberWithError)(`+${raw}`);\n    } catch (err) {}\n    if (!number || !number.isValid()) {\n      this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n      return;\n    }\n    this.inputField.setCustomValidity('');\n    this.props.onSubmit(number.format('E.164'));\n  }\n  handleKeyDown(e) {\n    if (e.key === 'Enter') {\n      this.handleFinished(e);\n    }\n  }\n  showCountrySelector() {\n    this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode, (code, dial) => {\n      this.setState({\n        countryCode: code,\n        dialCode: dial,\n        placeholderNumber: this.placeholderNumber(code, dial)\n      });\n    });\n  }\n  filterNumber(number) {\n    if (!number) {\n      return number;\n    }\n    return number.replace(/[^-\\s().\\d]/g, '');\n  }\n  placeholderNumber(code, dial) {\n    const sample = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__.getExampleNumber)(code, libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n    return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"dial-code\",\n      onClick: this.showCountrySelector\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"country-flag\"\n    }, (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_7__.flagEmoji)(this.state.countryCode), \"\\xA0\"), \"+\", this.state.dialCode, \"\\xA0\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"tel\",\n      ref: ref => {\n        this.inputField = ref;\n      },\n      placeholder: this.state.placeholderNumber,\n      value: this.state.localNumber,\n      onChange: this.handleChange,\n      maxLength: 17,\n      onKeyDown: this.handleKeyDown,\n      onBlur: this.handleFinished,\n      required: true,\n      autoFocus: this.props.autoFocus\n    }));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PhoneEdit));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_create-account-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_info-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_info-view_jsx\"],{\n\n/***/ \"./src/views/info-view.jsx\":\n/*!*********************************!*\\\n  !*** ./src/views/info-view.jsx ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ \"./src/widgets/avatar-upload.jsx\");\n/* harmony import */ var _widgets_badge_list_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/badge-list.jsx */ \"./src/widgets/badge-list.jsx\");\n/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ \"./src/widgets/contact-list.jsx\");\n/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ \"./src/widgets/error-panel.jsx\");\n/* harmony import */ var _widgets_group_manager_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/group-manager.jsx */ \"./src/widgets/group-manager.jsx\");\n/* harmony import */ var _widgets_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/menu-cancel.jsx */ \"./src/widgets/menu-cancel.jsx\");\n/* harmony import */ var _widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/permissions-editor.jsx */ \"./src/widgets/permissions-editor.jsx\");\n/* harmony import */ var _widgets_show_qrcode_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../widgets/show-qrcode.jsx */ \"./src/widgets/show-qrcode.jsx\");\n/* harmony import */ var _topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./topic-common-view.jsx */ \"./src/views/topic-common-view.jsx\");\n/* harmony import */ var _widgets_topic_security_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../widgets/topic-security.jsx */ \"./src/widgets/topic-security.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  info: {\n    id: \"panel_title_info\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Info\"\n    }]\n  },\n  general: {\n    id: \"panel_title_general\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"General\"\n    }]\n  },\n  security: {\n    id: \"panel_title_security\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Security\"\n    }]\n  },\n  members: {\n    id: \"panel_title_members\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Members\"\n    }]\n  },\n  crop: {\n    id: \"panel_title_crop\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Drag to Adjust\"\n    }]\n  },\n  perm_want: {\n    id: \"requested_permissions\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Requested\"\n    }]\n  },\n  perm_given: {\n    id: \"granted_permissions\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Granted\"\n    }]\n  },\n  perm_auth: {\n    id: \"permissions_authenticated\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Authenticated\"\n    }]\n  },\n  perm_anon: {\n    id: \"permissions_anonymous\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Anonymous\"\n    }]\n  },\n  perm_user: {\n    id: \"permissions_user\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"User's Permissions\"\n    }]\n  },\n  edit_permissions: {\n    id: \"menu_item_edit_permissions\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Edit permissions\"\n    }]\n  },\n  qrcode: {\n    id: \"scan_qr_code\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Scan QR Code\"\n    }]\n  },\n  text_copied: {\n    id: \"text_copied\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Copied to clipboard\"\n    }]\n  },\n  self_topic_name: {\n    id: \"self_topic_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Saved messages\"\n    }]\n  },\n  self_topic_comment: {\n    id: \"self_topic_comment\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Notes, messages, links, files saved for posterity\"\n    }]\n  }\n});\nclass InfoView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      topic: null,\n      owner: false,\n      admin: false,\n      sharer: false,\n      deleter: false,\n      muted: false,\n      address: null,\n      groupTopic: undefined,\n      isSelf: false,\n      channel: undefined,\n      fullName: undefined,\n      description: undefined,\n      avatar: null,\n      private: null,\n      selectedContact: null,\n      access: null,\n      modeGiven: null,\n      modeWant: null,\n      modeGiven2: null,\n      modeWant2: null,\n      auth: null,\n      anon: null,\n      contactList: [],\n      trustedBadges: [],\n      previousMetaDesc: undefined,\n      previousSubsUpdated: undefined\n    };\n    this.propsUpdated = this.propsUpdated.bind(this);\n    this.resetSubs = this.resetSubs.bind(this);\n    this.resetDesc = this.resetDesc.bind(this);\n    this.resetTags = this.resetTags.bind(this);\n    this.onMetaDesc = this.onMetaDesc.bind(this);\n    this.onSubsUpdated = this.onSubsUpdated.bind(this);\n    this.handleImageChanged = this.handleImageChanged.bind(this);\n    this.handleMuted = this.handleMuted.bind(this);\n    this.handleUnarchive = this.handleUnarchive.bind(this);\n    this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n    this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n    this.handleShowQRCode = this.handleShowQRCode.bind(this);\n    this.handleCopyToClipboard = this.handleCopyToClipboard.bind(this);\n    this.handleShare = this.handleShare.bind(this);\n    this.handleShowAddMembers = this.handleShowAddMembers.bind(this);\n    this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\n    this.handleMemberSelected = this.handleMemberSelected.bind(this);\n    this.handleContextMenu = this.handleContextMenu.bind(this);\n    this.handleBackNavigate = this.handleBackNavigate.bind(this);\n  }\n  propsUpdated(props) {\n    const topic = this.props.tinode.getTopic(props.topic);\n    if (!topic) {\n      return;\n    }\n    if (this.onMetaDesc != topic.onMetaDesc) {\n      this.previousMetaDesc = topic.onMetaDesc;\n      topic.onMetaDesc = this.onMetaDesc;\n      this.previousSubsUpdated = topic.onSubsUpdated;\n      topic.onSubsUpdated = this.onSubsUpdated;\n    }\n    if (this.state.topic != props.topic) {\n      this.setState({\n        topic: props.topic\n      });\n      this.resetDesc(topic, props);\n      this.resetSubs(topic, props);\n      this.resetTags(topic);\n    }\n  }\n  componentDidMount() {\n    this.propsUpdated(this.props);\n  }\n  componentDidUpdate(props) {\n    this.propsUpdated(props);\n  }\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.setState({\n      topic: null\n    });\n    topic.onMetaDesc = this.previousMetaDesc;\n    topic.onSubsUpdated = this.previousSubsUpdated;\n  }\n  resetSubs(topic, props) {\n    const newState = {\n      contactList: []\n    };\n    if (topic.getType() == 'p2p') {\n      const user2 = topic.subscriber(props.topic);\n      if (user2) {\n        newState.modeGiven2 = user2.acs.getGiven();\n        newState.modeWant2 = user2.acs.getWant();\n      } else {\n        newState.modeGiven2 = _config_js__WEBPACK_IMPORTED_MODULE_14__.NO_ACCESS_MODE;\n        newState.modeWant2 = _config_js__WEBPACK_IMPORTED_MODULE_14__.NO_ACCESS_MODE;\n      }\n    } else {\n      topic.subscribers(sub => {\n        newState.contactList.push(sub);\n      }, this);\n    }\n    this.setState(newState);\n  }\n  resetDesc(topic, props) {\n    const defacs = topic.getDefaultAccess() || {};\n    const acs = topic.getAccessMode();\n    const badges = [];\n    if (topic.trusted) {\n      for (const [key, val] of Object.entries(topic.trusted)) {\n        if (val) {\n          badges.push(key);\n        }\n      }\n    }\n    const isSelf = topic.isSelfType();\n    this.setState({\n      owner: acs && acs.isOwner(),\n      admin: acs && acs.isAdmin(),\n      sharer: acs && acs.isSharer(),\n      deleter: acs && acs.isDeleter(),\n      muted: acs && acs.isMuted(),\n      fullName: isSelf ? props.intl.formatMessage(messages.self_topic_name) : (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.truncateString)(topic.public && topic.public.fn, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_TITLE_LENGTH),\n      description: isSelf ? props.intl.formatMessage(messages.self_topic_comment) : (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.truncateString)(topic.public && topic.public.note, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_TOPIC_DESCRIPTION_LENGTH),\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.makeImageUrl)(topic.public ? topic.public.photo : null),\n      trustedBadges: badges,\n      private: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.truncateString)(topic.private && topic.private.comment, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_TITLE_LENGTH),\n      archived: topic.isArchived(),\n      address: topic.name,\n      groupTopic: topic.isGroupType(),\n      isSelf: isSelf,\n      channel: topic.isChannelType() || topic.chan,\n      access: acs ? acs.getMode() : undefined,\n      modeGiven: acs ? acs.getGiven() : undefined,\n      modeWant: acs ? acs.getWant() : undefined,\n      auth: defacs.auth,\n      anon: defacs.anon\n    });\n  }\n  resetTags(topic) {\n    if (topic.getType() != 'grp') {\n      return;\n    }\n    const acs = topic.getAccessMode();\n    if (acs && acs.isOwner()) {\n      topic.getMeta(topic.startMetaQuery().withTags().build());\n    }\n  }\n  onMetaDesc(desc) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetDesc(topic, this.props);\n    if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\n      this.previousMetaDesc(desc);\n    }\n  }\n  onSubsUpdated(subs) {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    this.resetSubs(topic, this.props);\n    if (this.previousSubsUpdated && this.previousSubsUpdated != this.onSubsUpdated) {\n      this.previousSubsUpdated(subs);\n    }\n  }\n  handleImageChanged(mime, img) {\n    this.setState({\n      avatar: img\n    });\n    this.props.onTopicDescUpdate(this.props.topic, new tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard(null, img || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR), null);\n  }\n  handleMuted(ignored, checked) {\n    this.setState({\n      muted: checked\n    });\n    this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');\n  }\n  handleUnarchive(ignored, ignored2) {\n    this.props.onTopicUnArchive(this.props.topic);\n  }\n  handlePermissionsChanged(which, perm) {\n    switch (which) {\n      case 'auth':\n        this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {\n          auth: perm\n        });\n        break;\n      case 'anon':\n        this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {\n          anon: perm\n        });\n        break;\n      case 'mode':\n      case 'want':\n        this.props.onChangePermissions(this.props.topic, perm);\n        break;\n      case 'given':\n        this.props.onChangePermissions(this.props.topic, perm, this.props.topic);\n        break;\n      case 'user':\n        this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);\n        break;\n    }\n    this.handleBackNavigate();\n  }\n  handleLaunchPermissionsEditor(which, uid) {\n    const {\n      formatMessage\n    } = this.props.intl;\n    let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;\n    switch (which) {\n      case 'mode':\n        toEdit = this.state.access;\n        break;\n      case 'want':\n        toEdit = this.state.modeWant;\n        toCompare = this.state.modeGiven;\n        if (this.state.owner) {\n          toSkip = 'O';\n        } else {\n          toSkip = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.AccessMode.encode(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.AccessMode.diff('ASDO', this.state.modeGiven));\n          if (this.state.channel) {\n            toSkip += 'W';\n          }\n        }\n        titleEdit = formatMessage(messages.perm_want);\n        titleCompare = formatMessage(messages.perm_given);\n        break;\n      case 'given':\n        toEdit = this.state.modeGiven2;\n        toCompare = this.state.modeWant2;\n        toSkip = this.state.groupTopic ? this.state.owner ? '' : 'O' : 'ASDO';\n        titleEdit = formatMessage(messages.perm_given);\n        titleCompare = formatMessage(messages.perm_want);\n        break;\n      case 'auth':\n        toEdit = this.state.auth;\n        toSkip = 'O';\n        break;\n      case 'anon':\n        toEdit = this.state.anon;\n        toSkip = 'O';\n        break;\n      case 'user':\n        {\n          const topic = this.props.tinode.getTopic(this.props.topic);\n          if (!topic) {\n            return;\n          }\n          const user = topic.subscriber(uid);\n          if (!user || !user.acs) {\n            return;\n          }\n          toEdit = user.acs.getGiven();\n          toCompare = user.acs.getWant();\n          toSkip = this.state.owner ? '' : 'O';\n          titleEdit = formatMessage(messages.perm_given);\n          titleCompare = formatMessage(messages.perm_want);\n          if (user.public) {\n            userTitle = user.public.fn;\n            userAvatar = user.public.photo;\n          }\n          break;\n        }\n      default:\n        console.error(\"Unknown permission editing mode '\" + which + \"'\");\n        return;\n    }\n    this.setState({\n      userPermissionsEdited: uid,\n      userPermissionsTitle: userTitle,\n      userPermissionsAvatar: userAvatar,\n      editedPermissions: toEdit,\n      immutablePermissions: toCompare,\n      editedPermissionsTitle: titleEdit,\n      immutablePermissionsTitle: titleCompare,\n      editedPermissionsSkipped: toSkip\n    });\n    this.props.onNavigate(`perm/${which}`);\n  }\n  handleShowQRCode(e) {\n    e.preventDefault();\n    this.props.onNavigate('qrcode');\n  }\n  handleCopyToClipboard(e, text) {\n    e.preventDefault();\n    navigator.clipboard.writeText(text).then(_ => {\n      this.setState({\n        toast: this.props.intl.formatMessage(messages.text_copied)\n      });\n      setTimeout(_ => {\n        this.setState({\n          toast: ''\n        });\n      }, _config_js__WEBPACK_IMPORTED_MODULE_14__.TOAST_DURATION);\n    });\n  }\n  handleShare(e) {\n    e.preventDefault();\n    const card = new tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard(this.state.fullName, this.state.avatar, null, this.state.description);\n    tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.setTinodeID(card, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.URI_TOPIC_ID_PREFIX + this.props.topic);\n    this.props.onShareTheCard(card);\n  }\n  handleShowAddMembers(e) {\n    e.preventDefault();\n    this.props.onInitFind();\n    this.props.onNavigate('members');\n  }\n  handleMemberUpdateRequest(members, added, removed) {\n    this.props.onMemberUpdateRequest(this.props.topic, added, removed);\n    this.props.onNavigate('info');\n  }\n  handleMemberSelected(uid) {\n    this.setState({\n      selectedContact: uid\n    });\n  }\n  handleBackNavigate() {\n    const args = (this.props.panel || 'info').split('/');\n    if (args[0] == 'info') {\n      this.props.onNavigate(null);\n    } else if (args[0] == 'perm') {\n      if (args[1] == 'user') {\n        this.props.onNavigate('info');\n      } else {\n        this.props.onNavigate('security');\n      }\n    } else {\n      this.props.onNavigate('info');\n    }\n  }\n  handleContextMenu(params) {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    if (!topic) {\n      return;\n    }\n    const user = topic.subscriber(params.topicName);\n    if (!user || !user.acs) {\n      return;\n    }\n    const isMe = this.props.tinode.isMe(params.topicName);\n    const menuItems = [{\n      title: formatMessage(messages.edit_permissions),\n      handler: _ => this.handleLaunchPermissionsEditor(isMe ? 'want' : 'user', params.topicName)\n    }];\n    if (!isMe) {\n      menuItems.push('member_delete');\n    }\n    menuItems.push(user.acs.isMuted() ? 'member_unmute' : 'member_mute');\n    if (!isMe) {\n      menuItems.push(user.acs.isJoiner() ? 'member_block' : 'member_unblock');\n    }\n    this.props.showContextMenu({\n      topicName: this.props.topic,\n      x: params.x,\n      y: params.y,\n      user: params.topicName\n    }, menuItems);\n  }\n  render() {\n    const args = (this.props.panel || 'info').split('/');\n    const view = args[0];\n    args.shift();\n    const {\n      formatMessage\n    } = this.props.intl;\n    const panelTitle = formatMessage((view == 'perm' ? messages['perm_' + args[0]] : messages[view]) || messages['info']);\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    const alias = topic && topic.alias();\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"info-view\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: `toast${this.state.toast ? ' show' : ''}`\n    }, this.state.toast), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caption-panel\",\n      id: \"info-caption-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-title\",\n      id: \"info-title\"\n    }, panelTitle), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n      onCancel: this.handleBackNavigate\n    }))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n      level: this.props.errorLevel,\n      text: this.props.errorText,\n      onClearError: this.props.onError\n    }) : null, view == 'members' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_manager_jsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n      tinode: this.props.tinode,\n      members: this.state.contactList,\n      requiredMember: this.props.myUserId,\n      keepInitialMembers: !this.state.admin && !this.state.owner,\n      myUserId: this.props.myUserId,\n      contacts: this.props.searchableContacts,\n      onCancel: this.handleBackNavigate,\n      onSubmit: this.handleMemberUpdateRequest\n    }) : view == 'perm' && args.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n      tinode: this.props.tinode,\n      mode: this.state.editedPermissions,\n      compare: this.state.immutablePermissions,\n      skip: this.state.editedPermissionsSkipped,\n      modeTitle: this.state.editedPermissionsTitle,\n      compareTitle: this.state.immutablePermissionsTitle,\n      userTitle: this.state.userPermissionsTitle,\n      item: this.state.userPermissionsEdited,\n      userAvatar: this.state.userPermissionsAvatar,\n      onSubmit: mode => this.handlePermissionsChanged(args[0], mode),\n      onCancel: this.handleBackNavigate\n    }) : view == 'general' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n      tinode: this.props.tinode,\n      topic: this.props.topic,\n      reqCredMethod: this.props.reqCredMethod,\n      onCredAdd: this.props.onCredAdd,\n      onUpdateTagsRequest: this.props.onTopicTagsUpdateRequest,\n      onCredConfirm: this.props.onCredConfirm,\n      onCredDelete: this.props.onCredDelete,\n      onUpdateTopicDesc: this.props.onTopicDescUpdateRequest,\n      onError: this.props.onError\n    }) : view == 'security' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_topic_security_jsx__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n      topic: this.props.topic,\n      owner: this.state.owner,\n      admin: this.state.admin,\n      sharer: this.state.sharer,\n      deleter: this.state.deleter,\n      muted: this.state.muted,\n      groupTopic: this.state.groupTopic,\n      channel: this.state.channel,\n      access: this.state.access,\n      modeGiven: this.state.modeGiven,\n      modeWant: this.state.modeWant,\n      modeGiven2: this.state.modeGiven2,\n      modeWant2: this.state.modeWant2,\n      auth: this.state.auth,\n      anon: this.state.anon,\n      onShowAlert: this.props.onShowAlert,\n      onDeleteMessages: this.props.onDeleteMessages,\n      onLeaveTopic: this.props.onLeaveTopic,\n      onBlockTopic: this.props.onBlockTopic,\n      onReportTopic: this.props.onReportTopic,\n      onLaunchPermissionsEditor: this.handleLaunchPermissionsEditor,\n      onNavigate: this.props.onNavigate\n    }) : view == 'qrcode' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_show_qrcode_jsx__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n      uri: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.URI_TOPIC_ID_PREFIX + this.props.topic,\n      onCancel: this.handleBackNavigate\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"info-view-content\",\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, !this.state.isSelf ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button float-right\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('general');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"edit\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_edit\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Edit\"\n      }]\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"center\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      avatar: this.state.avatar,\n      readOnly: true,\n      uid: this.props.topic,\n      title: this.state.fullName\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_topic_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Name\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"large ellipsized\"\n    }, this.state.fullName, \"\\xA0\", this.state.channel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"podcasts\") : null)), this.state.private ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_private\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Private comment\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"large ellipsized\"\n    }, this.state.private)) : null, !this.state.isSelf ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_user_id\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"ID:\"\n      }]\n    })), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, this.state.address)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      style: {\n        marginLeft: 'auto'\n      }\n    }, \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        this.handleCopyToClipboard(e, this.state.address);\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"content_copy\")), \"\\xA0 \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleShowQRCode\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"qr_code\")), \"\\xA0 \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleShare\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"share\")), \"\\xA0\")), alias ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_alias\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Alias:\"\n      }]\n    })), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, alias)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      style: {\n        marginLeft: 'auto'\n      }\n    }, \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        this.handleCopyToClipboard(e, alias);\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"content_copy\")), \"\\xA0 \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\",\n      style: {\n        opacity: 0\n      }\n    }, \"qr_code\"), \"\\xA0\")) : null) : null, this.state.trustedBadges.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_badge_list_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      trustedBadges: this.state.trustedBadges\n    })) : null, this.state.groupTopic && topic.subcnt > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, this.state.channel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_subscriber_count\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Subscribers:\"\n      }]\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_member_count\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Members:\"\n      }]\n    })), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedNumber, {\n      value: topic.subcnt\n    })) : null, this.state.description ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, this.state.description)) : null), !this.state.isSelf ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_muting_topic\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Muted:\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      name: \"P\",\n      checked: this.state.muted,\n      onChange: this.handleMuted\n    }))) : null, this.state.archived ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_unarchive_topic\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Archived:\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      name: \"archived\",\n      checked: true,\n      onChange: this.handleUnarchive\n    })) : null, !this.state.isSelf ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onNavigate('security');\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"security\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_security\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Security\"\n      }]\n    })))) : null, this.state.groupTopic && this.state.sharer ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_group_members\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Group members:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: this.handleShowAddMembers\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"person_add\"), \" \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_add_members\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Add members\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"group_has_no_members\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"No members\"\n      }]\n    }, no_members => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n      tinode: this.props.tinode,\n      contacts: this.state.contactList,\n      myUserId: this.props.myUserId,\n      emptyListMessage: no_members,\n      topicSelected: this.state.selectedContact,\n      showOnline: false,\n      showUnread: false,\n      showMode: true,\n      noScroll: true,\n      onTopicSelected: this.handleMemberSelected,\n      showContextMenu: this.state.admin ? this.handleContextMenu : false\n    }))) : null));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(InfoView));\n\n/***/ }),\n\n/***/ \"./src/widgets/group-manager.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/group-manager.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ \"./src/widgets/chip-input.jsx\");\n/* harmony import */ var _contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-list.jsx */ \"./src/widgets/contact-list.jsx\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  no_contacts: {\n    id: \"no_contacts\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"You have no contacts :-(\"\n    }]\n  },\n  contacts_not_found_short: {\n    id: \"contacts_not_found_short\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"No contacts match '\"\n    }, {\n      \"type\": 1,\n      \"value\": \"query\"\n    }, {\n      \"type\": 0,\n      \"value\": \"'\"\n    }]\n  },\n  add_members_prompt: {\n    id: \"add_members_prompt\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"add members\"\n    }]\n  }\n});\nclass GroupManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      members: props.members,\n      index: GroupManager.indexMembers(props.members),\n      staticMembers: GroupManager.staticMembers(props.members, props.keepInitialMembers, props.requiredMember),\n      contactFilter: '',\n      noContactsMessage: props.intl.formatMessage(messages.no_contacts),\n      selectedContacts: GroupManager.selectedContacts(props.members)\n    };\n    this.handleContactSelected = this.handleContactSelected.bind(this);\n    this.handleMemberRemoved = this.handleMemberRemoved.bind(this);\n    this.handleContactFilter = this.handleContactFilter.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  static indexMembers(members) {\n    let index = {};\n    members.forEach(m => {\n      index[m.user] = {\n        delta: 0,\n        present: true\n      };\n    });\n    return index;\n  }\n  static staticMembers(members, keepInitial, requiredMember) {\n    let stat = [];\n    members.forEach(m => {\n      if (keepInitial || m.user == requiredMember) {\n        stat.push(m.user);\n      }\n    });\n    return stat;\n  }\n  static selectedContacts(members) {\n    let sel = [];\n    members.forEach(m => {\n      sel.push(m.user);\n    });\n    return sel;\n  }\n  handleContactSelected(userId, index) {\n    let status = this.state.index[userId];\n    if (status) {\n      if (status.present) {\n        return;\n      }\n      status.delta += 1;\n      status.present = true;\n    } else {\n      status = {\n        delta: 1,\n        present: true\n      };\n    }\n    let m = this.state.members.slice();\n    m.push(this.props.contacts[index]);\n    const sel = GroupManager.selectedContacts(m);\n    const i = this.state.index;\n    i[userId] = status;\n    this.setState({\n      members: m,\n      index: i,\n      selectedContacts: sel\n    });\n  }\n  handleMemberRemoved(userId, index) {\n    const status = this.state.index[userId];\n    if (!status || !status.present) {\n      return;\n    }\n    status.present = false;\n    status.delta -= 1;\n    let m = this.state.members.slice();\n    m.splice(index, 1);\n    const sel = GroupManager.selectedContacts(m);\n    const i = this.state.index;\n    i[userId] = status;\n    this.setState({\n      members: m,\n      index: i,\n      selectedContacts: sel\n    });\n  }\n  handleContactFilter(val) {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const msg = !val ? formatMessage(messages.no_contacts) : formatMessage(messages.contacts_not_found_short, {\n      query: val\n    });\n    this.setState({\n      contactFilter: val,\n      noContactsMessage: msg\n    });\n  }\n  static doContactFiltering(filter, values) {\n    if (filter) {\n      for (let i = 0; i < values.length; i++) {\n        if (values[i].indexOf(filter) >= 0) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n  handleSubmit() {\n    const members = [];\n    const added = [];\n    const removed = [];\n    const keys = Object.keys(this.state.index);\n    keys.forEach(k => {\n      if (this.state.index[k].present) {\n        members.push(k);\n      }\n      if (this.state.index[k].delta > 0) {\n        added.push(k);\n      } else if (this.state.index[k].delta < 0) {\n        removed.push(k);\n      }\n    });\n    this.props.onSubmit(members, added, removed);\n  }\n  handleCancel() {\n    this.props.onCancel();\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"group-manager\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_group_members\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Group Members\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      tinode: this.props.tinode,\n      chips: this.state.members,\n      staticMembers: this.state.staticMembers,\n      prompt: this.props.intl.formatMessage(messages.add_members_prompt),\n      filterFunc: this.handleContactFilter,\n      onChipRemoved: this.handleMemberRemoved\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_all_contacts\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"All Contacts\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      contacts: this.props.contacts,\n      myUserId: this.props.myUserId,\n      topicSelected: this.state.selectedContacts,\n      filter: this.state.contactFilter,\n      filterFunc: GroupManager.doContactFiltering,\n      emptyListMessage: this.state.noContactsMessage,\n      showOnline: false,\n      showUnread: false,\n      onTopicSelected: this.handleContactSelected\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"group-manager-buttons\",\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(GroupManager));\n\n/***/ }),\n\n/***/ \"./src/widgets/permissions-editor.jsx\":\n/*!********************************************!*\\\n  !*** ./src/widgets/permissions-editor.jsx ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkbox.jsx */ \"./src/widgets/checkbox.jsx\");\n/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ \"./src/widgets/contact.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  joiner: {\n    id: \"permission_join\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Join (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  reader: {\n    id: \"permission_read\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Read (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  writer: {\n    id: \"permission_write\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Write (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  preser: {\n    id: \"permission_pres\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Get notified (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  approver: {\n    id: \"permission_admin\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Approve (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  sharer: {\n    id: \"permission_share\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Share (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  deleter: {\n    id: \"permission_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  },\n  owner: {\n    id: \"permission_owner\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Owner (\"\n    }, {\n      \"type\": 1,\n      \"value\": \"val\"\n    }, {\n      \"type\": 0,\n      \"value\": \")\"\n    }]\n  }\n});\nclass PermissionsEditor extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      mode: (props.mode || '').replace('N', '')\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  handleChange(val) {\n    let mode = this.state.mode;\n    const idx = mode.indexOf(val);\n    if (idx == -1) {\n      mode += val;\n    } else {\n      mode = mode.replace(val, '');\n    }\n    this.setState({\n      mode: mode\n    });\n  }\n  handleSubmit() {\n    const mode = (this.state.mode || 'N').split('').sort().join('');\n    const before = (this.props.mode || 'N').split('').sort().join('');\n    if (mode !== before) {\n      this.props.onSubmit(mode);\n    } else {\n      this.props.onCancel();\n    }\n  }\n  handleCancel() {\n    this.props.onCancel();\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const all = 'JRWPASDO';\n    const names = {\n      'J': formatMessage(messages.joiner, {\n        val: 'J'\n      }),\n      'R': formatMessage(messages.reader, {\n        val: 'R'\n      }),\n      'W': formatMessage(messages.writer, {\n        val: 'W'\n      }),\n      'P': formatMessage(messages.preser, {\n        val: 'P'\n      }),\n      'A': formatMessage(messages.approver, {\n        val: 'A'\n      }),\n      'S': formatMessage(messages.sharer, {\n        val: 'S'\n      }),\n      'D': formatMessage(messages.deleter, {\n        val: 'D'\n      }),\n      'O': formatMessage(messages.owner, {\n        val: 'O'\n      })\n    };\n    let skip = this.props.skip || '';\n    let mode = this.state.mode;\n    let compare = (this.props.compare || '').replace('N', '');\n    let items = [];\n    for (let i = 0; i < all.length; i++) {\n      let c = all.charAt(i);\n      if (skip.indexOf(c) >= 0 && mode.indexOf(c) < 0) {\n        continue;\n      }\n      items.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tr\", {\n        key: c\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", null, names[c]), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", {\n        className: \"checkbox\"\n      }, skip.indexOf(c) < 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: mode.indexOf(c) >= 0,\n        onChange: this.handleChange\n      }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: mode.indexOf(c) >= 0\n      })), this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"td\", {\n        className: \"checkbox\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n        name: c,\n        checked: compare.indexOf(c) >= 0\n      })) : null));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, this.props.userTitle ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"contact-box small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      tinode: this.props.tinode,\n      item: this.props.item,\n      title: this.props.userTitle,\n      small: true,\n      avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.makeImageUrl)(this.props.userAvatar ? this.props.userAvatar : null)\n    })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"title_permissions\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Permissions\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"table\", {\n      className: \"permission-editor\"\n    }, this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"thead\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tr\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null, this.props.modeTitle), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"th\", null, this.props.compareTitle))) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tbody\", null, items)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"outline\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_cancel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Cancel\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: this.handleSubmit\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PermissionsEditor));\n\n/***/ }),\n\n/***/ \"./src/widgets/show-qrcode.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/show-qrcode.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ShowQRCode; }\n/* harmony export */ });\n/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcodejs */ \"qrcodejs\");\n/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(qrcodejs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ \"./src/config.js\");\n\n\n\n\nclass ShowQRCode extends (react__WEBPACK_IMPORTED_MODULE_1___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.qrCodeRef = react__WEBPACK_IMPORTED_MODULE_1___default().createRef();\n  }\n  componentDidMount() {\n    new (qrcodejs__WEBPACK_IMPORTED_MODULE_0___default())(this.qrCodeRef.current, {\n      text: this.props.uri,\n      width: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE,\n      height: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE\n    });\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"br\", null), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"qr-code\",\n      ref: this.qrCodeRef\n    }), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"tt\", null, this.props.uri)), react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(\"button\", {\n      className: \"outline\",\n      onClick: this.props.onCancel\n    }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {\n      id: \"button_ok\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"OK\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/topic-security.jsx\":\n/*!****************************************!*\\\n  !*** ./src/widgets/topic-security.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  clear_messages: {\n    id: \"action_clear_messages\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Clear Messages\"\n    }]\n  },\n  clear_messages_warning: {\n    id: \"clear_messages_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to clear all messages? It cannot be undone.\"\n    }]\n  },\n  delete_messages: {\n    id: \"action_delete_messages\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Clear Messages for All\"\n    }]\n  },\n  delete_messages_warning: {\n    id: \"delete_messages_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to delete all messages for everyone? It cannot be undone.\"\n    }]\n  },\n  topic_delete: {\n    id: \"topic_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete Conversation\"\n    }]\n  },\n  topic_delete_warning: {\n    id: \"topic_delete_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to delete this conversation? It cannot be undone.\"\n    }]\n  },\n  leave_chat: {\n    id: \"action_leave_chat\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Leave Conversation\"\n    }]\n  },\n  leave_chat_warning: {\n    id: \"leave_chat_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to leave this conversation?\"\n    }]\n  },\n  block_contact: {\n    id: \"action_block_contact\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Block Contact\"\n    }]\n  },\n  block_contact_warning: {\n    id: \"block_contact_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to block this contact?\"\n    }]\n  },\n  report_chat: {\n    id: \"action_report_chat\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Report Conversation\"\n    }]\n  },\n  report_chat_warning: {\n    id: \"report_chat_warning\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Are you sure you want to block and report this conversation?\"\n    }]\n  },\n  other_user: {\n    id: \"label_other_user\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Other\"\n    }]\n  }\n});\nclass TopicSecurity extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleDeleteTopic = this.handleDeleteTopic.bind(this);\n    this.handleDeleteMessages = this.handleDeleteMessages.bind(this);\n    this.handleLeave = this.handleLeave.bind(this);\n    this.handleBlock = this.handleBlock.bind(this);\n    this.handleReport = this.handleReport.bind(this);\n  }\n  handleDeleteTopic(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(messages.topic_delete), formatMessage(messages.topic_delete_warning), _ => this.props.onDeleteTopic(this.props.topic), null, true, null);\n  }\n  handleDeleteMessages(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages), formatMessage(this.props.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), _ => this.props.onDeleteMessages(this.props.topic), null, true, null);\n  }\n  handleLeave(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(messages.leave_chat), formatMessage(messages.leave_chat_warning), _ => this.props.onLeaveTopic(this.props.topic), null, true, null);\n  }\n  handleBlock(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(messages.block_contact), formatMessage(messages.block_contact_warning), _ => this.props.onBlockTopic(this.props.topic), null, true, null);\n  }\n  handleReport(e) {\n    e.preventDefault();\n    const {\n      formatMessage\n    } = this.props.intl;\n    this.props.onShowAlert(formatMessage(messages.report_chat), formatMessage(messages.report_chat_warning), _ => {\n      this.props.onReportTopic(this.props.topic);\n    }, null, true, null);\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, !this.props.channel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"flat-button\",\n      onClick: this.handleDeleteMessages\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"delete_outline\"), \" \\xA0\", formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages)) : null, this.props.owner ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: this.handleDeleteTopic\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"delete\"), \" \\xA0\", formatMessage(messages.topic_delete)) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: this.handleLeave\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"exit_to_app\"), \" \\xA0\", formatMessage(messages.leave_chat)), !this.props.groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: this.handleBlock\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"block\"), \" \\xA0\", formatMessage(messages.block_contact)) : null, !this.props.owner ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      className: \"danger flat-button\",\n      onClick: this.handleReport\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"report\"), \" \\xA0\", formatMessage(messages.report_chat)) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, this.props.groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_your_permissions\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Your permissions:\"\n      }]\n    })), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"clickable\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onLaunchPermissionsEditor('want');\n      }\n    }, this.props.access)), !this.props.channel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_default_access_mode\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Default access mode:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"Auth: \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: this.props.owner ? 'clickable' : null,\n      onClick: e => {\n        e.preventDefault();\n        if (this.props.owner) {\n          this.props.onLaunchPermissionsEditor('auth');\n        }\n      }\n    }, this.props.auth)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"Anon: \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: this.props.owner ? 'clickable' : null,\n      onClick: e => {\n        e.preventDefault();\n        if (this.props.owner) {\n          this.props.onLaunchPermissionsEditor('anon');\n        }\n      }\n    }, this.props.anon)))) : null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_permissions\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Permissions:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_you\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"You:\"\n      }]\n    }), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"clickable\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onLaunchPermissionsEditor('want');\n      }\n    }, this.props.access)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, this.props.fullName ? this.props.fullName : formatMessage(messages.other_user), \": \\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", {\n      className: \"clickable\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onLaunchPermissionsEditor('given');\n      }\n    }, this.props.modeGiven2))))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TopicSecurity));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_info-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_messages-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_messages-view_jsx\"],{\n\n/***/ \"./src/views/logo-view.jsx\":\n/*!*********************************!*\\\n  !*** ./src/views/logo-view.jsx ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LogoView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\nclass LogoView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const version = _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME + ' (' + tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.getLibrary() + ')';\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"dummy-view\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"https://github.com/tinode/chat/\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      id: \"logo\",\n      alt: \"logo\",\n      src: \"img/logo.svg\"\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", null, \"Tinode Web\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_client\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Client:\"\n      }]\n    }), \" \", version), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_server\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Server:\"\n      }]\n    }), \" \", this.props.serverVersion, \" (\", this.props.serverAddress, \")\")));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/views/messages-view.jsx\":\n/*!*************************************!*\\\n  !*** ./src/views/messages-view.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/chat-message.jsx */ \"./src/widgets/chat-message.jsx\");\n/* harmony import */ var _widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/contact-badges.jsx */ \"./src/widgets/contact-badges.jsx\");\n/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ \"./src/widgets/error-panel.jsx\");\n/* harmony import */ var _widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/group-subs.jsx */ \"./src/widgets/group-subs.jsx\");\n/* harmony import */ var _widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/invitation.jsx */ \"./src/widgets/invitation.jsx\");\n/* harmony import */ var _widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ \"./src/widgets/load-spinner.jsx\");\n/* harmony import */ var _logo_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./logo-view.jsx */ \"./src/views/logo-view.jsx\");\n/* harmony import */ var _widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../widgets/meta-message.jsx */ \"./src/widgets/meta-message.jsx\");\n/* harmony import */ var _widgets_pinned_messages_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../widgets/pinned-messages.jsx */ \"./src/widgets/pinned-messages.jsx\");\n/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../widgets/send-message.jsx */ \"./src/widgets/send-message.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../constants.js */ \"./src/constants.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\nconst CallPanel = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_widgets_call-panel_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/call-panel.jsx */ \"./src/widgets/call-panel.jsx\")));\n\n\nconst DocPreview = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_widgets_doc-preview_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/doc-preview.jsx */ \"./src/widgets/doc-preview.jsx\")));\n\n\nconst ImagePreview = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_widgets_image-preview_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/image-preview.jsx */ \"./src/widgets/image-preview.jsx\")));\n\n\n\n\n\n\n\nconst TheCardPreview = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js\"), __webpack_require__.e(\"src_widgets_the-card-preview_jsx\")]).then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/the-card-preview.jsx */ \"./src/widgets/the-card-preview.jsx\")));\nconst VideoPreview = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ \"src_widgets_video-preview_jsx\").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/video-preview.jsx */ \"./src/widgets/video-preview.jsx\")));\n\n\n\n\n\nconst NOTIFICATION_EXEC_INTERVAL = 300;\nconst SHOW_GO_TO_LAST_DIST = 100;\nconst FETCH_PAGE_TRIGGER = 40;\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  online_now: {\n    id: \"online_now\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"online now\"\n    }]\n  },\n  last_seen: {\n    id: \"last_seen_timestamp\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Last seen: \"\n    }, {\n      \"type\": 1,\n      \"value\": \"timestamp\"\n    }]\n  },\n  not_found: {\n    id: \"title_not_found\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Not found\"\n    }]\n  },\n  channel: {\n    id: \"channel\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"channel\"\n    }]\n  },\n  file_attachment_too_large: {\n    id: \"file_attachment_too_large\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"The file size \"\n    }, {\n      \"type\": 1,\n      \"value\": \"size\"\n    }, {\n      \"type\": 0,\n      \"value\": \" exceeds the \"\n    }, {\n      \"type\": 1,\n      \"value\": \"limit\"\n    }, {\n      \"type\": 0,\n      \"value\": \" limit.\"\n    }]\n  },\n  invalid_content: {\n    id: \"invalid_content\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"invalid content\"\n    }]\n  },\n  editing_message: {\n    id: \"editing_message\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Editing\"\n    }]\n  },\n  drag_file: {\n    id: \"drag_file\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Drag file here\"\n    }]\n  },\n  self_topic_name: {\n    id: \"self_topic_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Saved messages\"\n    }]\n  },\n  subscriber_count: {\n    id: \"subscriber_count\",\n    defaultMessage: [{\n      \"type\": 6,\n      \"value\": \"count\",\n      \"options\": {\n        \"one\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscriber\"\n          }]\n        },\n        \"two\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscribers\"\n          }]\n        },\n        \"three\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscribers\"\n          }]\n        },\n        \"few\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscribers\"\n          }]\n        },\n        \"many\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscribers\"\n          }]\n        },\n        \"other\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" subscribers\"\n          }]\n        }\n      },\n      \"offset\": 0,\n      \"pluralType\": \"cardinal\"\n    }]\n  },\n  member_count: {\n    id: \"member_count\",\n    defaultMessage: [{\n      \"type\": 6,\n      \"value\": \"count\",\n      \"options\": {\n        \"one\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" member\"\n          }]\n        },\n        \"two\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" members\"\n          }]\n        },\n        \"three\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" members\"\n          }]\n        },\n        \"few\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" members\"\n          }]\n        },\n        \"many\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" members\"\n          }]\n        },\n        \"other\": {\n          \"value\": [{\n            \"type\": 2,\n            \"value\": \"count\",\n            \"style\": null\n          }, {\n            \"type\": 0,\n            \"value\": \" members\"\n          }]\n        }\n      },\n      \"offset\": 0,\n      \"pluralType\": \"cardinal\"\n    }]\n  },\n  cannot_parse_vcard: {\n    id: \"cannot_parse_vcard\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Cannot parse vCard file.\"\n    }]\n  }\n});\nfunction isUnconfirmed(acs) {\n  if (acs) {\n    const ex = acs.getExcessive() || '';\n    return acs.isJoiner('given') && (ex.includes('R') || ex.includes('W'));\n  }\n  return false;\n}\nfunction isPeerRestricted(acs) {\n  if (acs) {\n    const ms = acs.getMissing() || '';\n    return acs.isJoiner('want') && (ms.includes('R') || ms.includes('W'));\n  }\n  return false;\n}\nfunction shouldPresentCallPanel(callState) {\n  return callState == _constants_js__WEBPACK_IMPORTED_MODULE_15__.CALL_STATE_OUTGOING_INITATED || callState == _constants_js__WEBPACK_IMPORTED_MODULE_15__.CALL_STATE_IN_PROGRESS;\n}\nclass MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = MessagesView.getDerivedStateFromProps(props, {});\n    this.componentSetup = this.componentSetup.bind(this);\n    this.leave = this.leave.bind(this);\n    this.sendMessage = this.sendMessage.bind(this);\n    this.retrySend = this.retrySend.bind(this);\n    this.sendImageAttachment = this.sendImageAttachment.bind(this);\n    this.sendVideoAttachment = this.sendVideoAttachment.bind(this);\n    this.sendFileAttachment = this.sendFileAttachment.bind(this);\n    this.sendAudioAttachment = this.sendAudioAttachment.bind(this);\n    this.sendTheCardAttachment = this.sendTheCardAttachment.bind(this);\n    this.sendKeyPress = this.sendKeyPress.bind(this);\n    this.subscribe = this.subscribe.bind(this);\n    this.handleScrollReference = this.handleScrollReference.bind(this);\n    this.mountDnDEvents = this.mountDnDEvents.bind(this);\n    this.handleScrollEvent = this.handleScrollEvent.bind(this);\n    this.handleDescChange = this.handleDescChange.bind(this);\n    this.handleSubsUpdated = this.handleSubsUpdated.bind(this);\n    this.handleMessageUpdate = this.handleMessageUpdate.bind(this);\n    this.handleAuxUpdate = this.handleAuxUpdate.bind(this);\n    this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);\n    this.handleInfoReceipt = this.handleInfoReceipt.bind(this);\n    this.handleExpandMedia = this.handleExpandMedia.bind(this);\n    this.handleClosePreview = this.handleClosePreview.bind(this);\n    this.handleCallPanelToggle = this.handleCallPanelToggle.bind(this);\n    this.handleFormResponse = this.handleFormResponse.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n    this.handleShowMessageContextMenu = this.handleShowMessageContextMenu.bind(this);\n    this.handleNewChatAcceptance = this.handleNewChatAcceptance.bind(this);\n    this.handleEnablePeer = this.handleEnablePeer.bind(this);\n    this.handleAttachFile = this.handleAttachFile.bind(this);\n    this.handleAttachImageOrVideo = this.handleAttachImageOrVideo.bind(this);\n    this.handleCancelUpload = this.handleCancelUpload.bind(this);\n    this.postReadNotification = this.postReadNotification.bind(this);\n    this.clearNotificationQueue = this.clearNotificationQueue.bind(this);\n    this.goToLatestMessage = this.goToLatestMessage.bind(this);\n    this.handleFileDrop = this.handleFileDrop.bind(this);\n    this.handlePickReply = this.handlePickReply.bind(this);\n    this.handleEditMessage = this.handleEditMessage.bind(this);\n    this.handleCancelReply = this.handleCancelReply.bind(this);\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n    this.handleUnpinMessage = this.handleUnpinMessage.bind(this);\n    this.handleCallHangup = this.handleCallHangup.bind(this);\n    this.isDragEnabled = this.isDragEnabled.bind(this);\n    this.handleDragStart = this.handleDragStart.bind(this);\n    this.handleDragIn = this.handleDragIn.bind(this);\n    this.handleDragOut = this.handleDragOut.bind(this);\n    this.handleDrag = this.handleDrag.bind(this);\n    this.handleDrop = this.handleDrop.bind(this);\n    this.chatMessageRefs = [];\n    this.getOrCreateMessageRef = this.getOrCreateMessageRef.bind(this);\n    this.getVisibleMessageRange = this.getVisibleMessageRange.bind(this);\n    this.dragCounter = 0;\n    this.dndRef = null;\n    this.readNotificationQueue = [];\n    this.readNotificationTimer = null;\n    this.keyPressTimer = null;\n  }\n  getOrCreateMessageRef(seqId) {\n    if (this.chatMessageRefs[seqId]) {\n      return this.chatMessageRefs[seqId];\n    }\n    const ref = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.chatMessageRefs[seqId] = ref;\n    return ref;\n  }\n  getVisibleMessageRange(holderRect) {\n    let min = Number.MAX_SAFE_INTEGER,\n      max = -1;\n    let visibilityStatus = false;\n    this.chatMessageRefs.every((ref, seq) => {\n      if (ref.current) {\n        const {\n          top,\n          bottom,\n          height\n        } = ref.current.getBoundingClientRect();\n        const visible = top <= holderRect.top ? holderRect.top - top <= height : bottom - holderRect.bottom <= height;\n        if (visible) {\n          visibilityStatus = true;\n          min = Math.min(min, seq);\n          max = Math.max(max, seq);\n        } else if (visibilityStatus) {\n          return false;\n        }\n      }\n      return true;\n    });\n    return max >= min ? {\n      min: min,\n      max: max\n    } : {\n      min: 0,\n      max: 0\n    };\n  }\n  componentDidMount() {\n    if (this.messagesScroller) {\n      this.messagesScroller.addEventListener('scroll', this.handleScrollEvent);\n    }\n    this.mountDnDEvents(this.dndRef);\n    this.componentSetup({}, {});\n  }\n  componentWillUnmount() {\n    if (this.messagesScroller) {\n      this.messagesScroller.removeEventListener('scroll', this.handleScrollEvent);\n    }\n    this.clearNotificationQueue();\n    if (this.dndRef) {\n      this.dndRef.removeEventListener('dragstart', this.handleDragStart);\n      this.dndRef.removeEventListener('dragenter', this.handleDragIn);\n      this.dndRef.removeEventListener('dragleave', this.handleDragOut);\n      this.dndRef.removeEventListener('dragover', this.handleDrag);\n      this.dndRef.removeEventListener('drop', this.handleDrop);\n    }\n  }\n  componentDidUpdate(prevProps, prevState) {\n    if (this.messagesScroller && (prevState.topic != this.state.topic || prevState.maxSeqId != this.state.maxSeqId || prevState.minSeqId != this.state.minSeqId)) {\n      if (this.state.scrollPosition < SHOW_GO_TO_LAST_DIST) {\n        this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition - this.messagesScroller.offsetHeight;\n      }\n    }\n    if (!this.props.applicationVisible) {\n      this.clearNotificationQueue();\n    } else {\n      this.postReadNotification(0);\n    }\n    this.componentSetup(prevProps, prevState);\n  }\n  componentSetup(prevProps, prevState) {\n    const topic = this.props.tinode ? this.props.tinode.getTopic(this.state.topic) : undefined;\n    if (this.state.topic != prevState.topic) {\n      if (prevState.topic && !tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNewGroupTopicName(prevState.topic)) {\n        this.leave(prevState.topic);\n        if (prevState.rtcPanel) {\n          this.handleCallHangup(prevState.topic, prevProps.callSeq);\n        }\n      }\n      if (topic) {\n        topic.onData = this.handleMessageUpdate;\n        topic.onAllMessagesReceived = this.handleAllMessagesReceived;\n        topic.onInfo = this.handleInfoReceipt;\n        topic.onMetaDesc = this.handleDescChange;\n        topic.onSubsUpdated = this.handleSubsUpdated;\n        topic.onPres = this.handleSubsUpdated;\n        topic.onAuxUpdated = this.handleAuxUpdate;\n      }\n    }\n    if (topic) {\n      if (this.state.topic != prevState.topic || this.props.myUserId && !prevProps.myUserId) {\n        const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;\n        if (topic.isP2PType() && newTopic && !_config_js__WEBPACK_IMPORTED_MODULE_14__.IMMEDIATE_P2P_SUBSCRIPTION) {\n          topic.getMeta(topic.startMetaQuery().withDesc().build());\n        } else if (this.props.myUserId) {\n          this.subscribe(topic);\n        }\n      } else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) {\n        topic.getMeta(topic.startMetaQuery().withLaterData().build());\n      } else if (!topic.isSubscribed() && this.props.ready && !prevProps.ready) {\n        this.subscribe(topic);\n      }\n    }\n  }\n  static getDerivedStateFromProps(nextProps, prevState) {\n    let nextState = {};\n    if (!nextProps.topic) {\n      nextState = {\n        minSeqId: -1,\n        maxSeqId: -1,\n        latestClearId: -1,\n        onlineSubs: [],\n        topic: null,\n        title: '',\n        avatar: null,\n        isVerified: false,\n        isStaff: false,\n        isDangerous: false,\n        deleted: false,\n        docPreview: null,\n        imagePreview: null,\n        imagePostview: null,\n        videoPreview: null,\n        videoPostview: null,\n        rtcPanel: null,\n        minimizedCallPanel: false,\n        typingIndicator: false,\n        scrollPosition: 0,\n        fetchingMessages: false,\n        peerMessagingDisabled: false,\n        channel: false,\n        reply: null,\n        contentToEdit: null,\n        showGoToLastButton: false,\n        dragging: false,\n        pins: [],\n        pinsLoaded: false,\n        selectedPin: 0,\n        subsVersion: 0\n      };\n    } else if (nextProps.topic != prevState.topic) {\n      const topic = nextProps.tinode.getTopic(nextProps.topic);\n      nextState = {\n        topic: nextProps.topic,\n        deleted: topic._deleted,\n        docPreview: null,\n        imagePreview: null,\n        imagePostview: null,\n        videoPreview: null,\n        videoPostview: null,\n        rtcPanel: null,\n        minimizedCallPanel: false,\n        typingIndicator: false,\n        scrollPosition: 0,\n        fetchingMessages: false,\n        showGoToLastButton: false,\n        contentToEdit: null,\n        dragging: false,\n        selectedPin: 0\n      };\n      if (nextProps.forwardMessage) {\n        if (nextProps.forwardMessage.content) {\n          const content = nextProps.forwardMessage.content;\n          const size = content?.length || content?.size || 0;\n          nextState.docPreview = {\n            object: content,\n            type: nextProps.forwardMessage.type,\n            size: size\n          };\n        } else {\n          nextState.reply = {\n            content: nextProps.forwardMessage.preview,\n            seq: null\n          };\n        }\n      } else {\n        nextState.reply = null;\n      }\n      if (topic) {\n        const subs = [];\n        if (nextProps.connected) {\n          topic.subscribers(sub => {\n            if (sub.online && sub.user != nextProps.myUserId) {\n              subs.push(sub);\n            }\n          });\n        }\n        Object.assign(nextState, {\n          onlineSubs: subs\n        });\n        if (topic.isSelfType()) {\n          Object.assign(nextState, {\n            title: nextProps.intl.formatMessage(messages.self_topic_name),\n            avatar: true\n          });\n        } else if (topic.public) {\n          Object.assign(nextState, {\n            title: topic.public.fn,\n            avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.makeImageUrl)(topic.public.photo)\n          });\n        } else {\n          Object.assign(nextState, {\n            title: '',\n            avatar: null\n          });\n        }\n        const peer = topic.p2pPeerDesc();\n        if (peer) {\n          Object.assign(nextState, {\n            peerMessagingDisabled: isPeerRestricted(peer.acs)\n          });\n        } else if (prevState.peerMessagingDisabled) {\n          Object.assign(nextState, {\n            peerMessagingDisabled: false\n          });\n        }\n        Object.assign(nextState, {\n          minSeqId: topic.minMsgSeq(),\n          maxSeqId: topic.maxMsgSeq(),\n          latestClearId: topic.maxClearId(),\n          channel: topic.isChannelType(),\n          pins: (topic.aux('pins') || []).slice(),\n          pinsLoaded: false\n        });\n        if (nextProps.callTopic == topic.name && shouldPresentCallPanel(nextProps.callState)) {\n          nextState.rtcPanel = nextProps.callTopic;\n        }\n      } else {\n        Object.assign(nextState, {\n          minSeqId: -1,\n          maxSeqId: -1,\n          latestClearId: -1,\n          onlineSubs: [],\n          title: '',\n          avatar: null,\n          peerMessagingDisabled: false,\n          channel: false,\n          pins: [],\n          pinsLoaded: false\n        });\n      }\n    } else {\n      if (nextProps.callTopic == prevState.topic && !prevState.rtcPanel && shouldPresentCallPanel(nextProps.callState)) {\n        nextState.rtcPanel = nextProps.callTopic;\n      }\n    }\n    if (nextProps.acs) {\n      if (nextProps.acs.isWriter() != prevState.isWriter) {\n        nextState.isWriter = !prevState.isWriter;\n      }\n      if (nextProps.acs.isReader() != prevState.isReader) {\n        nextState.isReader = !prevState.isReader;\n      }\n      if (nextProps.acs.isAdmin() != prevState.isAdmin) {\n        nextState.isAdmin = !prevState.isAdmin;\n      }\n      if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {\n        nextState.readingBlocked = !prevState.readingBlocked;\n      }\n      if (nextProps.acs.isSharer() != prevState.isSharer) {\n        nextState.isSharer = !prevState.isSharer;\n      }\n    } else {\n      if (prevState.isWriter) {\n        nextState.isWriter = false;\n      }\n      if (prevState.isReader) {\n        nextState.isReader = false;\n      }\n      if (prevState.isAdmin) {\n        nextState.isAdmin = false;\n      }\n      if (!prevState.readingBlocked) {\n        prevState.readingBlocked = true;\n      }\n      if (prevState.isSharer) {\n        nextState.isSharer = false;\n      }\n    }\n    if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {\n      nextState.unconfirmed = !prevState.unconformed;\n    }\n    if (!nextProps.connected && prevState.onlineSubs && prevState.onlineSubs.length > 0) {\n      nextState.onlineSubs = [];\n    }\n    return nextState;\n  }\n  subscribe(topic) {\n    if (topic.isSubscribed() || !this.props.ready) {\n      return;\n    }\n    const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;\n    let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub().withAux();\n    if (this.state.isReader || newTopic) {\n      getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_14__.MESSAGES_PAGE);\n      if (this.state.isReader) {\n        getQuery = getQuery.withLaterDel();\n      }\n      this.setState({\n        fetchingMessages: true\n      });\n    }\n    const setQuery = newTopic ? this.props.newTopicParams : undefined;\n    topic.subscribe(getQuery.build(), setQuery).then(ctrl => {\n      if (ctrl.code == 303) {\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"].setUrlTopic('', ctrl.params.topic));\n        return;\n      }\n      if (this.state.topic != ctrl.topic) {\n        this.setState({\n          topic: ctrl.topic\n        });\n      }\n      if (this.state.deleted) {\n        this.setState({\n          deleted: false\n        });\n      }\n      this.props.onNewTopicCreated(this.props.topic, ctrl.topic);\n      let discard = [];\n      topic.queuedMessages(pub => {\n        if (pub._sending) {\n          return;\n        }\n        if (pub._fatal || pub.head && pub.head.webrtc) {\n          discard.push(pub.seq);\n          return;\n        }\n        if (topic.isSubscribed()) {\n          this.retrySend(pub);\n        }\n      });\n      if (discard.length > 0) {\n        topic.delMessagesList(discard, true);\n      }\n    }).catch(err => {\n      console.error(\"Failed subscription to\", this.state.topic, err);\n      this.props.onError(err.message, 'err');\n      const blankState = MessagesView.getDerivedStateFromProps({}, {});\n      blankState.title = this.props.intl.formatMessage(messages.not_found);\n      this.setState(blankState);\n    });\n  }\n  leave(oldTopicName) {\n    if (!oldTopicName || !this.props.tinode.isTopicCached(oldTopicName)) {\n      return;\n    }\n    const oldTopic = this.props.tinode.getTopic(oldTopicName);\n    if (oldTopic && oldTopic.isSubscribed()) {\n      oldTopic.leave(false).catch(_ => {}).finally(_ => {\n        this.setState({\n          fetchingMessages: false\n        });\n        oldTopic.onData = undefined;\n        oldTopic.onAllMessagesReceived = undefined;\n        oldTopic.onInfo = undefined;\n        oldTopic.onMetaDesc = undefined;\n        oldTopic.onSubsUpdated = undefined;\n        oldTopic.onPres = undefined;\n        oldTopic.onAuxUpdated = undefined;\n      });\n    }\n  }\n  handleScrollReference(node) {\n    if (node) {\n      node.addEventListener('scroll', this.handleScrollEvent);\n      this.messagesScroller = node;\n      this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition - this.messagesScroller.offsetHeight;\n    }\n  }\n  handleScrollEvent(event) {\n    const pos = event.target.scrollHeight - event.target.scrollTop - event.target.offsetHeight;\n    this.setState({\n      scrollPosition: pos,\n      showGoToLastButton: pos > SHOW_GO_TO_LAST_DIST && pos < this.state.scrollPosition\n    });\n    if (this.state.fetchingMessages || this.processingScrollEvent) {\n      return;\n    }\n    if (event.target.scrollTop <= FETCH_PAGE_TRIGGER) {\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      if (topic && topic.isSubscribed()) {\n        this.processingScrollEvent = true;\n        const {\n          min,\n          max\n        } = this.getVisibleMessageRange(event.target.getBoundingClientRect());\n        const gaps = topic.msgHasMoreMessages(min, max, false);\n        if (gaps.length > 0) {\n          this.setState({\n            fetchingMessages: true\n          }, _ => {\n            topic.getMessagesPage(_config_js__WEBPACK_IMPORTED_MODULE_14__.MESSAGES_PAGE, gaps, min, max).catch(err => this.props.onError(err.message, 'err')).finally(_ => this.setState({\n              fetchingMessages: false\n            }));\n          });\n        }\n      }\n    }\n    this.processingScrollEvent = false;\n  }\n  mountDnDEvents(dnd) {\n    if (dnd) {\n      dnd.addEventListener('dragstart', this.handleDragStart);\n      dnd.addEventListener('dragenter', this.handleDragIn);\n      dnd.addEventListener('dragleave', this.handleDragOut);\n      dnd.addEventListener('dragover', this.handleDrag);\n      dnd.addEventListener('drop', this.handleDrop);\n      this.dndRef = dnd;\n    }\n  }\n  goToLatestMessage() {\n    this.setState({\n      scrollPosition: 0\n    });\n    if (this.messagesScroller) {\n      this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.messagesScroller.offsetHeight;\n    }\n  }\n  handleDescChange(desc) {\n    if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.topic)) {\n      this.setState({\n        title: this.props.intl.formatMessage(messages.self_topic_name),\n        avatar: true\n      });\n    } else if (desc.public) {\n      this.setState({\n        title: desc.public.fn,\n        avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.makeImageUrl)(desc.public.photo)\n      });\n    } else {\n      this.setState({\n        title: '',\n        avatar: null\n      });\n    }\n    if (desc.acs) {\n      this.setState({\n        isWriter: desc.acs.isWriter(),\n        isReader: desc.acs.isReader(),\n        isAdmin: desc.acs.isAdmin(),\n        readingBlocked: !desc.acs.isReader('given'),\n        unconfirmed: isUnconfirmed(desc.acs)\n      });\n    }\n  }\n  postReadNotification(seq) {\n    if (!this.props.applicationVisible || !this.state.topic) {\n      return;\n    }\n    if (!this.readNotificationTimer) {\n      this.readNotificationTimer = setInterval(_ => {\n        if (this.readNotificationQueue.length == 0) {\n          clearInterval(this.readNotificationTimer);\n          this.readNotificationTimer = null;\n          return;\n        }\n        let seq = -1;\n        while (this.readNotificationQueue.length > 0) {\n          const n = this.readNotificationQueue[0];\n          if (n.topicName != this.state.topic) {\n            this.readNotificationQueue.shift();\n            continue;\n          }\n          const now = new Date();\n          if (n.sendAt <= now) {\n            this.readNotificationQueue.shift();\n            if (n.seq == 0 || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isServerAssignedSeq(n.seq)) {\n              seq = Math.max(seq, n.seq);\n            }\n          } else {\n            break;\n          }\n        }\n        if (seq >= 0) {\n          const topic = this.props.tinode.getTopic(this.state.topic);\n          if (topic) {\n            try {\n              topic.noteRead(seq);\n            } catch (err) {\n              console.error(\"Failed to send read notification\", err);\n            }\n          }\n        }\n      }, NOTIFICATION_EXEC_INTERVAL);\n    }\n    const now = new Date();\n    this.readNotificationQueue.push({\n      topicName: this.state.topic,\n      seq: seq,\n      sendAt: now.setMilliseconds(now.getMilliseconds() + _config_js__WEBPACK_IMPORTED_MODULE_14__.READ_DELAY)\n    });\n  }\n  clearNotificationQueue() {\n    this.readNotificationQueue = [];\n    if (this.readNotificationTimer) {\n      clearInterval(this.readNotificationTimer);\n      this.readNotificationTimer = null;\n    }\n  }\n  handleSubsUpdated() {\n    if (this.state.topic) {\n      const subs = [];\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      topic.subscribers(sub => {\n        if (sub.online && sub.user != this.props.myUserId) {\n          subs.push(sub);\n        }\n      });\n      const newState = {\n        onlineSubs: subs,\n        subsVersion: this.state.subsVersion + 1\n      };\n      const peer = topic.p2pPeerDesc();\n      if (peer) {\n        Object.assign(newState, {\n          peerMessagingDisabled: isPeerRestricted(peer.acs)\n        });\n      } else if (this.state.peerMessagingDisabled) {\n        Object.assign(newState, {\n          peerMessagingDisabled: false\n        });\n      }\n      this.setState(newState);\n    }\n  }\n  handleMessageUpdate(msg) {\n    if (!this.state.topic) {\n      return;\n    }\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    if (!msg) {\n      this.setState({\n        latestClearId: topic.maxClearId()\n      });\n      return;\n    }\n    clearTimeout(this.keyPressTimer);\n    this.setState({\n      maxSeqId: topic.maxMsgSeq(),\n      minSeqId: topic.minMsgSeq(),\n      typingIndicator: false\n    }, _ => {\n      if (topic.isNewMessage(msg.seq)) {\n        if (this.state.scrollPosition > SHOW_GO_TO_LAST_DIST) {\n          this.setState({\n            showGoToLastButton: true\n          });\n        } else {\n          this.goToLatestMessage();\n        }\n      } else {\n        if (this.messagesScroller) {\n          this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition - this.messagesScroller.offsetHeight;\n        }\n      }\n    });\n    const status = topic.msgStatus(msg, true);\n    if (status >= tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {\n      this.postReadNotification(msg.seq);\n    }\n  }\n  handleAllMessagesReceived(count) {\n    this.setState({\n      fetchingMessages: false\n    });\n    if (!count) {\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      if (topic) {\n        this.postReadNotification(topic.seq);\n      }\n      return;\n    }\n    if (!this.state.pinsLoaded) {\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      this.setState({\n        pinsLoaded: true\n      }, _ => {\n        topic.getPinnedMessages();\n      });\n    } else {\n      this.setState({\n        pinsLoaded: false\n      });\n    }\n  }\n  handleAuxUpdate(aux) {\n    const pins = (aux['pins'] || []).slice();\n    let selectedPin = this.state.selectedPin;\n    if (pins.length > this.state.pins.length) {\n      selectedPin = 0;\n    } else if (selectedPin >= pins.length) {\n      selectedPin = Math.max(0, pins.length - 1);\n    }\n    this.setState({\n      pins: pins,\n      selectedPin: selectedPin\n    });\n  }\n  handleInfoReceipt(info) {\n    switch (info.what) {\n      case 'kp':\n        {\n          clearTimeout(this.keyPressTimer);\n          this.keyPressTimer = setTimeout(_ => this.setState({\n            typingIndicator: false\n          }), _config_js__WEBPACK_IMPORTED_MODULE_14__.KEYPRESS_DELAY + 1000);\n          if (!this.state.typingIndicator) {\n            this.setState({\n              typingIndicator: true\n            });\n          }\n          break;\n        }\n      case 'read':\n      case 'recv':\n        this.forceUpdate();\n        break;\n      default:\n        console.info(\"Other change in topic: \", info.what);\n    }\n  }\n  handleExpandMedia(content) {\n    if (!content) {\n      return;\n    }\n    if (content.video) {\n      this.setState({\n        videoPostview: content\n      });\n    } else {\n      this.setState({\n        imagePostview: content\n      });\n    }\n  }\n  handleClosePreview() {\n    if (this.state.imagePreview && this.state.imagePreview.url) {\n      URL.revokeObjectURL(this.state.imagePreview.url);\n    }\n    if (this.state.videoPreview && this.state.videoPreview.url) {\n      URL.revokeObjectURL(this.state.videoPreview.url);\n    }\n    this.setState({\n      imagePostview: null,\n      imagePreview: null,\n      docPreview: null,\n      videoPreview: null,\n      videoPostview: null\n    });\n    this.props.onCancelForwardMessage();\n  }\n  handleFormResponse(action, text, data) {\n    if (action == 'pub') {\n      this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachJSON(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(text), data));\n    } else if (action == 'url') {\n      const url = new URL(data.ref);\n      const params = url.searchParams;\n      for (let key in data.resp) {\n        if (data.resp.hasOwnProperty(key)) {\n          params.set(key, data.resp[key]);\n        }\n      }\n      ['name', 'seq'].forEach(key => {\n        if (data[key]) {\n          params.set(key, data[key]);\n        }\n      });\n      params.set('uid', this.props.myUserId);\n      params.set('topic', this.state.topic);\n      url.search = params;\n      window.open(url, '_blank');\n    } else {\n      console.info(\"Unknown action in form\", action);\n    }\n  }\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.props.showContextMenu({\n      topicName: this.state.topic,\n      y: e.pageY,\n      x: e.pageX\n    });\n  }\n  handleShowMessageContextMenu(params, messageSpecificMenuItems) {\n    if (params.userFrom == 'chan') {\n      params.userFrom = this.state.topic;\n      params.userName = this.state.title;\n    }\n    params.topicName = this.state.topic;\n    const menuItems = messageSpecificMenuItems || [];\n    const topic = this.props.tinode.getTopic(params.topicName);\n    if (topic) {\n      if (topic.isSelfType()) {\n        menuItems.push('message_delete_generic');\n      } else {\n        if (!topic.isChannelType()) {\n          menuItems.push('message_delete');\n        }\n        const acs = topic.getAccessMode();\n        if (acs && acs.isDeleter()) {\n          let canDelete = acs.isOwner();\n          if (!canDelete) {\n            const maxDelAge = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MSG_DELETE_AGE, 0) | 0;\n            canDelete = maxDelAge == 0 || (maxDelAge > 0 && params.timestamp ? params.timestamp.getTime() > new Date().getTime() - maxDelAge * 1000 : false);\n          }\n          if (canDelete) {\n            menuItems.push('message_delete_hard');\n          }\n        }\n      }\n    }\n    this.props.showContextMenu(params, menuItems);\n  }\n  handleNewChatAcceptance(action) {\n    this.props.onNewChat(this.state.topic, action);\n  }\n  handleEnablePeer(e) {\n    e.preventDefault();\n    this.props.onChangePermissions(this.state.topic, _config_js__WEBPACK_IMPORTED_MODULE_14__.DEFAULT_P2P_ACCESS_MODE, this.state.topic);\n  }\n  sendKeyPress(audio) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    if (topic.isSubscribed()) {\n      if (audio) {\n        topic.noteRecording(true);\n      } else {\n        topic.noteKeyPress();\n      }\n    }\n  }\n  sendMessage(msg, uploadCompletionPromise, uploader) {\n    let head;\n    if (!msg && this.props.forwardMessage) {\n      msg = this.props.forwardMessage.msg;\n      head = this.props.forwardMessage.head;\n      this.handleCancelReply();\n    } else if (this.state.reply) {\n      if (this.state.reply.editing) {\n        if (msg == this.state.contentToEdit) {\n          this.handleCancelReply();\n          return;\n        }\n        head = {\n          replace: ':' + this.state.reply.seq\n        };\n      } else if (this.state.reply.content) {\n        head = {\n          reply: '' + this.state.reply.seq\n        };\n        if (typeof msg == 'string') {\n          msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(msg);\n        }\n        msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.sanitizeEntities(this.state.reply.content), msg);\n      }\n      this.handleCancelReply();\n    }\n    this.props.sendMessage(msg, uploadCompletionPromise, uploader, head);\n  }\n  retrySend(pub) {\n    this.props.sendMessage(pub.content, undefined, undefined, pub.head).then(_ => {\n      const topic = this.props.tinode.getTopic(this.state.topic);\n      topic.delMessagesList([pub.seq], true);\n    });\n  }\n  sendFileAttachment(file) {\n    const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;\n    if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.isFileSupported(file.type, file.name) || file.type == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.contentType) {\n      if (this.sendTheCardAttachment(file, maxInbandAttachmentSize)) {\n        return;\n      }\n    }\n    const jsonMimeConverter = fileType => fileType === _config_js__WEBPACK_IMPORTED_MODULE_14__.DRAFTY_FR_MIME_TYPE_LEGACY ? 'application/octet-stream' : fileType;\n    if (file.size > maxInbandAttachmentSize) {\n      const uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n      const uploadCompletionPromise = uploader.upload(file);\n      const msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachFile(null, {\n        mime: jsonMimeConverter(file.type),\n        filename: file.name,\n        size: file.size,\n        urlPromise: uploadCompletionPromise\n      });\n      this.sendMessage(msg, uploadCompletionPromise, uploader);\n    } else {\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.fileToBase64)(file).then(b64 => this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachFile(null, {\n        mime: jsonMimeConverter(b64.mime),\n        data: b64.bits,\n        filename: b64.name,\n        size: file.size\n      }))).catch(err => this.props.onError(err.message, 'err'));\n    }\n  }\n  sendTheCardAttachment(file, maxInbandAttachmentSize) {\n    if (file.size > maxInbandAttachmentSize) {\n      return false;\n    }\n    if (file.type == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.contentType) {\n      this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendTheCard(null, file.object));\n      return true;\n    }\n    (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.importVCard)(file).then(card => {\n      this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendTheCard(null, card));\n    }).catch(err => {\n      this.props.onError(this.props.intl.formatMessage(messages.cannot_parse_vcard, {\n        error: err.message\n      }), 'err');\n    });\n    return true;\n  }\n  handleAttachFile(file) {\n    const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_EXTERN_ATTACHMENT_SIZE);\n    if (file.size > maxExternAttachmentSize) {\n      this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large, {\n        size: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_18__.bytesToHumanSize)(file.size),\n        limit: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_18__.bytesToHumanSize)(maxExternAttachmentSize)\n      }), 'err');\n    } else {\n      this.setState({\n        docPreview: {\n          file: file,\n          name: file.name,\n          size: file.size,\n          type: file.type\n        }\n      });\n    }\n  }\n  handleCallHangup(topic, seq) {\n    this.props.onVideoCallClosed();\n    this.setState({\n      rtcPanel: null\n    });\n    this.props.onCallHangup(topic, seq);\n  }\n  handleCallPanelToggle() {\n    this.setState({\n      minimizedCallPanel: !this.state.minimizedCallPanel\n    });\n  }\n  sendImageAttachment(caption, blob) {\n    const mime = this.state.imagePreview.mime;\n    const width = this.state.imagePreview.width;\n    const height = this.state.imagePreview.height;\n    const fname = this.state.imagePreview.filename;\n    const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;\n    if (blob.size > maxInbandAttachmentSize) {\n      const uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n      const uploadCompletionPromise = uploader.upload(blob);\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_PREVIEW_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_PREVIEW_DIM, -1, false).then(scaled => (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(scaled.blob)).then(b64 => {\n        let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {\n          mime: mime,\n          _tempPreview: b64.bits,\n          bits: b64.bits,\n          width: width,\n          height: height,\n          filename: fname,\n          size: blob.size,\n          urlPromise: uploadCompletionPromise\n        });\n        if (caption) {\n          msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendLineBreak(msg);\n          msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(msg, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(caption));\n        }\n        this.sendMessage(msg, uploadCompletionPromise, uploader);\n      }).catch(err => this.props.onError(err, 'err'));\n      return;\n    }\n    (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(blob).then(b64 => {\n      let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertImage(null, 0, {\n        mime: b64.mime,\n        bits: b64.bits,\n        width: width,\n        height: height,\n        filename: fname,\n        size: blob.size\n      });\n      if (caption) {\n        msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendLineBreak(msg);\n        msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(msg, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(caption));\n      }\n      this.sendMessage(msg);\n    });\n  }\n  sendVideoAttachment(caption, videoBlob, previewBlob, params) {\n    const width = params.width;\n    const height = params.height;\n    const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;\n    const uploads = [];\n    let uploader;\n    if (videoBlob.size + previewBlob.size > maxInbandAttachmentSize) {\n      uploader = this.props.tinode.getLargeFileHelper();\n      if (!uploader) {\n        this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n        return;\n      }\n      uploads[0] = videoBlob.size > maxInbandAttachmentSize * 0.675 ? uploader.upload(videoBlob) : null;\n      uploads[1] = previewBlob.size > maxInbandAttachmentSize * 0.275 ? uploader.upload(previewBlob) : null;\n    }\n    if (uploads.length == 0) {\n      Promise.all([(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(videoBlob), (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(previewBlob)]).then(b64s => {\n        const [v64, i64] = b64s;\n        let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertVideo(null, 0, {\n          mime: v64.mime,\n          bits: v64.bits,\n          preview: i64.bits,\n          premime: i64.mime,\n          width: width,\n          height: height,\n          duration: params.duration,\n          filename: params.name,\n          size: videoBlob.size\n        });\n        if (caption) {\n          msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendLineBreak(msg);\n          msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(msg, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(caption));\n        }\n        this.sendMessage(msg);\n      });\n      return;\n    }\n    const uploadCompletionPromise = Promise.all(uploads);\n    const b64conv = [];\n    b64conv[0] = uploads[0] ? null : (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(videoBlob);\n    b64conv[1] = uploads[1] ? null : (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.imageScaled)(previewBlob, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_IMAGE_DIM, -1, false).then(scaled => (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(scaled.blob));\n    b64conv[2] = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.imageScaled)(previewBlob, _config_js__WEBPACK_IMPORTED_MODULE_14__.VIDEO_PREVIEW_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.VIDEO_PREVIEW_DIM, -1, false).then(scaled => (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(scaled.blob));\n    Promise.all(b64conv).then(b64s => {\n      const [video, img, preview] = b64s;\n      let msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.insertVideo(null, 0, {\n        mime: params.mime,\n        bits: video ? video.bits : null,\n        _tempPreview: preview.bits,\n        preview: img ? img.bits : preview.bits,\n        premime: img ? img.mime : preview.mime,\n        width: width,\n        height: height,\n        duration: params.duration,\n        filename: params.name,\n        size: videoBlob.size,\n        urlPromise: uploadCompletionPromise\n      });\n      if (caption) {\n        msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendLineBreak(msg);\n        msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(msg, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.parse(caption));\n      }\n      this.sendMessage(msg, uploadCompletionPromise, uploader);\n    }).catch(err => this.props.onError(err.message, 'err'));\n  }\n  handleAttachImageOrVideo(file) {\n    const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_EXTERN_ATTACHMENT_SIZE);\n    if (file.type.startsWith('video/')) {\n      this.setState({\n        videoPreview: {\n          url: URL.createObjectURL(file),\n          blob: file,\n          filename: file.name,\n          size: file.size,\n          mime: file.type\n        }\n      });\n      return;\n    }\n    (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.imageScaled)(file, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_IMAGE_DIM, maxExternAttachmentSize, false).then(scaled => {\n      this.setState({\n        imagePreview: {\n          url: URL.createObjectURL(scaled.blob),\n          blob: scaled.blob,\n          filename: scaled.name,\n          width: scaled.width,\n          height: scaled.height,\n          size: scaled.blob.size,\n          mime: scaled.mime\n        }\n      });\n    }).catch(err => {\n      this.props.onError(err.message, 'err');\n    });\n  }\n  handleFileDrop(files) {\n    if (!files || files.length == 0) {\n      return;\n    }\n    const file = files[0];\n    if (file.type && file.type.startsWith('image/')) {\n      this.handleAttachImageOrVideo(file);\n    } else {\n      this.handleAttachFile(file);\n    }\n  }\n  sendAudioAttachment(url, preview, duration) {\n    fetch(url).then(result => result.blob()).then(blob => {\n      const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_14__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;\n      if (blob.size > maxInbandAttachmentSize) {\n        const uploader = this.props.tinode.getLargeFileHelper();\n        if (!uploader) {\n          this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n          return;\n        }\n        const uploadCompletionPromise = uploader.upload(blob);\n        const msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendAudio(null, {\n          mime: blob.type,\n          size: blob.size,\n          duration: duration,\n          preview: preview,\n          urlPromise: uploadCompletionPromise\n        });\n        this.sendMessage(msg, uploadCompletionPromise, uploader);\n      } else {\n        (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.blobToBase64)(blob).then(b64 => {\n          this.sendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.appendAudio(null, {\n            mime: b64.mime,\n            bits: b64.bits,\n            size: blob.size,\n            duration: duration,\n            preview: preview\n          }));\n        });\n      }\n    }).catch(err => {\n      this.props.onError(err.message, 'err');\n    });\n    ;\n  }\n  handleCancelUpload(seq, uploader) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    const found = topic.findMessage(seq);\n    if (found) {\n      found._cancelled = true;\n    }\n    uploader.cancel();\n  }\n  handlePickReply(seq, content, senderId, senderName) {\n    if (!seq || !content) {\n      this.setState({\n        reply: null\n      });\n      return;\n    }\n    content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;\n    if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {\n      content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_14__.QUOTED_REPLY_LENGTH);\n    } else {\n      content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n    }\n    this.setState({\n      reply: {\n        content: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.quote(senderName, senderId, content),\n        seq: seq\n      }\n    });\n    this.props.onCancelForwardMessage();\n  }\n  handleEditMessage(seq, content) {\n    if (!seq || !content) {\n      this.setState({\n        reply: null\n      });\n      return;\n    }\n    content = typeof content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init(content) : content;\n    const editable = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.toMarkdown(content);\n    if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {\n      content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.replyContent(content, _config_js__WEBPACK_IMPORTED_MODULE_14__.EDIT_PREVIEW_LENGTH);\n    } else {\n      content = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.init('\\u26A0 '), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n    }\n    this.setState({\n      reply: {\n        content: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.quote(this.props.intl.formatMessage(messages.editing_message), null, content),\n        seq: seq,\n        editing: true\n      },\n      contentToEdit: editable\n    });\n    this.props.onCancelForwardMessage();\n  }\n  handleCancelReply() {\n    this.setState({\n      reply: null,\n      contentToEdit: null\n    });\n    this.props.onCancelForwardMessage();\n  }\n  handleQuoteClick(replyToSeq) {\n    const ref = this.getOrCreateMessageRef(replyToSeq);\n    if (ref && ref.current) {\n      ref.current.scrollIntoView({\n        block: \"center\",\n        behavior: \"smooth\"\n      });\n      ref.current.classList.add('flash');\n      setTimeout(_ => {\n        ref.current.classList.remove('flash');\n      }, 1000);\n    } else {\n      console.error(\"Unresolved message ref\", replyToSeq);\n    }\n  }\n  handleUnpinMessage(seq) {\n    const topic = this.props.tinode.getTopic(this.state.topic);\n    topic.pinMessage(seq, false);\n  }\n  isDragEnabled() {\n    return this.state.isWriter && !this.state.unconfirmed && !this.props.forwardMessage && !this.state.peerMessagingDisabled;\n  }\n  handleDragStart(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    e.dataTransfer.clearData();\n  }\n  handleDragIn(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.dragCounter++;\n    if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n      this.setState({\n        dragging: true\n      });\n    }\n  }\n  handleDragOut(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.dragCounter--;\n    if (this.dragCounter <= 0) {\n      this.setState({\n        dragging: false\n      });\n    }\n  }\n  handleDrag(e) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n  handleDrop(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.setState({\n      dragging: false\n    });\n    if (this.isDragEnabled() && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n      this.handleFileDrop(e.dataTransfer.files);\n      this.dragCounter = 0;\n    }\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const overlay = this.state.rtcPanel && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CallPanel, {\n      topic: this.state.topic,\n      seq: this.props.callSeq,\n      callState: this.props.callState,\n      callAudioOnly: this.props.callAudioOnly,\n      tinode: this.props.tinode,\n      title: this.state.title,\n      avatar: this.state.avatar || true,\n      minimized: this.state.minimizedCallPanel,\n      onError: this.props.onError,\n      onHangup: this.handleCallHangup,\n      onToggleMinimize: this.handleCallPanelToggle,\n      onInvite: this.props.onCallInvite,\n      onSendOffer: this.props.onCallSendOffer,\n      onIceCandidate: this.props.onCallIceCandidate,\n      onSendAnswer: this.props.onCallSendAnswer\n    }));\n    let component;\n    if (!this.state.topic) {\n      component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_logo_view_jsx__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n        serverVersion: this.props.serverVersion,\n        serverAddress: this.props.serverAddress\n      });\n    } else {\n      let component2;\n      if (this.state.imagePreview) {\n        component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n          fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"loading_note\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Loading...\"\n            }]\n          }))\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ImagePreview, {\n          content: this.state.imagePreview,\n          tinode: this.props.tinode,\n          reply: this.state.reply,\n          onCancelReply: this.handleCancelReply,\n          onClose: this.handleClosePreview,\n          onSendMessage: this.sendImageAttachment\n        }));\n      } else if (this.state.videoPreview) {\n        component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n          fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"loading_note\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Loading...\"\n            }]\n          }))\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(VideoPreview, {\n          content: this.state.videoPreview,\n          tinode: this.props.tinode,\n          reply: this.state.reply,\n          onError: this.props.onError,\n          onCancelReply: this.handleCancelReply,\n          onClose: this.handleClosePreview,\n          onSendMessage: this.sendVideoAttachment\n        }));\n      } else if (this.state.imagePostview) {\n        component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n          fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"loading_note\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Loading...\"\n            }]\n          }))\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ImagePreview, {\n          content: this.state.imagePostview,\n          onClose: this.handleClosePreview\n        }));\n      } else if (this.state.videoPostview) {\n        component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n          fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n            id: \"loading_note\",\n            defaultMessage: [{\n              \"type\": 0,\n              \"value\": \"Loading...\"\n            }]\n          }))\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(VideoPreview, {\n          content: this.state.videoPostview,\n          tinode: this.props.tinode,\n          onError: this.props.onError,\n          onClose: this.handleClosePreview\n        }));\n      } else if (this.state.docPreview) {\n        if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.isFileSupported(this.state.docPreview.type, this.state.docPreview.name) || this.state.docPreview.type == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.contentType) {\n          component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n            fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n              id: \"loading_note\",\n              defaultMessage: [{\n                \"type\": 0,\n                \"value\": \"Loading...\"\n              }]\n            }))\n          }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TheCardPreview, {\n            content: this.state.docPreview,\n            tinode: this.props.tinode,\n            reply: this.state.reply,\n            onCancelReply: this.handleCancelReply,\n            onClose: this.handleClosePreview,\n            onSendMessage: this.sendFileAttachment\n          }));\n        } else {\n          component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n            fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n              id: \"loading_note\",\n              defaultMessage: [{\n                \"type\": 0,\n                \"value\": \"Loading...\"\n              }]\n            }))\n          }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DocPreview, {\n            content: this.state.docPreview,\n            tinode: this.props.tinode,\n            reply: this.state.reply,\n            onCancelReply: this.handleCancelReply,\n            onClose: this.handleClosePreview,\n            onSendMessage: this.sendFileAttachment\n          }));\n        }\n      } else {\n        const topic = this.props.tinode.getTopic(this.state.topic);\n        const isChannel = topic.isChannelType() || topic.chan;\n        const groupTopic = topic.isGroupType() && !isChannel;\n        const icon_badges = [];\n        if (topic.trusted) {\n          if (topic.trusted.verified) {\n            icon_badges.push({\n              icon: 'verified',\n              color: 'badge-inv'\n            });\n          }\n          if (topic.trusted.staff) {\n            icon_badges.push({\n              icon: 'staff',\n              color: 'badge-inv'\n            });\n          }\n          if (topic.trusted.danger) {\n            icon_badges.push({\n              icon: 'dangerous',\n              color: 'badge-inv'\n            });\n          }\n        }\n        const pinnedMessages = [];\n        this.state.pins.forEach(seq => pinnedMessages.push(topic.latestMsgVersion(seq) || topic.findMessage(seq)));\n        const messageNodes = [];\n        let previousFrom = null;\n        let prevDate = null;\n        let chatBoxClass = null;\n        topic.messages((msg, prev, next, i) => {\n          let nextFrom = next ? next.from || 'chan' : null;\n          let sequence = 'single';\n          let thisFrom = msg.from || 'chan';\n          if (thisFrom == previousFrom) {\n            if (thisFrom == nextFrom) {\n              sequence = 'middle';\n            } else {\n              sequence = 'last';\n            }\n          } else if (thisFrom == nextFrom) {\n            sequence = 'first';\n          }\n          previousFrom = thisFrom;\n          const isReply = !(thisFrom == this.props.myUserId);\n          const deliveryStatus = topic.msgStatus(msg, true);\n          let userFrom = thisFrom,\n            userName,\n            userAvatar;\n          const user = topic.userDesc(thisFrom);\n          if (user && user.public) {\n            userName = user.public.fn;\n            userAvatar = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_16__.makeImageUrl)(user.public.photo);\n          }\n          chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';\n          const ref = this.getOrCreateMessageRef(msg.seq);\n          let replyToSeq = msg.head ? parseInt(msg.head.reply) : null;\n          if (!replyToSeq || isNaN(replyToSeq)) {\n            replyToSeq = null;\n          }\n          if (msg.hi) {\n            messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n              deleted: true,\n              key: msg.seq\n            }));\n          } else {\n            const thisDate = new Date(msg.ts);\n            if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {\n              messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_meta_message_jsx__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n                date: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_18__.relativeDateFormat)(msg.ts),\n                locale: this.props.intl.locale,\n                key: 'date-' + msg.seq\n              }));\n              prevDate = thisDate;\n            }\n            messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n              tinode: this.props.tinode,\n              topic: this.state.topic,\n              content: msg.content,\n              mimeType: msg.head && msg.head.mime,\n              replyToSeq: replyToSeq,\n              edited: msg.head && !msg.head.webrtc && msg.head.replace,\n              timestamp: msg.ts,\n              response: isReply,\n              seq: msg.seq,\n              isGroup: groupTopic,\n              isChan: this.state.channel,\n              userFrom: userFrom,\n              userName: userName,\n              userAvatar: userAvatar,\n              sequence: sequence,\n              received: deliveryStatus,\n              uploader: msg._uploader,\n              userIsWriter: this.state.isWriter,\n              userIsAdmin: this.state.isAdmin,\n              pinned: this.state.pins.includes(msg.seq),\n              viewportWidth: this.props.viewportWidth,\n              showContextMenu: this.handleShowMessageContextMenu,\n              onExpandMedia: this.handleExpandMedia,\n              onFormResponse: this.handleFormResponse,\n              onCancelUpload: this.handleCancelUpload,\n              pickReply: this.handlePickReply,\n              editMessage: this.handleEditMessage,\n              onQuoteClick: this.handleQuoteClick,\n              onAcceptCall: this.props.onAcceptCall,\n              onError: this.props.onError,\n              ref: ref,\n              key: msg.seq\n            }));\n          }\n        });\n        let lastSeen = null;\n        if (isChannel) {\n          if (topic.subcnt) {\n            lastSeen = formatMessage(messages.subscriber_count, {\n              count: topic.subcnt\n            });\n          }\n        } else {\n          const cont = this.props.tinode.getMeTopic().getContact(this.state.topic);\n          if (cont) {\n            if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isP2PTopicName(cont.topic)) {\n              if (cont.online) {\n                lastSeen = formatMessage(messages.online_now);\n              } else if (cont.seen) {\n                lastSeen = formatMessage(messages.last_seen, {\n                  timestamp: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_18__.shortDateFormat)(cont.seen.when, this.props.intl.locale)\n                });\n              }\n            } else if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isGroupTopicName(cont.topic)) {\n              if (topic.subcnt) {\n                lastSeen = formatMessage(messages.member_count, {\n                  count: topic.subcnt\n                });\n              }\n            }\n          }\n        }\n        const avatar = this.state.avatar || true;\n        const online = this.state.deleted || topic.isSelfType() ? null : this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';\n        const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');\n        const darkModeClass = this.props.colorSchema == 'dark' ? 'dark' : '';\n        let messagesComponent = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"messages-container\",\n          className: darkModeClass\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n          id: \"go-to-latest\",\n          className: 'action-button' + (this.state.showGoToLastButton ? '' : ' hidden'),\n          onClick: this.goToLatestMessage\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: \"material-icons\"\n        }, \"arrow_downward\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"messages-panel\",\n          ref: this.handleScrollReference\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n          id: \"scroller\",\n          className: chatBoxClass\n        }, messageNodes)), !this.state.isReader ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"write-only-background\"\n        }, this.state.readingBlocked ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"write-only-note\"\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"messages_not_readable\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"no access to messages\"\n          }]\n        })) : null) : null), this.state.peerMessagingDisabled && !this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"peer-messaging-disabled-note\"\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: \"material-icons secondary\"\n        }, \"block\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"peers_messaging_disabled\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"Peer's messaging is disabled.\"\n          }]\n        }), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n          href: \"#\",\n          onClick: this.handleEnablePeer\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"enable_peers_messaging\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"Enable\"\n          }]\n        })), \".\") : null, this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n          onAction: this.handleNewChatAcceptance\n        }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n          tinode: this.props.tinode,\n          topicName: this.state.topic,\n          noInput: !!this.props.forwardMessage,\n          disabled: !this.state.isWriter || this.state.deleted,\n          reply: this.state.reply,\n          initMessage: this.state.contentToEdit,\n          sendOnEnter: this.props.sendOnEnter,\n          onKeyPress: this.sendKeyPress,\n          onRecordingProgress: this.sendKeyPress,\n          onSendMessage: this.sendMessage,\n          onAttachFile: this.props.forwardMessage ? null : this.handleAttachFile,\n          onAttachImage: this.props.forwardMessage ? null : this.handleAttachImageOrVideo,\n          onAttachAudio: this.props.forwardMessage ? null : this.sendAudioAttachment,\n          onError: this.props.onError,\n          onQuoteClick: this.handleQuoteClick,\n          onCancelReply: this.handleCancelReply\n        }));\n        component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"topic-caption-panel\",\n          className: \"caption-panel\"\n        }, this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n          href: \"#\",\n          id: \"hide-message-view\",\n          onClick: e => {\n            e.preventDefault();\n            this.leave(this.state.topic);\n            this.props.onHideMessagesView();\n          }\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: \"material-icons\"\n        }, \"arrow_back\")) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          className: \"avatar-box\"\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n          authorizeURL: this.props.tinode.authorizeURL,\n          avatar: avatar,\n          topic: this.state.topic,\n          title: this.state.title,\n          deleted: this.state.deleted\n        }), !isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n          className: online\n        }) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"topic-title-group\"\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"topic-title\",\n          className: titleClass\n        }, this.state.title || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n          id: \"unnamed_topic\",\n          defaultMessage: [{\n            \"type\": 0,\n            \"value\": \"Unnamed\"\n          }]\n        })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n          badges: icon_badges\n        })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          id: \"topic-last-seen\"\n        }, lastSeen)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          style: {\n            marginLeft: 'auto'\n          }\n        }), !this.props.displayMobile && this.state.pins.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_pinned_messages_jsx__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n          tinode: this.props.tinode,\n          pins: this.state.pins,\n          messages: pinnedMessages,\n          selected: this.state.selectedPin,\n          isAdmin: this.state.isAdmin,\n          setSelected: index => this.setState({\n            selectedPin: index\n          }),\n          onSelected: this.handleQuoteClick,\n          onCancel: this.handleUnpinMessage\n        }) : null, groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n          tinode: this.props.tinode,\n          subscribers: this.state.onlineSubs\n        }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n          href: \"#\",\n          onClick: this.handleContextClick\n        }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: \"material-icons\"\n        }, \"more_vert\")))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.pins.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_pinned_messages_jsx__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n          tinode: this.props.tinode,\n          pins: this.state.pins,\n          messages: pinnedMessages,\n          selected: this.state.selectedPin,\n          isAdmin: this.state.isAdmin,\n          setSelected: index => this.setState({\n            selectedPin: index\n          }),\n          onSelected: this.handleQuoteClick,\n          onCancel: this.handleUnpinMessage\n        }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n          level: this.props.errorLevel,\n          text: this.props.errorText,\n          onClearError: this.props.onError\n        })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n          show: this.state.fetchingMessages\n        }), messagesComponent, this.state.dragging && this.isDragEnabled() ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          className: \"drag-n-drop\"\n        }, formatMessage(messages.drag_file)) : null);\n      }\n      component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        id: \"topic-view\",\n        ref: this.mountDnDEvents\n      }, component2, overlay);\n    }\n    return component;\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(MessagesView));\n\n/***/ }),\n\n/***/ \"./src/widgets/attachment.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/attachment.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Attachment; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file-progress.jsx */ \"./src/widgets/file-progress.jsx\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\nclass Attachment extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      downloader: null,\n      progress: 0\n    };\n    this.downloadFile = this.downloadFile.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n  }\n  downloadFile(url, filename, mimetype) {\n    if (!url) {\n      this.props.onError(\"Invalid download URL '\" + url + \"'\");\n      return;\n    }\n    const downloader = this.props.tinode.getLargeFileHelper();\n    this.setState({\n      downloader: downloader\n    });\n    downloader.download(url, filename, mimetype, loaded => this.setState({\n      progress: loaded / this.props.size\n    }), err => this.props.onError(err, 'err')).then(_ => this.setState({\n      downloader: null,\n      progress: 0\n    })).catch(err => {\n      if (err) {\n        this.props.onError(\"Error downloading file: \" + err.message, 'err');\n      }\n      this.setState({\n        downloader: null,\n        progress: 0\n      });\n    });\n  }\n  handleCancel() {\n    if (this.props.uploading) {\n      this.props.onCancelUpload();\n    } else if (this.state.downloader) {\n      this.state.downloader.cancel();\n    }\n  }\n  render() {\n    let filename = this.props.filename || 'file_attachment';\n    if (filename.length > 36) {\n      filename = filename.substr(0, 16) + '...' + filename.substr(-16);\n    }\n    let size = this.props.size > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"small gray\"\n    }, \"(\", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.bytesToHumanSize)(this.props.size), \")\") : null;\n    let url, helperFunc;\n    if (!this.props.uploading && !this.state.downloader && (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.isUrlRelative)(this.props.downloadUrl)) {\n      url = '#';\n      helperFunc = e => {\n        e.preventDefault();\n        this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);\n      };\n    } else {\n      url = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.sanitizeUrl)(this.props.downloadUrl);\n      helperFunc = null;\n    }\n    const downloadWidget = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"file_download\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"save_attachment\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"save\"\n      }]\n    }));\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"attachment\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons big gray\"\n    }, \"insert_drive_file\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"flex-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, filename, \" \", size), this.props.uploading || this.state.downloader ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      progress: this.props.uploading ? this.props.progress : this.state.progress,\n      onCancel: this.handleCancel\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, url ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: url,\n      download: this.props.filename,\n      onClick: helperFunc\n    }, downloadWidget) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"light-gray\"\n    }, downloadWidget))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/chat-message.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/chat-message.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _attachment_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./attachment.jsx */ \"./src/widgets/attachment.jsx\");\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _received_marker_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./received-marker.jsx */ \"./src/widgets/received-marker.jsx\");\n/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/formatters.js */ \"./src/lib/formatters.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\n\n\n\n\n\n\n\nclass BaseChatMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      progress: 0\n    };\n    if (props.uploader) {\n      props.uploader.onProgress = this.handleProgress.bind(this);\n    }\n    this.handleExpandImage = this.handleExpandImage.bind(this);\n    this.handlePlayVideo = this.handlePlayVideo.bind(this);\n    this.handleFormButtonClick = this.handleFormButtonClick.bind(this);\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n    this.handleContextClick = this.handleContextClick.bind(this);\n    this.handleCancelUpload = this.handleCancelUpload.bind(this);\n    this.handleDraftyClick = this.handleDraftyClick.bind(this);\n    this.formatterContext = {\n      formatMessage: props.intl.formatMessage.bind(props.intl),\n      viewportWidth: props.viewportWidth,\n      authorizeURL: props.tinode.authorizeURL.bind(props.tinode),\n      onHandleClick: this.handleDraftyClick\n    };\n  }\n  handleDraftyClick = (e, action) => {\n    switch (action) {\n      case 'image':\n        this.handleExpandImage(e);\n        break;\n      case 'video':\n        this.handlePlayVideo(e);\n        break;\n      case 'form_button':\n        this.handleFormButtonClick(e);\n        break;\n      case 'quote':\n        this.handleQuoteClick(e);\n        break;\n      case 'contact_chat':\n        e.preventDefault();\n        try {\n          const pathname = new URL(e.target.dataset.val)?.pathname;\n          const parts = pathname.split('/').filter(Boolean);\n          _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].setUrlTopic('', parts.pop() || ''));\n        } catch (error) {\n          console.error(\"Invalid URL:\", error);\n        }\n        break;\n      case 'contact_find':\n        e.preventDefault();\n        let hashUrl = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].setUrlSidePanel(window.location.hash, 'newtpk');\n        hashUrl = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addUrlParam(hashUrl, 'q', e.target.dataset.val);\n        hashUrl = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addUrlParam(hashUrl, 'tab', 'find');\n        _lib_navigation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].navigateTo(hashUrl);\n        break;\n      default:\n        console.info('Unhandled drafty action.', action, e.target.dataset);\n        break;\n    }\n  };\n  handleExpandImage(e) {\n    e.preventDefault();\n    this.props.onExpandMedia({\n      url: e.target.src,\n      filename: e.target.dataset.name,\n      width: e.target.dataset.width,\n      height: e.target.dataset.height,\n      size: e.target.dataset.size,\n      type: e.target.dataset.mime\n    });\n  }\n  handlePlayVideo(e) {\n    e.preventDefault();\n    this.props.onExpandMedia({\n      video: true,\n      url: e.target.dataset.src,\n      preview: e.target.src,\n      filename: e.target.dataset.name,\n      width: e.target.dataset.width,\n      height: e.target.dataset.height,\n      duration: e.target.dataset.duration,\n      size: e.target.dataset.size,\n      type: e.target.dataset.mime\n    });\n  }\n  handleFormButtonClick(e) {\n    e.preventDefault();\n    const data = {\n      seq: this.props.seq\n    };\n    data.resp = {};\n    if (e.target.dataset.name) {\n      data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val : e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;\n    }\n    if (e.target.dataset.act == 'url') {\n      data.ref = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.sanitizeUrl)(e.target.dataset.ref) || 'about:blank';\n    }\n    const text = e.target.dataset.title || 'unknown';\n    this.props.onFormResponse(e.target.dataset.act, text, data);\n  }\n  handleContextClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    const menuItems = [];\n    if (this.props.received == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_FAILED) {\n      menuItems.push('menu_item_send_retry');\n    }\n    if (this.props.received > tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_FATAL) {\n      if (this.props.userIsWriter) {\n        menuItems.push('menu_item_reply');\n        if (!this.props.response) {\n          let immutable = false;\n          tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.entities(this.props.content, (_0, _1, tp) => {\n            immutable = ['AU', 'EX', 'FM', 'IM', 'TC', 'VC', 'VD'].includes(tp);\n            return immutable;\n          });\n          if (!immutable) {\n            tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.styles(this.props.content, tp => {\n              immutable = ['QQ'].includes(tp);\n              return immutable;\n            });\n          }\n          if (!immutable) {\n            menuItems.push('menu_item_edit');\n          }\n        }\n      }\n      if (this.props.userIsAdmin) {\n        menuItems.push(this.props.pinned ? 'menu_item_unpin' : 'menu_item_pin');\n      }\n    }\n    menuItems.push('menu_item_forward');\n    this.props.showContextMenu({\n      seq: this.props.seq,\n      replace: this.props.edited ? parseInt(this.props.edited.split(':')[1]) : 0,\n      content: this.props.content,\n      userFrom: this.props.userFrom,\n      userName: this.props.userName,\n      y: e.pageY,\n      x: e.pageX,\n      pickReply: this.props.pickReply,\n      editMessage: this.props.editMessage,\n      timestamp: this.props.timestamp\n    }, menuItems);\n  }\n  handleProgress(ratio) {\n    this.setState({\n      progress: ratio\n    });\n  }\n  handleCancelUpload() {\n    this.props.onCancelUpload(this.props.seq, this.props.uploader);\n  }\n  handleQuoteClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    const replyToSeq = this.props.replyToSeq;\n    if (replyToSeq) {\n      this.props.onQuoteClick(replyToSeq);\n    }\n  }\n  render() {\n    const sideClass = this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');\n    const bubbleClass = this.props.sequence == 'single' || this.props.sequence == 'last' ? 'bubble tip' : 'bubble';\n    const avatar = this.props.userAvatar || true;\n    let textSizeClass = 'message-content';\n    const fullDisplay = this.props.isGroup && this.props.response && (this.props.sequence == 'single' || this.props.sequence == 'last');\n    let content = this.props.content;\n    const attachments = [];\n    if (this.props.mimeType == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getContentType() && tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {\n      tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachments(content, (att, i) => {\n        if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(att.mime)) {\n          return;\n        }\n        attachments.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_attachment_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n          tinode: this.props.tinode,\n          downloadUrl: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getDownloadUrl(att),\n          filename: att.name,\n          uploading: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(att),\n          mimetype: att.mime,\n          size: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getEntitySize(att),\n          progress: this.state.progress,\n          onCancelUpload: this.handleCancelUpload,\n          onError: this.props.onError,\n          key: i\n        }));\n      }, this);\n      const tree = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__.fullFormatter, this.formatterContext);\n      content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tree);\n    } else if (typeof content == 'string') {\n      if (new RegExp('^\\\\p{RGI_Emoji}{1,5}$', 'v').test(content || '')) {\n        textSizeClass += ' emoji-' + (content || '').match(/(?:👨🏻‍❤️‍💋‍👨🏻|👨🏻‍❤️‍💋‍👨🏼|👨🏻‍❤️‍💋‍👨🏽|👨🏻‍❤️‍💋‍👨🏾|👨🏻‍❤️‍💋‍👨🏿|👨🏼‍❤️‍💋‍👨🏻|👨🏼‍❤️‍💋‍👨🏼|👨🏼‍❤️‍💋‍👨🏽|👨🏼‍❤️‍💋‍👨🏾|👨🏼‍❤️‍💋‍👨🏿|👨🏽‍❤️‍💋‍👨🏻|👨🏽‍❤️‍💋‍👨🏼|👨🏽‍❤️‍💋‍👨🏽|👨🏽‍❤️‍💋‍👨🏾|👨🏽‍❤️‍💋‍👨🏿|👨🏾‍❤️‍💋‍👨🏻|👨🏾‍❤️‍💋‍👨🏼|👨🏾‍❤️‍💋‍👨🏽|👨🏾‍❤️‍💋‍👨🏾|👨🏾‍❤️‍💋‍👨🏿|👨🏿‍❤️‍💋‍👨🏻|👨🏿‍❤️‍💋‍👨🏼|👨🏿‍❤️‍💋‍👨🏽|👨🏿‍❤️‍💋‍👨🏾|👨🏿‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👨🏻|👩🏻‍❤️‍💋‍👨🏼|👩🏻‍❤️‍💋‍👨🏽|👩🏻‍❤️‍💋‍👨🏾|👩🏻‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👩🏻|👩🏻‍❤️‍💋‍👩🏼|👩🏻‍❤️‍💋‍👩🏽|👩🏻‍❤️‍💋‍👩🏾|👩🏻‍❤️‍💋‍👩🏿|👩🏼‍❤️‍💋‍👨🏻|👩🏼‍❤️‍💋‍👨🏼|👩🏼‍❤️‍💋‍👨🏽|👩🏼‍❤️‍💋‍👨🏾|👩🏼‍❤️‍💋‍👨🏿|👩🏼‍❤️‍💋‍👩🏻|👩🏼‍❤️‍💋‍👩🏼|👩🏼‍❤️‍💋‍👩🏽|👩🏼‍❤️‍💋‍👩🏾|👩🏼‍❤️‍💋‍👩🏿|👩🏽‍❤️‍💋‍👨🏻|👩🏽‍❤️‍💋‍👨🏼|👩🏽‍❤️‍💋‍👨🏽|👩🏽‍❤️‍💋‍👨🏾|👩🏽‍❤️‍💋‍👨🏿|👩🏽‍❤️‍💋‍👩🏻|👩🏽‍❤️‍💋‍👩🏼|👩🏽‍❤️‍💋‍👩🏽|👩🏽‍❤️‍💋‍👩🏾|👩🏽‍❤️‍💋‍👩🏿|👩🏾‍❤️‍💋‍👨🏻|👩🏾‍❤️‍💋‍👨🏼|👩🏾‍❤️‍💋‍👨🏽|👩🏾‍❤️‍💋‍👨🏾|👩🏾‍❤️‍💋‍👨🏿|👩🏾‍❤️‍💋‍👩🏻|👩🏾‍❤️‍💋‍👩🏼|👩🏾‍❤️‍💋‍👩🏽|👩🏾‍❤️‍💋‍👩🏾|👩🏾‍❤️‍💋‍👩🏿|👩🏿‍❤️‍💋‍👨🏻|👩🏿‍❤️‍💋‍👨🏼|👩🏿‍❤️‍💋‍👨🏽|👩🏿‍❤️‍💋‍👨🏾|👩🏿‍❤️‍💋‍👨🏿|👩🏿‍❤️‍💋‍👩🏻|👩🏿‍❤️‍💋‍👩🏼|👩🏿‍❤️‍💋‍👩🏽|👩🏿‍❤️‍💋‍👩🏾|👩🏿‍❤️‍💋‍👩🏿|🧑🏻‍❤️‍💋‍🧑🏼|🧑🏻‍❤️‍💋‍🧑🏽|🧑🏻‍❤️‍💋‍🧑🏾|🧑🏻‍❤️‍💋‍🧑🏿|🧑🏼‍❤️‍💋‍🧑🏻|🧑🏼‍❤️‍💋‍🧑🏽|🧑🏼‍❤️‍💋‍🧑🏾|🧑🏼‍❤️‍💋‍🧑🏿|🧑🏽‍❤️‍💋‍🧑🏻|🧑🏽‍❤️‍💋‍🧑🏼|🧑🏽‍❤️‍💋‍🧑🏾|🧑🏽‍❤️‍💋‍🧑🏿|🧑🏾‍❤️‍💋‍🧑🏻|🧑🏾‍❤️‍💋‍🧑🏼|🧑🏾‍❤️‍💋‍🧑🏽|🧑🏾‍❤️‍💋‍🧑🏿|🧑🏿‍❤️‍💋‍🧑🏻|🧑🏿‍❤️‍💋‍🧑🏼|🧑🏿‍❤️‍💋‍🧑🏽|🧑🏿‍❤️‍💋‍🧑🏾|🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|👨🏻‍❤️‍👨🏻|👨🏻‍❤️‍👨🏼|👨🏻‍❤️‍👨🏽|👨🏻‍❤️‍👨🏾|👨🏻‍❤️‍👨🏿|👨🏻‍🐰‍👨🏼|👨🏻‍🐰‍👨🏽|👨🏻‍🐰‍👨🏾|👨🏻‍🐰‍👨🏿|👨🏻‍🤝‍👨🏼|👨🏻‍🤝‍👨🏽|👨🏻‍🤝‍👨🏾|👨🏻‍🤝‍👨🏿|👨🏻‍🫯‍👨🏼|👨🏻‍🫯‍👨🏽|👨🏻‍🫯‍👨🏾|👨🏻‍🫯‍👨🏿|👨🏼‍❤️‍👨🏻|👨🏼‍❤️‍👨🏼|👨🏼‍❤️‍👨🏽|👨🏼‍❤️‍👨🏾|👨🏼‍❤️‍👨🏿|👨🏼‍🐰‍👨🏻|👨🏼‍🐰‍👨🏽|👨🏼‍🐰‍👨🏾|👨🏼‍🐰‍👨🏿|👨🏼‍🤝‍👨🏻|👨🏼‍🤝‍👨🏽|👨🏼‍🤝‍👨🏾|👨🏼‍🤝‍👨🏿|👨🏼‍🫯‍👨🏻|👨🏼‍🫯‍👨🏽|👨🏼‍🫯‍👨🏾|👨🏼‍🫯‍👨🏿|👨🏽‍❤️‍👨🏻|👨🏽‍❤️‍👨🏼|👨🏽‍❤️‍👨🏽|👨🏽‍❤️‍👨🏾|👨🏽‍❤️‍👨🏿|👨🏽‍🐰‍👨🏻|👨🏽‍🐰‍👨🏼|👨🏽‍🐰‍👨🏾|👨🏽‍🐰‍👨🏿|👨🏽‍🤝‍👨🏻|👨🏽‍🤝‍👨🏼|👨🏽‍🤝‍👨🏾|👨🏽‍🤝‍👨🏿|👨🏽‍🫯‍👨🏻|👨🏽‍🫯‍👨🏼|👨🏽‍🫯‍👨🏾|👨🏽‍🫯‍👨🏿|👨🏾‍❤️‍👨🏻|👨🏾‍❤️‍👨🏼|👨🏾‍❤️‍👨🏽|👨🏾‍❤️‍👨🏾|👨🏾‍❤️‍👨🏿|👨🏾‍🐰‍👨🏻|👨🏾‍🐰‍👨🏼|👨🏾‍🐰‍👨🏽|👨🏾‍🐰‍👨🏿|👨🏾‍🤝‍👨🏻|👨🏾‍🤝‍👨🏼|👨🏾‍🤝‍👨🏽|👨🏾‍🤝‍👨🏿|👨🏾‍🫯‍👨🏻|👨🏾‍🫯‍👨🏼|👨🏾‍🫯‍👨🏽|👨🏾‍🫯‍👨🏿|👨🏿‍❤️‍👨🏻|👨🏿‍❤️‍👨🏼|👨🏿‍❤️‍👨🏽|👨🏿‍❤️‍👨🏾|👨🏿‍❤️‍👨🏿|👨🏿‍🐰‍👨🏻|👨🏿‍🐰‍👨🏼|👨🏿‍🐰‍👨🏽|👨🏿‍🐰‍👨🏾|👨🏿‍🤝‍👨🏻|👨🏿‍🤝‍👨🏼|👨🏿‍🤝‍👨🏽|👨🏿‍🤝‍👨🏾|👨🏿‍🫯‍👨🏻|👨🏿‍🫯‍👨🏼|👨🏿‍🫯‍👨🏽|👨🏿‍🫯‍👨🏾|👩🏻‍❤️‍👨🏻|👩🏻‍❤️‍👨🏼|👩🏻‍❤️‍👨🏽|👩🏻‍❤️‍👨🏾|👩🏻‍❤️‍👨🏿|👩🏻‍❤️‍👩🏻|👩🏻‍❤️‍👩🏼|👩🏻‍❤️‍👩🏽|👩🏻‍❤️‍👩🏾|👩🏻‍❤️‍👩🏿|👩🏻‍🐰‍👩🏼|👩🏻‍🐰‍👩🏽|👩🏻‍🐰‍👩🏾|👩🏻‍🐰‍👩🏿|👩🏻‍🤝‍👨🏼|👩🏻‍🤝‍👨🏽|👩🏻‍🤝‍👨🏾|👩🏻‍🤝‍👨🏿|👩🏻‍🤝‍👩🏼|👩🏻‍🤝‍👩🏽|👩🏻‍🤝‍👩🏾|👩🏻‍🤝‍👩🏿|👩🏻‍🫯‍👩🏼|👩🏻‍🫯‍👩🏽|👩🏻‍🫯‍👩🏾|👩🏻‍🫯‍👩🏿|👩🏼‍❤️‍👨🏻|👩🏼‍❤️‍👨🏼|👩🏼‍❤️‍👨🏽|👩🏼‍❤️‍👨🏾|👩🏼‍❤️‍👨🏿|👩🏼‍❤️‍👩🏻|👩🏼‍❤️‍👩🏼|👩🏼‍❤️‍👩🏽|👩🏼‍❤️‍👩🏾|👩🏼‍❤️‍👩🏿|👩🏼‍🐰‍👩🏻|👩🏼‍🐰‍👩🏽|👩🏼‍🐰‍👩🏾|👩🏼‍🐰‍👩🏿|👩🏼‍🤝‍👨🏻|👩🏼‍🤝‍👨🏽|👩🏼‍🤝‍👨🏾|👩🏼‍🤝‍👨🏿|👩🏼‍🤝‍👩🏻|👩🏼‍🤝‍👩🏽|👩🏼‍🤝‍👩🏾|👩🏼‍🤝‍👩🏿|👩🏼‍🫯‍👩🏻|👩🏼‍🫯‍👩🏽|👩🏼‍🫯‍👩🏾|👩🏼‍🫯‍👩🏿|👩🏽‍❤️‍👨🏻|👩🏽‍❤️‍👨🏼|👩🏽‍❤️‍👨🏽|👩🏽‍❤️‍👨🏾|👩🏽‍❤️‍👨🏿|👩🏽‍❤️‍👩🏻|👩🏽‍❤️‍👩🏼|👩🏽‍❤️‍👩🏽|👩🏽‍❤️‍👩🏾|👩🏽‍❤️‍👩🏿|👩🏽‍🐰‍👩🏻|👩🏽‍🐰‍👩🏼|👩🏽‍🐰‍👩🏾|👩🏽‍🐰‍👩🏿|👩🏽‍🤝‍👨🏻|👩🏽‍🤝‍👨🏼|👩🏽‍🤝‍👨🏾|👩🏽‍🤝‍👨🏿|👩🏽‍🤝‍👩🏻|👩🏽‍🤝‍👩🏼|👩🏽‍🤝‍👩🏾|👩🏽‍🤝‍👩🏿|👩🏽‍🫯‍👩🏻|👩🏽‍🫯‍👩🏼|👩🏽‍🫯‍👩🏾|👩🏽‍🫯‍👩🏿|👩🏾‍❤️‍👨🏻|👩🏾‍❤️‍👨🏼|👩🏾‍❤️‍👨🏽|👩🏾‍❤️‍👨🏾|👩🏾‍❤️‍👨🏿|👩🏾‍❤️‍👩🏻|👩🏾‍❤️‍👩🏼|👩🏾‍❤️‍👩🏽|👩🏾‍❤️‍👩🏾|👩🏾‍❤️‍👩🏿|👩🏾‍🐰‍👩🏻|👩🏾‍🐰‍👩🏼|👩🏾‍🐰‍👩🏽|👩🏾‍🐰‍👩🏿|👩🏾‍🤝‍👨🏻|👩🏾‍🤝‍👨🏼|👩🏾‍🤝‍👨🏽|👩🏾‍🤝‍👨🏿|👩🏾‍🤝‍👩🏻|👩🏾‍🤝‍👩🏼|👩🏾‍🤝‍👩🏽|👩🏾‍🤝‍👩🏿|👩🏾‍🫯‍👩🏻|👩🏾‍🫯‍👩🏼|👩🏾‍🫯‍👩🏽|👩🏾‍🫯‍👩🏿|👩🏿‍❤️‍👨🏻|👩🏿‍❤️‍👨🏼|👩🏿‍❤️‍👨🏽|👩🏿‍❤️‍👨🏾|👩🏿‍❤️‍👨🏿|👩🏿‍❤️‍👩🏻|👩🏿‍❤️‍👩🏼|👩🏿‍❤️‍👩🏽|👩🏿‍❤️‍👩🏾|👩🏿‍❤️‍👩🏿|👩🏿‍🐰‍👩🏻|👩🏿‍🐰‍👩🏼|👩🏿‍🐰‍👩🏽|👩🏿‍🐰‍👩🏾|👩🏿‍🤝‍👨🏻|👩🏿‍🤝‍👨🏼|👩🏿‍🤝‍👨🏽|👩🏿‍🤝‍👨🏾|👩🏿‍🤝‍👩🏻|👩🏿‍🤝‍👩🏼|👩🏿‍🤝‍👩🏽|👩🏿‍🤝‍👩🏾|👩🏿‍🫯‍👩🏻|👩🏿‍🫯‍👩🏼|👩🏿‍🫯‍👩🏽|👩🏿‍🫯‍👩🏾|🧑🏻‍❤️‍🧑🏼|🧑🏻‍❤️‍🧑🏽|🧑🏻‍❤️‍🧑🏾|🧑🏻‍❤️‍🧑🏿|🧑🏻‍🐰‍🧑🏼|🧑🏻‍🐰‍🧑🏽|🧑🏻‍🐰‍🧑🏾|🧑🏻‍🐰‍🧑🏿|🧑🏻‍🤝‍🧑🏻|🧑🏻‍🤝‍🧑🏼|🧑🏻‍🤝‍🧑🏽|🧑🏻‍🤝‍🧑🏾|🧑🏻‍🤝‍🧑🏿|🧑🏻‍🫯‍🧑🏼|🧑🏻‍🫯‍🧑🏽|🧑🏻‍🫯‍🧑🏾|🧑🏻‍🫯‍🧑🏿|🧑🏼‍❤️‍🧑🏻|🧑🏼‍❤️‍🧑🏽|🧑🏼‍❤️‍🧑🏾|🧑🏼‍❤️‍🧑🏿|🧑🏼‍🐰‍🧑🏻|🧑🏼‍🐰‍🧑🏽|🧑🏼‍🐰‍🧑🏾|🧑🏼‍🐰‍🧑🏿|🧑🏼‍🤝‍🧑🏻|🧑🏼‍🤝‍🧑🏼|🧑🏼‍🤝‍🧑🏽|🧑🏼‍🤝‍🧑🏾|🧑🏼‍🤝‍🧑🏿|🧑🏼‍🫯‍🧑🏻|🧑🏼‍🫯‍🧑🏽|🧑🏼‍🫯‍🧑🏾|🧑🏼‍🫯‍🧑🏿|🧑🏽‍❤️‍🧑🏻|🧑🏽‍❤️‍🧑🏼|🧑🏽‍❤️‍🧑🏾|🧑🏽‍❤️‍🧑🏿|🧑🏽‍🐰‍🧑🏻|🧑🏽‍🐰‍🧑🏼|🧑🏽‍🐰‍🧑🏾|🧑🏽‍🐰‍🧑🏿|🧑🏽‍🤝‍🧑🏻|🧑🏽‍🤝‍🧑🏼|🧑🏽‍🤝‍🧑🏽|🧑🏽‍🤝‍🧑🏾|🧑🏽‍🤝‍🧑🏿|🧑🏽‍🫯‍🧑🏻|🧑🏽‍🫯‍🧑🏼|🧑🏽‍🫯‍🧑🏾|🧑🏽‍🫯‍🧑🏿|🧑🏾‍❤️‍🧑🏻|🧑🏾‍❤️‍🧑🏼|🧑🏾‍❤️‍🧑🏽|🧑🏾‍❤️‍🧑🏿|🧑🏾‍🐰‍🧑🏻|🧑🏾‍🐰‍🧑🏼|🧑🏾‍🐰‍🧑🏽|🧑🏾‍🐰‍🧑🏿|🧑🏾‍🤝‍🧑🏻|🧑🏾‍🤝‍🧑🏼|🧑🏾‍🤝‍🧑🏽|🧑🏾‍🤝‍🧑🏾|🧑🏾‍🤝‍🧑🏿|🧑🏾‍🫯‍🧑🏻|🧑🏾‍🫯‍🧑🏼|🧑🏾‍🫯‍🧑🏽|🧑🏾‍🫯‍🧑🏿|🧑🏿‍❤️‍🧑🏻|🧑🏿‍❤️‍🧑🏼|🧑🏿‍❤️‍🧑🏽|🧑🏿‍❤️‍🧑🏾|🧑🏿‍🐰‍🧑🏻|🧑🏿‍🐰‍🧑🏼|🧑🏿‍🐰‍🧑🏽|🧑🏿‍🐰‍🧑🏾|🧑🏿‍🤝‍🧑🏻|🧑🏿‍🤝‍🧑🏼|🧑🏿‍🤝‍🧑🏽|🧑🏿‍🤝‍🧑🏾|🧑🏿‍🤝‍🧑🏿|🧑🏿‍🫯‍🧑🏻|🧑🏿‍🫯‍🧑🏼|🧑🏿‍🫯‍🧑🏽|🧑🏿‍🫯‍🧑🏾|👨‍❤️‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍👦|👨‍👨‍👧‍👧|👨‍👩‍👦‍👦|👨‍👩‍👧‍👦|👨‍👩‍👧‍👧|👩‍❤️‍💋‍👨|👩‍❤️‍💋‍👩|👩‍👩‍👦‍👦|👩‍👩‍👧‍👦|👩‍👩‍👧‍👧|🧑‍🧑‍🧒‍🧒|🏃🏻‍♀️‍➡️|🏃🏻‍♂️‍➡️|🏃🏼‍♀️‍➡️|🏃🏼‍♂️‍➡️|🏃🏽‍♀️‍➡️|🏃🏽‍♂️‍➡️|🏃🏾‍♀️‍➡️|🏃🏾‍♂️‍➡️|🏃🏿‍♀️‍➡️|🏃🏿‍♂️‍➡️|👨🏻‍🦯‍➡️|👨🏻‍🦼‍➡️|👨🏻‍🦽‍➡️|👨🏼‍🦯‍➡️|👨🏼‍🦼‍➡️|👨🏼‍🦽‍➡️|👨🏽‍🦯‍➡️|👨🏽‍🦼‍➡️|👨🏽‍🦽‍➡️|👨🏾‍🦯‍➡️|👨🏾‍🦼‍➡️|👨🏾‍🦽‍➡️|👨🏿‍🦯‍➡️|👨🏿‍🦼‍➡️|👨🏿‍🦽‍➡️|👩🏻‍🦯‍➡️|👩🏻‍🦼‍➡️|👩🏻‍🦽‍➡️|👩🏼‍🦯‍➡️|👩🏼‍🦼‍➡️|👩🏼‍🦽‍➡️|👩🏽‍🦯‍➡️|👩🏽‍🦼‍➡️|👩🏽‍🦽‍➡️|👩🏾‍🦯‍➡️|👩🏾‍🦼‍➡️|👩🏾‍🦽‍➡️|👩🏿‍🦯‍➡️|👩🏿‍🦼‍➡️|👩🏿‍🦽‍➡️|🚶🏻‍♀️‍➡️|🚶🏻‍♂️‍➡️|🚶🏼‍♀️‍➡️|🚶🏼‍♂️‍➡️|🚶🏽‍♀️‍➡️|🚶🏽‍♂️‍➡️|🚶🏾‍♀️‍➡️|🚶🏾‍♂️‍➡️|🚶🏿‍♀️‍➡️|🚶🏿‍♂️‍➡️|🧎🏻‍♀️‍➡️|🧎🏻‍♂️‍➡️|🧎🏼‍♀️‍➡️|🧎🏼‍♂️‍➡️|🧎🏽‍♀️‍➡️|🧎🏽‍♂️‍➡️|🧎🏾‍♀️‍➡️|🧎🏾‍♂️‍➡️|🧎🏿‍♀️‍➡️|🧎🏿‍♂️‍➡️|🧑🏻‍🦯‍➡️|🧑🏻‍🦼‍➡️|🧑🏻‍🦽‍➡️|🧑🏼‍🦯‍➡️|🧑🏼‍🦼‍➡️|🧑🏼‍🦽‍➡️|🧑🏽‍🦯‍➡️|🧑🏽‍🦼‍➡️|🧑🏽‍🦽‍➡️|🧑🏾‍🦯‍➡️|🧑🏾‍🦼‍➡️|🧑🏾‍🦽‍➡️|🧑🏿‍🦯‍➡️|🧑🏿‍🦼‍➡️|🧑🏿‍🦽‍➡️|🫱🏻‍🫲🏼|🫱🏻‍🫲🏽|🫱🏻‍🫲🏾|🫱🏻‍🫲🏿|🫱🏼‍🫲🏻|🫱🏼‍🫲🏽|🫱🏼‍🫲🏾|🫱🏼‍🫲🏿|🫱🏽‍🫲🏻|🫱🏽‍🫲🏼|🫱🏽‍🫲🏾|🫱🏽‍🫲🏿|🫱🏾‍🫲🏻|🫱🏾‍🫲🏼|🫱🏾‍🫲🏽|🫱🏾‍🫲🏿|🫱🏿‍🫲🏻|🫱🏿‍🫲🏼|🫱🏿‍🫲🏽|🫱🏿‍🫲🏾|🏃‍♀️‍➡️|🏃‍♂️‍➡️|👨‍❤️‍👨|👨‍👦‍👦|👨‍👧‍👦|👨‍👧‍👧|👨‍👨‍👦|👨‍👨‍👧|👨‍👩‍👦|👨‍👩‍👧|👨‍🦯‍➡️|👨‍🦼‍➡️|👨‍🦽‍➡️|👩‍❤️‍👨|👩‍❤️‍👩|👩‍👦‍👦|👩‍👧‍👦|👩‍👧‍👧|👩‍👩‍👦|👩‍👩‍👧|👩‍🦯‍➡️|👩‍🦼‍➡️|👩‍🦽‍➡️|🚶‍♀️‍➡️|🚶‍♂️‍➡️|🧎‍♀️‍➡️|🧎‍♂️‍➡️|🧑‍🤝‍🧑|🧑‍🦯‍➡️|🧑‍🦼‍➡️|🧑‍🦽‍➡️|🧑‍🧑‍🧒|🧑‍🧒‍🧒|🏃🏻‍♀️|🏃🏻‍♂️|🏃🏻‍➡️|🏃🏼‍♀️|🏃🏼‍♂️|🏃🏼‍➡️|🏃🏽‍♀️|🏃🏽‍♂️|🏃🏽‍➡️|🏃🏾‍♀️|🏃🏾‍♂️|🏃🏾‍➡️|🏃🏿‍♀️|🏃🏿‍♂️|🏃🏿‍➡️|🏄🏻‍♀️|🏄🏻‍♂️|🏄🏼‍♀️|🏄🏼‍♂️|🏄🏽‍♀️|🏄🏽‍♂️|🏄🏾‍♀️|🏄🏾‍♂️|🏄🏿‍♀️|🏄🏿‍♂️|🏊🏻‍♀️|🏊🏻‍♂️|🏊🏼‍♀️|🏊🏼‍♂️|🏊🏽‍♀️|🏊🏽‍♂️|🏊🏾‍♀️|🏊🏾‍♂️|🏊🏿‍♀️|🏊🏿‍♂️|🏋🏻‍♀️|🏋🏻‍♂️|🏋🏼‍♀️|🏋🏼‍♂️|🏋🏽‍♀️|🏋🏽‍♂️|🏋🏾‍♀️|🏋🏾‍♂️|🏋🏿‍♀️|🏋🏿‍♂️|🏌🏻‍♀️|🏌🏻‍♂️|🏌🏼‍♀️|🏌🏼‍♂️|🏌🏽‍♀️|🏌🏽‍♂️|🏌🏾‍♀️|🏌🏾‍♂️|🏌🏿‍♀️|🏌🏿‍♂️|👁️‍🗨️|👨🏻‍⚕️|👨🏻‍⚖️|👨🏻‍✈️|👨🏻‍🌾|👨🏻‍🍳|👨🏻‍🍼|👨🏻‍🎓|👨🏻‍🎤|👨🏻‍🎨|👨🏻‍🏫|👨🏻‍🏭|👨🏻‍💻|👨🏻‍💼|👨🏻‍🔧|👨🏻‍🔬|👨🏻‍🚀|👨🏻‍🚒|👨🏻‍🦯|👨🏻‍🦰|👨🏻‍🦱|👨🏻‍🦲|👨🏻‍🦳|👨🏻‍🦼|👨🏻‍🦽|👨🏼‍⚕️|👨🏼‍⚖️|👨🏼‍✈️|👨🏼‍🌾|👨🏼‍🍳|👨🏼‍🍼|👨🏼‍🎓|👨🏼‍🎤|👨🏼‍🎨|👨🏼‍🏫|👨🏼‍🏭|👨🏼‍💻|👨🏼‍💼|👨🏼‍🔧|👨🏼‍🔬|👨🏼‍🚀|👨🏼‍🚒|👨🏼‍🦯|👨🏼‍🦰|👨🏼‍🦱|👨🏼‍🦲|👨🏼‍🦳|👨🏼‍🦼|👨🏼‍🦽|👨🏽‍⚕️|👨🏽‍⚖️|👨🏽‍✈️|👨🏽‍🌾|👨🏽‍🍳|👨🏽‍🍼|👨🏽‍🎓|👨🏽‍🎤|👨🏽‍🎨|👨🏽‍🏫|👨🏽‍🏭|👨🏽‍💻|👨🏽‍💼|👨🏽‍🔧|👨🏽‍🔬|👨🏽‍🚀|👨🏽‍🚒|👨🏽‍🦯|👨🏽‍🦰|👨🏽‍🦱|👨🏽‍🦲|👨🏽‍🦳|👨🏽‍🦼|👨🏽‍🦽|👨🏾‍⚕️|👨🏾‍⚖️|👨🏾‍✈️|👨🏾‍🌾|👨🏾‍🍳|👨🏾‍🍼|👨🏾‍🎓|👨🏾‍🎤|👨🏾‍🎨|👨🏾‍🏫|👨🏾‍🏭|👨🏾‍💻|👨🏾‍💼|👨🏾‍🔧|👨🏾‍🔬|👨🏾‍🚀|👨🏾‍🚒|👨🏾‍🦯|👨🏾‍🦰|👨🏾‍🦱|👨🏾‍🦲|👨🏾‍🦳|👨🏾‍🦼|👨🏾‍🦽|👨🏿‍⚕️|👨🏿‍⚖️|👨🏿‍✈️|👨🏿‍🌾|👨🏿‍🍳|👨🏿‍🍼|👨🏿‍🎓|👨🏿‍🎤|👨🏿‍🎨|👨🏿‍🏫|👨🏿‍🏭|👨🏿‍💻|👨🏿‍💼|👨🏿‍🔧|👨🏿‍🔬|👨🏿‍🚀|👨🏿‍🚒|👨🏿‍🦯|👨🏿‍🦰|👨🏿‍🦱|👨🏿‍🦲|👨🏿‍🦳|👨🏿‍🦼|👨🏿‍🦽|👩🏻‍⚕️|👩🏻‍⚖️|👩🏻‍✈️|👩🏻‍🌾|👩🏻‍🍳|👩🏻‍🍼|👩🏻‍🎓|👩🏻‍🎤|👩🏻‍🎨|👩🏻‍🏫|👩🏻‍🏭|👩🏻‍💻|👩🏻‍💼|👩🏻‍🔧|👩🏻‍🔬|👩🏻‍🚀|👩🏻‍🚒|👩🏻‍🦯|👩🏻‍🦰|👩🏻‍🦱|👩🏻‍🦲|👩🏻‍🦳|👩🏻‍🦼|👩🏻‍🦽|👩🏼‍⚕️|👩🏼‍⚖️|👩🏼‍✈️|👩🏼‍🌾|👩🏼‍🍳|👩🏼‍🍼|👩🏼‍🎓|👩🏼‍🎤|👩🏼‍🎨|👩🏼‍🏫|👩🏼‍🏭|👩🏼‍💻|👩🏼‍💼|👩🏼‍🔧|👩🏼‍🔬|👩🏼‍🚀|👩🏼‍🚒|👩🏼‍🦯|👩🏼‍🦰|👩🏼‍🦱|👩🏼‍🦲|👩🏼‍🦳|👩🏼‍🦼|👩🏼‍🦽|👩🏽‍⚕️|👩🏽‍⚖️|👩🏽‍✈️|👩🏽‍🌾|👩🏽‍🍳|👩🏽‍🍼|👩🏽‍🎓|👩🏽‍🎤|👩🏽‍🎨|👩🏽‍🏫|👩🏽‍🏭|👩🏽‍💻|👩🏽‍💼|👩🏽‍🔧|👩🏽‍🔬|👩🏽‍🚀|👩🏽‍🚒|👩🏽‍🦯|👩🏽‍🦰|👩🏽‍🦱|👩🏽‍🦲|👩🏽‍🦳|👩🏽‍🦼|👩🏽‍🦽|👩🏾‍⚕️|👩🏾‍⚖️|👩🏾‍✈️|👩🏾‍🌾|👩🏾‍🍳|👩🏾‍🍼|👩🏾‍🎓|👩🏾‍🎤|👩🏾‍🎨|👩🏾‍🏫|👩🏾‍🏭|👩🏾‍💻|👩🏾‍💼|👩🏾‍🔧|👩🏾‍🔬|👩🏾‍🚀|👩🏾‍🚒|👩🏾‍🦯|👩🏾‍🦰|👩🏾‍🦱|👩🏾‍🦲|👩🏾‍🦳|👩🏾‍🦼|👩🏾‍🦽|👩🏿‍⚕️|👩🏿‍⚖️|👩🏿‍✈️|👩🏿‍🌾|👩🏿‍🍳|👩🏿‍🍼|👩🏿‍🎓|👩🏿‍🎤|👩🏿‍🎨|👩🏿‍🏫|👩🏿‍🏭|👩🏿‍💻|👩🏿‍💼|👩🏿‍🔧|👩🏿‍🔬|👩🏿‍🚀|👩🏿‍🚒|👩🏿‍🦯|👩🏿‍🦰|👩🏿‍🦱|👩🏿‍🦲|👩🏿‍🦳|👩🏿‍🦼|👩🏿‍🦽|👮🏻‍♀️|👮🏻‍♂️|👮🏼‍♀️|👮🏼‍♂️|👮🏽‍♀️|👮🏽‍♂️|👮🏾‍♀️|👮🏾‍♂️|👮🏿‍♀️|👮🏿‍♂️|👯🏻‍♀️|👯🏻‍♂️|👯🏼‍♀️|👯🏼‍♂️|👯🏽‍♀️|👯🏽‍♂️|👯🏾‍♀️|👯🏾‍♂️|👯🏿‍♀️|👯🏿‍♂️|👰🏻‍♀️|👰🏻‍♂️|👰🏼‍♀️|👰🏼‍♂️|👰🏽‍♀️|👰🏽‍♂️|👰🏾‍♀️|👰🏾‍♂️|👰🏿‍♀️|👰🏿‍♂️|👱🏻‍♀️|👱🏻‍♂️|👱🏼‍♀️|👱🏼‍♂️|👱🏽‍♀️|👱🏽‍♂️|👱🏾‍♀️|👱🏾‍♂️|👱🏿‍♀️|👱🏿‍♂️|👳🏻‍♀️|👳🏻‍♂️|👳🏼‍♀️|👳🏼‍♂️|👳🏽‍♀️|👳🏽‍♂️|👳🏾‍♀️|👳🏾‍♂️|👳🏿‍♀️|👳🏿‍♂️|👷🏻‍♀️|👷🏻‍♂️|👷🏼‍♀️|👷🏼‍♂️|👷🏽‍♀️|👷🏽‍♂️|👷🏾‍♀️|👷🏾‍♂️|👷🏿‍♀️|👷🏿‍♂️|💁🏻‍♀️|💁🏻‍♂️|💁🏼‍♀️|💁🏼‍♂️|💁🏽‍♀️|💁🏽‍♂️|💁🏾‍♀️|💁🏾‍♂️|💁🏿‍♀️|💁🏿‍♂️|💂🏻‍♀️|💂🏻‍♂️|💂🏼‍♀️|💂🏼‍♂️|💂🏽‍♀️|💂🏽‍♂️|💂🏾‍♀️|💂🏾‍♂️|💂🏿‍♀️|💂🏿‍♂️|💆🏻‍♀️|💆🏻‍♂️|💆🏼‍♀️|💆🏼‍♂️|💆🏽‍♀️|💆🏽‍♂️|💆🏾‍♀️|💆🏾‍♂️|💆🏿‍♀️|💆🏿‍♂️|💇🏻‍♀️|💇🏻‍♂️|💇🏼‍♀️|💇🏼‍♂️|💇🏽‍♀️|💇🏽‍♂️|💇🏾‍♀️|💇🏾‍♂️|💇🏿‍♀️|💇🏿‍♂️|🕵🏻‍♀️|🕵🏻‍♂️|🕵🏼‍♀️|🕵🏼‍♂️|🕵🏽‍♀️|🕵🏽‍♂️|🕵🏾‍♀️|🕵🏾‍♂️|🕵🏿‍♀️|🕵🏿‍♂️|🙅🏻‍♀️|🙅🏻‍♂️|🙅🏼‍♀️|🙅🏼‍♂️|🙅🏽‍♀️|🙅🏽‍♂️|🙅🏾‍♀️|🙅🏾‍♂️|🙅🏿‍♀️|🙅🏿‍♂️|🙆🏻‍♀️|🙆🏻‍♂️|🙆🏼‍♀️|🙆🏼‍♂️|🙆🏽‍♀️|🙆🏽‍♂️|🙆🏾‍♀️|🙆🏾‍♂️|🙆🏿‍♀️|🙆🏿‍♂️|🙇🏻‍♀️|🙇🏻‍♂️|🙇🏼‍♀️|🙇🏼‍♂️|🙇🏽‍♀️|🙇🏽‍♂️|🙇🏾‍♀️|🙇🏾‍♂️|🙇🏿‍♀️|🙇🏿‍♂️|🙋🏻‍♀️|🙋🏻‍♂️|🙋🏼‍♀️|🙋🏼‍♂️|🙋🏽‍♀️|🙋🏽‍♂️|🙋🏾‍♀️|🙋🏾‍♂️|🙋🏿‍♀️|🙋🏿‍♂️|🙍🏻‍♀️|🙍🏻‍♂️|🙍🏼‍♀️|🙍🏼‍♂️|🙍🏽‍♀️|🙍🏽‍♂️|🙍🏾‍♀️|🙍🏾‍♂️|🙍🏿‍♀️|🙍🏿‍♂️|🙎🏻‍♀️|🙎🏻‍♂️|🙎🏼‍♀️|🙎🏼‍♂️|🙎🏽‍♀️|🙎🏽‍♂️|🙎🏾‍♀️|🙎🏾‍♂️|🙎🏿‍♀️|🙎🏿‍♂️|🚣🏻‍♀️|🚣🏻‍♂️|🚣🏼‍♀️|🚣🏼‍♂️|🚣🏽‍♀️|🚣🏽‍♂️|🚣🏾‍♀️|🚣🏾‍♂️|🚣🏿‍♀️|🚣🏿‍♂️|🚴🏻‍♀️|🚴🏻‍♂️|🚴🏼‍♀️|🚴🏼‍♂️|🚴🏽‍♀️|🚴🏽‍♂️|🚴🏾‍♀️|🚴🏾‍♂️|🚴🏿‍♀️|🚴🏿‍♂️|🚵🏻‍♀️|🚵🏻‍♂️|🚵🏼‍♀️|🚵🏼‍♂️|🚵🏽‍♀️|🚵🏽‍♂️|🚵🏾‍♀️|🚵🏾‍♂️|🚵🏿‍♀️|🚵🏿‍♂️|🚶🏻‍♀️|🚶🏻‍♂️|🚶🏻‍➡️|🚶🏼‍♀️|🚶🏼‍♂️|🚶🏼‍➡️|🚶🏽‍♀️|🚶🏽‍♂️|🚶🏽‍➡️|🚶🏾‍♀️|🚶🏾‍♂️|🚶🏾‍➡️|🚶🏿‍♀️|🚶🏿‍♂️|🚶🏿‍➡️|🤦🏻‍♀️|🤦🏻‍♂️|🤦🏼‍♀️|🤦🏼‍♂️|🤦🏽‍♀️|🤦🏽‍♂️|🤦🏾‍♀️|🤦🏾‍♂️|🤦🏿‍♀️|🤦🏿‍♂️|🤵🏻‍♀️|🤵🏻‍♂️|🤵🏼‍♀️|🤵🏼‍♂️|🤵🏽‍♀️|🤵🏽‍♂️|🤵🏾‍♀️|🤵🏾‍♂️|🤵🏿‍♀️|🤵🏿‍♂️|🤷🏻‍♀️|🤷🏻‍♂️|🤷🏼‍♀️|🤷🏼‍♂️|🤷🏽‍♀️|🤷🏽‍♂️|🤷🏾‍♀️|🤷🏾‍♂️|🤷🏿‍♀️|🤷🏿‍♂️|🤸🏻‍♀️|🤸🏻‍♂️|🤸🏼‍♀️|🤸🏼‍♂️|🤸🏽‍♀️|🤸🏽‍♂️|🤸🏾‍♀️|🤸🏾‍♂️|🤸🏿‍♀️|🤸🏿‍♂️|🤹🏻‍♀️|🤹🏻‍♂️|🤹🏼‍♀️|🤹🏼‍♂️|🤹🏽‍♀️|🤹🏽‍♂️|🤹🏾‍♀️|🤹🏾‍♂️|🤹🏿‍♀️|🤹🏿‍♂️|🤼🏻‍♀️|🤼🏻‍♂️|🤼🏼‍♀️|🤼🏼‍♂️|🤼🏽‍♀️|🤼🏽‍♂️|🤼🏾‍♀️|🤼🏾‍♂️|🤼🏿‍♀️|🤼🏿‍♂️|🤽🏻‍♀️|🤽🏻‍♂️|🤽🏼‍♀️|🤽🏼‍♂️|🤽🏽‍♀️|🤽🏽‍♂️|🤽🏾‍♀️|🤽🏾‍♂️|🤽🏿‍♀️|🤽🏿‍♂️|🤾🏻‍♀️|🤾🏻‍♂️|🤾🏼‍♀️|🤾🏼‍♂️|🤾🏽‍♀️|🤾🏽‍♂️|🤾🏾‍♀️|🤾🏾‍♂️|🤾🏿‍♀️|🤾🏿‍♂️|🦸🏻‍♀️|🦸🏻‍♂️|🦸🏼‍♀️|🦸🏼‍♂️|🦸🏽‍♀️|🦸🏽‍♂️|🦸🏾‍♀️|🦸🏾‍♂️|🦸🏿‍♀️|🦸🏿‍♂️|🦹🏻‍♀️|🦹🏻‍♂️|🦹🏼‍♀️|🦹🏼‍♂️|🦹🏽‍♀️|🦹🏽‍♂️|🦹🏾‍♀️|🦹🏾‍♂️|🦹🏿‍♀️|🦹🏿‍♂️|🧍🏻‍♀️|🧍🏻‍♂️|🧍🏼‍♀️|🧍🏼‍♂️|🧍🏽‍♀️|🧍🏽‍♂️|🧍🏾‍♀️|🧍🏾‍♂️|🧍🏿‍♀️|🧍🏿‍♂️|🧎🏻‍♀️|🧎🏻‍♂️|🧎🏻‍➡️|🧎🏼‍♀️|🧎🏼‍♂️|🧎🏼‍➡️|🧎🏽‍♀️|🧎🏽‍♂️|🧎🏽‍➡️|🧎🏾‍♀️|🧎🏾‍♂️|🧎🏾‍➡️|🧎🏿‍♀️|🧎🏿‍♂️|🧎🏿‍➡️|🧏🏻‍♀️|🧏🏻‍♂️|🧏🏼‍♀️|🧏🏼‍♂️|🧏🏽‍♀️|🧏🏽‍♂️|🧏🏾‍♀️|🧏🏾‍♂️|🧏🏿‍♀️|🧏🏿‍♂️|🧑🏻‍⚕️|🧑🏻‍⚖️|🧑🏻‍✈️|🧑🏻‍🌾|🧑🏻‍🍳|🧑🏻‍🍼|🧑🏻‍🎄|🧑🏻‍🎓|🧑🏻‍🎤|🧑🏻‍🎨|🧑🏻‍🏫|🧑🏻‍🏭|🧑🏻‍💻|🧑🏻‍💼|🧑🏻‍🔧|🧑🏻‍🔬|🧑🏻‍🚀|🧑🏻‍🚒|🧑🏻‍🦯|🧑🏻‍🦰|🧑🏻‍🦱|🧑🏻‍🦲|🧑🏻‍🦳|🧑🏻‍🦼|🧑🏻‍🦽|🧑🏻‍🩰|🧑🏼‍⚕️|🧑🏼‍⚖️|🧑🏼‍✈️|🧑🏼‍🌾|🧑🏼‍🍳|🧑🏼‍🍼|🧑🏼‍🎄|🧑🏼‍🎓|🧑🏼‍🎤|🧑🏼‍🎨|🧑🏼‍🏫|🧑🏼‍🏭|🧑🏼‍💻|🧑🏼‍💼|🧑🏼‍🔧|🧑🏼‍🔬|🧑🏼‍🚀|🧑🏼‍🚒|🧑🏼‍🦯|🧑🏼‍🦰|🧑🏼‍🦱|🧑🏼‍🦲|🧑🏼‍🦳|🧑🏼‍🦼|🧑🏼‍🦽|🧑🏼‍🩰|🧑🏽‍⚕️|🧑🏽‍⚖️|🧑🏽‍✈️|🧑🏽‍🌾|🧑🏽‍🍳|🧑🏽‍🍼|🧑🏽‍🎄|🧑🏽‍🎓|🧑🏽‍🎤|🧑🏽‍🎨|🧑🏽‍🏫|🧑🏽‍🏭|🧑🏽‍💻|🧑🏽‍💼|🧑🏽‍🔧|🧑🏽‍🔬|🧑🏽‍🚀|🧑🏽‍🚒|🧑🏽‍🦯|🧑🏽‍🦰|🧑🏽‍🦱|🧑🏽‍🦲|🧑🏽‍🦳|🧑🏽‍🦼|🧑🏽‍🦽|🧑🏽‍🩰|🧑🏾‍⚕️|🧑🏾‍⚖️|🧑🏾‍✈️|🧑🏾‍🌾|🧑🏾‍🍳|🧑🏾‍🍼|🧑🏾‍🎄|🧑🏾‍🎓|🧑🏾‍🎤|🧑🏾‍🎨|🧑🏾‍🏫|🧑🏾‍🏭|🧑🏾‍💻|🧑🏾‍💼|🧑🏾‍🔧|🧑🏾‍🔬|🧑🏾‍🚀|🧑🏾‍🚒|🧑🏾‍🦯|🧑🏾‍🦰|🧑🏾‍🦱|🧑🏾‍🦲|🧑🏾‍🦳|🧑🏾‍🦼|🧑🏾‍🦽|🧑🏾‍🩰|🧑🏿‍⚕️|🧑🏿‍⚖️|🧑🏿‍✈️|🧑🏿‍🌾|🧑🏿‍🍳|🧑🏿‍🍼|🧑🏿‍🎄|🧑🏿‍🎓|🧑🏿‍🎤|🧑🏿‍🎨|🧑🏿‍🏫|🧑🏿‍🏭|🧑🏿‍💻|🧑🏿‍💼|🧑🏿‍🔧|🧑🏿‍🔬|🧑🏿‍🚀|🧑🏿‍🚒|🧑🏿‍🦯|🧑🏿‍🦰|🧑🏿‍🦱|🧑🏿‍🦲|🧑🏿‍🦳|🧑🏿‍🦼|🧑🏿‍🦽|🧑🏿‍🩰|🧔🏻‍♀️|🧔🏻‍♂️|🧔🏼‍♀️|🧔🏼‍♂️|🧔🏽‍♀️|🧔🏽‍♂️|🧔🏾‍♀️|🧔🏾‍♂️|🧔🏿‍♀️|🧔🏿‍♂️|🧖🏻‍♀️|🧖🏻‍♂️|🧖🏼‍♀️|🧖🏼‍♂️|🧖🏽‍♀️|🧖🏽‍♂️|🧖🏾‍♀️|🧖🏾‍♂️|🧖🏿‍♀️|🧖🏿‍♂️|🧗🏻‍♀️|🧗🏻‍♂️|🧗🏼‍♀️|🧗🏼‍♂️|🧗🏽‍♀️|🧗🏽‍♂️|🧗🏾‍♀️|🧗🏾‍♂️|🧗🏿‍♀️|🧗🏿‍♂️|🧘🏻‍♀️|🧘🏻‍♂️|🧘🏼‍♀️|🧘🏼‍♂️|🧘🏽‍♀️|🧘🏽‍♂️|🧘🏾‍♀️|🧘🏾‍♂️|🧘🏿‍♀️|🧘🏿‍♂️|🧙🏻‍♀️|🧙🏻‍♂️|🧙🏼‍♀️|🧙🏼‍♂️|🧙🏽‍♀️|🧙🏽‍♂️|🧙🏾‍♀️|🧙🏾‍♂️|🧙🏿‍♀️|🧙🏿‍♂️|🧚🏻‍♀️|🧚🏻‍♂️|🧚🏼‍♀️|🧚🏼‍♂️|🧚🏽‍♀️|🧚🏽‍♂️|🧚🏾‍♀️|🧚🏾‍♂️|🧚🏿‍♀️|🧚🏿‍♂️|🧛🏻‍♀️|🧛🏻‍♂️|🧛🏼‍♀️|🧛🏼‍♂️|🧛🏽‍♀️|🧛🏽‍♂️|🧛🏾‍♀️|🧛🏾‍♂️|🧛🏿‍♀️|🧛🏿‍♂️|🧜🏻‍♀️|🧜🏻‍♂️|🧜🏼‍♀️|🧜🏼‍♂️|🧜🏽‍♀️|🧜🏽‍♂️|🧜🏾‍♀️|🧜🏾‍♂️|🧜🏿‍♀️|🧜🏿‍♂️|🧝🏻‍♀️|🧝🏻‍♂️|🧝🏼‍♀️|🧝🏼‍♂️|🧝🏽‍♀️|🧝🏽‍♂️|🧝🏾‍♀️|🧝🏾‍♂️|🧝🏿‍♀️|🧝🏿‍♂️|⛹🏻‍♀️|⛹🏻‍♂️|⛹🏼‍♀️|⛹🏼‍♂️|⛹🏽‍♀️|⛹🏽‍♂️|⛹🏾‍♀️|⛹🏾‍♂️|⛹🏿‍♀️|⛹🏿‍♂️|🏋️‍♀️|🏋️‍♂️|🏌️‍♀️|🏌️‍♂️|🏳️‍⚧️|🏳️‍🌈|🕵️‍♀️|🕵️‍♂️|😶‍🌫️|⛓️‍💥|⛹️‍♀️|⛹️‍♂️|❤️‍🔥|❤️‍🩹|🍄‍🟫|🍋‍🟩|🏃‍♀️|🏃‍♂️|🏃‍➡️|🏄‍♀️|🏄‍♂️|🏊‍♀️|🏊‍♂️|🏴‍☠️|🐕‍🦺|🐦‍🔥|🐻‍❄️|👨‍⚕️|👨‍⚖️|👨‍✈️|👨‍🌾|👨‍🍳|👨‍🍼|👨‍🎓|👨‍🎤|👨‍🎨|👨‍🏫|👨‍🏭|👨‍👦|👨‍👧|👨‍💻|👨‍💼|👨‍🔧|👨‍🔬|👨‍🚀|👨‍🚒|👨‍🦯|👨‍🦰|👨‍🦱|👨‍🦲|👨‍🦳|👨‍🦼|👨‍🦽|👩‍⚕️|👩‍⚖️|👩‍✈️|👩‍🌾|👩‍🍳|👩‍🍼|👩‍🎓|👩‍🎤|👩‍🎨|👩‍🏫|👩‍🏭|👩‍👦|👩‍👧|👩‍💻|👩‍💼|👩‍🔧|👩‍🔬|👩‍🚀|👩‍🚒|👩‍🦯|👩‍🦰|👩‍🦱|👩‍🦲|👩‍🦳|👩‍🦼|👩‍🦽|👮‍♀️|👮‍♂️|👯‍♀️|👯‍♂️|👰‍♀️|👰‍♂️|👱‍♀️|👱‍♂️|👳‍♀️|👳‍♂️|👷‍♀️|👷‍♂️|💁‍♀️|💁‍♂️|💂‍♀️|💂‍♂️|💆‍♀️|💆‍♂️|💇‍♀️|💇‍♂️|😮‍💨|😵‍💫|🙂‍↔️|🙂‍↕️|🙅‍♀️|🙅‍♂️|🙆‍♀️|🙆‍♂️|🙇‍♀️|🙇‍♂️|🙋‍♀️|🙋‍♂️|🙍‍♀️|🙍‍♂️|🙎‍♀️|🙎‍♂️|🚣‍♀️|🚣‍♂️|🚴‍♀️|🚴‍♂️|🚵‍♀️|🚵‍♂️|🚶‍♀️|🚶‍♂️|🚶‍➡️|🤦‍♀️|🤦‍♂️|🤵‍♀️|🤵‍♂️|🤷‍♀️|🤷‍♂️|🤸‍♀️|🤸‍♂️|🤹‍♀️|🤹‍♂️|🤼‍♀️|🤼‍♂️|🤽‍♀️|🤽‍♂️|🤾‍♀️|🤾‍♂️|🦸‍♀️|🦸‍♂️|🦹‍♀️|🦹‍♂️|🧍‍♀️|🧍‍♂️|🧎‍♀️|🧎‍♂️|🧎‍➡️|🧏‍♀️|🧏‍♂️|🧑‍⚕️|🧑‍⚖️|🧑‍✈️|🧑‍🌾|🧑‍🍳|🧑‍🍼|🧑‍🎄|🧑‍🎓|🧑‍🎤|🧑‍🎨|🧑‍🏫|🧑‍🏭|🧑‍💻|🧑‍💼|🧑‍🔧|🧑‍🔬|🧑‍🚀|🧑‍🚒|🧑‍🦯|🧑‍🦰|🧑‍🦱|🧑‍🦲|🧑‍🦳|🧑‍🦼|🧑‍🦽|🧑‍🧒|🧑‍🩰|🧔‍♀️|🧔‍♂️|🧖‍♀️|🧖‍♂️|🧗‍♀️|🧗‍♂️|🧘‍♀️|🧘‍♂️|🧙‍♀️|🧙‍♂️|🧚‍♀️|🧚‍♂️|🧛‍♀️|🧛‍♂️|🧜‍♀️|🧜‍♂️|🧝‍♀️|🧝‍♂️|🧞‍♀️|🧞‍♂️|🧟‍♀️|🧟‍♂️|\\*️⃣|🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿|🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿|🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|🐈‍⬛|🐦‍⬛|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿|👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿|👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿|👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿|👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿|👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|👯🏻|👯🏼|👯🏽|👯🏾|👯🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿|👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿|👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿|👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿|💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿|💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿|🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿|🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿|🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿|🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿|🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿|🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿|🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|🤝🏻|🤝🏼|🤝🏽|🤝🏾|🤝🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿|🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿|🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿|🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🤼🏻|🤼🏼|🤼🏽|🤼🏾|🤼🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿|🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿|🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿|🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿|🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿|🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿|🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|🫃🏻|🫃🏼|🫃🏽|🫃🏾|🫃🏿|🫄🏻|🫄🏼|🫄🏽|🫄🏾|🫄🏿|🫅🏻|🫅🏼|🫅🏽|🫅🏾|🫅🏿|🫰🏻|🫰🏼|🫰🏽|🫰🏾|🫰🏿|🫱🏻|🫱🏼|🫱🏽|🫱🏾|🫱🏿|🫲🏻|🫲🏼|🫲🏽|🫲🏾|🫲🏿|🫳🏻|🫳🏼|🫳🏽|🫳🏾|🫳🏿|🫴🏻|🫴🏼|🫴🏽|🫴🏾|🫴🏿|🫵🏻|🫵🏼|🫵🏽|🫵🏾|🫵🏿|🫶🏻|🫶🏼|🫶🏽|🫶🏾|🫶🏿|🫷🏻|🫷🏼|🫷🏽|🫷🏾|🫷🏿|🫸🏻|🫸🏼|🫸🏽|🫸🏾|🫸🏿|#️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣|☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿|✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|🅰️|🅱️|🅾️|🅿️|🈂️|🈷️|🌡️|🌤️|🌥️|🌦️|🌧️|🌨️|🌩️|🌪️|🌫️|🌬️|🌶️|🍽️|🎖️|🎗️|🎙️|🎚️|🎛️|🎞️|🎟️|🏋️|🏌️|🏍️|🏎️|🏔️|🏕️|🏖️|🏗️|🏘️|🏙️|🏚️|🏛️|🏜️|🏝️|🏞️|🏟️|🏳️|🏵️|🏷️|🐿️|👁️|📽️|🕉️|🕊️|🕯️|🕰️|🕳️|🕴️|🕵️|🕶️|🕷️|🕸️|🕹️|🖇️|🖊️|🖋️|🖌️|🖍️|🖐️|🖥️|🖨️|🖱️|🖲️|🖼️|🗂️|🗃️|🗄️|🗑️|🗒️|🗓️|🗜️|🗝️|🗞️|🗡️|🗣️|🗨️|🗯️|🗳️|🗺️|🛋️|🛍️|🛎️|🛏️|🛠️|🛡️|🛢️|🛣️|🛤️|🛥️|🛩️|🛰️|🛳️|©️|®️|‼️|⁉️|™️|ℹ️|↔️|↕️|↖️|↗️|↘️|↙️|↩️|↪️|⌨️|⏏️|⏭️|⏮️|⏯️|⏱️|⏲️|⏸️|⏹️|⏺️|Ⓜ️|▪️|▫️|▶️|◀️|◻️|◼️|☀️|☁️|☂️|☃️|☄️|☎️|☑️|☘️|☝️|☠️|☢️|☣️|☦️|☪️|☮️|☯️|☸️|☹️|☺️|♀️|♂️|♟️|♠️|♣️|♥️|♦️|♨️|♻️|♾️|⚒️|⚔️|⚕️|⚖️|⚗️|⚙️|⚛️|⚜️|⚠️|⚧️|⚰️|⚱️|⛈️|⛏️|⛑️|⛓️|⛩️|⛰️|⛱️|⛴️|⛷️|⛸️|⛹️|✂️|✈️|✉️|✌️|✍️|✏️|✒️|✔️|✖️|✝️|✡️|✳️|✴️|❄️|❇️|❣️|❤️|➡️|⤴️|⤵️|⬅️|⬆️|⬇️|〰️|〽️|㊗️|㊙️|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55\\u{1F004}\\u{1F0CF}\\u{1F18E}\\u{1F191}-\\u{1F19A}\\u{1F201}\\u{1F21A}\\u{1F22F}\\u{1F232}-\\u{1F236}\\u{1F238}-\\u{1F23A}\\u{1F250}\\u{1F251}\\u{1F300}-\\u{1F320}\\u{1F32D}-\\u{1F335}\\u{1F337}-\\u{1F37C}\\u{1F37E}-\\u{1F393}\\u{1F3A0}-\\u{1F3CA}\\u{1F3CF}-\\u{1F3D3}\\u{1F3E0}-\\u{1F3F0}\\u{1F3F4}\\u{1F3F8}-\\u{1F43E}\\u{1F440}\\u{1F442}-\\u{1F4FC}\\u{1F4FF}-\\u{1F53D}\\u{1F54B}-\\u{1F54E}\\u{1F550}-\\u{1F567}\\u{1F57A}\\u{1F595}\\u{1F596}\\u{1F5A4}\\u{1F5FB}-\\u{1F64F}\\u{1F680}-\\u{1F6C5}\\u{1F6CC}\\u{1F6D0}-\\u{1F6D2}\\u{1F6D5}-\\u{1F6D8}\\u{1F6DC}-\\u{1F6DF}\\u{1F6EB}\\u{1F6EC}\\u{1F6F4}-\\u{1F6FC}\\u{1F7E0}-\\u{1F7EB}\\u{1F7F0}\\u{1F90C}-\\u{1F93A}\\u{1F93C}-\\u{1F945}\\u{1F947}-\\u{1F9FF}\\u{1FA70}-\\u{1FA7C}\\u{1FA80}-\\u{1FA8A}\\u{1FA8E}-\\u{1FAC6}\\u{1FAC8}\\u{1FACD}-\\u{1FADC}\\u{1FADF}-\\u{1FAEA}\\u{1FAEF}-\\u{1FAF8}])/ug).length;\n      }\n    } else {\n      content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"material-icons gray\"\n      }, \"warning_amber\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"gray\"\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"invalid_content\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"invalid content\"\n        }]\n      })));\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      ref: this.props.innerRef,\n      className: sideClass\n    }, this.props.isGroup && this.props.response ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, fullDisplay ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      topic: this.props.userFrom,\n      title: this.props.userName,\n      avatar: avatar\n    }) : null) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: bubbleClass\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"content-meta\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: textSizeClass\n    }, content, attachments), this.props.timestamp ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_received_marker_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n      edited: this.props.edited,\n      timestamp: this.props.timestamp,\n      received: this.props.received\n    }) : null), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"menuTrigger\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleContextClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"expand_more\"))) : null), fullDisplay ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"author\"\n    }, this.props.userName || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"user_not_found\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Not found\"\n      }]\n    }))) : null));\n  }\n}\n;\nconst IntlChatMessage = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(BaseChatMessage);\nconst ChatMessage = react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef((props, ref) => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(IntlChatMessage, _extends({\n  innerRef: ref\n}, props)));\n/* harmony default export */ __webpack_exports__[\"default\"] = (ChatMessage);\n\n/***/ }),\n\n/***/ \"./src/widgets/group-subs.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/group-subs.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ GroupSubs; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\n\n\nclass GroupSubs extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {\n  constructor(props) {\n    super(props);\n  }\n  render() {\n    const usersOnline = [];\n    const totalCount = (this.props.subscribers || []).length;\n    const countToShow = Math.min(_config_js__WEBPACK_IMPORTED_MODULE_2__.MAX_ONLINE_IN_TOPIC, totalCount);\n    (this.props.subscribers || []).some(sub => {\n      usersOnline.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"avatar-box\",\n        key: sub.user\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n        authorizeURL: this.props.tinode.authorizeURL,\n        topic: sub.user,\n        avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.makeImageUrl)(sub.public ? sub.public.photo : null) || true,\n        title: sub.public ? sub.public.fn : null\n      })));\n      return usersOnline.length == countToShow;\n    });\n    if (usersOnline.length == 0) {\n      return null;\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"topic-users\"\n    }, usersOnline, \" \", totalCount > countToShow ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"more_online_members\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"+\"\n      }, {\n        \"type\": 1,\n        \"value\": \"overflow\"\n      }, {\n        \"type\": 0,\n        \"value\": \" more\"\n      }],\n      values: {\n        overflow: totalCount - countToShow\n      }\n    })) : null);\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/invitation.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/invitation.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Invitation; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass Invitation extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleButtonAction = this.handleButtonAction.bind(this);\n  }\n  handleButtonAction(evt, data) {\n    evt.preventDefault();\n    this.props.onAction(data);\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"accept-invite-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"title\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"chat_invitation\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"You are invited to start a new chat. What would you like to do?\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"footer\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      onClick: event => {\n        this.handleButtonAction(event, \"accept\");\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"chat_invitation_accept\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Accept\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: event => {\n        this.handleButtonAction(event, \"delete\");\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"chat_invitation_ignore\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Ignore\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: event => {\n        this.handleButtonAction(event, \"block\");\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"chat_invitation_block\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Block\"\n      }]\n    }))));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/meta-message.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/meta-message.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ MetaMessage; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nclass MetaMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n  }\n  render() {\n    let content = null;\n    let bubbleClass = 'bubble';\n    if (this.props.date) {\n      content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.props.date);\n      bubbleClass += ' date';\n    }\n    if (!content) {\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, null);\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: \"meta\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: bubbleClass\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"message-content\"\n    }, content)));\n  }\n}\n;\n\n/***/ }),\n\n/***/ \"./src/widgets/pinned-messages.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/pinned-messages.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/formatters.js */ \"./src/lib/formatters.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  message_not_found: {\n    id: \"message_not_found\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"message not found\"\n    }]\n  },\n  message_deleted: {\n    id: \"message_deleted\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"message deleted\"\n    }]\n  }\n});\nclass PinnedMessages extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.touchX = null;\n    this.touchY = null;\n    this.touchSurface = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.getSelectedIndex = this.getSelectedIndex.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n    this.handleSelected = this.handleSelected.bind(this);\n    this.handleMoveNext = this.handleMoveNext.bind(this);\n    this.handleMovePrev = this.handleMovePrev.bind(this);\n    this.handleTouchEventStart = this.handleTouchEventStart.bind(this);\n    this.handleTouchEventEnd = this.handleTouchEventEnd.bind(this);\n    this.handleTouchCancel = this.handleTouchCancel.bind(this);\n  }\n  componentDidMount() {\n    this.touchSurface.current.addEventListener('touchstart', this.handleTouchEventStart, {\n      passive: true\n    });\n    this.touchSurface.current.addEventListener('touchend', this.handleTouchEventEnd, {\n      passive: true\n    });\n    this.touchSurface.current.addEventListener('touchcancel', this.handleTouchCancel, {\n      passive: true\n    });\n  }\n  componentWillUnmount() {\n    this.touchSurface.current.removeEventListener('touchstart', this.handleTouchEventStart);\n    this.touchSurface.current.removeEventListener('touchend', this.handleTouchEventEnd);\n    this.touchSurface.current.removeEventListener('touchcancel', this.handleTouchCancel);\n  }\n  getSelectedIndex() {\n    const list = this.props.pins || [];\n    return list.length - this.props.selected - 1;\n  }\n  handleCancel(e) {\n    e.preventDefault();\n    this.props.onCancel(this.props.pins[this.getSelectedIndex()]);\n  }\n  handleSelected(e) {\n    e.preventDefault();\n    this.props.onSelected(this.props.pins[this.getSelectedIndex()]);\n  }\n  handleMoveNext(e, isTouch) {\n    isTouch || e.preventDefault();\n    e.stopPropagation();\n    const idx = Math.max(this.props.selected - 1, 0);\n    if (idx != this.props.selected) {\n      this.props.setSelected(idx);\n    }\n  }\n  handleMovePrev(e, isTouch) {\n    isTouch || e.preventDefault();\n    e.stopPropagation();\n    const idx = Math.min(this.props.selected + 1, (this.props.pins || []).length - 1);\n    if (idx != this.props.selected) {\n      this.props.setSelected(idx);\n    }\n  }\n  handleTouchEventStart(e) {\n    if (e.touches.length == 1) {\n      this.touchX = e.touches[0].clientX;\n      this.touchY = e.touches[0].clientY;\n    }\n  }\n  handleTouchEventEnd(e) {\n    if (this.touchX === null || e.changedTouches.length != 1) {\n      this.touchX = null;\n      return;\n    }\n    const dX = this.touchX - e.changedTouches[0].clientX;\n    const dY = this.touchY - e.changedTouches[0].clientY;\n    this.touchX = null;\n    if (Math.abs(dX) > Math.abs(dY) || Math.abs(dY) < _config_js__WEBPACK_IMPORTED_MODULE_4__.MIN_SWIPE_DISTANCE) {\n      return;\n    }\n    if (dY > 0) {\n      this.handleMovePrev(e, true);\n    } else {\n      this.handleMoveNext(e, true);\n    }\n  }\n  handleTouchCancel() {\n    this.touchX = null;\n  }\n  render() {\n    const selected = this.getSelectedIndex();\n    let messageShown = (this.props.messages || [])[selected];\n    messageShown = messageShown ? messageShown._deleted ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"gray\"\n    }, this.props.intl.formatMessage(messages.message_deleted)) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(messageShown.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_3__.previewFormatter, {\n      formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n      authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"gray\"\n    }, this.props.intl.formatMessage(messages.message_not_found));\n    const dots = [];\n    this.props.pins.forEach(seq => {\n      const cn = dots.length == selected ? 'adot' : 'dot';\n      dots.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        key: seq,\n        className: cn\n      }));\n    });\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"pinned-wrapper\",\n      ref: this.touchSurface\n    }, this.props.isAdmin ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"cancel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleCancel\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"push_pin\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"pinned-scroll\"\n    }, dots), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"pinned\",\n      onClick: this.handleSelected\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", null, messageShown)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"pinned-menu\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"menuTrigger upper\"\n    }, selected > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleMovePrev\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"expand_less\")) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"menuTrigger lower\"\n    }, this.props.selected > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleMoveNext\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"expand_more\")) : null)));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PinnedMessages));\n\n/***/ }),\n\n/***/ \"./src/widgets/received-marker.jsx\":\n/*!*****************************************!*\\\n  !*** ./src/widgets/received-marker.jsx ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  message_sending: {\n    id: \"message_sending\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"sending...\"\n    }]\n  },\n  message_sending_failed: {\n    id: \"message_sending_failed\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"failed\"\n    }]\n  },\n  message_edited_marker: {\n    id: \"message_edited_marker\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \", edited\"\n    }]\n  }\n});\nclass ReceivedMarker extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    let timestamp;\n    if (this.props.received <= tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_SENDING) {\n      timestamp = formatMessage(messages.message_sending);\n    } else if (this.props.received == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_FAILED || this.props.received == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.MESSAGE_STATUS_FATAL) {\n      timestamp = formatMessage(messages.message_sending_failed);\n    } else {\n      timestamp = this.props.timestamp.toLocaleTimeString(this.props.intl.locale, {\n        timeStyle: 'short'\n      });\n    }\n    const icon = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.deliveryMarker)(this.props.received);\n    const marker = icon ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: 'material-icons small ' + icon.color\n    }, icon.name) : null;\n    const edited = this.props.edited ? formatMessage(messages.message_edited_marker) : null;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"timestamp\"\n    }, timestamp, edited, '\\u00a0', marker);\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ReceivedMarker));\n\n/***/ }),\n\n/***/ \"./src/widgets/send-message.jsx\":\n/*!**************************************!*\\\n  !*** ./src/widgets/send-message.jsx ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/formatters.js */ \"./src/lib/formatters.js\");\n\n\n\nconst AudioRecorder = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_webm-duration-fix_lib_index_js\"), __webpack_require__.e(\"src_widgets_audio-recorder_jsx\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./audio-recorder.jsx */ \"./src/widgets/audio-recorder.jsx\")));\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  messaging_disabled: {\n    id: \"messaging_disabled_prompt\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Messaging disabled\"\n    }]\n  },\n  type_new_message: {\n    id: \"new_message_prompt\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"New message\"\n    }]\n  },\n  add_image_caption: {\n    id: \"image_caption_prompt\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Image caption\"\n    }]\n  },\n  file_attachment_too_large: {\n    id: \"file_attachment_too_large\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"The file size \"\n    }, {\n      \"type\": 1,\n      \"value\": \"size\"\n    }, {\n      \"type\": 0,\n      \"value\": \" exceeds the \"\n    }, {\n      \"type\": 1,\n      \"value\": \"limit\"\n    }, {\n      \"type\": 0,\n      \"value\": \" limit.\"\n    }]\n  },\n  cannot_initiate_upload: {\n    id: \"cannot_initiate_file_upload\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Cannot initiate file upload.\"\n    }]\n  },\n  icon_title_record_voice: {\n    id: \"icon_title_record_voice\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Record voice message\"\n    }]\n  },\n  icon_title_attach_file: {\n    id: \"icon_title_attach_file\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Attach file\"\n    }]\n  },\n  icon_title_add_image: {\n    id: \"icon_title_add_image\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Add image\"\n    }]\n  },\n  icon_title_send: {\n    id: \"icon_title_send\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Send message\"\n    }]\n  }\n});\nclass SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      quote: null,\n      message: '',\n      audioRec: false,\n      audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)\n    };\n    this.keypressTimestamp = 0;\n    this.handlePasteEvent = this.handlePasteEvent.bind(this);\n    this.handleAttachImage = this.handleAttachImage.bind(this);\n    this.handleAttachFile = this.handleAttachFile.bind(this);\n    this.handleAttachAudio = this.handleAttachAudio.bind(this);\n    this.handleSend = this.handleSend.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleMessageTyping = this.handleMessageTyping.bind(this);\n    this.handleDropAttach = this.handleDropAttach.bind(this);\n    this.handleQuoteClick = this.handleQuoteClick.bind(this);\n    this.formatReply = this.formatReply.bind(this);\n  }\n  componentDidMount() {\n    if (this.messageEditArea) {\n      this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n      if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n        this.messageEditArea.focus();\n      }\n    }\n    this.setState({\n      quote: this.formatReply()\n    });\n  }\n  componentWillUnmount() {\n    if (this.messageEditArea) {\n      this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n    }\n  }\n  componentDidUpdate(prevProps) {\n    if (this.messageEditArea) {\n      if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n        this.messageEditArea.focus();\n      }\n      this.messageEditArea.style.height = '0px';\n      this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\n    }\n    if (prevProps.topicName != this.props.topicName) {\n      this.setState({\n        message: this.props.initMessage || '',\n        audioRec: false,\n        quote: null\n      });\n    } else if (prevProps.initMessage != this.props.initMessage) {\n      const msg = this.props.initMessage || '';\n      this.setState({\n        message: msg\n      }, _ => {\n        this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\n        this.messageEditArea.setSelectionRange(msg.length, msg.length);\n      });\n    }\n    if (prevProps.reply != this.props.reply) {\n      this.setState({\n        quote: this.formatReply()\n      });\n    }\n  }\n  formatReply() {\n    return this.props.reply ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.reply.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__.replyFormatter, {\n      formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n      authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n    }) : null;\n  }\n  handlePasteEvent(e) {\n    if (this.props.disabled) {\n      return;\n    }\n    if ((0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.filePasted)(e, file => {\n      this.props.onAttachImage(file);\n    }, file => {\n      this.props.onAttachFile(file);\n    }, this.props.onError)) {\n      e.preventDefault();\n    }\n  }\n  handleAttachImage(e) {\n    if (e.target.files && e.target.files.length > 0) {\n      this.props.onAttachImage(e.target.files[0]);\n    }\n    e.target.value = '';\n  }\n  handleAttachFile(e) {\n    if (e.target.files && e.target.files.length > 0) {\n      this.props.onAttachFile(e.target.files[0]);\n    }\n    e.target.value = '';\n  }\n  handleDropAttach(files) {\n    if (files && files.length > 0) {\n      this.props.onAttachFile(files[0]);\n    }\n  }\n  handleAttachAudio(url, preview, duration) {\n    this.setState({\n      audioRec: false\n    });\n    this.props.onAttachAudio(url, preview, duration);\n  }\n  handleSend(e) {\n    e.preventDefault();\n    const message = this.state.message.trim();\n    if (message || this.props.acceptBlank || this.props.noInput) {\n      this.props.onSendMessage(message);\n      this.setState({\n        message: ''\n      });\n    }\n  }\n  handleKeyPress(e) {\n    if (this.state.audioRec) {\n      e.preventDefault();\n      e.stopPropagation();\n      return;\n    }\n    if (e.key === 'Enter') {\n      if (this.props.sendOnEnter == 'plain') {\n        if (!e.shiftKey) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.handleSend(e);\n        }\n      } else {\n        if (e.ctrlKey || e.metaKey) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.handleSend(e);\n        }\n      }\n    }\n  }\n  handleMessageTyping(e) {\n    this.setState({\n      message: e.target.value\n    });\n    if (this.props.onKeyPress) {\n      const now = new Date().getTime();\n      if (now - this.keypressTimestamp > _config_js__WEBPACK_IMPORTED_MODULE_3__.KEYPRESS_DELAY) {\n        this.props.onKeyPress();\n        this.keypressTimestamp = now;\n      }\n    }\n  }\n  handleQuoteClick(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.props.reply && this.props.onQuoteClick) {\n      const replyToSeq = this.props.reply.seq;\n      this.props.onQuoteClick(replyToSeq);\n    }\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const prompt = this.props.disabled ? formatMessage(messages.messaging_disabled) : this.props.messagePrompt ? formatMessage(messages[this.props.messagePrompt]) : formatMessage(messages.type_new_message);\n    const sendIcon = this.props.reply && this.props.reply.editing ? 'check_circle' : 'send';\n    const quote = this.state.quote ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"reply-quote-preview\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"cancel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onCancelReply();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))), this.state.quote) : null;\n    const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"send-message-wrapper\"\n    }, !this.props.noInput ? quote : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"send-message-panel\"\n    }, !this.props.disabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.props.onAttachFile && !this.state.audioRec ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.attachImage.click();\n      },\n      title: formatMessage(messages.icon_title_add_image)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons secondary\"\n    }, \"photo\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.attachFile.click();\n      },\n      title: formatMessage(messages.icon_title_attach_file)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons secondary\"\n    }, \"attach_file\"))) : null, this.props.noInput ? quote || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"hr thin\"\n    }) : this.state.audioRec ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n      fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n        id: \"loading_note\",\n        defaultMessage: [{\n          \"type\": 0,\n          \"value\": \"Loading...\"\n        }]\n      }))\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AudioRecorder, {\n      onRecordingProgress: _ => this.props.onKeyPress(true),\n      onDeleted: _ => this.setState({\n        audioRec: false\n      }),\n      onFinished: this.handleAttachAudio\n    })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"textarea\", {\n      id: \"send-message-input\",\n      placeholder: prompt,\n      value: this.state.message,\n      onChange: this.handleMessageTyping,\n      onKeyDown: this.handleKeyPress,\n      ref: ref => {\n        this.messageEditArea = ref;\n      }\n    }), this.state.message || !audioEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleSend,\n      title: formatMessage(messages.icon_title_send)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, sendIcon)) : !this.state.audioRec ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.setState({\n          audioRec: true\n        });\n      },\n      title: formatMessage(messages.icon_title_record_voice)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"mic\")) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"file\",\n      ref: ref => {\n        this.attachFile = ref;\n      },\n      onChange: this.handleAttachFile,\n      style: {\n        display: 'none'\n      }\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"file\",\n      ref: ref => {\n        this.attachImage = ref;\n      },\n      accept: \"image/*, video/*\",\n      onChange: this.handleAttachImage,\n      style: {\n        display: 'none'\n      }\n    })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"writing-disabled\"\n    }, prompt)));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SendMessage));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_messages-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_password-reset-view_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_password-reset-view_jsx\"],{\n\n/***/ \"./src/dcodes.json\":\n/*!*************************!*\\\n  !*** ./src/dcodes.json ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\"}]');\n\n/***/ }),\n\n/***/ \"./src/views/password-reset-view.jsx\":\n/*!*******************************************!*\\\n  !*** ./src/views/password-reset-view.jsx ***!\n  \\*******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/phone-edit.jsx */ \"./src/widgets/phone-edit.jsx\");\n/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ \"./src/widgets/visible-password.jsx\");\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  password_reset_email_sent: {\n    id: \"password_reset_email_sent\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"An email with security code has been sent.\"\n    }]\n  },\n  password_reset_sms_sent: {\n    id: \"password_reset_sms_sent\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"A text message with security code has been sent.\"\n    }]\n  }\n});\nclass PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      tel: '',\n      email: '',\n      password: '',\n      sent: false,\n      haveCode: false,\n      code: ''\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    props.tinode.connect().catch(err => {\n      this.props.onError(err.message, 'err');\n    });\n  }\n  componentDidMount() {\n    const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].parseUrlHash(window.location.hash);\n    const newState = {\n      token: parsed.params.token,\n      scheme: parsed.params.scheme,\n      code: parsed.params.code || ''\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  componentDidUpdate(prevProps, prevState) {\n    if (prevProps.reqCredMethod != this.props.reqCredMethod && this.props.reqCredMethod) {\n      this.setState({\n        [this.props.reqCredMethod]: this.savedCred || ''\n      });\n    }\n  }\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.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      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      const email = this.state.email.trim();\n      const tel = this.state.tel.trim();\n      this.setState({\n        email: email,\n        tel: tel\n      });\n      this.props.onRequest(this.props.reqCredMethod, email || tel).then(_ => {\n        this.setState({\n          sent: true\n        });\n        const msg = this.props.reqCredMethod == 'email' ? messages.password_reset_email_sent : 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  handleEmailChange(e) {\n    this.setState({\n      email: e.target.value\n    });\n  }\n  handlePasswordChange(e) {\n    this.setState({\n      password: e.target.value\n    });\n  }\n  handleCodeChange(e) {\n    this.setState({\n      code: e.target.value.replace(/[^\\d]/g, '')\n    });\n  }\n  handleShowCodeField(e) {\n    e.preventDefault();\n    this.setState({\n      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    const passwordInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\",\n      htmlFor: \"new-password\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_new_password\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"New password\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"new_password_placeholder\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Enter new password\"\n      }]\n    }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      id: \"new-password\",\n      placeholder: placeholder,\n      autoComplete: \"new-password\",\n      value: this.state.password,\n      required: true,\n      autoFocus: true,\n      onChange: this.handlePasswordChange\n    })));\n    const emailInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.haveCode ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      htmlFor: \"inputEmail\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_reset_password\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Send a password reset email\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"credential_email_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Your registration email\"\n      }]\n    }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"email\",\n      id: \"inputEmail\",\n      placeholder: placeholder,\n      autoComplete: \"email\",\n      value: this.state.email,\n      onChange: this.handleEmailChange,\n      required: true,\n      autoFocus: true\n    })));\n    const phoneInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.haveCode ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_reset_password_tel\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Send SMS to reset password\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"mobile_phone_number\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Mobile phone number\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      autoFocus: true,\n      onShowCountrySelector: this.props.onShowCountrySelector,\n      onSubmit: number => this.setState({\n        tel: number\n      })\n    })));\n    const codeInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small gray\",\n      htmlFor: \"enter-confirmation-code\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"enter_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Confirmation code\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"numeric_confirmation_code_prompt\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Numbers only\"\n      }]\n    }, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"text\",\n      id: \"enter-confirmation-code\",\n      placeholder: numbers_only,\n      maxLength: 10,\n      value: this.state.code,\n      onChange: this.handleCodeChange,\n      required: true\n    }))));\n    const credentialInput = this.props.reqCredMethod == 'email' ? emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"form\", {\n      id: \"password-reset-form\",\n      onSubmit: this.handleSubmit\n    }, !this.state.sent && showCredentialInput ? credentialInput : null, this.state.haveCode || this.state.sent ? codeInput : null, showPasswordInput ? passwordInput : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"dialog-buttons\"\n    }, this.state.haveCode || this.state.sent || this.state.token || this.state.code ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleShowCodeField,\n      style: {\n        marginRight: 'auto'\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"password_i_have_code\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"I have code\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"primary\",\n      type: \"submit\"\n    }, showPasswordInput ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_reset\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Reset\"\n      }]\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_send_request\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Send request\"\n      }]\n    }))));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PasswordResetView));\n\n/***/ }),\n\n/***/ \"./src/widgets/phone-edit.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/phone-edit.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/AsYouType.js\");\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js\");\n/* harmony import */ var libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! libphonenumber-js/mobile/examples */ \"./node_modules/libphonenumber-js/examples.mobile.json.js\");\n/* harmony import */ var _dcodes_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dcodes.json */ \"./src/dcodes.json\");\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  mobile_number_required: {\n    id: \"mobile_number_required\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Mobile phone number required\"\n    }]\n  }\n});\nclass PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.codeMap = {};\n    _dcodes_json__WEBPACK_IMPORTED_MODULE_6__.forEach(dc => {\n      this.codeMap[dc.code] = dc.dial;\n    });\n    const code = props.countryCode || 'US';\n    const dial = this.codeMap[code];\n    this.state = {\n      countryCode: code,\n      dialCode: dial,\n      localNumber: '',\n      placeholderNumber: this.placeholderNumber(code, dial)\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  handleChange(e) {\n    const prefix = `+${this.state.dialCode}`;\n    let formatted = new libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__.AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n    formatted = formatted.substring(prefix.length).trim();\n    this.setState({\n      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 = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__.parsePhoneNumberWithError)(`+${raw}`);\n    } catch (err) {}\n    if (!number || !number.isValid()) {\n      this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n      return;\n    }\n    this.inputField.setCustomValidity('');\n    this.props.onSubmit(number.format('E.164'));\n  }\n  handleKeyDown(e) {\n    if (e.key === 'Enter') {\n      this.handleFinished(e);\n    }\n  }\n  showCountrySelector() {\n    this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode, (code, dial) => {\n      this.setState({\n        countryCode: code,\n        dialCode: dial,\n        placeholderNumber: this.placeholderNumber(code, dial)\n      });\n    });\n  }\n  filterNumber(number) {\n    if (!number) {\n      return number;\n    }\n    return number.replace(/[^-\\s().\\d]/g, '');\n  }\n  placeholderNumber(code, dial) {\n    const sample = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__.getExampleNumber)(code, libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n    return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"dial-code\",\n      onClick: this.showCountrySelector\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"country-flag\"\n    }, (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_7__.flagEmoji)(this.state.countryCode), \"\\xA0\"), \"+\", this.state.dialCode, \"\\xA0\"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"tel\",\n      ref: ref => {\n        this.inputField = ref;\n      },\n      placeholder: this.state.placeholderNumber,\n      value: this.state.localNumber,\n      onChange: this.handleChange,\n      maxLength: 17,\n      onKeyDown: this.handleKeyDown,\n      onBlur: this.handleFinished,\n      required: true,\n      autoFocus: this.props.autoFocus\n    }));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PhoneEdit));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_password-reset-view_jsx.dev.js.map"
  },
  {
    "path": "umd/src_views_wallpapers_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_views_wallpapers_jsx\"],{\n\n/***/ \"./src/views/wallpapers.jsx\":\n/*!**********************************!*\\\n  !*** ./src/views/wallpapers.jsx ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ WallpapersView; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/navigation.js */ \"./src/lib/navigation.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n/* harmony import */ var _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../img/bkg/index.json */ \"./img/bkg/index.json\");\n\n\n\n\n\n\nclass WallpapersView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    const type = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.wallpaperTypeFromUrl)(this.props.wallpaper);\n    const name = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.wallpaperNameFromUrl)(this.props.wallpaper);\n    this.state = {\n      tab: type || _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type,\n      selectedType: type || _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type,\n      wallpaper: name || _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__[_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type][_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.index].name,\n      blur: this.props.wallpaperBlur | 0\n    };\n    this.blurValues = [0, 1, 2, 4, 8, 16];\n    this.handleTabClick = this.handleTabClick.bind(this);\n    this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);\n    this.handleBlurChanged = this.handleBlurChanged.bind(this);\n    this.hasChanged = this.hasChanged.bind(this);\n  }\n  handleTabClick(e) {\n    e.preventDefault();\n    _lib_navigation_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));\n    this.setState({\n      tab: e.currentTarget.dataset.id\n    });\n  }\n  handleWallpaperSelected(e) {\n    let index, type, blur;\n    if (!e) {\n      if (!this.hasChanged()) {\n        return;\n      }\n      type = _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type;\n      index = _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.index;\n      blur = 0;\n    } else {\n      e.preventDefault();\n      type = this.state.tab;\n      index = e.currentTarget.dataset.id;\n      blur = type == 'patt' ? 0 : this.state.blur;\n    }\n    const fname = _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__[type][index].name;\n    const size = type == 'patt' ? _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__[type][index].size : 0;\n    this.setState({\n      tab: type,\n      wallpaper: fname,\n      selectedType: type,\n      blur: blur\n    });\n    this.props.onWallpaperSelected(`../${_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.path}${fname}`, size, this.blurValues[blur]);\n  }\n  handleBlurChanged(e) {\n    e.preventDefault();\n    const blur = e.currentTarget.value;\n    this.setState({\n      blur: blur\n    });\n    if (this.state.selectedType == 'img') {\n      this.props.onWallpaperSelected(`../${_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.path}${this.state.wallpaper}`, 0, this.blurValues[blur]);\n    }\n  }\n  hasChanged() {\n    return this.state.selectedType != _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type || this.state.wallpaper != _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__[_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.type][_config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.index].name || this.state.blur != 0;\n  }\n  render() {\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"flex-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: `panel-form-row${this.hasChanged() ? ' clean-clickable' : ''}`\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      className: `flat-button${this.hasChanged() ? '' : ' disabled'}`,\n      onClick: () => this.handleWallpaperSelected(null)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"undo\"), \"\\xA0\", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"button_restore\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Restore default\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"tabbar\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: this.state.tab === 'patt' ? 'active' : null\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      \"data-id\": \"patt\",\n      onClick: this.handleTabClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tabtitle_pattern\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"pattern\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      className: this.state.tab === 'img' ? 'active' : null\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      \"data-id\": \"img\",\n      onClick: this.handleTabClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"tabtitle_image\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"image\"\n      }]\n    })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"settings-form\",\n      className: \"scrollable-panel\"\n    }, this.state.tab === 'patt' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"image-grid\"\n    }, _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__.patt.map((img, idx) => {\n      const selected = this.state.wallpaper === img.name ? ' selected' : '';\n      const dark = this.props.colorSchema == 'dark' ? 'inverted' : null;\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        key: idx,\n        \"data-id\": idx,\n        className: `image-grid-cell${selected}`,\n        onClick: this.handleWallpaperSelected\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n        src: _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.path + img.name,\n        alt: img.name,\n        className: dark,\n        style: {\n          width: `${img.size}px`,\n          height: `${img.size}px`\n        }\n      }));\n    })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_blur_wallpaper\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Blur:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-row\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n      type: \"range\",\n      id: \"blur\",\n      name: \"blur\",\n      min: \"0\",\n      max: \"5\",\n      step: \"1\",\n      value: this.state.blur,\n      onChange: this.handleBlurChanged\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"image-grid\"\n    }, _img_bkg_index_json__WEBPACK_IMPORTED_MODULE_5__.img.map((img, idx) => {\n      const selected = this.state.wallpaper === img.name ? ' selected' : '';\n      return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        key: idx,\n        \"data-id\": idx,\n        className: `image-grid-cell${selected}`,\n        onClick: this.handleWallpaperSelected\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n        src: _config_js__WEBPACK_IMPORTED_MODULE_3__.WALLPAPER_DEFAULTS.path + img.pr,\n        alt: img.name,\n        style: {\n          width: '100%',\n          height: '100%'\n        }\n      }));\n    })))));\n  }\n}\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_views_wallpapers_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_audio-recorder_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_audio-recorder_jsx\"],{\n\n/***/ \"./src/widgets/audio-recorder.jsx\":\n/*!****************************************!*\\\n  !*** ./src/widgets/audio-recorder.jsx ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _audio_player_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./audio-player.jsx */ \"./src/widgets/audio-player.jsx\");\n/* harmony import */ var webm_duration_fix__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! webm-duration-fix */ \"./node_modules/webm-duration-fix/lib/index.js\");\n/* harmony import */ var webm_duration_fix__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(webm_duration_fix__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n\n\n\n\n\n\n\nconst BUFFER_SIZE = 256;\nconst CANVAS_UPSCALING = 2.0;\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\nconst SPACING = 2 * CANVAS_UPSCALING;\nconst MILLIS_PER_BAR = 100;\nconst BAR_COLOR = '#BBBD';\nconst BAR_SCALE = 64.0;\nconst VISUALIZATION_BARS = 96;\nconst MAX_SAMPLES_PER_BAR = 10;\nconst DEFAULT_AUDIO_MIME_TYPE = 'audio/webm';\nconst SAFARI_AUDIO_MIME_TYPE = 'audio/mp4';\nconst AUDIO_MIME_TYPES = [DEFAULT_AUDIO_MIME_TYPE, SAFARI_AUDIO_MIME_TYPE, ''];\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  icon_title_delete: {\n    id: \"icon_title_delete\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Delete recording\"\n    }]\n  },\n  icon_title_pause: {\n    id: \"icon_title_pause\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Pause playback\"\n    }]\n  },\n  icon_title_resume: {\n    id: \"icon_title_resume\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Resume playback\"\n    }]\n  },\n  icon_title_send: {\n    id: \"icon_title_send\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Send message\"\n    }]\n  },\n  failed_to_init_audio: {\n    id: \"failed_to_init_audio\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Failed to initialize audio recording\"\n    }]\n  }\n});\nclass AudioRecorder extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      enabled: true,\n      audioRecord: null,\n      recording: true,\n      paused: false,\n      duration: '0:00',\n      blobUrl: null,\n      preview: null\n    };\n    this.visualize = this.visualize.bind(this);\n    this.initMediaRecording = this.initMediaRecording.bind(this);\n    this.initCanvas = this.initCanvas.bind(this);\n    this.getRecording = this.getRecording.bind(this);\n    this.cleanUp = this.cleanUp.bind(this);\n    this.handleResume = this.handleResume.bind(this);\n    this.handlePause = this.handlePause.bind(this);\n    this.handleDelete = this.handleDelete.bind(this);\n    this.handleDone = this.handleDone.bind(this);\n    this.durationMillis = 0;\n    this.startedOn = null;\n    this.viewBuffer = [];\n    this.canvasRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.recordingTimestamp = 0;\n  }\n  componentDidMount() {\n    this.stream = null;\n    this.mediaRecorder = null;\n    this.audioContext = null;\n    this.audioInput = null;\n    this.analyser = null;\n    this.audioChunks = [];\n    try {\n      navigator.mediaDevices.getUserMedia({\n        audio: true,\n        video: false\n      }).then(this.initMediaRecording, this.props.onError);\n    } catch (err) {\n      this.props.onError(err);\n    }\n  }\n  componentWillUnmount() {\n    this.startedOn = null;\n    if (this.stream) {\n      this.cleanUp();\n    }\n  }\n  visualize() {\n    this.initCanvas();\n    const pcmData = new Uint8Array(this.analyser.frequencyBinCount);\n    const width = this.canvasWidth;\n    const height = this.canvasHeight;\n    const viewLength = width / (LINE_WIDTH + SPACING) | 0;\n    const viewDuration = MILLIS_PER_BAR * viewLength;\n    this.canvasContext.lineWidth = LINE_WIDTH;\n    this.canvasContext.strokeStyle = BAR_COLOR;\n    let prevBarCount = 0;\n    let volume = 0.0;\n    let countPerBar = 0;\n    const drawFrame = _ => {\n      if (!this.startedOn) {\n        return;\n      }\n      window.requestAnimationFrame(drawFrame);\n      const duration = this.durationMillis + (Date.now() - this.startedOn);\n      this.setState({\n        duration: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_5__.secondsToTime)(duration / 1000)\n      });\n      if (duration > _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_DURATION) {\n        this.startedOn = null;\n        this.mediaRecorder.pause();\n        this.durationMillis += Date.now() - this.startedOn;\n        this.setState({\n          enabled: false,\n          recording: false,\n          duration: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_5__.secondsToTime)(this.durationMillis / 1000)\n        });\n      }\n      this.analyser.getByteTimeDomainData(pcmData);\n      let amp = 0.0;\n      for (const amplitude of pcmData) {\n        amp += (amplitude - 127) ** 2;\n      }\n      volume += Math.sqrt(amp / pcmData.length);\n      countPerBar++;\n      let barCount = duration / MILLIS_PER_BAR | 0;\n      const dx = viewDuration > duration ? 0 : (duration - MILLIS_PER_BAR * barCount) / MILLIS_PER_BAR * (LINE_WIDTH + SPACING);\n      if (prevBarCount != barCount) {\n        prevBarCount = barCount;\n        this.viewBuffer.push(volume / countPerBar);\n        volume = 0.0;\n        countPerBar = 0;\n        if (this.viewBuffer.length > viewLength) {\n          this.viewBuffer.shift();\n        }\n      }\n      this.canvasContext.clearRect(0, 0, width, height);\n      this.canvasContext.beginPath();\n      for (let i = 0; i < this.viewBuffer.length; i++) {\n        let x = i * (LINE_WIDTH + SPACING) - dx;\n        let y = Math.max(Math.min(this.viewBuffer[i] / BAR_SCALE, 0.9) * height, 1);\n        this.canvasContext.moveTo(x, (height - y) * 0.5);\n        this.canvasContext.lineTo(x, (height + y) * 0.5);\n      }\n      this.canvasContext.stroke();\n      const now = new Date().getTime();\n      if (now - this.recordingTimestamp > _config_js__WEBPACK_IMPORTED_MODULE_6__.KEYPRESS_DELAY) {\n        this.props.onRecordingProgress();\n        this.recordingTimestamp = now;\n      }\n    };\n    drawFrame();\n  }\n  handlePause(e) {\n    e.preventDefault();\n    this.mediaRecorder.pause();\n    this.mediaRecorder.requestData();\n    this.durationMillis += Date.now() - this.startedOn;\n    this.startedOn = null;\n    this.setState({\n      recording: false\n    });\n  }\n  handleResume(e) {\n    e.preventDefault();\n    if (this.state.enabled) {\n      this.startedOn = Date.now();\n      this.mediaRecorder.resume();\n      this.setState({\n        recording: true\n      }, this.visualize);\n    }\n  }\n  handleDelete(e) {\n    e.preventDefault();\n    this.durationMillis = 0;\n    this.startedOn = null;\n    this.mediaRecorder.stop();\n    this.cleanUp();\n    this.setState({\n      recording: false\n    });\n  }\n  handleDone(e) {\n    e.preventDefault();\n    this.setState({\n      recording: false\n    });\n    if (this.startedOn) {\n      this.durationMillis += Date.now() - this.startedOn;\n      this.startedOn = null;\n    }\n    if (this.mediaRecorder) {\n      this.mediaRecorder.stop();\n    }\n  }\n  initCanvas() {\n    this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n    this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n    this.canvasContext = this.canvasRef.current.getContext('2d');\n    this.canvasContext.lineCap = 'round';\n    this.canvasContext.translate(0.5, 0.5);\n    this.canvasWidth = this.canvasRef.current.width;\n    this.canvasHeight = this.canvasRef.current.height;\n  }\n  initMediaRecording(stream) {\n    this.stream = stream;\n    AUDIO_MIME_TYPES.some(mimeType => {\n      if (MediaRecorder.isTypeSupported(mimeType)) {\n        this.mediaRecorder = new MediaRecorder(stream, {\n          mimeType: mimeType,\n          audioBitsPerSecond: 24_000\n        });\n        return true;\n      }\n      return false;\n    });\n    if (!this.mediaRecorder) {\n      console.warn('MediaRecorder failed to initialize: no supported audio formats');\n      this.props.onError(this.props.intl.formatMessage(messages.failed_to_init_audio));\n      return;\n    }\n    this.audioContext = new AudioContext();\n    this.audioInput = this.audioContext.createMediaStreamSource(stream);\n    if (!this.audioInput) {\n      console.warn('createMediaStreamSource returned null: audio input unavailable');\n      this.props.onError(this.props.intl.formatMessage(messages.failed_to_init_audio));\n      return;\n    }\n    this.analyser = this.audioContext.createAnalyser();\n    this.analyser.fftSize = BUFFER_SIZE;\n    this.audioInput.connect(this.analyser);\n    this.mediaRecorder.onstop = _ => {\n      if (this.durationMillis > _config_js__WEBPACK_IMPORTED_MODULE_6__.MIN_DURATION) {\n        this.getRecording(this.mediaRecorder.mimeType).then(result => this.props.onFinished(result.url, result.preview, this.durationMillis));\n      } else {\n        this.props.onDeleted();\n      }\n      this.cleanUp();\n    };\n    this.mediaRecorder.ondataavailable = e => {\n      if (e.data.size > 0) {\n        this.audioChunks.push(e.data);\n      }\n      if (this.mediaRecorder.state != 'inactive') {\n        this.getRecording(this.mediaRecorder.mimeType).then(result => {\n          this.setState({\n            blobUrl: result.url,\n            preview: result.preview\n          });\n        });\n      }\n    };\n    this.durationMillis = 0;\n    this.startedOn = Date.now();\n    this.mediaRecorder.start();\n    this.visualize();\n    this.props.onRecordingProgress();\n    this.recordingTimestamp = this.startedOn;\n  }\n  getRecording(mimeType) {\n    mimeType = mimeType || DEFAULT_AUDIO_MIME_TYPE;\n    let blob = new Blob(this.audioChunks, {\n      type: mimeType\n    });\n    const result = mimeType == DEFAULT_AUDIO_MIME_TYPE ? webm_duration_fix__WEBPACK_IMPORTED_MODULE_3___default()(blob, mimeType) : Promise.resolve(blob);\n    return result.then(fixedBlob => {\n      blob = fixedBlob;\n      return fixedBlob.arrayBuffer();\n    }).then(arrayBuff => this.audioContext.decodeAudioData(arrayBuff)).then(decoded => this.createPreview(decoded)).then(preview => ({\n      url: window.URL.createObjectURL(blob),\n      preview: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.intArrayToBase64)(preview)\n    }));\n  }\n  createPreview(audio) {\n    const data = audio.getChannelData(0);\n    const viewLength = Math.min(data.length, VISUALIZATION_BARS);\n    const totalSPB = data.length / viewLength | 0;\n    const samplingRate = Math.max(1, totalSPB / MAX_SAMPLES_PER_BAR | 0);\n    let buffer = [];\n    let max = -1;\n    for (let i = 0; i < viewLength; i++) {\n      let amplitude = 0;\n      let count = 0;\n      for (let j = 0; j < totalSPB; j += samplingRate) {\n        amplitude += data[totalSPB * i + j] ** 2;\n        count++;\n      }\n      const val = Math.sqrt(amplitude / count);\n      buffer.push(val);\n      max = Math.max(max, val);\n    }\n    if (max > 0) {\n      buffer = buffer.map(a => 100 * a / max | 0);\n    }\n    return buffer;\n  }\n  cleanUp() {\n    if (this.audioInput) {\n      this.audioInput.disconnect();\n    }\n    this.stream.getTracks().forEach(track => track.stop());\n  }\n  render() {\n    const {\n      formatMessage\n    } = this.props.intl;\n    const resumeClass = 'material-icons ' + (this.state.enabled ? 'red' : 'gray');\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"audio\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleDelete,\n      title: formatMessage(messages.icon_title_delete)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"delete_outline\")), this.state.recording ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n      ref: this.canvasRef\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_audio_player_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      src: this.state.blobUrl,\n      preview: this.state.preview,\n      duration: this.durationMillis,\n      short: true\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"duration\"\n    }, this.state.duration), this.state.recording ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handlePause,\n      title: formatMessage(messages.icon_title_pause)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"pause_circle_outline\")) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleResume,\n      title: formatMessage(messages.icon_title_resume)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: resumeClass\n    }, \"radio_button_checked\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: this.handleDone,\n      title: formatMessage(messages.icon_title_send)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"send\")));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AudioRecorder));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_audio-recorder_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_call-panel_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_call-panel_jsx\"],{\n\n/***/ \"./src/widgets/call-panel.jsx\":\n/*!************************************!*\\\n  !*** ./src/widgets/call-panel.jsx ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ \"./src/constants.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\n\n\nconst RING_SOUND = new Audio('audio/call-out.m4a');\nRING_SOUND.loop = true;\nconst CALL_ENDED_SOUND = new Audio('audio/call-end.m4a');\nCALL_ENDED_SOUND.loop = true;\nconst DIALING_SOUND = new Audio('audio/dialing.m4a');\nconst VIDEO_MUTED_EVENT = 'video:muted';\nconst VIDEO_UNMUTED_EVENT = 'video:unmuted';\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  already_in_call: {\n    id: \"already_in_call\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"You already in an ongoing call!\"\n    }]\n  }\n});\nclass CallPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      localStream: undefined,\n      remoteStream: undefined,\n      pc: undefined,\n      dataChannel: undefined,\n      previousOnInfo: undefined,\n      waitingForPeer: false,\n      callInitialSetupComplete: false,\n      audioOnly: props.callAudioOnly,\n      videoToggleInProgress: false,\n      remoteVideoLive: false\n    };\n    this.localStreamConstraints = {\n      audio: true,\n      video: !props.callAudioOnly\n    };\n    this.isOutgoingCall = props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_OUTGOING_INITATED;\n    this.containerRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.localRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.remoteRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.remoteIceCandidatesCache = [];\n    this.onInfo = this.onInfo.bind(this);\n    this.start = this.start.bind(this);\n    this.stop = this.stop.bind(this);\n    this.createPeerConnection = this.createPeerConnection.bind(this);\n    this.canSendOffer = this.canSendOffer.bind(this);\n    this.drainRemoteIceCandidatesCache = this.drainRemoteIceCandidatesCache.bind(this);\n    this.handleNegotiationNeededEvent = this.handleNegotiationNeededEvent.bind(this);\n    this.handleICECandidateEvent = this.handleICECandidateEvent.bind(this);\n    this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\n    this.handleICEConnectionStateChangeEvent = this.handleICEConnectionStateChangeEvent.bind(this);\n    this.handleSignalingStateChangeEvent = this.handleSignalingStateChangeEvent.bind(this);\n    this.handleICEGatheringStateChangeEvent = this.handleICEGatheringStateChangeEvent.bind(this);\n    this.handleIceCandidateErrorEvent = this.handleIceCandidateErrorEvent.bind(this);\n    this.handleTrackEvent = this.handleTrackEvent.bind(this);\n    this.handleVideoOfferMsg = this.handleVideoOfferMsg.bind(this);\n    this.handleVideoAnswerMsg = this.handleVideoAnswerMsg.bind(this);\n    this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\n    this.reportError = this.reportError.bind(this);\n    this.handleGetUserMediaError = this.handleGetUserMediaError.bind(this);\n    this.stopTracks = this.stopTracks.bind(this);\n    this.disconnectMedia = this.disconnectMedia.bind(this);\n    this.handleCloseClick = this.handleCloseClick.bind(this);\n    this.handleToggleCameraClick = this.handleToggleCameraClick.bind(this);\n    this.handleToggleMicClick = this.handleToggleMicClick.bind(this);\n    this.handleRemoteHangup = this.handleRemoteHangup.bind(this);\n    this.handleVideoCallAccepted = this.handleVideoCallAccepted.bind(this);\n    this.muteVideo = this.muteVideo.bind(this);\n    this.unmuteVideo = this.unmuteVideo.bind(this);\n    this.emptyVideoTrack = this.emptyVideoTrack.bind(this);\n    this.handleDataChannelEvent = this.handleDataChannelEvent.bind(this);\n    this.handleDataChannelError = this.handleDataChannelError.bind(this);\n    this.handleDataChannelMessage = this.handleDataChannelMessage.bind(this);\n    this.handleDataChannelOpen = this.handleDataChannelOpen.bind(this);\n    this.handleDataChannelClose = this.handleDataChannelClose.bind(this);\n    this.bounds = {};\n    this.dragStart = event => {\n      if (!event.target.classList.contains('draggable')) {\n        return;\n      }\n      if (window.matchMedia('(width<=640px)')) {\n        return;\n      }\n      if (this.props.minimized && this.containerRef) {\n        event.stopPropagation();\n        this.containerRef.current.setPointerCapture(event.pointerId);\n        this.containerRef.current.style.cursor = 'grabbing';\n        this.bounds.left = this.containerRef.current.offsetLeft;\n        this.bounds.top = this.containerRef.current.offsetTop;\n        this.bounds.width = this.containerRef.current.offsetWidth;\n        this.bounds.height = this.containerRef.current.offsetHeight;\n        const parent = this.containerRef.current.offsetParent;\n        this.bounds.maxX = parent.offsetWidth;\n        this.bounds.maxY = parent.offsetHeight;\n      }\n    };\n    this.drag = event => {\n      event.stopPropagation();\n      const el = this.containerRef.current;\n      if (this.props.minimized && this.containerRef && el.hasPointerCapture(event.pointerId)) {\n        this.bounds.left = Math.min(Math.max(this.bounds.left + event.movementX, 0), this.bounds.maxX - this.bounds.width);\n        this.bounds.top = Math.min(Math.max(this.bounds.top + event.movementY, 0), this.bounds.maxY - this.bounds.height);\n        el.style.left = `${this.bounds.left}px`;\n        el.style.top = `${this.bounds.top}px`;\n      }\n    };\n    this.dragEnd = event => {\n      event.stopPropagation();\n      if (this.props.minimized && this.containerRef) {\n        this.containerRef.current.releasePointerCapture(event.pointerId);\n        this.containerRef.current.style.cursor = 'grab';\n      }\n    };\n  }\n  componentDidMount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    this.previousOnInfo = topic.onInfo;\n    topic.onInfo = this.onInfo;\n    if ((this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_OUTGOING_INITATED || this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_IN_PROGRESS) && this.localRef.current) {\n      this.start();\n    }\n    if (this.containerRef) {\n      this.containerRef.current.addEventListener('pointerdown', this.dragStart);\n      this.containerRef.current.addEventListener('pointermove', this.drag);\n      this.containerRef.current.addEventListener('pointerup', this.dragEnd);\n    }\n  }\n  componentWillUnmount() {\n    const topic = this.props.tinode.getTopic(this.props.topic);\n    topic.onInfo = this.previousOnInfo;\n    this.stop();\n    if (this.containerRef) {\n      this.containerRef.current.removeEventListener('pointerdown', this.dragStart);\n      this.containerRef.current.removeEventListener('pointermove', this.drag);\n      this.containerRef.current.removeEventListener('pointerup', this.dragEnd);\n    }\n  }\n  handleVideoCallAccepted(info) {\n    RING_SOUND.pause();\n    const pc = this.createPeerConnection(true);\n    const stream = this.state.localStream;\n    stream.getTracks().forEach(track => {\n      pc.addTrack(track, stream);\n      if (track.kind == 'video' && this.state.audioOnly) {\n        track.enabled = false;\n        track.stop();\n        stream.removeTrack(track);\n      }\n    });\n  }\n  onInfo(info) {\n    if (info.what != 'call') {\n      return;\n    }\n    switch (info.event) {\n      case 'accept':\n        this.handleVideoCallAccepted(info);\n        break;\n      case 'answer':\n        this.handleVideoAnswerMsg(info);\n        break;\n      case 'ice-candidate':\n        this.handleNewICECandidateMsg(info);\n        break;\n      case 'hang-up':\n        this.handleRemoteHangup(info);\n        break;\n      case 'offer':\n        this.handleVideoOfferMsg(info);\n        break;\n      case 'ringing':\n        RING_SOUND.play().catch(_ => {});\n        break;\n      default:\n        console.warn(\"Unknown call event\", info.event);\n        break;\n    }\n  }\n  emptyVideoTrack() {\n    const width = 640;\n    const height = 480;\n    const canvas = Object.assign(document.createElement(\"canvas\"), {\n      width,\n      height\n    });\n    canvas.getContext('2d').fillRect(0, 0, width, height);\n    const stream = canvas.captureStream(0);\n    return Object.assign(stream.getVideoTracks()[0], {\n      enabled: false\n    });\n  }\n  start() {\n    if (this.state.localStream) {\n      this.props.onError(this.props.intl.formatMessage(messages.already_in_call), 'info');\n      return;\n    }\n    if (this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_IN_PROGRESS) {\n      this.props.onInvite(this.props.topic, this.props.seq, _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_IN_PROGRESS, this.props.callAudioOnly);\n      return;\n    }\n    navigator.mediaDevices.getUserMedia(this.localStreamConstraints).then(stream => {\n      if (!this.localStreamConstraints.video) {\n        stream.addTrack(this.emptyVideoTrack());\n      }\n      this.setState({\n        localStream: stream,\n        waitingForPeer: true\n      });\n      this.localRef.current.srcObject = stream;\n      DIALING_SOUND.play();\n      this.props.onInvite(this.props.topic, this.props.seq, this.props.callState, this.props.callAudioOnly);\n    }).catch(this.handleGetUserMediaError);\n  }\n  stop() {\n    CALL_ENDED_SOUND.pause();\n    CALL_ENDED_SOUND.currentTime = 0;\n    RING_SOUND.pause();\n    RING_SOUND.currentTime = 0;\n    this.stopTracks(this.state.localStream);\n    this.stopTracks(this.state.remoteStream);\n    this.disconnectMedia(this.localRef.current);\n    this.disconnectMedia(this.remoteRef.current);\n    if (this.state.pc) {\n      this.state.pc.ontrack = null;\n      this.state.pc.onremovetrack = null;\n      this.state.pc.onremovestream = null;\n      this.state.pc.onicecandidate = null;\n      this.state.pc.oniceconnectionstatechange = null;\n      this.state.pc.onsignalingstatechange = null;\n      this.state.pc.onicegatheringstatechange = null;\n      this.state.pc.onnegotiationneeded = null;\n      this.state.pc.onicecandidateerror = null;\n      this.state.pc.ondatachannel = null;\n      if (this.state.dataChannel && (this.state.dataChannel.readyState == 'open' || this.state.dataChannel.readyState == 'connecting')) {\n        this.state.dataChannel.close();\n      }\n      this.state.pc.close();\n    }\n    this.setState({\n      pc: null,\n      waitingForPeer: false\n    });\n  }\n  disconnectMedia(el) {\n    if (!el) {\n      return;\n    }\n    el.srcObject = null;\n    el.src = '';\n  }\n  stopTracks(stream) {\n    if (!stream) {\n      return;\n    }\n    let tracks = stream.getTracks();\n    if (tracks) {\n      tracks.forEach(track => {\n        track.stop();\n        track.enabled = false;\n      });\n    }\n  }\n  handleDataChannelError(error) {\n    console.error('data channel error', error);\n  }\n  handleDataChannelMessage(event) {\n    switch (event.data) {\n      case VIDEO_MUTED_EVENT:\n        this.setState({\n          remoteVideoLive: false\n        }, _ => {\n          this.remoteRef.current.srcObject = this.state.remoteStream;\n        });\n        break;\n      case VIDEO_UNMUTED_EVENT:\n        this.setState({\n          remoteVideoLive: true\n        }, _ => {\n          this.remoteRef.current.srcObject = this.state.remoteStream;\n        });\n        break;\n      default:\n        break;\n    }\n  }\n  handleDataChannelOpen(event) {\n    if (!this.state.audioOnly) {\n      event.target.send(VIDEO_UNMUTED_EVENT);\n    }\n  }\n  handleDataChannelClose(event) {\n    console.info('close data channel:', event);\n  }\n  handleDataChannelEvent(event) {\n    console.info('data channel event:', event);\n    const channel = event.channel;\n    channel.onerror = this.handleDataChannelError;\n    channel.onmessage = this.handleDataChannelMessage;\n    channel.onopen = this.handleDataChannelOpen;\n    channel.onclose = this.handleDataChannelClose;\n    this.setState({\n      dataChannel: channel\n    });\n  }\n  createPeerConnection(withDataChannel) {\n    const iceServers = this.props.tinode.getServerParam('iceServers', null);\n    const pc = iceServers ? new RTCPeerConnection({\n      iceServers: iceServers\n    }) : new RTCPeerConnection();\n    pc.onicecandidate = this.handleICECandidateEvent;\n    pc.oniceconnectionstatechange = this.handleICEConnectionStateChangeEvent;\n    pc.onicegatheringstatechange = this.handleICEGatheringStateChangeEvent;\n    pc.onsignalingstatechange = this.handleSignalingStateChangeEvent;\n    pc.onnegotiationneeded = this.handleNegotiationNeededEvent;\n    pc.onicecandidateerror = this.handleIceCandidateErrorEvent;\n    pc.ontrack = this.handleTrackEvent;\n    pc.ondatachannel = this.handleDataChannelEvent;\n    let stateUpdate = {\n      pc: pc,\n      waitingForPeer: false\n    };\n    if (withDataChannel) {\n      const channel = pc.createDataChannel(\"events\", {\n        ordered: true\n      });\n      channel.onerror = this.handleDataChannelError;\n      channel.onmessage = this.handleDataChannelMessage;\n      channel.onopen = this.handleDataChannelOpen;\n      channel.onclose = this.handleDataChannelClose;\n      stateUpdate.dataChannel = channel;\n    }\n    this.setState(stateUpdate);\n    return pc;\n  }\n  handleVideoAnswerMsg(info) {\n    const desc = new RTCSessionDescription(info.payload);\n    this.state.pc.setRemoteDescription(desc).then(_ => {\n      this.setState({\n        callInitialSetupComplete: true\n      }, _ => this.drainRemoteIceCandidatesCache());\n    }).catch(err => this.reportError(err));\n  }\n  reportError(err) {\n    this.props.onError(err.message, 'err');\n  }\n  canSendOffer() {\n    return this.isOutgoingCall || this.state.callInitialSetupComplete;\n  }\n  handleNegotiationNeededEvent(event) {\n    const pc = event.target;\n    if (!this.canSendOffer()) {\n      return;\n    }\n    pc.createOffer().then(offer => {\n      return pc.setLocalDescription(offer);\n    }).then(_ => {\n      this.props.onSendOffer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\n    }).catch(err => this.reportError(err));\n  }\n  handleIceCandidateErrorEvent(event) {\n    console.warn(\"ICE candidate error:\", event);\n  }\n  handleICECandidateEvent(event) {\n    if (event.candidate) {\n      this.props.onIceCandidate(this.props.topic, this.props.seq, event.candidate.toJSON());\n    }\n  }\n  handleNewICECandidateMsg(info) {\n    const candidate = new RTCIceCandidate(info.payload);\n    if (this.state.callInitialSetupComplete) {\n      this.state.pc.addIceCandidate(candidate).catch(err => {\n        if (candidate.candidate) {\n          this.reportError(err);\n        }\n        console.warn(\"Error adding new ice candidate\", candidate, err);\n      });\n    } else {\n      this.remoteIceCandidatesCache.push(candidate);\n    }\n  }\n  drainRemoteIceCandidatesCache() {\n    this.remoteIceCandidatesCache.forEach(candidate => {\n      this.state.pc.addIceCandidate(candidate).catch(err => {\n        if (candidate.candidate) {\n          this.reportError(err);\n        }\n        console.warn(\"Error adding cached ice candidate\", candidate, err);\n      });\n    });\n    this.remoteIceCandidatesCache = [];\n  }\n  handleICEConnectionStateChangeEvent(event) {\n    switch (event.target.iceConnectionState) {\n      case 'closed':\n      case 'failed':\n        this.handleCloseClick();\n        break;\n    }\n  }\n  handleSignalingStateChangeEvent(event) {\n    if (event.target.signalingState == 'closed') {\n      this.handleCloseClick();\n    }\n  }\n  handleICEGatheringStateChangeEvent(event) {}\n  handleTrackEvent(event) {\n    this.remoteRef.current.srcObject = event.streams[0];\n    this.setState({\n      remoteStream: event.streams[0]\n    });\n  }\n  handleGetUserMediaError(e) {\n    console.error(\"Error opening camera and/or microphone\", e);\n    switch (e.name) {\n      case 'NotFoundError':\n        this.reportError(e);\n        break;\n      case 'SecurityError':\n      case 'PermissionDeniedError':\n        break;\n      default:\n        this.reportError(e);\n        break;\n    }\n    this.handleCloseClick();\n  }\n  handleVideoOfferMsg(info) {\n    let localStream = null;\n    const pc = this.state.pc ? this.state.pc : this.createPeerConnection(false);\n    const desc = new RTCSessionDescription(info.payload);\n    pc.setRemoteDescription(desc).then(_ => {\n      return navigator.mediaDevices.getUserMedia(this.localStreamConstraints);\n    }).then(stream => {\n      let dummyVideo;\n      if (!this.localStreamConstraints.video) {\n        dummyVideo = this.emptyVideoTrack();\n        stream.addTrack(dummyVideo);\n      }\n      localStream = stream;\n      this.localRef.current.srcObject = stream;\n      this.setState({\n        localStream: stream\n      });\n      localStream.getTracks().forEach(track => {\n        pc.addTrack(track, localStream);\n      });\n      if (dummyVideo) {\n        dummyVideo.enabled = false;\n        dummyVideo.stop();\n        stream.removeTrack(dummyVideo);\n      }\n    }).then(_ => {\n      return pc.createAnswer();\n    }).then(answer => {\n      return pc.setLocalDescription(answer);\n    }).then(_ => {\n      this.props.onSendAnswer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\n      this.setState({\n        callInitialSetupComplete: true\n      }, _ => this.drainRemoteIceCandidatesCache());\n    }).catch(this.handleGetUserMediaError);\n  }\n  handleRemoteHangup() {\n    if (!this.state.waitingForPeer) {\n      this.handleCloseClick();\n    } else {\n      this.setState({\n        waitingForPeer: false\n      });\n      RING_SOUND.pause();\n      RING_SOUND.currentTime = 0;\n      CALL_ENDED_SOUND.loop = true;\n      CALL_ENDED_SOUND.play().catch(_ => {});\n      setTimeout(_ => {\n        this.handleCloseClick();\n      }, 2000);\n    }\n  }\n  handleCloseClick() {\n    this.stop();\n    this.props.onHangup(this.props.topic, this.props.seq);\n  }\n  muteVideo() {\n    if (!this.state.pc || !this.state.dataChannel) {\n      return;\n    }\n    const stream = this.state.localStream;\n    const t = stream.getVideoTracks()[0];\n    t.enabled = false;\n    t.stop();\n    stream.removeTrack(t);\n    this.state.dataChannel.send(VIDEO_MUTED_EVENT);\n    this.setState({\n      videoToggleInProgress: false\n    });\n  }\n  unmuteVideo() {\n    if (!this.state.pc || !this.state.dataChannel) {\n      return;\n    }\n    navigator.mediaDevices.getUserMedia({\n      video: true\n    }).then(stream => {\n      this.localRef.current.srcObject = null;\n      const sender = this.state.pc.getSenders().find(s => s.track.kind == 'video');\n      const track = stream.getVideoTracks()[0];\n      stream.removeTrack(track);\n      this.state.localStream.addTrack(track);\n      return sender.replaceTrack(track);\n    }).then(_ => {\n      this.localRef.current.srcObject = this.state.localStream;\n      this.state.dataChannel.send(VIDEO_UNMUTED_EVENT);\n    }).catch(err => this.handleGetUserMediaError(err)).finally(_ => {\n      this.setState({\n        videoToggleInProgress: false\n      });\n    });\n  }\n  handleToggleCameraClick() {\n    if (this.state.videoToggleInProgress) {\n      return;\n    }\n    const tracks = this.state.localStream.getVideoTracks();\n    this.setState({\n      videoToggleInProgress: true\n    }, _ => {\n      if (tracks && tracks.length > 0 && tracks[0].enabled && tracks[0].readyState == 'live') {\n        this.muteVideo();\n      } else {\n        this.unmuteVideo();\n      }\n      this.setState({\n        audioOnly: !this.state.audioOnly\n      });\n    });\n  }\n  handleToggleMicClick() {\n    const stream = this.state.localStream;\n    const t = stream.getAudioTracks()[0];\n    t.enabled = !t.enabled;\n    this.forceUpdate();\n  }\n  render() {\n    const audioTracks = this.state.localStream && this.state.localStream.getAudioTracks();\n    const videoTracks = !this.state.audioOnly && this.state.localStream && this.state.localStream.getVideoTracks();\n    const disabled = !this.state.pc || !this.state.dataChannel || !(audioTracks && audioTracks[0]);\n    const audioIcon = audioTracks && audioTracks[0] && audioTracks[0].enabled ? 'mic' : 'mic_off';\n    const videoIcon = videoTracks && videoTracks[0] && videoTracks[0].enabled && videoTracks[0].readyState == 'live' ? 'videocam' : 'videocam_off';\n    const peerTitle = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__.truncateString)(this.props.title, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PEER_TITLE_LENGTH);\n    const pulseAnimation = this.state.waitingForPeer ? ' pulse' : '';\n    let remoteActive = false;\n    if (this.remoteRef.current && this.remoteRef.current.srcObject && this.state.remoteVideoLive) {\n      const rstream = this.remoteRef.current.srcObject;\n      if (rstream.getVideoTracks().length > 0) {\n        const t = rstream.getVideoTracks()[0];\n        remoteActive = t.enabled && t.readyState == 'live';\n      }\n    }\n    const minimizedClass = this.props.minimized ? 'minimized' : null;\n    const fullScreen = this.props.minimized ? 'fullscreen' : 'fullscreen_exit';\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"video-container\",\n      className: minimizedClass,\n      ref: this.containerRef\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"video-container-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"call-party self\",\n      disabled: this.state.audioOnly || this.props.minimized\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"video\", {\n      ref: this.localRef,\n      autoPlay: true,\n      muted: true,\n      playsInline: true\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caller-name inactive\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"calls_you_label\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"You\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"call-party peer\",\n      disabled: !remoteActive\n    }, remoteActive ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"video\", {\n      ref: this.remoteRef,\n      autoPlay: true,\n      playsInline: true\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caller-name inactive\"\n    }, peerTitle)) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"audio\", {\n      ref: this.remoteRef,\n      autoPlay: true\n    }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: `caller-card${pulseAnimation} draggable`\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: this.props.avatar,\n      topic: this.props.topic,\n      title: this.props.title\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"caller-name\"\n    }, peerTitle))))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"full-screen\",\n      onClick: this.props.onToggleMinimize\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, fullScreen)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"controls\",\n      className: minimizedClass\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"danger\",\n      onClick: this.handleCloseClick\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"call_end\")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.handleToggleCameraClick,\n      disabled: disabled\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, videoIcon)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      className: \"secondary\",\n      onClick: this.handleToggleMicClick,\n      disabled: disabled\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, audioIcon))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(CallPanel));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_call-panel_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_doc-preview_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_doc-preview_jsx\"],{\n\n/***/ \"./src/widgets/doc-preview.jsx\":\n/*!*************************************!*\\\n  !*** ./src/widgets/doc-preview.jsx ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ DocPreview; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/send-message.jsx */ \"./src/widgets/send-message.jsx\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\nfunction iconFromMime(mime) {\n  const mimeToIcon = {\n    default: 'insert_drive_file',\n    image: 'image',\n    text: 'description',\n    video: 'theaters'\n  };\n  return mimeToIcon[mime] || mimeToIcon[(mime || '').split('/')[0]] || mimeToIcon['default'];\n}\nclass DocPreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.handleSendDoc = this.handleSendDoc.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n  handleKeyDown(e) {\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n  handleSendDoc(caption) {\n    this.props.onClose();\n    this.props.onSendMessage(this.props.content.file);\n  }\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"preview-caption-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, this.props.content.name), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onClose();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"doc-card\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, iconFromMime(this.props.content.type)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_file_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"File name:\"\n      }]\n    })), \" \", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.shortenFileName)(this.props.content.name, 24) || '-'), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_content_type\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Content type:\"\n      }]\n    })), \" \", this.props.content.type || 'application/octet-stream'), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_size\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Size:\"\n      }]\n    })), \" \", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.bytesToHumanSize)(this.props.content.size)))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      noInput: true,\n      tinode: this.props.tinode,\n      reply: this.props.reply,\n      onCancelReply: this.props.onCancelReply,\n      onSendMessage: this.handleSendDoc,\n      onError: this.props.onError\n    }));\n  }\n}\n;\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_doc-preview_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_image-preview_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_image-preview_jsx\"],{\n\n/***/ \"./src/widgets/image-preview.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/image-preview.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ImagePreview; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _send_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./send-message.jsx */ \"./src/widgets/send-message.jsx\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ \"./src/config.js\");\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/utils.js */ \"./src/lib/utils.js\");\n\n\n\n\n\n\n\nclass ImagePreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      width: 0,\n      height: 0\n    };\n    this.handleSendImage = this.handleSendImage.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n  handleKeyDown(e) {\n    if (this.props.onSendMessage) {\n      return;\n    }\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n  assignWidth(node) {\n    if (node && !this.state.width) {\n      const bounds = node.getBoundingClientRect();\n      this.setState({\n        width: bounds.width | 0,\n        height: bounds.height | 0\n      });\n    }\n  }\n  handleSendImage(caption) {\n    this.props.onClose();\n    this.props.onSendMessage(caption, this.props.content.blob);\n  }\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n    const dim = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.fitImageSize)(this.props.content.width, this.props.content.height, this.state.width, this.state.height, false);\n    const size = dim ? {\n      width: dim.dstWidth + 'px',\n      height: dim.dstHeight + 'px'\n    } : this.props.content.width > this.props.content.height ? {\n      width: '100%'\n    } : {\n      height: '100%'\n    };\n    size.maxWidth = '100%';\n    size.maxHeight = '100%';\n    const maxlength = Math.max((this.state.width / _config_js__WEBPACK_IMPORTED_MODULE_3__.REM_SIZE / 1.5 | 0) - 2, 12);\n    const fname = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__.shortenFileName)(this.props.content.filename, maxlength) || '-';\n    const width = this.props.content.width || '-';\n    const height = this.props.content.height || '-';\n    const download_url = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_6__.urlAsAttachment)(this.props.content.url);\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"preview-caption-panel\"\n    }, this.props.onSendMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, fname) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: download_url,\n      download: this.props.content.filename\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons\"\n    }, \"file_download\"), \" \", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"download_action\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"download\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onClose();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-container\",\n      ref: node => this.assignWidth(node)\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n      src: this.props.content.url,\n      style: size,\n      className: \"image-preview\",\n      alt: this.props.content.filename\n    })), this.props.onSendMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      messagePrompt: \"add_image_caption\",\n      acceptBlank: true,\n      tinode: this.props.tinode,\n      reply: this.props.reply,\n      onCancelReply: this.props.onCancelReply,\n      onSendMessage: this.handleSendImage,\n      onError: this.props.onError\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-footer\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_file_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"File name:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      title: this.props.content.filename\n    }, fname))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_content_type\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Content type:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, this.props.content.type)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_size\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Size:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, width, \" \\xD7 \", height, \" px; \", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__.bytesToHumanSize)(this.props.content.size)))));\n  }\n}\n;\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_image-preview_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_phone-country-selector_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_phone-country-selector_jsx\"],{\n\n/***/ \"./src/dcodes.json\":\n/*!*************************!*\\\n  !*** ./src/dcodes.json ***!\n  \\*************************/\n/***/ (function(module) {\n\nmodule.exports = /*#__PURE__*/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\"}]');\n\n/***/ }),\n\n/***/ \"./src/widgets/phone-country-selector.jsx\":\n/*!************************************************!*\\\n  !*** ./src/widgets/phone-country-selector.jsx ***!\n  \\************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _dcodes_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dcodes.json */ \"./src/dcodes.json\");\n/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat */ \"./src/lib/strformat.js\");\n\n\n\n\nclass PhoneCountrySelector extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.countries = [];\n    const {\n      formatDisplayName\n    } = props.intl;\n    _dcodes_json__WEBPACK_IMPORTED_MODULE_2__.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: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_3__.flagEmoji)(dc.code),\n          name: formatDisplayName(dc.code, {\n            type: 'region'\n          })\n        });\n      });\n    });\n    this.countries.sort((a, b) => a.name.localeCompare(b.name));\n  }\n  componentDidMount() {\n    if (this.selectedRef) {\n      this.selectedRef.scrollIntoView({\n        block: 'center',\n        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(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n        className: style,\n        key: idx,\n        ref: ref => {\n          if (c.code == selected) {\n            this.selectedRef = ref;\n          }\n        },\n        onClick: _ => this.props.onSubmit(c.code, c.dial)\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"country-flag\"\n      }, c.flag), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"country\"\n      }, \"\\xA0\", c.name), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"dial-code\"\n      }, \"\\xA0+\", c.dial)));\n    });\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"scrollable-panel\",\n      style: {\n        height: '30rem'\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n      className: \"phone-country-selector\"\n    }, countries));\n  }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PhoneCountrySelector));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_phone-country-selector_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_the-card-preview_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_the-card-preview_jsx\"],{\n\n/***/ \"./src/widgets/the-card-preview.jsx\":\n/*!******************************************!*\\\n  !*** ./src/widgets/the-card-preview.jsx ***!\n  \\******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TheCardPreview; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! libphonenumber-js/mobile */ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\");\n/* harmony import */ var _send_message_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./send-message.jsx */ \"./src/widgets/send-message.jsx\");\n/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ \"./src/widgets/letter-tile.jsx\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tinode-sdk */ \"tinode-sdk\");\n/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/blob-helpers.js */ \"./src/lib/blob-helpers.js\");\n\n\n\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  unknown_name: {\n    id: \"unknown_name\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Unknown\"\n    }]\n  }\n});\nclass TheCardPreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.state = {\n      content: props.content.object\n    };\n    if (!props.content.object) {\n      (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_6__.importVCard)(props.content.file).then(card => {\n        this.setState({\n          content: card\n        });\n      });\n    }\n    this.handleSendCard = this.handleSendCard.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n  handleKeyDown(e) {\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n  handleSendCard() {\n    this.props.onClose();\n    this.props.onSendMessage(this.props.content);\n  }\n  render() {\n    const card = this.state.content;\n    const fullName = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getFn(card);\n    const photoUrl = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getPhotoUrl(card) || null;\n    const note = card?.note;\n    const org = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getOrg(card);\n    const emails = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getComm(card, 'email') || [];\n    const phones = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getComm(card, 'tel') || [];\n    const tinodeIds = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getComm(card, 'tinode') || [];\n    const urls = tinode_sdk__WEBPACK_IMPORTED_MODULE_5__.TheCard.getComm(card, 'http') || [];\n    const contacts = [];\n    emails.forEach((email, idx) => {\n      const types = Array.isArray(email.des) ? email.des.join(', ') : '';\n      contacts.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"group quoted\",\n        key: `email-${idx}`\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, email.value), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"small gray\"\n      }, \" \", types ? `(${types})` : '')));\n    });\n    phones.forEach((phone, idx) => {\n      let val = phone.value;\n      try {\n        const number = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__.parsePhoneNumberWithError)(phone.value);\n        val = number ? number.formatInternational() : phone.value;\n      } catch (err) {}\n      const types = Array.isArray(phone.des) ? phone.des.join(', ') : '';\n      contacts.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"group quoted\",\n        key: `tel-${idx}`\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, val), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"small gray\"\n      }, \" \", types ? `(${types})` : '')));\n    });\n    tinodeIds.forEach((tid, idx) => {\n      const types = Array.isArray(tid.des) ? tid.des.join(', ') : '';\n      contacts.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"group quoted\",\n        key: `tinode-${idx}`\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, tid.value), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"small gray\"\n      }, \" \", types ? `(${types})` : '')));\n    });\n    urls.forEach((url, idx) => {\n      const types = Array.isArray(url.des) ? url.des.join(', ') : '';\n      contacts.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"group quoted\",\n        key: `url-${idx}`\n      }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"tt\", null, url.value), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n        className: \"small gray\"\n      }, \" \", types ? `(${types})` : '')));\n    });\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"preview-caption-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_contact_card\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Contact Card\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onClose();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"doc-card\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"panel-form-column\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"center\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"avatar-box\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n      authorizeURL: this.props.tinode.authorizeURL,\n      avatar: photoUrl || true,\n      topic: \"usrXXX123\",\n      title: fullName\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"large ellipsized\"\n    }, fullName || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, messages.unknown_name))), org ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, org)) : null, note ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_description\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Description\"\n      }]\n    })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"quoted\"\n    }, note)) : null, contacts.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"group\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n      className: \"small\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_contacts\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Contacts\"\n      }]\n    })), contacts) : null))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_send_message_jsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n      noInput: true,\n      tinode: this.props.tinode,\n      reply: this.props.reply,\n      onCancelReply: this.props.onCancelReply,\n      onSendMessage: this.handleSendCard,\n      onError: this.props.onError\n    }));\n  }\n}\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_the-card-preview_jsx.dev.js.map"
  },
  {
    "path": "umd/src_widgets_video-preview_jsx.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"src_widgets_video-preview_jsx\"],{\n\n/***/ \"./src/widgets/video-preview.jsx\":\n/*!***************************************!*\\\n  !*** ./src/widgets/video-preview.jsx ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ \"react-intl\");\n/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _send_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./send-message.jsx */ \"./src/widgets/send-message.jsx\");\n/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ \"./src/lib/strformat.js\");\n\n\n\n\nconst messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({\n  unrecognized_video_format: {\n    id: \"unrecognized_video_format\",\n    defaultMessage: [{\n      \"type\": 0,\n      \"value\": \"Format of this video is not recognized\"\n    }]\n  }\n});\nclass VideoPreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {\n  constructor(props) {\n    super(props);\n    this.videoRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n    this.handleSendVideo = this.handleSendVideo.bind(this);\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n  }\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n  handleKeyDown(e) {\n    if (this.props.onSendMessage) {\n      return;\n    }\n    e.preventDefault();\n    if (e.key === 'Escape') {\n      this.props.onClose();\n    }\n  }\n  handleSendVideo(caption) {\n    this.props.onClose();\n    const params = {\n      width: this.videoRef.current.videoWidth,\n      height: this.videoRef.current.videoHeight,\n      duration: this.videoRef.current.duration * 1000 | 0,\n      mime: this.props.content.mime,\n      name: this.props.content.filename\n    };\n    if (params.width == 0 || params.height == 0) {\n      this.props.onError(this.props.intl.formatMessage(messages.unrecognized_video_format), 'err');\n      return;\n    }\n    const canvas = document.createElement('canvas');\n    canvas.width = params.width;\n    canvas.height = params.height;\n    const ctx = canvas.getContext('2d');\n    ctx.drawImage(this.videoRef.current, 0, 0, canvas.width, canvas.height);\n    ctx.canvas.toBlob(preview => this.props.onSendMessage(caption, this.props.content.blob, preview, params), 'image/jpeg', 0.75);\n  }\n  render() {\n    if (!this.props.content) {\n      return null;\n    }\n    const width = this.props.content.width || '-';\n    const height = this.props.content.height || '-';\n    const controlist = this.props.onSendMessage ? 'nodownload' : '';\n    const autoPlay = !this.props.onSendMessage;\n    return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"preview-caption-panel\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, this.props.content.filename), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      href: \"#\",\n      onClick: e => {\n        e.preventDefault();\n        this.props.onClose();\n      }\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n      className: \"material-icons gray\"\n    }, \"close\"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-container\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"video\", {\n      className: \"image-preview\",\n      controls: true,\n      controlsList: controlist,\n      disablePictureInPicture: true,\n      ref: this.videoRef,\n      autoPlay: autoPlay,\n      src: this.props.tinode.authorizeURL(this.props.content.url),\n      poster: this.props.content.preview,\n      alt: this.props.content.filename\n    })), this.props.onSendMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n      messagePrompt: \"add_image_caption\",\n      acceptBlank: true,\n      tinode: this.props.tinode,\n      reply: this.props.reply,\n      onCancelReply: this.props.onCancelReply,\n      onSendMessage: this.handleSendVideo,\n      onError: this.props.onError\n    }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      id: \"image-preview-footer\"\n    }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_file_name\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"File name:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      title: this.props.content.filename\n    }, this.props.content.filename))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_content_type\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Content type:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, this.props.content.type)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {\n      id: \"label_size\",\n      defaultMessage: [{\n        \"type\": 0,\n        \"value\": \"Size:\"\n      }]\n    }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, width, \" \\xD7 \", height, \" px; \", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.bytesToHumanSize)(this.props.content.size)))));\n  }\n}\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(VideoPreview));\n\n/***/ })\n\n}]);\n//# sourceMappingURL=src_widgets_video-preview_jsx.dev.js.map"
  },
  {
    "path": "umd/tinode.dev.js",
    "content": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/access-mode.js\":\n/*!****************************!*\\\n  !*** ./src/access-mode.js ***!\n  \\****************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AccessMode; }\n/* harmony export */ });\n\nclass AccessMode {\n  constructor(acs) {\n    if (acs) {\n      this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n      this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n      this.mode = acs.mode ? typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode) : this.given & this.want;\n    }\n  }\n  static #checkFlag(val, side, flag) {\n    side = side || 'mode';\n    if (['given', 'want', 'mode'].includes(side)) {\n      return (val[side] & flag) != 0;\n    }\n    throw new Error(`Invalid AccessMode component '${side}'`);\n  }\n  static decode(str) {\n    if (!str) {\n      return null;\n    } else if (typeof str == 'number') {\n      return str & AccessMode._BITMASK;\n    } else if (str === 'N' || str === 'n') {\n      return AccessMode._NONE;\n    }\n    const bitmask = {\n      'J': AccessMode._JOIN,\n      'R': AccessMode._READ,\n      'W': AccessMode._WRITE,\n      'P': AccessMode._PRES,\n      'A': AccessMode._APPROVE,\n      'S': AccessMode._SHARE,\n      'D': AccessMode._DELETE,\n      'O': AccessMode._OWNER\n    };\n    let m0 = AccessMode._NONE;\n    for (let i = 0; i < str.length; i++) {\n      const bit = bitmask[str.charAt(i).toUpperCase()];\n      if (!bit) {\n        continue;\n      }\n      m0 |= bit;\n    }\n    return m0;\n  }\n  static encode(val) {\n    if (val === null || val === AccessMode._INVALID) {\n      return null;\n    } else if (val === AccessMode._NONE) {\n      return 'N';\n    }\n    const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n    let res = '';\n    for (let i = 0; i < bitmask.length; i++) {\n      if ((val & 1 << i) != 0) {\n        res = res + bitmask[i];\n      }\n    }\n    return res;\n  }\n  static update(val, upd) {\n    if (!upd || typeof upd != 'string') {\n      return val;\n    }\n    let action = upd.charAt(0);\n    if (action == '+' || action == '-') {\n      let val0 = val;\n      const parts = upd.split(/([-+])/);\n      for (let i = 1; i < parts.length - 1; i += 2) {\n        action = parts[i];\n        const m0 = AccessMode.decode(parts[i + 1]);\n        if (m0 == AccessMode._INVALID) {\n          return val;\n        }\n        if (m0 == null) {\n          continue;\n        }\n        if (action === '+') {\n          val0 |= m0;\n        } else if (action === '-') {\n          val0 &= ~m0;\n        }\n      }\n      val = val0;\n    } else {\n      const val0 = AccessMode.decode(upd);\n      if (val0 != AccessMode._INVALID) {\n        val = val0;\n      }\n    }\n    return val;\n  }\n  static diff(a1, a2) {\n    a1 = AccessMode.decode(a1);\n    a2 = AccessMode.decode(a2);\n    if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n      return AccessMode._INVALID;\n    }\n    return a1 & ~a2;\n  }\n  toString() {\n    return '{\"mode\": \"' + AccessMode.encode(this.mode) + '\", \"given\": \"' + AccessMode.encode(this.given) + '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n  }\n  jsonHelper() {\n    return {\n      mode: AccessMode.encode(this.mode),\n      given: AccessMode.encode(this.given),\n      want: AccessMode.encode(this.want)\n    };\n  }\n  setMode(m) {\n    this.mode = AccessMode.decode(m);\n    return this;\n  }\n  updateMode(u) {\n    this.mode = AccessMode.update(this.mode, u);\n    return this;\n  }\n  getMode() {\n    return AccessMode.encode(this.mode);\n  }\n  setGiven(g) {\n    this.given = AccessMode.decode(g);\n    return this;\n  }\n  updateGiven(u) {\n    this.given = AccessMode.update(this.given, u);\n    return this;\n  }\n  getGiven() {\n    return AccessMode.encode(this.given);\n  }\n  setWant(w) {\n    this.want = AccessMode.decode(w);\n    return this;\n  }\n  updateWant(u) {\n    this.want = AccessMode.update(this.want, u);\n    return this;\n  }\n  getWant() {\n    return AccessMode.encode(this.want);\n  }\n  getMissing() {\n    return AccessMode.encode(this.want & ~this.given);\n  }\n  getExcessive() {\n    return AccessMode.encode(this.given & ~this.want);\n  }\n  updateAll(val) {\n    if (val) {\n      this.updateGiven(val.given);\n      this.updateWant(val.want);\n      this.mode = this.given & this.want;\n    }\n    return this;\n  }\n  isOwner(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n  }\n  isPresencer(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n  }\n  isMuted(side) {\n    return !this.isPresencer(side);\n  }\n  isJoiner(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n  }\n  isReader(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._READ);\n  }\n  isWriter(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n  }\n  isApprover(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n  }\n  isAdmin(side) {\n    return this.isOwner(side) || this.isApprover(side);\n  }\n  isSharer(side) {\n    return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n  }\n  isDeleter(side) {\n    return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n  }\n}\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES | AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n\n/***/ }),\n\n/***/ \"./src/cbuffer.js\":\n/*!************************!*\\\n  !*** ./src/cbuffer.js ***!\n  \\************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CBuffer; }\n/* harmony export */ });\n\nclass CBuffer {\n  #comparator = undefined;\n  #unique = false;\n  buffer = [];\n  constructor(compare_, unique_) {\n    this.#comparator = compare_ || ((a, b) => {\n      return a === b ? 0 : a < b ? -1 : 1;\n    });\n    this.#unique = unique_;\n  }\n  #findNearest(elem, arr, exact) {\n    let start = 0;\n    let end = arr.length - 1;\n    let pivot = 0;\n    let diff = 0;\n    let found = false;\n    while (start <= end) {\n      pivot = (start + end) / 2 | 0;\n      diff = this.#comparator(arr[pivot], elem);\n      if (diff < 0) {\n        start = pivot + 1;\n      } else if (diff > 0) {\n        end = pivot - 1;\n      } else {\n        found = true;\n        break;\n      }\n    }\n    if (found) {\n      return {\n        idx: pivot,\n        exact: true\n      };\n    }\n    if (exact) {\n      return {\n        idx: -1\n      };\n    }\n    return {\n      idx: diff < 0 ? pivot + 1 : pivot\n    };\n  }\n  #insertSorted(elem, arr) {\n    const found = this.#findNearest(elem, arr, false);\n    const count = found.exact && this.#unique ? 1 : 0;\n    arr.splice(found.idx, count, elem);\n    return arr;\n  }\n  getAt(at) {\n    return this.buffer[at];\n  }\n  getLast(filter) {\n    return filter ? this.buffer.findLast(filter) : this.buffer[this.buffer.length - 1];\n  }\n  put() {\n    let insert;\n    if (arguments.length == 1 && Array.isArray(arguments[0])) {\n      insert = arguments[0];\n    } else {\n      insert = arguments;\n    }\n    for (let idx in insert) {\n      this.#insertSorted(insert[idx], this.buffer);\n    }\n  }\n  delAt(at) {\n    at |= 0;\n    let r = this.buffer.splice(at, 1);\n    if (r && r.length > 0) {\n      return r[0];\n    }\n    return undefined;\n  }\n  delRange(since, before) {\n    return this.buffer.splice(since, before - since);\n  }\n  length() {\n    return this.buffer.length;\n  }\n  reset() {\n    this.buffer = [];\n  }\n  forEach(callback, startIdx, beforeIdx, context) {\n    startIdx = Math.max(0, startIdx | 0);\n    beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n    for (let i = startIdx; i < beforeIdx; i++) {\n      callback.call(context, this.buffer[i], i > startIdx ? this.buffer[i - 1] : undefined, i < beforeIdx - 1 ? this.buffer[i + 1] : undefined, i);\n    }\n  }\n  find(elem, nearest) {\n    const {\n      idx\n    } = this.#findNearest(elem, this.buffer, !nearest);\n    return idx;\n  }\n  filter(callback, context) {\n    let count = 0;\n    for (let i = 0; i < this.buffer.length; i++) {\n      if (callback.call(context, this.buffer[i], i)) {\n        this.buffer[count] = this.buffer[i];\n        count++;\n      }\n    }\n    this.buffer.splice(count);\n  }\n  isEmpty() {\n    return this.buffer.length == 0;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/comm-error.js\":\n/*!***************************!*\\\n  !*** ./src/comm-error.js ***!\n  \\***************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ CommError; }\n/* harmony export */ });\n\nclass CommError extends Error {\n  constructor(message, code) {\n    super(`${message} (${code})`);\n    this.name = 'CommError';\n    this.code = code;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/config.js\":\n/*!***********************!*\\\n  !*** ./src/config.js ***!\n  \\***********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BACKOFF_BASE: function() { return /* binding */ BACKOFF_BASE; },\n/* harmony export */   BACKOFF_JITTER: function() { return /* binding */ BACKOFF_JITTER; },\n/* harmony export */   BACKOFF_MAX_ITER: function() { return /* binding */ BACKOFF_MAX_ITER; },\n/* harmony export */   DEFAULT_MESSAGES_PAGE: function() { return /* binding */ DEFAULT_MESSAGES_PAGE; },\n/* harmony export */   DEL_CHAR: function() { return /* binding */ DEL_CHAR; },\n/* harmony export */   EXPIRE_PROMISES_PERIOD: function() { return /* binding */ EXPIRE_PROMISES_PERIOD; },\n/* harmony export */   EXPIRE_PROMISES_TIMEOUT: function() { return /* binding */ EXPIRE_PROMISES_TIMEOUT; },\n/* harmony export */   LIBRARY: function() { return /* binding */ LIBRARY; },\n/* harmony export */   LOCAL_SEQID: function() { return /* binding */ LOCAL_SEQID; },\n/* harmony export */   MAX_PINNED_COUNT: function() { return /* binding */ MAX_PINNED_COUNT; },\n/* harmony export */   MESSAGE_STATUS_FAILED: function() { return /* binding */ MESSAGE_STATUS_FAILED; },\n/* harmony export */   MESSAGE_STATUS_FATAL: function() { return /* binding */ MESSAGE_STATUS_FATAL; },\n/* harmony export */   MESSAGE_STATUS_NONE: function() { return /* binding */ MESSAGE_STATUS_NONE; },\n/* harmony export */   MESSAGE_STATUS_QUEUED: function() { return /* binding */ MESSAGE_STATUS_QUEUED; },\n/* harmony export */   MESSAGE_STATUS_READ: function() { return /* binding */ MESSAGE_STATUS_READ; },\n/* harmony export */   MESSAGE_STATUS_RECEIVED: function() { return /* binding */ MESSAGE_STATUS_RECEIVED; },\n/* harmony export */   MESSAGE_STATUS_SENDING: function() { return /* binding */ MESSAGE_STATUS_SENDING; },\n/* harmony export */   MESSAGE_STATUS_SENT: function() { return /* binding */ MESSAGE_STATUS_SENT; },\n/* harmony export */   MESSAGE_STATUS_TO_ME: function() { return /* binding */ MESSAGE_STATUS_TO_ME; },\n/* harmony export */   PROTOCOL_VERSION: function() { return /* binding */ PROTOCOL_VERSION; },\n/* harmony export */   RECV_TIMEOUT: function() { return /* binding */ RECV_TIMEOUT; },\n/* harmony export */   TAG_ALIAS: function() { return /* binding */ TAG_ALIAS; },\n/* harmony export */   TAG_EMAIL: function() { return /* binding */ TAG_EMAIL; },\n/* harmony export */   TAG_PHONE: function() { return /* binding */ TAG_PHONE; },\n/* harmony export */   TOPIC_CHAN: function() { return /* binding */ TOPIC_CHAN; },\n/* harmony export */   TOPIC_FND: function() { return /* binding */ TOPIC_FND; },\n/* harmony export */   TOPIC_GRP: function() { return /* binding */ TOPIC_GRP; },\n/* harmony export */   TOPIC_ME: function() { return /* binding */ TOPIC_ME; },\n/* harmony export */   TOPIC_NEW: function() { return /* binding */ TOPIC_NEW; },\n/* harmony export */   TOPIC_NEW_CHAN: function() { return /* binding */ TOPIC_NEW_CHAN; },\n/* harmony export */   TOPIC_P2P: function() { return /* binding */ TOPIC_P2P; },\n/* harmony export */   TOPIC_SLF: function() { return /* binding */ TOPIC_SLF; },\n/* harmony export */   TOPIC_SYS: function() { return /* binding */ TOPIC_SYS; },\n/* harmony export */   USER_NEW: function() { return /* binding */ USER_NEW; },\n/* harmony export */   VERSION: function() { return /* binding */ VERSION; }\n/* harmony export */ });\n/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../version.js */ \"./version.js\");\n\n\n\nconst PROTOCOL_VERSION = '0';\nconst VERSION = _version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.25';\nconst LIBRARY = 'tinodejs/' + VERSION;\nconst TOPIC_NEW = 'new';\nconst TOPIC_NEW_CHAN = 'nch';\nconst TOPIC_ME = 'me';\nconst TOPIC_FND = 'fnd';\nconst TOPIC_SYS = 'sys';\nconst TOPIC_SLF = 'slf';\nconst TOPIC_CHAN = 'chn';\nconst TOPIC_GRP = 'grp';\nconst TOPIC_P2P = 'p2p';\nconst USER_NEW = 'new';\nconst LOCAL_SEQID = 0xFFFFFFF;\nconst MESSAGE_STATUS_NONE = 0;\nconst MESSAGE_STATUS_QUEUED = 10;\nconst MESSAGE_STATUS_SENDING = 20;\nconst MESSAGE_STATUS_FAILED = 30;\nconst MESSAGE_STATUS_FATAL = 40;\nconst MESSAGE_STATUS_SENT = 50;\nconst MESSAGE_STATUS_RECEIVED = 60;\nconst MESSAGE_STATUS_READ = 70;\nconst MESSAGE_STATUS_TO_ME = 80;\nconst EXPIRE_PROMISES_TIMEOUT = 5000;\nconst EXPIRE_PROMISES_PERIOD = 1000;\nconst RECV_TIMEOUT = 100;\nconst DEFAULT_MESSAGES_PAGE = 24;\nconst DEL_CHAR = '\\u2421';\nconst MAX_PINNED_COUNT = 5;\nconst TAG_ALIAS = 'alias:';\nconst TAG_EMAIL = 'email:';\nconst TAG_PHONE = 'tel:';\nconst BACKOFF_BASE = 2000;\nconst BACKOFF_MAX_ITER = 10;\nconst BACKOFF_JITTER = 0.3;\n\n/***/ }),\n\n/***/ \"./src/connection.js\":\n/*!***************************!*\\\n  !*** ./src/connection.js ***!\n  \\***************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Connection; }\n/* harmony export */ });\n/* harmony import */ var _comm_error_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comm-error.js */ \"./src/comm-error.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n\n\n\n\n\nlet WebSocketProvider;\nlet XHRProvider;\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n  let url = null;\n  if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n    url = `${protocol}://${host}`;\n    if (url.charAt(url.length - 1) !== '/') {\n      url += '/';\n    }\n    url += 'v' + version + '/channels';\n    if (['http', 'https'].includes(protocol)) {\n      url += '/lp';\n    }\n    url += '?apikey=' + apiKey;\n  }\n  return url;\n}\nclass Connection {\n  static #log = _ => {};\n  #boffTimer = null;\n  #boffIteration = 0;\n  #boffClosed = false;\n  #socket = null;\n  host;\n  secure;\n  apiKey;\n  version;\n  autoreconnect;\n  initialized;\n  constructor(config, version_, autoreconnect_) {\n    this.host = config.host;\n    this.secure = config.secure;\n    this.apiKey = config.apiKey;\n    this.version = version_;\n    this.autoreconnect = autoreconnect_;\n    if (config.transport === 'lp') {\n      this.#init_lp();\n      this.initialized = 'lp';\n    } else if (config.transport === 'ws') {\n      this.#init_ws();\n      this.initialized = 'ws';\n    }\n    if (!this.initialized) {\n      Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n      throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n    }\n  }\n  static setNetworkProviders(wsProvider, xhrProvider) {\n    WebSocketProvider = wsProvider;\n    XHRProvider = xhrProvider;\n  }\n  static set logger(l) {\n    Connection.#log = l;\n  }\n  connect(host_, force) {\n    return Promise.reject(null);\n  }\n  reconnect(force) {}\n  disconnect() {}\n  sendText(msg) {}\n  isConnected() {\n    return false;\n  }\n  transport() {\n    return this.initialized;\n  }\n  probe() {\n    this.sendText('1');\n  }\n  backoffReset() {\n    this.#boffReset();\n  }\n  #boffReconnect() {\n    clearTimeout(this.#boffTimer);\n    const timeout = _config_js__WEBPACK_IMPORTED_MODULE_1__.BACKOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _config_js__WEBPACK_IMPORTED_MODULE_1__.BACKOFF_JITTER * Math.random()));\n    this.#boffIteration = this.#boffIteration >= _config_js__WEBPACK_IMPORTED_MODULE_1__.BACKOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1;\n    if (this.onAutoreconnectIteration) {\n      this.onAutoreconnectIteration(timeout);\n    }\n    this.#boffTimer = setTimeout(_ => {\n      Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n      if (!this.#boffClosed) {\n        const prom = this.connect();\n        if (this.onAutoreconnectIteration) {\n          this.onAutoreconnectIteration(0, prom);\n        } else {\n          prom.catch(_ => {});\n        }\n      } else if (this.onAutoreconnectIteration) {\n        this.onAutoreconnectIteration(-1);\n      }\n    }, timeout);\n  }\n  #boffStop() {\n    clearTimeout(this.#boffTimer);\n    this.#boffTimer = null;\n  }\n  #boffReset() {\n    this.#boffIteration = 0;\n  }\n  #init_lp() {\n    const XDR_UNSENT = 0;\n    const XDR_OPENED = 1;\n    const XDR_HEADERS_RECEIVED = 2;\n    const XDR_LOADING = 3;\n    const XDR_DONE = 4;\n    let _lpURL = null;\n    let _poller = null;\n    let _sender = null;\n    let lp_sender = url_ => {\n      const sender = new XHRProvider();\n      sender.onreadystatechange = evt => {\n        if (sender.readyState == XDR_DONE && sender.status >= 400) {\n          throw new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](\"LP sender failed\", sender.status);\n        }\n      };\n      sender.open('POST', url_, true);\n      return sender;\n    };\n    let lp_poller = (url_, resolve, reject) => {\n      let poller = new XHRProvider();\n      let promiseCompleted = false;\n      poller.onreadystatechange = evt => {\n        if (poller.readyState == XDR_DONE) {\n          if (poller.status == 201) {\n            let pkt = JSON.parse(poller.responseText, _utils_js__WEBPACK_IMPORTED_MODULE_2__.jsonParseHelper);\n            _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n            poller = lp_poller(_lpURL);\n            poller.send(null);\n            if (this.onOpen) {\n              this.onOpen();\n            }\n            if (resolve) {\n              promiseCompleted = true;\n              resolve();\n            }\n            if (this.autoreconnect) {\n              this.#boffStop();\n            }\n          } else if (poller.status > 0 && poller.status < 400) {\n            if (this.onMessage) {\n              this.onMessage(poller.responseText);\n            }\n            poller = lp_poller(_lpURL);\n            poller.send(null);\n          } else {\n            if (reject && !promiseCompleted) {\n              promiseCompleted = true;\n              reject(poller.responseText);\n            }\n            if (this.onMessage && poller.responseText) {\n              this.onMessage(poller.responseText);\n            }\n            if (this.onDisconnect) {\n              const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n              const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n              this.onDisconnect(new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](text, code), code);\n            }\n            poller = null;\n            if (!this.#boffClosed && this.autoreconnect) {\n              this.#boffReconnect();\n            }\n          }\n        }\n      };\n      poller.open('POST', url_, true);\n      return poller;\n    };\n    this.connect = (host_, force) => {\n      this.#boffClosed = false;\n      if (_poller) {\n        if (!force) {\n          return Promise.resolve();\n        }\n        _poller.onreadystatechange = undefined;\n        _poller.abort();\n        _poller = null;\n      }\n      if (host_) {\n        this.host = host_;\n      }\n      return new Promise((resolve, reject) => {\n        const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n        Connection.#log(\"LP connecting to:\", url);\n        _poller = lp_poller(url, resolve, reject);\n        _poller.send(null);\n      }).catch(err => {\n        Connection.#log(\"LP connection failed:\", err);\n      });\n    };\n    this.reconnect = force => {\n      this.#boffStop();\n      this.connect(null, force);\n    };\n    this.disconnect = _ => {\n      this.#boffClosed = true;\n      this.#boffStop();\n      if (_sender) {\n        _sender.onreadystatechange = undefined;\n        _sender.abort();\n        _sender = null;\n      }\n      if (_poller) {\n        _poller.onreadystatechange = undefined;\n        _poller.abort();\n        _poller = null;\n      }\n      if (this.onDisconnect) {\n        this.onDisconnect(new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n      }\n      _lpURL = null;\n    };\n    this.sendText = msg => {\n      _sender = lp_sender(_lpURL);\n      if (_sender && _sender.readyState == XDR_OPENED) {\n        _sender.send(msg);\n      } else {\n        throw new Error(\"Long poller failed to connect\");\n      }\n    };\n    this.isConnected = _ => {\n      return _poller && true;\n    };\n  }\n  #init_ws() {\n    this.connect = (host_, force) => {\n      this.#boffClosed = false;\n      if (this.#socket) {\n        if (!force && this.#socket.readyState == this.#socket.OPEN) {\n          this.probe();\n          return Promise.resolve();\n        }\n        this.#socket.close();\n        this.#socket = null;\n      }\n      if (host_) {\n        this.host = host_;\n      }\n      return new Promise((resolve, reject) => {\n        const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n        Connection.#log(\"WS connecting to: \", url);\n        const conn = new WebSocketProvider(url);\n        conn.onerror = err => {\n          reject(err);\n        };\n        conn.onopen = _ => {\n          if (this.autoreconnect) {\n            this.#boffStop();\n          }\n          if (this.onOpen) {\n            this.onOpen();\n          }\n          resolve();\n        };\n        conn.onclose = _ => {\n          this.#socket = null;\n          if (this.onDisconnect) {\n            const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n            this.onDisconnect(new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n          }\n          if (!this.#boffClosed && this.autoreconnect) {\n            this.#boffReconnect();\n          }\n        };\n        conn.onmessage = evt => {\n          if (this.onMessage) {\n            this.onMessage(evt.data);\n          }\n        };\n        this.#socket = conn;\n      });\n    };\n    this.reconnect = force => {\n      this.#boffStop();\n      this.connect(null, force);\n    };\n    this.disconnect = _ => {\n      this.#boffClosed = true;\n      this.#boffStop();\n      if (!this.#socket) {\n        return;\n      }\n      this.#socket.close();\n      this.#socket = null;\n    };\n    this.sendText = msg => {\n      if (this.#socket && this.#socket.readyState == this.#socket.OPEN) {\n        this.#socket.send(msg);\n      } else {\n        throw new Error(\"Websocket is not connected\");\n      }\n    };\n    this.isConnected = _ => {\n      return this.#socket && this.#socket.readyState == this.#socket.OPEN;\n    };\n  }\n  onMessage = undefined;\n  onDisconnect = undefined;\n  onOpen = undefined;\n  onAutoreconnectIteration = undefined;\n}\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n\n/***/ }),\n\n/***/ \"./src/db.js\":\n/*!*******************!*\\\n  !*** ./src/db.js ***!\n  \\*******************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ DB; }\n/* harmony export */ });\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\nlet IDBProvider;\nclass DB {\n  #onError = _ => {};\n  #logger = _ => {};\n  db = null;\n  disabled = true;\n  constructor(onError, logger) {\n    this.#onError = onError || this.#onError;\n    this.#logger = logger || this.#logger;\n  }\n  #mapObjects(source, callback, context) {\n    if (!this.db) {\n      return disabled ? Promise.resolve([]) : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction([source]);\n      trx.onerror = event => {\n        this.#logger('PCache', 'mapObjects', source, event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore(source).getAll().onsuccess = event => {\n        if (callback) {\n          event.target.result.forEach(topic => {\n            callback.call(context, topic);\n          });\n        }\n        resolve(event.target.result);\n      };\n    });\n  }\n  initDatabase() {\n    return new Promise((resolve, reject) => {\n      const req = IDBProvider.open(DB_NAME, DB_VERSION);\n      req.onsuccess = event => {\n        this.db = event.target.result;\n        this.disabled = false;\n        this.db.onversionchange = _ => {\n          this.#logger('PCache', \"another tab tries to upgrade DB, shutting down\");\n          this.db.close();\n          this.db = null;\n          this.disabled = true;\n        };\n        resolve(this.db);\n      };\n      req.onerror = event => {\n        this.#logger('PCache', \"failed to initialize\", event);\n        reject(event.target.error);\n        this.#onError(event.target.error);\n      };\n      req.onupgradeneeded = event => {\n        this.db = event.target.result;\n        this.db.onerror = event => {\n          this.#logger('PCache', \"failed to create storage\", event);\n          this.#onError(event.target.error);\n        };\n        if (!this.db.objectStoreNames.contains('topic')) {\n          this.db.createObjectStore('topic', {\n            keyPath: 'name'\n          });\n        }\n        if (!this.db.objectStoreNames.contains('user')) {\n          this.db.createObjectStore('user', {\n            keyPath: 'uid'\n          });\n        }\n        if (!this.db.objectStoreNames.contains('subscription')) {\n          this.db.createObjectStore('subscription', {\n            keyPath: ['topic', 'uid']\n          });\n        }\n        if (!this.db.objectStoreNames.contains('message')) {\n          this.db.createObjectStore('message', {\n            keyPath: ['topic', 'seq']\n          });\n        }\n        if (!this.db.objectStoreNames.contains('dellog')) {\n          const dellog = this.db.createObjectStore('dellog', {\n            keyPath: ['topic', 'low', 'hi']\n          });\n          if (!dellog.indexNames.contains('topic_clear')) {\n            dellog.createIndex('topic_clear', ['topic', 'clear'], {\n              unique: false\n            });\n          }\n        }\n      };\n    });\n  }\n  deleteDatabase() {\n    if (this.db) {\n      this.db.close();\n      this.db = null;\n    }\n    return new Promise((resolve, reject) => {\n      const req = IDBProvider.deleteDatabase(DB_NAME);\n      req.onblocked = _ => {\n        if (this.db) {\n          this.db.close();\n        }\n        const err = new Error(\"blocked\");\n        this.#logger('PCache', 'deleteDatabase', err);\n        reject(err);\n      };\n      req.onsuccess = _ => {\n        this.db = null;\n        this.disabled = true;\n        resolve(true);\n      };\n      req.onerror = event => {\n        this.#logger('PCache', 'deleteDatabase', event.target.error);\n        reject(event.target.error);\n      };\n    });\n  }\n  isReady() {\n    return !!this.db;\n  }\n  updTopic(topic) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['topic'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'updTopic', event.target.error);\n        reject(event.target.error);\n      };\n      const req = trx.objectStore('topic').get(topic.name);\n      req.onsuccess = _ => {\n        trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n        trx.commit();\n      };\n    });\n  }\n  markTopicAsDeleted(name, deleted) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['topic'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n        reject(event.target.error);\n      };\n      const req = trx.objectStore('topic').get(name);\n      req.onsuccess = event => {\n        const topic = event.target.result;\n        if (topic && topic._deleted != deleted) {\n          topic._deleted = deleted;\n          trx.objectStore('topic').put(topic);\n        }\n        trx.commit();\n      };\n    });\n  }\n  remTopic(name) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'remTopic', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('topic').delete(IDBKeyRange.only(name));\n      trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n      trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n      trx.commit();\n    });\n  }\n  mapTopics(callback, context) {\n    return this.#mapObjects('topic', callback, context);\n  }\n  deserializeTopic(topic, src) {\n    DB.#deserializeTopic(topic, src);\n  }\n  updUser(uid, pub) {\n    if (arguments.length < 2 || pub === undefined) {\n      return;\n    }\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['user'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'updUser', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('user').put({\n        uid: uid,\n        public: pub\n      });\n      trx.commit();\n    });\n  }\n  remUser(uid) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['user'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'remUser', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('user').delete(IDBKeyRange.only(uid));\n      trx.commit();\n    });\n  }\n  mapUsers(callback, context) {\n    return this.#mapObjects('user', callback, context);\n  }\n  getUser(uid) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['user']);\n      trx.oncomplete = event => {\n        const user = event.target.result;\n        resolve({\n          user: user.uid,\n          public: user.public\n        });\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'getUser', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('user').get(uid);\n    });\n  }\n  updSubscription(topicName, uid, sub) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['subscription'], 'readwrite');\n      trx.oncomplete = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'updSubscription', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('subscription').get([topicName, uid]).onsuccess = event => {\n        trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n        trx.commit();\n      };\n    });\n  }\n  mapSubscriptions(topicName, callback, context) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve([]) : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['subscription']);\n      trx.onerror = event => {\n        this.#logger('PCache', 'mapSubscriptions', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = event => {\n        if (callback) {\n          event.target.result.forEach(topic => {\n            callback.call(context, topic);\n          });\n        }\n        resolve(event.target.result);\n      };\n    });\n  }\n  addMessage(msg) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['message'], 'readwrite');\n      trx.onsuccess = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'addMessage', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n      trx.commit();\n    });\n  }\n  updMessageStatus(topicName, seq, status) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['message'], 'readwrite');\n      trx.onsuccess = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'updMessageStatus', event.target.error);\n        reject(event.target.error);\n      };\n      const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n      req.onsuccess = event => {\n        const src = req.result || event.target.result;\n        if (!src || src._status == status) {\n          trx.commit();\n          return;\n        }\n        trx.objectStore('message').put(DB.#serializeMessage(src, {\n          topic: topicName,\n          seq: seq,\n          _status: status\n        }));\n        trx.commit();\n      };\n    });\n  }\n  remMessages(topicName, from, to) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      if (!from && !to) {\n        from = 0;\n        to = Number.MAX_SAFE_INTEGER;\n      }\n      const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) : IDBKeyRange.only([topicName, from]);\n      const trx = this.db.transaction(['message'], 'readwrite');\n      trx.onsuccess = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'remMessages', event.target.error);\n        reject(event.target.error);\n      };\n      trx.objectStore('message').delete(range);\n      trx.commit();\n    });\n  }\n  readMessages(topicName, query, callback, context) {\n    query = query || {};\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve([]) : Promise.reject(new Error(\"not initialized\"));\n    }\n    const trx = this.db.transaction(['message']);\n    let result = [];\n    if (Array.isArray(query.ranges)) {\n      return new Promise((resolve, reject) => {\n        trx.onerror = event => {\n          this.#logger('PCache', 'readMessages', event.target.error);\n          reject(event.target.error);\n        };\n        let count = 0;\n        query.ranges.forEach(range => {\n          const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) : IDBKeyRange.only([topicName, range.low]);\n          trx.objectStore('message').getAll(key).onsuccess = event => {\n            const msgs = event.target.result;\n            if (msgs) {\n              if (callback) {\n                callback.call(context, msgs);\n              }\n              if (Array.isArray(msgs)) {\n                result = result.concat(msgs);\n              } else {\n                result.push(msgs);\n              }\n            }\n            count++;\n            if (count == query.ranges.length) {\n              resolve(result);\n            }\n          };\n        });\n      });\n    }\n    return new Promise((resolve, reject) => {\n      const since = query.since > 0 ? query.since : 0;\n      const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n      const limit = query.limit | 0;\n      trx.onerror = event => {\n        this.#logger('PCache', 'readMessages', event.target.error);\n        reject(event.target.error);\n      };\n      const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n      trx.objectStore('message').openCursor(range, 'prev').onsuccess = event => {\n        const cursor = event.target.result;\n        if (cursor) {\n          if (callback) {\n            callback.call(context, cursor.value);\n          }\n          result.push(cursor.value);\n          if (limit <= 0 || result.length < limit) {\n            cursor.continue();\n          } else {\n            resolve(result);\n          }\n        } else {\n          resolve(result);\n        }\n      };\n    });\n  }\n  addDelLog(topicName, delId, ranges) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve() : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['dellog'], 'readwrite');\n      trx.onsuccess = event => {\n        resolve(event.target.result);\n      };\n      trx.onerror = event => {\n        this.#logger('PCache', 'addDelLog', event.target.error);\n        reject(event.target.error);\n      };\n      ranges.forEach(r => trx.objectStore('dellog').add({\n        topic: topicName,\n        clear: delId,\n        low: r.low,\n        hi: r.hi || r.low + 1\n      }));\n      trx.commit();\n    });\n  }\n  readDelLog(topicName, query) {\n    query = query || {};\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve([]) : Promise.reject(new Error(\"not initialized\"));\n    }\n    const trx = this.db.transaction(['dellog']);\n    let result = [];\n    if (Array.isArray(query.ranges)) {\n      return new Promise((resolve, reject) => {\n        trx.onerror = event => {\n          this.#logger('PCache', 'readDelLog', event.target.error);\n          reject(event.target.error);\n        };\n        let count = 0;\n        query.ranges.forEach(range => {\n          const hi = range.hi || range.low + 1;\n          const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);\n          trx.objectStore('dellog').getAll(key).onsuccess = event => {\n            const entries = event.target.result;\n            if (entries) {\n              if (Array.isArray(entries)) {\n                result = result.concat(entries.map(entry => {\n                  return {\n                    low: entry.low,\n                    hi: entry.hi\n                  };\n                }));\n              } else {\n                result.push({\n                  low: entries.low,\n                  hi: entries.hi\n                });\n              }\n            }\n            count++;\n            if (count == query.ranges.length) {\n              resolve(result);\n            }\n          };\n        });\n      });\n    }\n    return new Promise((resolve, reject) => {\n      const since = query.since > 0 ? query.since : 0;\n      const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n      const limit = query.limit | 0;\n      trx.onerror = event => {\n        this.#logger('PCache', 'readDelLog', event.target.error);\n        reject(event.target.error);\n      };\n      let count = 0;\n      const result = [];\n      const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);\n      trx.objectStore('dellog').openCursor(range, 'prev').onsuccess = event => {\n        const cursor = event.target.result;\n        if (cursor) {\n          result.push({\n            low: cursor.value.low,\n            hi: cursor.value.hi\n          });\n          count += cursor.value.hi - cursor.value.low;\n          if (limit <= 0 || count < limit) {\n            cursor.continue();\n          } else {\n            resolve(result);\n          }\n        } else {\n          resolve(result);\n        }\n      };\n    });\n  }\n  maxDelId(topicName) {\n    if (!this.isReady()) {\n      return this.disabled ? Promise.resolve(0) : Promise.reject(new Error(\"not initialized\"));\n    }\n    return new Promise((resolve, reject) => {\n      const trx = this.db.transaction(['dellog']);\n      trx.onerror = event => {\n        this.#logger('PCache', 'maxDelId', event.target.error);\n        reject(event.target.error);\n      };\n      const index = trx.objectStore('dellog').index('topic_clear');\n      index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev').onsuccess = event => {\n        if (event.target.result) {\n          resolve(event.target.result.value);\n        }\n      };\n    });\n  }\n  static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq', 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted'];\n  static #deserializeTopic(topic, src) {\n    DB.#topic_fields.forEach(f => {\n      if (src.hasOwnProperty(f)) {\n        topic[f] = src[f];\n      }\n    });\n    if (Array.isArray(src.tags)) {\n      topic._tags = src.tags;\n    }\n    if (src.acs) {\n      topic.setAccessMode(src.acs);\n    }\n    topic.seq |= 0;\n    topic.read |= 0;\n    topic.unread = Math.max(0, topic.seq - topic.read);\n  }\n  static #serializeTopic(dst, src) {\n    const res = dst || {\n      name: src.name\n    };\n    DB.#topic_fields.forEach(f => {\n      if (src.hasOwnProperty(f)) {\n        res[f] = src[f];\n      }\n    });\n    if (Array.isArray(src._tags)) {\n      res.tags = src._tags;\n    }\n    if (src.acs) {\n      res.acs = src.getAccessMode().jsonHelper();\n    }\n    return res;\n  }\n  static #serializeSubscription(dst, topicName, uid, sub) {\n    const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n    const res = dst || {\n      topic: topicName,\n      uid: uid\n    };\n    fields.forEach(f => {\n      if (sub.hasOwnProperty(f)) {\n        res[f] = sub[f];\n      }\n    });\n    return res;\n  }\n  static #serializeMessage(dst, msg) {\n    const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n    const res = dst || {};\n    fields.forEach(f => {\n      if (msg.hasOwnProperty(f)) {\n        res[f] = msg[f];\n      }\n    });\n    return res;\n  }\n  static setDatabaseProvider(idbProvider) {\n    IDBProvider = idbProvider;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/drafty.js\":\n/*!***********************!*\\\n  !*** ./src/drafty.js ***!\n  \\***********************/\n/***/ (function(module) {\n\n/**\n * @copyright 2015-2026 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n * <p>Supports conversion of user keyboard input to formatted text:</p>\n * <ul>\n *   <li>*abc* &rarr; <b>abc</b></li>\n *   <li>_abc_ &rarr; <i>abc</i></li>\n *   <li>~abc~ &rarr; <del>abc</del></li>\n *   <li>`abc` &rarr; <tt>abc</tt></li>\n * </ul>\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> <b>abc <i>def</i></b>\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n * <pre>\n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * </pre>\n *\n *  Sample JSON representation of the text above:\n *  {\n *     \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n *             \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n *     \"fmt\": [\n *         { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n *         { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n *         { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n *         { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n *         { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n *         { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n *     ],\n *     \"ent\": [\n *         { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n *         { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n *         { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n *         { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n *     ]\n *  }\n */\n\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr';\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'fn', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width'];\nconst segmenter = new Intl.Segmenter();\nconst INLINE_STYLES = [{\n  name: 'ST',\n  start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n  end: /[^\\s*](\\*)(?=$|[\\W_])/\n}, {\n  name: 'EM',\n  start: /(?:^|\\W)(_)[^\\s_]/,\n  end: /[^\\s_](_)(?=$|\\W)/\n}, {\n  name: 'DL',\n  start: /(?:^|[\\W_])(~)[^\\s~]/,\n  end: /[^\\s~](~)(?=$|[\\W_])/\n}, {\n  name: 'CO',\n  start: /(?:^|\\W)(`)[^`]/,\n  end: /[^`](`)(?=$|\\W)/\n}];\nconst FMT_WEIGHT = ['QQ'];\nconst ENTITY_TYPES = [{\n  name: 'LN',\n  dataName: 'url',\n  pack: function (val) {\n    if (!/^[a-z]+:\\/\\//i.test(val)) {\n      val = 'http://' + val;\n    }\n    return {\n      url: val\n    };\n  },\n  re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n}, {\n  name: 'MN',\n  dataName: 'val',\n  pack: function (val) {\n    return {\n      val: val.slice(1)\n    };\n  },\n  re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n}, {\n  name: 'HT',\n  dataName: 'val',\n  pack: function (val) {\n    return {\n      val: val.slice(1)\n    };\n  },\n  re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n}];\nconst FORMAT_TAGS = {\n  AU: {\n    html_tag: 'audio',\n    md_tag: undefined,\n    isVoid: false\n  },\n  BN: {\n    html_tag: 'button',\n    md_tag: undefined,\n    isVoid: false\n  },\n  BR: {\n    html_tag: 'br',\n    md_tag: '\\n',\n    isVoid: true\n  },\n  CO: {\n    html_tag: 'tt',\n    md_tag: '`',\n    isVoid: false\n  },\n  DL: {\n    html_tag: 'del',\n    md_tag: '~',\n    isVoid: false\n  },\n  EM: {\n    html_tag: 'i',\n    md_tag: '_',\n    isVoid: false\n  },\n  EX: {\n    html_tag: '',\n    md_tag: undefined,\n    isVoid: true\n  },\n  FM: {\n    html_tag: 'div',\n    md_tag: undefined,\n    isVoid: false\n  },\n  HD: {\n    html_tag: '',\n    md_tag: undefined,\n    isVoid: false\n  },\n  HL: {\n    html_tag: 'span',\n    md_tag: undefined,\n    isVoid: false\n  },\n  HT: {\n    html_tag: 'a',\n    md_tag: undefined,\n    isVoid: false\n  },\n  IM: {\n    html_tag: 'img',\n    md_tag: undefined,\n    isVoid: false\n  },\n  LN: {\n    html_tag: 'a',\n    md_tag: undefined,\n    isVoid: false\n  },\n  MN: {\n    html_tag: 'a',\n    md_tag: undefined,\n    isVoid: false\n  },\n  RW: {\n    html_tag: 'div',\n    md_tag: undefined,\n    isVoid: false\n  },\n  QQ: {\n    html_tag: 'div',\n    md_tag: undefined,\n    isVoid: false\n  },\n  ST: {\n    html_tag: 'b',\n    md_tag: '*',\n    isVoid: false\n  },\n  TC: {\n    html_tag: 'div',\n    md_tag: undefined,\n    isVoid: false\n  },\n  VC: {\n    html_tag: 'div',\n    md_tag: undefined,\n    isVoid: false\n  },\n  VD: {\n    html_tag: 'video',\n    md_tag: undefined,\n    isVoid: false\n  }\n};\nfunction base64toObjectUrl(b64, contentType, logger) {\n  if (!b64) {\n    return null;\n  }\n  try {\n    const bin = atob(b64);\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    return URL.createObjectURL(new Blob([buf], {\n      type: contentType\n    }));\n  } catch (err) {\n    if (logger) {\n      logger(\"Drafty: failed to convert object.\", err.message);\n    }\n  }\n  return null;\n}\nfunction base64toDataUrl(b64, contentType) {\n  if (!b64) {\n    return null;\n  }\n  contentType = contentType || 'image/jpeg';\n  return 'data:' + contentType + ';base64,' + b64;\n}\nconst DECORATORS = {\n  ST: {\n    open: _ => '<b>',\n    close: _ => '</b>'\n  },\n  EM: {\n    open: _ => '<i>',\n    close: _ => '</i>'\n  },\n  DL: {\n    open: _ => '<del>',\n    close: _ => '</del>'\n  },\n  CO: {\n    open: _ => '<tt>',\n    close: _ => '</tt>'\n  },\n  BR: {\n    open: _ => '<br/>',\n    close: _ => ''\n  },\n  HD: {\n    open: _ => '',\n    close: _ => ''\n  },\n  HL: {\n    open: _ => '<span style=\"color:teal\">',\n    close: _ => '</span>'\n  },\n  LN: {\n    open: data => {\n      return '<a href=\"' + data.url + '\">';\n    },\n    close: _ => '</a>',\n    props: data => {\n      return data ? {\n        href: data.url,\n        target: '_blank'\n      } : null;\n    }\n  },\n  MN: {\n    open: data => {\n      return '<a href=\"#' + data.val + '\">';\n    },\n    close: _ => '</a>',\n    props: data => {\n      return data ? {\n        id: data.val\n      } : null;\n    }\n  },\n  HT: {\n    open: data => {\n      return '<a href=\"#' + data.val + '\">';\n    },\n    close: _ => '</a>',\n    props: data => {\n      return data ? {\n        id: data.val\n      } : null;\n    }\n  },\n  BN: {\n    open: _ => '<button>',\n    close: _ => '</button>',\n    props: data => {\n      return data ? {\n        'data-act': data.act,\n        'data-val': data.val,\n        'data-name': data.name,\n        'data-ref': data.ref\n      } : null;\n    }\n  },\n  AU: {\n    open: data => {\n      const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n      return '<audio controls src=\"' + url + '\">';\n    },\n    close: _ => '</audio>',\n    props: data => {\n      if (!data) return null;\n      return {\n        src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n        'data-preload': data.ref ? 'metadata' : 'auto',\n        'data-duration': data.duration,\n        'data-name': data.name,\n        'data-size': data.val ? data.val.length * 0.75 | 0 : data.size | 0,\n        'data-mime': data.mime\n      };\n    }\n  },\n  IM: {\n    open: data => {\n      const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n      const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n      const downloadUrl = data.ref || previewUrl;\n      return (data.name ? '<a href=\"' + downloadUrl + '\" download=\"' + data.name + '\">' : '') + '<img src=\"' + (tmpPreviewUrl || previewUrl) + '\"' + (data.width ? ' width=\"' + data.width + '\"' : '') + (data.height ? ' height=\"' + data.height + '\"' : '') + ' border=\"0\" />';\n    },\n    close: data => {\n      return data.name ? '</a>' : '';\n    },\n    props: data => {\n      if (!data) return null;\n      return {\n        src: base64toDataUrl(data._tempPreview, data.mime) || data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n        title: data.name,\n        alt: data.name,\n        'data-width': data.width,\n        'data-height': data.height,\n        'data-name': data.name,\n        'data-size': data.ref ? data.size | 0 : data.val ? data.val.length * 0.75 | 0 : data.size | 0,\n        'data-mime': data.mime\n      };\n    }\n  },\n  FM: {\n    open: _ => '<div>',\n    close: _ => '</div>'\n  },\n  RW: {\n    open: _ => '<div>',\n    close: _ => '</div>'\n  },\n  QQ: {\n    open: _ => '<div>',\n    close: _ => '</div>',\n    props: data => {\n      return data ? {} : null;\n    }\n  },\n  TC: {\n    open: _ => '<div>',\n    close: _ => '</div>',\n    props: data => {\n      if (!data) return {};\n      return {\n        'data-fn': data.fn,\n        'data-title': data.title\n      };\n    }\n  },\n  VC: {\n    open: _ => '<div>',\n    close: _ => '</div>',\n    props: data => {\n      if (!data) return {};\n      return {\n        'data-duration': data.duration,\n        'data-state': data.state\n      };\n    }\n  },\n  VD: {\n    open: data => {\n      const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n      const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n      return '<img src=\"' + (tmpPreviewUrl || previewUrl) + '\"' + (data.width ? ' width=\"' + data.width + '\"' : '') + (data.height ? ' height=\"' + data.height + '\"' : '') + ' border=\"0\" />';\n    },\n    close: _ => '',\n    props: data => {\n      if (!data) return null;\n      const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n      return {\n        src: poster,\n        'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n        'data-width': data.width,\n        'data-height': data.height,\n        'data-preload': data.ref ? 'metadata' : 'auto',\n        'data-preview': poster,\n        'data-duration': data.duration | 0,\n        'data-name': data.name,\n        'data-size': data.ref ? data.size | 0 : data.val ? data.val.length * 0.75 | 0 : data.size | 0,\n        'data-mime': data.mime\n      };\n    }\n  }\n};\nconst Drafty = function () {\n  this.txt = '';\n  this.fmt = [];\n  this.ent = [];\n};\nDrafty.init = function (plainText) {\n  if (typeof plainText == 'undefined') {\n    plainText = '';\n  } else if (typeof plainText != 'string') {\n    return null;\n  }\n  return {\n    txt: plainText\n  };\n};\nDrafty.parse = function (content) {\n  if (typeof content != 'string') {\n    return null;\n  }\n  const lines = content.split(/\\r?\\n/);\n  const entityMap = [];\n  const entityIndex = {};\n  const blx = [];\n  lines.forEach(line => {\n    let spans = [];\n    let entities;\n    INLINE_STYLES.forEach(tag => {\n      spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n    });\n    let block;\n    if (spans.length == 0) {\n      block = {\n        txt: line\n      };\n    } else {\n      spans.sort((a, b) => {\n        const diff = a.at - b.at;\n        return diff != 0 ? diff : b.end - a.end;\n      });\n      spans = toSpanTree(spans);\n      const chunks = chunkify(line, 0, line.length, spans);\n      const drafty = draftify(chunks, 0);\n      block = {\n        txt: drafty.txt,\n        fmt: drafty.fmt\n      };\n    }\n    entities = extractEntities(block.txt);\n    if (entities.length > 0) {\n      const ranges = [];\n      for (let i in entities) {\n        const entity = entities[i];\n        let index = entityIndex[entity.unique];\n        if (!index) {\n          index = entityMap.length;\n          entityIndex[entity.unique] = index;\n          entityMap.push({\n            tp: entity.type,\n            data: entity.data\n          });\n        }\n        ranges.push({\n          at: entity.offset,\n          len: entity.len,\n          key: index\n        });\n      }\n      block.ent = ranges;\n    }\n    blx.push(block);\n  });\n  const result = {\n    txt: ''\n  };\n  if (blx.length > 0) {\n    result.txt = blx[0].txt;\n    result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n    if (result.fmt.length) {\n      const segments = segmenter.segment(result.txt);\n      for (const ele of result.fmt) {\n        ({\n          at: ele.at,\n          len: ele.len\n        } = toGraphemeValues(ele, segments, result.txt));\n      }\n    }\n    for (let i = 1; i < blx.length; i++) {\n      const block = blx[i];\n      const offset = stringToGraphemes(result.txt).length + 1;\n      result.fmt.push({\n        tp: 'BR',\n        len: 1,\n        at: offset - 1\n      });\n      let segments = {};\n      result.txt += ' ' + block.txt;\n      if (block.fmt) {\n        segments = segmenter.segment(block.txt);\n        result.fmt = result.fmt.concat(block.fmt.map(s => {\n          const {\n            at: correctAt,\n            len: correctLen\n          } = toGraphemeValues(s, segments, block.txt);\n          s.at = correctAt + offset;\n          s.len = correctLen;\n          return s;\n        }));\n      }\n      if (block.ent) {\n        if (isEmptyObject(segments)) {\n          segments = segmenter.segment(block.txt);\n        }\n        result.fmt = result.fmt.concat(block.ent.map(s => {\n          const {\n            at: correctAt,\n            len: correctLen\n          } = toGraphemeValues(s, segments, block.txt);\n          s.at = correctAt + offset;\n          s.len = correctLen;\n          return s;\n        }));\n      }\n    }\n    if (result.fmt.length == 0) {\n      delete result.fmt;\n    }\n    if (entityMap.length > 0) {\n      result.ent = entityMap;\n    }\n  }\n  return result;\n};\nDrafty.append = function (first, second) {\n  if (!first) {\n    return second;\n  }\n  if (!second) {\n    return first;\n  }\n  first.txt = first.txt || '';\n  const len = stringToGraphemes(first.txt).length;\n  if (typeof second == 'string') {\n    first.txt += second;\n  } else if (second.txt) {\n    first.txt += second.txt;\n  }\n  if (Array.isArray(second.fmt)) {\n    first.fmt = first.fmt || [];\n    if (Array.isArray(second.ent)) {\n      first.ent = first.ent || [];\n    }\n    second.fmt.forEach(src => {\n      const fmt = {\n        at: (src.at | 0) + len,\n        len: src.len | 0\n      };\n      if (src.at == -1) {\n        fmt.at = -1;\n        fmt.len = 0;\n      }\n      if (src.tp) {\n        fmt.tp = src.tp;\n      } else {\n        fmt.key = first.ent.length;\n        first.ent.push(second.ent[src.key || 0]);\n      }\n      first.fmt.push(fmt);\n    });\n  }\n  return first;\n};\nDrafty.insertImage = function (content, at, imageDesc) {\n  content = content || {\n    txt: ' '\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: at | 0,\n    len: 1,\n    key: content.ent.length\n  });\n  const ex = {\n    tp: 'IM',\n    data: {\n      mime: imageDesc.mime,\n      ref: imageDesc.refurl,\n      val: imageDesc.bits || imageDesc.preview,\n      width: imageDesc.width,\n      height: imageDesc.height,\n      name: imageDesc.filename,\n      size: imageDesc.size | 0\n    }\n  };\n  if (imageDesc.urlPromise) {\n    ex.data._tempPreview = imageDesc._tempPreview;\n    ex.data._processing = true;\n    imageDesc.urlPromise.then(url => {\n      ex.data.ref = url;\n      ex.data._tempPreview = undefined;\n      ex.data._processing = undefined;\n    }, _ => {\n      ex.data._processing = undefined;\n    });\n  }\n  content.ent.push(ex);\n  return content;\n};\nDrafty.insertVideo = function (content, at, videoDesc) {\n  content = content || {\n    txt: ' '\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: at | 0,\n    len: 1,\n    key: content.ent.length\n  });\n  const ex = {\n    tp: 'VD',\n    data: {\n      mime: videoDesc.mime,\n      ref: videoDesc.refurl,\n      val: videoDesc.bits,\n      preref: videoDesc.preref,\n      preview: videoDesc.preview,\n      width: videoDesc.width,\n      height: videoDesc.height,\n      duration: videoDesc.duration | 0,\n      name: videoDesc.filename,\n      size: videoDesc.size | 0\n    }\n  };\n  if (videoDesc.urlPromise) {\n    ex.data._tempPreview = videoDesc._tempPreview;\n    ex.data._processing = true;\n    videoDesc.urlPromise.then(urls => {\n      ex.data.ref = urls[0];\n      ex.data.preref = urls[1];\n      ex.data._tempPreview = undefined;\n      ex.data._processing = undefined;\n    }, _ => {\n      ex.data._processing = undefined;\n    });\n  }\n  content.ent.push(ex);\n  return content;\n};\nDrafty.insertAudio = function (content, at, audioDesc) {\n  content = content || {\n    txt: ' '\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: at | 0,\n    len: 1,\n    key: content.ent.length\n  });\n  const ex = {\n    tp: 'AU',\n    data: {\n      mime: audioDesc.mime,\n      val: audioDesc.bits,\n      duration: audioDesc.duration | 0,\n      preview: audioDesc.preview,\n      name: audioDesc.filename,\n      size: audioDesc.size | 0,\n      ref: audioDesc.refurl\n    }\n  };\n  if (audioDesc.urlPromise) {\n    ex.data._processing = true;\n    audioDesc.urlPromise.then(url => {\n      ex.data.ref = url;\n      ex.data._processing = undefined;\n    }, _ => {\n      ex.data._processing = undefined;\n    });\n  }\n  content.ent.push(ex);\n  return content;\n};\nDrafty.videoCall = function (audioOnly) {\n  const content = {\n    txt: ' ',\n    fmt: [{\n      at: 0,\n      len: 1,\n      key: 0\n    }],\n    ent: [{\n      tp: 'VC',\n      data: {\n        aonly: audioOnly\n      }\n    }]\n  };\n  return content;\n};\nDrafty.updateVideoCall = function (content, params) {\n  const fmt = ((content || {}).fmt || [])[0];\n  if (!fmt) {\n    return content;\n  }\n  let ent;\n  if (fmt.tp == 'VC') {\n    delete fmt.tp;\n    fmt.key = 0;\n    ent = {\n      tp: 'VC'\n    };\n    content.ent = [ent];\n  } else {\n    ent = (content.ent || [])[fmt.key | 0];\n    if (!ent || ent.tp != 'VC') {\n      return content;\n    }\n  }\n  ent.data = ent.data || {};\n  Object.assign(ent.data, params);\n  return content;\n};\nDrafty.quote = function (header, uid, body) {\n  const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n  quote.fmt.push({\n    at: 0,\n    len: stringToGraphemes(quote.txt).length,\n    tp: 'QQ'\n  });\n  return quote;\n};\nDrafty.mention = function (name, uid) {\n  return {\n    txt: name || '',\n    fmt: [{\n      at: 0,\n      len: stringToGraphemes(name || '').length,\n      key: 0\n    }],\n    ent: [{\n      tp: 'MN',\n      data: {\n        val: uid\n      }\n    }]\n  };\n};\nDrafty.appendLink = function (content, linkData) {\n  content = content || {\n    txt: ''\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: content.txt.length,\n    len: linkData.txt.length,\n    key: content.ent.length\n  });\n  content.txt += linkData.txt;\n  const ex = {\n    tp: 'LN',\n    data: {\n      url: linkData.url\n    }\n  };\n  content.ent.push(ex);\n  return content;\n};\nDrafty.appendImage = function (content, imageDesc) {\n  content = content || {\n    txt: ''\n  };\n  content.txt += ' ';\n  return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n};\nDrafty.appendAudio = function (content, audioDesc) {\n  content = content || {\n    txt: ''\n  };\n  content.txt += ' ';\n  return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n};\nDrafty.attachFile = function (content, attachmentDesc) {\n  content = content || {\n    txt: ''\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: -1,\n    len: 0,\n    key: content.ent.length\n  });\n  const ex = {\n    tp: 'EX',\n    data: {\n      mime: attachmentDesc.mime,\n      val: attachmentDesc.data,\n      name: attachmentDesc.filename,\n      ref: attachmentDesc.refurl,\n      size: attachmentDesc.size | 0\n    }\n  };\n  if (attachmentDesc.urlPromise) {\n    ex.data._processing = true;\n    attachmentDesc.urlPromise.then(url => {\n      ex.data.ref = url;\n      ex.data._processing = undefined;\n    }, _ => {\n      ex.data._processing = undefined;\n    });\n  }\n  content.ent.push(ex);\n  return content;\n};\nDrafty.wrapInto = function (content, style, at, len) {\n  if (typeof content == 'string') {\n    content = {\n      txt: content\n    };\n  }\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: at || 0,\n    len: len || content.txt.length,\n    tp: style\n  });\n  return content;\n};\nDrafty.wrapAsForm = function (content, at, len) {\n  return Drafty.wrapInto(content, 'FM', at, len);\n};\nDrafty.insertButton = function (content, at, len, name, actionType, actionValue, refUrl) {\n  if (typeof content == 'string') {\n    content = {\n      txt: content\n    };\n  }\n  if (!content || !content.txt || content.txt.length < at + len) {\n    return null;\n  }\n  if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n    return null;\n  }\n  if (actionType == 'url' && !refUrl) {\n    return null;\n  }\n  refUrl = '' + refUrl;\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: at | 0,\n    len: len,\n    key: content.ent.length\n  });\n  content.ent.push({\n    tp: 'BN',\n    data: {\n      act: actionType,\n      val: actionValue,\n      ref: refUrl,\n      name: name\n    }\n  });\n  return content;\n};\nDrafty.appendButton = function (content, title, name, actionType, actionValue, refUrl) {\n  content = content || {\n    txt: ''\n  };\n  const at = content.txt.length;\n  content.txt += title;\n  return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n};\nDrafty.attachJSON = function (content, data) {\n  content = content || {\n    txt: ''\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: -1,\n    len: 0,\n    key: content.ent.length\n  });\n  content.ent.push({\n    tp: 'EX',\n    data: {\n      mime: DRAFTY_FR_MIME_TYPE,\n      val: data\n    }\n  });\n  return content;\n};\nDrafty.appendLineBreak = function (content) {\n  content = content || {\n    txt: ''\n  };\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: stringToGraphemes(content.txt).length,\n    len: 1,\n    tp: 'BR'\n  });\n  content.txt += ' ';\n  return content;\n};\nDrafty.appendTheCard = function (content, theCardData) {\n  content = content || {\n    txt: ''\n  };\n  content.ent = content.ent || [];\n  content.fmt = content.fmt || [];\n  content.fmt.push({\n    at: stringToGraphemes(content.txt).length,\n    len: 1,\n    key: content.ent.length\n  });\n  content.txt += ' ';\n  content.ent.push({\n    tp: 'TC',\n    data: theCardData\n  });\n  return content;\n};\nDrafty.UNSAFE_toHTML = function (doc) {\n  const tree = draftyToTree(doc);\n  const htmlFormatter = function (type, data, values) {\n    const tag = DECORATORS[type];\n    let result = values ? values.join('') : '';\n    if (tag) {\n      result = tag.open(data) + result + tag.close(data);\n    }\n    return result;\n  };\n  return treeBottomUp(tree, htmlFormatter, 0);\n};\nDrafty.format = function (original, formatter, context) {\n  return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n};\nDrafty.shorten = function (original, limit, light) {\n  let tree = draftyToTree(original);\n  tree = shortenTree(tree, limit, '…');\n  if (tree && light) {\n    tree = lightEntity(tree);\n  }\n  return treeToDrafty({}, tree, []);\n};\nDrafty.forwardedContent = function (original) {\n  let tree = draftyToTree(original);\n  const rmMention = function (node) {\n    if (node.type == 'MN') {\n      if (!node.parent || !node.parent.type) {\n        return null;\n      }\n    }\n    return node;\n  };\n  tree = treeTopDown(tree, rmMention);\n  tree = lTrim(tree);\n  return treeToDrafty({}, tree, []);\n};\nDrafty.replyContent = function (original, limit) {\n  const convMNnQQnBR = function (node) {\n    if (node.type == 'QQ') {\n      return null;\n    } else if (node.type == 'MN') {\n      if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n        node.text = '➦';\n        delete node.children;\n        delete node.data;\n      }\n    } else if (node.type == 'BR') {\n      node.text = ' ';\n      delete node.type;\n      delete node.children;\n    }\n    return node;\n  };\n  let tree = draftyToTree(original);\n  if (!tree) {\n    return original;\n  }\n  tree = treeTopDown(tree, convMNnQQnBR);\n  tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n  tree = shortenTree(tree, limit, '…');\n  const filter = node => {\n    switch (node.type) {\n      case 'IM':\n        return ['val'];\n      case 'VD':\n        return ['preview'];\n    }\n    return null;\n  };\n  tree = lightEntity(tree, filter);\n  return treeToDrafty({}, tree, []);\n};\nDrafty.preview = function (original, limit, forwarding) {\n  let tree = draftyToTree(original);\n  tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n  const convMNnQQnBR = function (node) {\n    if (node.type == 'MN') {\n      if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n        node.text = '➦';\n        delete node.children;\n      }\n    } else if (node.type == 'QQ') {\n      node.text = ' ';\n      delete node.children;\n    } else if (node.type == 'BR') {\n      node.text = ' ';\n      delete node.children;\n      delete node.type;\n    }\n    return node;\n  };\n  tree = treeTopDown(tree, convMNnQQnBR);\n  tree = shortenTree(tree, limit, '…');\n  if (forwarding) {\n    const filter = {\n      IM: ['val'],\n      VD: ['preview']\n    };\n    tree = lightEntity(tree, node => {\n      return filter[node.type];\n    });\n  } else {\n    tree = lightEntity(tree);\n  }\n  return treeToDrafty({}, tree, []);\n};\nDrafty.toPlainText = function (content) {\n  return typeof content == 'string' ? content : content.txt;\n};\nDrafty.isPlainText = function (content) {\n  return typeof content == 'string' || !(content.fmt || content.ent);\n};\nDrafty.toMarkdown = function (content) {\n  let tree = draftyToTree(content);\n  const mdFormatter = function (type, _, values) {\n    const def = FORMAT_TAGS[type];\n    let result = values ? values.join('') : '';\n    if (def) {\n      if (def.isVoid) {\n        result = def.md_tag || '';\n      } else if (def.md_tag) {\n        result = def.md_tag + result + def.md_tag;\n      }\n    }\n    return result;\n  };\n  return treeBottomUp(tree, mdFormatter, 0);\n};\nDrafty.isValid = function (content) {\n  if (!content) {\n    return false;\n  }\n  const {\n    txt,\n    fmt,\n    ent\n  } = content;\n  if (!txt && txt !== '' && !fmt && !ent) {\n    return false;\n  }\n  const txt_type = typeof txt;\n  if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n    return false;\n  }\n  if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n    return false;\n  }\n  if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n    return false;\n  }\n  return true;\n};\nDrafty.hasAttachments = function (content) {\n  if (!Array.isArray(content.fmt)) {\n    return false;\n  }\n  for (let i in content.fmt) {\n    const fmt = content.fmt[i];\n    if (fmt && fmt.at < 0) {\n      const ent = content.ent[fmt.key | 0];\n      return ent && ent.tp == 'EX' && ent.data;\n    }\n  }\n  return false;\n};\nDrafty.attachments = function (content, callback, context) {\n  if (!Array.isArray(content.fmt)) {\n    return;\n  }\n  let count = 0;\n  for (let i in content.fmt) {\n    let fmt = content.fmt[i];\n    if (fmt && fmt.at < 0) {\n      const ent = content.ent[fmt.key | 0];\n      if (ent && ent.tp == 'EX' && ent.data) {\n        if (callback.call(context, ent.data, count++, 'EX')) {\n          break;\n        }\n      }\n    }\n  }\n  ;\n};\nDrafty.hasEntities = function (content) {\n  return content.ent && content.ent.length > 0;\n};\nDrafty.entities = function (content, callback, context) {\n  if (content.ent && content.ent.length > 0) {\n    for (let i in content.ent) {\n      if (content.ent[i]) {\n        if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n          break;\n        }\n      }\n    }\n  }\n};\nDrafty.styles = function (content, callback, context) {\n  if (content.fmt && content.fmt.length > 0) {\n    for (let i in content.fmt) {\n      const fmt = content.fmt[i];\n      if (fmt) {\n        if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n          break;\n        }\n      }\n    }\n  }\n};\nDrafty.sanitizeEntities = function (content) {\n  if (content && content.ent && content.ent.length > 0) {\n    for (let i in content.ent) {\n      const ent = content.ent[i];\n      if (ent && ent.data) {\n        const data = copyEntData(ent.data);\n        if (data) {\n          content.ent[i].data = data;\n        } else {\n          delete content.ent[i].data;\n        }\n      }\n    }\n  }\n  return content;\n};\nDrafty.getDownloadUrl = function (entData) {\n  let url = null;\n  if (!Drafty.isFormResponseType(entData.mime) && entData.val) {\n    url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n  } else if (typeof entData.ref == 'string') {\n    url = entData.ref;\n  }\n  return url;\n};\nDrafty.isProcessing = function (entData) {\n  return !!entData._processing;\n};\nDrafty.getPreviewUrl = function (entData) {\n  return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n};\nDrafty.getEntitySize = function (entData) {\n  return entData.size ? entData.size : entData.val ? entData.val.length * 0.75 | 0 : 0;\n};\nDrafty.getEntityMimeType = function (entData) {\n  return entData.mime || 'text/plain';\n};\nDrafty.tagName = function (style) {\n  return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n};\nDrafty.attrValue = function (style, data) {\n  if (data && DECORATORS[style] && DECORATORS[style].props) {\n    return DECORATORS[style].props(data);\n  }\n  return undefined;\n};\nDrafty.getContentType = function () {\n  return DRAFTY_MIME_TYPE;\n};\nDrafty.contentType = DRAFTY_MIME_TYPE;\nDrafty.isFormResponseType = function (mimeType) {\n  return mimeType === DRAFTY_FR_MIME_TYPE || mimeType === DRAFTY_FR_MIME_TYPE_LEGACY;\n};\nfunction chunkify(line, start, end, spans) {\n  const chunks = [];\n  if (spans.length == 0) {\n    return [];\n  }\n  for (let i in spans) {\n    const span = spans[i];\n    if (span.at > start) {\n      chunks.push({\n        txt: line.slice(start, span.at)\n      });\n    }\n    const chunk = {\n      tp: span.tp\n    };\n    const chld = chunkify(line, span.at + 1, span.end, span.children);\n    if (chld.length > 0) {\n      chunk.children = chld;\n    } else {\n      chunk.txt = span.txt;\n    }\n    chunks.push(chunk);\n    start = span.end + 1;\n  }\n  if (start < end) {\n    chunks.push({\n      txt: line.slice(start, end)\n    });\n  }\n  return chunks;\n}\nfunction spannify(original, re_start, re_end, type) {\n  const result = [];\n  let index = 0;\n  let line = original.slice(0);\n  while (line.length > 0) {\n    const start = re_start.exec(line);\n    if (start == null) {\n      break;\n    }\n    let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n    line = line.slice(start_offset + 1);\n    start_offset += index;\n    index = start_offset + 1;\n    const end = re_end ? re_end.exec(line) : null;\n    if (end == null) {\n      break;\n    }\n    let end_offset = end['index'] + end[0].indexOf(end[1]);\n    line = line.slice(end_offset + 1);\n    end_offset += index;\n    index = end_offset + 1;\n    result.push({\n      txt: original.slice(start_offset + 1, end_offset),\n      children: [],\n      at: start_offset,\n      end: end_offset,\n      tp: type\n    });\n  }\n  return result;\n}\nfunction toSpanTree(spans) {\n  if (spans.length == 0) {\n    return [];\n  }\n  const tree = [spans[0]];\n  let last = spans[0];\n  for (let i = 1; i < spans.length; i++) {\n    if (spans[i].at > last.end) {\n      tree.push(spans[i]);\n      last = spans[i];\n    } else if (spans[i].end <= last.end) {\n      last.children.push(spans[i]);\n    }\n  }\n  for (let i in tree) {\n    tree[i].children = toSpanTree(tree[i].children);\n  }\n  return tree;\n}\nfunction draftyToTree(doc) {\n  if (!doc) {\n    return null;\n  }\n  doc = typeof doc == 'string' ? {\n    txt: doc\n  } : doc;\n  let {\n    txt,\n    fmt,\n    ent\n  } = doc;\n  txt = txt || '';\n  if (!Array.isArray(ent)) {\n    ent = [];\n  }\n  if (!Array.isArray(fmt) || fmt.length == 0) {\n    if (ent.length == 0) {\n      return {\n        text: txt\n      };\n    }\n    fmt = [{\n      at: 0,\n      len: 0,\n      key: 0\n    }];\n  }\n  const spans = [];\n  const attachments = [];\n  fmt.forEach(span => {\n    if (!span || typeof span != 'object') {\n      return;\n    }\n    if (!['undefined', 'number'].includes(typeof span.at)) {\n      return;\n    }\n    if (!['undefined', 'number'].includes(typeof span.len)) {\n      return;\n    }\n    let at = span.at | 0;\n    let len = span.len | 0;\n    if (len < 0) {\n      return;\n    }\n    let key = span.key || 0;\n    if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n      return;\n    }\n    if (at <= -1) {\n      attachments.push({\n        start: -1,\n        end: 0,\n        key: key\n      });\n      return;\n    } else if (at + len > stringToGraphemes(txt).length) {\n      return;\n    }\n    if (!span.tp) {\n      if (ent.length > 0 && typeof ent[key] == 'object') {\n        spans.push({\n          start: at,\n          end: at + len,\n          key: key\n        });\n      }\n    } else {\n      spans.push({\n        type: span.tp,\n        start: at,\n        end: at + len\n      });\n    }\n  });\n  spans.sort((a, b) => {\n    let diff = a.start - b.start;\n    if (diff != 0) {\n      return diff;\n    }\n    diff = b.end - a.end;\n    if (diff != 0) {\n      return diff;\n    }\n    return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n  });\n  if (attachments.length > 0) {\n    spans.push(...attachments);\n  }\n  spans.forEach(span => {\n    if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n      span.type = ent[span.key].tp;\n      span.data = ent[span.key].data;\n    }\n    if (!span.type) {\n      span.type = 'HD';\n    }\n  });\n  const graphemes = stringToGraphemes(txt);\n  let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n  const flatten = function (node) {\n    if (Array.isArray(node.children) && node.children.length == 1) {\n      const child = node.children[0];\n      if (!node.type) {\n        const parent = node.parent;\n        node = child;\n        node.parent = parent;\n      } else if (!child.type && !child.children) {\n        node.text = child.text;\n        delete node.children;\n      }\n    }\n    return node;\n  };\n  tree = treeTopDown(tree, flatten);\n  return tree;\n}\nfunction addNode(parent, n) {\n  if (!n) {\n    return parent;\n  }\n  if (!parent.children) {\n    parent.children = [];\n  }\n  if (parent.text) {\n    parent.children.push({\n      text: parent.text,\n      parent: parent\n    });\n    delete parent.text;\n  }\n  n.parent = parent;\n  parent.children.push(n);\n  return parent;\n}\nfunction spansToTree(parent, graphemes, start, end, spans) {\n  if (!spans || spans.length == 0) {\n    if (start < end) {\n      addNode(parent, {\n        text: graphemes.slice(start, end).map(segment => segment.segment).join('')\n      });\n    }\n    return parent;\n  }\n  for (let i = 0; i < spans.length; i++) {\n    const span = spans[i];\n    if (span.start < 0 && span.type == 'EX') {\n      addNode(parent, {\n        type: span.type,\n        data: span.data,\n        key: span.key,\n        att: true\n      });\n      continue;\n    }\n    if (start < span.start) {\n      addNode(parent, {\n        text: graphemes.slice(start, span.start).map(segment => segment.segment).join('')\n      });\n      start = span.start;\n    }\n    const subspans = [];\n    while (i < spans.length - 1) {\n      const inner = spans[i + 1];\n      if (inner.start < 0) {\n        break;\n      } else if (inner.start < span.end) {\n        if (inner.end <= span.end) {\n          const tag = FORMAT_TAGS[inner.tp] || {};\n          if (inner.start < inner.end || tag.isVoid) {\n            subspans.push(inner);\n          }\n        }\n        i++;\n      } else {\n        break;\n      }\n    }\n    addNode(parent, spansToTree({\n      type: span.type,\n      data: span.data,\n      key: span.key\n    }, graphemes, start, span.end, subspans));\n    start = span.end;\n  }\n  if (start < end) {\n    addNode(parent, {\n      text: graphemes.slice(start, end).map(segment => segment.segment).join('')\n    });\n  }\n  return parent;\n}\nfunction treeToDrafty(doc, tree, keymap) {\n  if (!tree) {\n    return doc;\n  }\n  doc.txt = doc.txt || '';\n  const start = stringToGraphemes(doc.txt).length;\n  if (tree.text) {\n    doc.txt += tree.text;\n  } else if (Array.isArray(tree.children)) {\n    tree.children.forEach(c => {\n      treeToDrafty(doc, c, keymap);\n    });\n  }\n  if (tree.type) {\n    const len = stringToGraphemes(doc.txt).length - start;\n    doc.fmt = doc.fmt || [];\n    if (Object.keys(tree.data || {}).length > 0) {\n      doc.ent = doc.ent || [];\n      const newKey = typeof keymap[tree.key] == 'undefined' ? doc.ent.length : keymap[tree.key];\n      keymap[tree.key] = newKey;\n      doc.ent[newKey] = {\n        tp: tree.type,\n        data: tree.data\n      };\n      if (tree.att) {\n        doc.fmt.push({\n          at: -1,\n          len: 0,\n          key: newKey\n        });\n      } else {\n        doc.fmt.push({\n          at: start,\n          len: len,\n          key: newKey\n        });\n      }\n    } else {\n      doc.fmt.push({\n        tp: tree.type,\n        at: start,\n        len: len\n      });\n    }\n  }\n  return doc;\n}\nfunction treeTopDown(src, transformer, context) {\n  if (!src) {\n    return null;\n  }\n  let dst = transformer.call(context, src);\n  if (!dst || !dst.children) {\n    return dst;\n  }\n  const children = [];\n  for (let i in dst.children) {\n    let n = dst.children[i];\n    if (n) {\n      n = treeTopDown(n, transformer, context);\n      if (n) {\n        children.push(n);\n      }\n    }\n  }\n  if (children.length == 0) {\n    dst.children = null;\n  } else {\n    dst.children = children;\n  }\n  return dst;\n}\nfunction treeBottomUp(src, formatter, index, stack, context) {\n  if (!src) {\n    return null;\n  }\n  if (stack && src.type) {\n    stack.push(src.type);\n  }\n  let values = [];\n  for (let i in src.children) {\n    const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n    if (n) {\n      values.push(n);\n    }\n  }\n  if (values.length == 0) {\n    if (src.text) {\n      values = [src.text];\n    } else {\n      values = null;\n    }\n  }\n  if (stack && src.type) {\n    stack.pop();\n  }\n  return formatter.call(context, src.type, src.data, values, index, stack);\n}\nfunction shortenTree(tree, limit, tail) {\n  if (!tree) {\n    return null;\n  }\n  if (tail) {\n    limit -= tail.length;\n  }\n  const shortener = function (node) {\n    if (limit <= -1) {\n      return null;\n    }\n    if (node.att) {\n      return node;\n    }\n    if (limit == 0) {\n      node.text = tail;\n      limit = -1;\n    } else if (node.text) {\n      const graphemes = stringToGraphemes(node.text);\n      if (graphemes.length > limit) {\n        node.text = graphemes.slice(0, limit).map(segment => segment.segment).join('') + tail;\n        limit = -1;\n      } else {\n        limit -= graphemes.length;\n      }\n    }\n    return node;\n  };\n  return treeTopDown(tree, shortener);\n}\nfunction lightEntity(tree, allow) {\n  const lightCopy = node => {\n    const data = copyEntData(node.data, true, allow ? allow(node) : null);\n    if (data) {\n      node.data = data;\n    } else {\n      delete node.data;\n    }\n    return node;\n  };\n  return treeTopDown(tree, lightCopy);\n}\nfunction lTrim(tree) {\n  if (tree.type == 'BR') {\n    tree = null;\n  } else if (tree.text) {\n    if (!tree.type) {\n      tree.text = tree.text.trimStart();\n      if (!tree.text) {\n        tree = null;\n      }\n    }\n  } else if (!tree.type && tree.children && tree.children.length > 0) {\n    const c = lTrim(tree.children[0]);\n    if (c) {\n      tree.children[0] = c;\n    } else {\n      tree.children.shift();\n      if (!tree.type && tree.children.length == 0) {\n        tree = null;\n      }\n    }\n  }\n  return tree;\n}\nfunction attachmentsToEnd(tree, limit) {\n  if (!tree) {\n    return null;\n  }\n  if (tree.att) {\n    tree.text = ' ';\n    delete tree.att;\n    delete tree.children;\n  } else if (tree.children) {\n    const attachments = [];\n    const children = [];\n    for (let i in tree.children) {\n      const c = tree.children[i];\n      if (c.att) {\n        if (attachments.length == limit) {\n          continue;\n        }\n        if (Drafty.isFormResponseType(c.data['mime'])) {\n          continue;\n        }\n        delete c.att;\n        delete c.children;\n        c.text = ' ';\n        attachments.push(c);\n      } else {\n        children.push(c);\n      }\n    }\n    tree.children = children.concat(attachments);\n  }\n  return tree;\n}\nfunction extractEntities(line) {\n  let match;\n  let extracted = [];\n  ENTITY_TYPES.forEach(entity => {\n    while ((match = entity.re.exec(line)) !== null) {\n      extracted.push({\n        offset: match['index'],\n        len: match[0].length,\n        unique: match[0],\n        data: entity.pack(match[0]),\n        type: entity.name\n      });\n    }\n  });\n  if (extracted.length == 0) {\n    return extracted;\n  }\n  extracted.sort((a, b) => {\n    return a.offset - b.offset;\n  });\n  let idx = -1;\n  extracted = extracted.filter(el => {\n    const result = el.offset > idx;\n    idx = el.offset + el.len;\n    return result;\n  });\n  return extracted;\n}\nfunction draftify(chunks, startAt) {\n  let plain = '';\n  let ranges = [];\n  for (let i in chunks) {\n    const chunk = chunks[i];\n    if (!chunk.txt) {\n      const drafty = draftify(chunk.children, plain.length + startAt);\n      chunk.txt = drafty.txt;\n      ranges = ranges.concat(drafty.fmt);\n    }\n    if (chunk.tp) {\n      ranges.push({\n        at: plain.length + startAt,\n        len: chunk.txt.length,\n        tp: chunk.tp\n      });\n    }\n    plain += chunk.txt;\n  }\n  return {\n    txt: plain,\n    fmt: ranges\n  };\n}\nfunction copyEntData(data, light, allow) {\n  if (data && Object.entries(data).length > 0) {\n    allow = allow || [];\n    const dc = {};\n    ALLOWED_ENT_FIELDS.forEach(key => {\n      if (data[key]) {\n        if (light && !allow.includes(key) && (typeof data[key] == 'string' || Array.isArray(data[key])) && data[key].length > MAX_PREVIEW_DATA_SIZE) {\n          return;\n        }\n        if (typeof data[key] == 'object') {\n          return;\n        }\n        dc[key] = data[key];\n      }\n    });\n    if (Object.entries(dc).length != 0) {\n      return dc;\n    }\n  }\n  return null;\n}\nfunction isEmptyObject(obj) {\n  return Object.keys(obj ?? {}).length == 0;\n}\n;\nfunction graphemeIndices(graphemes) {\n  const result = [];\n  let graphemeIndex = 0;\n  let charIndex = 0;\n  for (const {\n    segment\n  } of graphemes) {\n    for (let i = 0; i < segment.length; i++) {\n      result[charIndex + i] = graphemeIndex;\n    }\n    charIndex += segment.length;\n    graphemeIndex++;\n  }\n  return result;\n}\nfunction toGraphemeValues(fmt, segments, txt) {\n  segments = segments ?? segmenter.segment(txt);\n  const indices = graphemeIndices(segments);\n  const correctAt = indices[fmt.at];\n  const correctLen = fmt.at + fmt.len <= txt.length ? indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n  return {\n    at: correctAt,\n    len: correctLen + 1\n  };\n}\nfunction stringToGraphemes(str) {\n  return Array.from(segmenter.segment(str));\n}\nif (true) {\n  module.exports = Drafty;\n}\n\n/***/ }),\n\n/***/ \"./src/fnd-topic.js\":\n/*!**************************!*\\\n  !*** ./src/fnd-topic.js ***!\n  \\**************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TopicFnd; }\n/* harmony export */ });\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./topic.js */ \"./src/topic.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n\n\n\n\n\nclass TopicFnd extends _topic_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n  _contacts = {};\n  constructor(callbacks) {\n    super(_config_js__WEBPACK_IMPORTED_MODULE_0__.TOPIC_FND, callbacks);\n  }\n  _processMetaSubs(subs) {\n    let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n    this._contacts = {};\n    for (let idx in subs) {\n      let sub = subs[idx];\n      const indexBy = sub.topic ? sub.topic : sub.user;\n      sub = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeToCache)(this._contacts, indexBy, sub);\n      updateCount++;\n      if (this.onMetaSub) {\n        this.onMetaSub(sub);\n      }\n    }\n    if (updateCount > 0 && this.onSubsUpdated) {\n      this.onSubsUpdated(Object.keys(this._contacts));\n    }\n  }\n  publish() {\n    return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n  }\n  setMeta(params) {\n    return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n      if (Object.keys(this._contacts).length > 0) {\n        this._contacts = {};\n        if (this.onSubsUpdated) {\n          this.onSubsUpdated([]);\n        }\n      }\n    });\n  }\n  checkTagUniqueness(tag, caller) {\n    return new Promise((resolve, reject) => {\n      this.subscribe().then(_ => this.setMeta({\n        desc: {\n          public: tag\n        }\n      })).then(_ => this.getMeta(this.startMetaQuery().withTags().build())).then(meta => {\n        if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n          resolve(true);\n        }\n        const tags = meta.tags.filter(t => t !== caller);\n        resolve(tags.length == 0);\n      }).catch(err => {\n        reject(err);\n      });\n    });\n  }\n  contacts(callback, context) {\n    const cb = callback || this.onMetaSub;\n    if (cb) {\n      for (let idx in this._contacts) {\n        cb.call(context, this._contacts[idx], idx, this._contacts);\n      }\n    }\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/large-file.js\":\n/*!***************************!*\\\n  !*** ./src/large-file.js ***!\n  \\***************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ LargeFileHelper; }\n/* harmony export */ });\n/* harmony import */ var _comm_error_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comm-error.js */ \"./src/comm-error.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n\n\n\n\nlet XHRProvider;\nfunction addURLParam(relUrl, key, value) {\n  const url = new URL(relUrl, window.location.origin);\n  url.searchParams.append(key, value);\n  return url.toString().substring(window.location.origin.length);\n}\nclass LargeFileHelper {\n  constructor(tinode, version) {\n    this._tinode = tinode;\n    this._version = version;\n    this._apiKey = tinode._apiKey;\n    this._authToken = tinode.getAuthToken();\n    this.xhr = [];\n  }\n  uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n    let url = `/v${this._version}/file/u/`;\n    if (baseUrl) {\n      let base = baseUrl;\n      if (base.endsWith('/')) {\n        base = base.slice(0, -1);\n      }\n      if (base.startsWith('http://') || base.startsWith('https://')) {\n        url = base + url;\n      } else {\n        throw new Error(`Invalid base URL '${baseUrl}'`);\n      }\n    }\n    const instance = this;\n    const xhr = new XHRProvider();\n    this.xhr.push(xhr);\n    xhr.open('POST', url, true);\n    xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n    if (this._authToken) {\n      xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n    }\n    let toResolve = null;\n    let toReject = null;\n    const result = new Promise((resolve, reject) => {\n      toResolve = resolve;\n      toReject = reject;\n    });\n    xhr.upload.onprogress = e => {\n      if (e.lengthComputable) {\n        if (onProgress) {\n          onProgress(e.loaded / e.total);\n        }\n        if (this.onProgress) {\n          this.onProgress(e.loaded / e.total);\n        }\n      }\n    };\n    xhr.onload = function () {\n      let pkt;\n      try {\n        pkt = JSON.parse(this.response, _utils_js__WEBPACK_IMPORTED_MODULE_1__.jsonParseHelper);\n      } catch (err) {\n        instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n        pkt = {\n          ctrl: {\n            code: this.status,\n            text: this.statusText\n          }\n        };\n      }\n      if (this.status >= 200 && this.status < 300) {\n        if (toResolve) {\n          toResolve(pkt.ctrl.params.url);\n        }\n        if (onSuccess) {\n          onSuccess(pkt.ctrl);\n        }\n      } else if (this.status >= 400) {\n        if (toReject) {\n          toReject(new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](pkt.ctrl.text, pkt.ctrl.code));\n        }\n        if (onFailure) {\n          onFailure(pkt.ctrl);\n        }\n      } else {\n        instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n      }\n    };\n    xhr.onerror = function (e) {\n      if (toReject) {\n        toReject(e || new Error(\"failed\"));\n      }\n      if (onFailure) {\n        onFailure(null);\n      }\n    };\n    xhr.onabort = function (e) {\n      if (toReject) {\n        toReject(new Error(\"upload cancelled by user\"));\n      }\n      if (onFailure) {\n        onFailure(null);\n      }\n    };\n    try {\n      const form = new FormData();\n      form.append('file', data);\n      form.set('id', this._tinode.getNextUniqueId());\n      if (avatarFor) {\n        form.set('topic', avatarFor);\n      }\n      xhr.send(form);\n    } catch (err) {\n      if (toReject) {\n        toReject(err);\n      }\n      if (onFailure) {\n        onFailure(null);\n      }\n    }\n    return result;\n  }\n  upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n    const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n    return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n  }\n  download(relativeUrl, filename, mimetype, onProgress, onError) {\n    if (!(0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isUrlRelative)(relativeUrl)) {\n      if (onError) {\n        onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n      }\n      return;\n    }\n    if (!this._authToken) {\n      if (onError) {\n        onError(\"Must authenticate first\");\n      }\n      return;\n    }\n    const instance = this;\n    const xhr = new XHRProvider();\n    this.xhr.push(xhr);\n    relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n    xhr.open('GET', relativeUrl, true);\n    xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n    xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n    xhr.responseType = 'blob';\n    xhr.onprogress = function (e) {\n      if (onProgress) {\n        onProgress(e.loaded);\n      }\n    };\n    let toResolve = null;\n    let toReject = null;\n    const result = new Promise((resolve, reject) => {\n      toResolve = resolve;\n      toReject = reject;\n    });\n    xhr.onload = function () {\n      if (this.status == 200) {\n        const link = document.createElement('a');\n        link.href = window.URL.createObjectURL(new Blob([this.response], {\n          type: mimetype\n        }));\n        link.style.display = 'none';\n        link.setAttribute('download', filename);\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        window.URL.revokeObjectURL(link.href);\n        if (toResolve) {\n          toResolve();\n        }\n      } else if (this.status >= 400 && toReject) {\n        const reader = new FileReader();\n        reader.onload = function () {\n          try {\n            const pkt = JSON.parse(this.result, _utils_js__WEBPACK_IMPORTED_MODULE_1__.jsonParseHelper);\n            toReject(new _comm_error_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](pkt.ctrl.text, pkt.ctrl.code));\n          } catch (err) {\n            instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n            toReject(err);\n          }\n        };\n        reader.readAsText(this.response);\n      }\n    };\n    xhr.onerror = function (e) {\n      if (toReject) {\n        toReject(new Error(\"failed\"));\n      }\n      if (onError) {\n        onError(e);\n      }\n    };\n    xhr.onabort = function () {\n      if (toReject) {\n        toReject(null);\n      }\n    };\n    try {\n      xhr.send();\n    } catch (err) {\n      if (toReject) {\n        toReject(err);\n      }\n      if (onError) {\n        onError(err);\n      }\n    }\n    return result;\n  }\n  cancel() {\n    this.xhr.forEach(req => {\n      if (req.readyState < 4) {\n        req.abort();\n      }\n    });\n  }\n  static setNetworkProvider(xhrProvider) {\n    XHRProvider = xhrProvider;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/me-topic.js\":\n/*!*************************!*\\\n  !*** ./src/me-topic.js ***!\n  \\*************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TopicMe; }\n/* harmony export */ });\n/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ \"./src/access-mode.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./topic.js */ \"./src/topic.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n\n\n\n\n\n\nclass TopicMe extends _topic_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n  onContactUpdate;\n  constructor(callbacks) {\n    super(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME, callbacks);\n    if (callbacks) {\n      this.onContactUpdate = callbacks.onContactUpdate;\n    }\n  }\n  _processMetaDesc(desc) {\n    const turnOff = desc.acs && !desc.acs.isPresencer() && this.acs && this.acs.isPresencer();\n    (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.mergeObj)(this, desc);\n    this._tinode._db.updTopic(this);\n    this._updateCachedUser(this._tinode._myUID, desc);\n    if (turnOff) {\n      this._tinode.mapTopics(cont => {\n        if (cont.online) {\n          cont.online = false;\n          cont.seen = Object.assign(cont.seen || {}, {\n            when: new Date()\n          });\n          this._refreshContact('off', cont);\n        }\n      });\n    }\n    if (this.onMetaDesc) {\n      this.onMetaDesc(this);\n    }\n  }\n  _processMetaSubs(subs) {\n    let updateCount = 0;\n    subs.forEach(sub => {\n      const topicName = sub.topic;\n      if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND || topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {\n        return;\n      }\n      sub.online = !!sub.online;\n      let cont = null;\n      if (sub.deleted) {\n        cont = sub;\n        this._tinode.cacheRemTopic(topicName);\n        this._tinode._db.remTopic(topicName);\n      } else {\n        if (typeof sub.seq != 'undefined') {\n          sub.seq = sub.seq | 0;\n          sub.recv = sub.recv | 0;\n          sub.read = sub.read | 0;\n          sub.unread = sub.seq - sub.read;\n        }\n        const topic = this._tinode.getTopic(topicName);\n        if (topic._new) {\n          delete topic._new;\n        }\n        cont = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.mergeObj)(topic, sub);\n        this._tinode._db.updTopic(cont);\n        if (_topic_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isP2PTopicName(topicName)) {\n          this._cachePutUser(topicName, cont);\n          this._tinode._db.updUser(topicName, cont.public);\n        }\n        if (!sub._noForwarding && topic) {\n          sub._noForwarding = true;\n          topic._processMetaDesc(sub);\n        }\n      }\n      updateCount++;\n      if (this.onMetaSub) {\n        this.onMetaSub(cont);\n      }\n    });\n    if (this.onSubsUpdated && updateCount > 0) {\n      const keys = [];\n      subs.forEach(s => {\n        keys.push(s.topic);\n      });\n      this.onSubsUpdated(keys, updateCount);\n    }\n  }\n  _processMetaCreds(creds, upd) {\n    if (creds.length == 1 && creds[0] == _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR) {\n      creds = [];\n    }\n    if (upd) {\n      creds.forEach(cr => {\n        if (cr.val) {\n          let idx = this._credentials.findIndex(el => {\n            return el.meth == cr.meth && el.val == cr.val;\n          });\n          if (idx < 0) {\n            if (!cr.done) {\n              idx = this._credentials.findIndex(el => {\n                return el.meth == cr.meth && !el.done;\n              });\n              if (idx >= 0) {\n                this._credentials.splice(idx, 1);\n              }\n            }\n            this._credentials.push(cr);\n          } else {\n            this._credentials[idx].done = cr.done;\n          }\n        } else if (cr.resp) {\n          const idx = this._credentials.findIndex(el => {\n            return el.meth == cr.meth && !el.done;\n          });\n          if (idx >= 0) {\n            this._credentials[idx].done = true;\n          }\n        }\n      });\n    } else {\n      this._credentials = creds;\n    }\n    if (this.onCredsUpdated) {\n      this.onCredsUpdated(this._credentials);\n    }\n  }\n  _routePres(pres) {\n    if (pres.what == 'term') {\n      this._resetSub();\n      return;\n    }\n    if (pres.what == 'upd' && pres.src == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {\n      this.getMeta(this.startMetaQuery().withDesc().build());\n      return;\n    }\n    const cont = this._tinode.cacheGetTopic(pres.src);\n    if (cont) {\n      switch (pres.what) {\n        case 'on':\n          cont.online = true;\n          break;\n        case 'off':\n          if (cont.online) {\n            cont.online = false;\n            cont.seen = Object.assign(cont.seen || {}, {\n              when: new Date()\n            });\n          }\n          break;\n        case 'msg':\n          cont._updateReceived(pres.seq, pres.act);\n          break;\n        case 'upd':\n          this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n          break;\n        case 'acs':\n          if (!pres.tgt) {\n            if (cont.acs) {\n              cont.acs.updateAll(pres.dacs);\n            } else {\n              cont.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]().updateAll(pres.dacs);\n            }\n            cont.touched = new Date();\n          }\n          break;\n        case 'ua':\n          cont.seen = {\n            when: new Date(),\n            ua: pres.ua\n          };\n          break;\n        case 'recv':\n          pres.seq = pres.seq | 0;\n          cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n          break;\n        case 'read':\n          pres.seq = pres.seq | 0;\n          cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n          cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n          cont.unread = cont.seq - cont.read;\n          break;\n        case 'gone':\n          this._tinode.cacheRemTopic(pres.src);\n          if (!cont._deleted) {\n            cont._deleted = true;\n            cont._attached = false;\n            this._tinode._db.markTopicAsDeleted(pres.src, true);\n          } else {\n            this._tinode._db.remTopic(pres.src);\n          }\n          break;\n        case 'del':\n          break;\n        default:\n          this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n      }\n      this._refreshContact(pres.what, cont);\n    } else {\n      if (pres.what == 'acs') {\n        const acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](pres.dacs);\n        if (!acs || acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]._INVALID) {\n          this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n          return;\n        } else if (acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]._NONE) {\n          this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n          return;\n        } else {\n          this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n          const dummy = this._tinode.getTopic(pres.src);\n          dummy.topic = pres.src;\n          dummy.online = false;\n          dummy.acs = acs;\n          this._tinode._db.updTopic(dummy);\n        }\n      } else if (pres.what == 'tags') {\n        this.getMeta(this.startMetaQuery().withTags().build());\n      } else if (pres.what == 'msg') {\n        this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n        const dummy = this._tinode.getTopic(pres.src);\n        dummy._deleted = false;\n        this._tinode._db.updTopic(dummy);\n      }\n      this._refreshContact(pres.what, cont);\n    }\n    if (this.onPres) {\n      this.onPres(pres);\n    }\n  }\n  _refreshContact(what, cont) {\n    if (this.onContactUpdate) {\n      this.onContactUpdate(what, cont);\n    }\n  }\n  publish() {\n    return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n  }\n  delCredential(method, value) {\n    if (!this._attached) {\n      return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n    }\n    return this._tinode.delCredential(method, value).then(ctrl => {\n      const index = this._credentials.findIndex(el => {\n        return el.meth == method && el.val == value;\n      });\n      if (index > -1) {\n        this._credentials.splice(index, 1);\n      }\n      if (this.onCredsUpdated) {\n        this.onCredsUpdated(this._credentials);\n      }\n      return ctrl;\n    });\n  }\n  contacts(callback, filter, context) {\n    this._tinode.mapTopics((c, idx) => {\n      if (c.isCommType() && (!filter || filter(c))) {\n        callback.call(context, c, idx);\n      }\n    });\n  }\n  getContact(name) {\n    return this._tinode.cacheGetTopic(name);\n  }\n  getAccessMode(name) {\n    if (name) {\n      const cont = this._tinode.cacheGetTopic(name);\n      return cont ? cont.acs : null;\n    }\n    return this.acs;\n  }\n  isArchived(name) {\n    const cont = this._tinode.cacheGetTopic(name);\n    return cont && cont.private && !!cont.private.arch;\n  }\n  getCredentials() {\n    return this._credentials;\n  }\n  pinTopic(topic, pin) {\n    if (!this._attached) {\n      return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));\n    }\n    if (!_topic_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isCommTopicName(topic)) {\n      return Promise.reject(new Error(\"Invalid topic to pin\"));\n    }\n    const tpin = Array.isArray(this.private && this.private.tpin) ? this.private.tpin : [];\n    const found = tpin.includes(topic);\n    if (pin && found || !pin && !found) {\n      return Promise.resolve(tpin);\n    }\n    if (pin) {\n      tpin.unshift(topic);\n    } else {\n      tpin.splice(tpin.indexOf(topic), 1);\n    }\n    return this.setMeta({\n      desc: {\n        private: {\n          tpin: tpin.length > 0 ? tpin : _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR\n        }\n      }\n    });\n  }\n  pinnedTopicRank(topic) {\n    if (!this.private || !this.private.tpin) {\n      return 0;\n    }\n    const idx = this.private.tpin.indexOf(topic);\n    return idx < 0 ? 0 : this.private.tpin.length - idx;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/meta-builder.js\":\n/*!*****************************!*\\\n  !*** ./src/meta-builder.js ***!\n  \\*****************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ MetaGetBuilder; }\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/utils.js\");\n\n\n\nclass MetaGetBuilder {\n  constructor(parent) {\n    this.topic = parent;\n    this.what = {};\n  }\n  #get_desc_ims() {\n    return this.topic._deleted ? undefined : this.topic.updated;\n  }\n  #get_subs_ims() {\n    if (this.topic.isP2PType()) {\n      return this.#get_desc_ims();\n    }\n    return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n  }\n  withData(since, before, limit) {\n    this.what['data'] = {\n      since: since,\n      before: before,\n      limit: limit\n    };\n    return this;\n  }\n  withLaterData(limit) {\n    return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n  }\n  withDataRanges(ranges, limit) {\n    this.what['data'] = {\n      ranges: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.normalizeRanges)(ranges, this.topic._maxSeq),\n      limit: limit\n    };\n    return this;\n  }\n  withDataList(list) {\n    return this.withDataRanges((0,_utils__WEBPACK_IMPORTED_MODULE_0__.listToRanges)(list));\n  }\n  withEarlierData(limit) {\n    return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n  }\n  withDesc(ims) {\n    this.what['desc'] = {\n      ims: ims\n    };\n    return this;\n  }\n  withLaterDesc() {\n    return this.withDesc(this.#get_desc_ims());\n  }\n  withSub(ims, limit, userOrTopic) {\n    const opts = {\n      ims: ims,\n      limit: limit\n    };\n    if (this.topic.getType() == 'me') {\n      opts.topic = userOrTopic;\n    } else {\n      opts.user = userOrTopic;\n    }\n    this.what['sub'] = opts;\n    return this;\n  }\n  withOneSub(ims, userOrTopic) {\n    return this.withSub(ims, undefined, userOrTopic);\n  }\n  withLaterOneSub(userOrTopic) {\n    return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n  }\n  withLaterSub(limit) {\n    return this.withSub(this.#get_subs_ims(), limit);\n  }\n  withTags() {\n    this.what['tags'] = true;\n    return this;\n  }\n  withCred() {\n    if (this.topic.getType() == 'me') {\n      this.what['cred'] = true;\n    } else {\n      this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n    }\n    return this;\n  }\n  withAux() {\n    this.what['aux'] = true;\n    return this;\n  }\n  withDel(since, limit) {\n    if (since || limit) {\n      this.what['del'] = {\n        since: since,\n        limit: limit\n      };\n    }\n    return this;\n  }\n  withLaterDel(limit) {\n    return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n  }\n  extract(what) {\n    return this.what[what];\n  }\n  build() {\n    const what = [];\n    let params = {};\n    ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach(key => {\n      if (this.what.hasOwnProperty(key)) {\n        what.push(key);\n        if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n          params[key] = this.what[key];\n        }\n      }\n    });\n    if (what.length > 0) {\n      params.what = what.join(' ');\n    } else {\n      params = undefined;\n    }\n    return params;\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/the-card.js\":\n/*!*************************!*\\\n  !*** ./src/the-card.js ***!\n  \\*************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ TheCard; }\n/* harmony export */ });\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n\n\n\nconst THE_CARD_MIME_TYPE = 'text/x-the-card';\nclass TheCard {\n  constructor(fn, imageUrl, imageMimeType, note) {\n    Object.assign(this, theCard(fn, imageUrl, imageMimeType, note) || {});\n  }\n  merge(that) {\n    Object.assign(this, that);\n  }\n  get contentType() {\n    return THE_CARD_MIME_TYPE;\n  }\n  get size() {\n    return JSON.stringify(this).length;\n  }\n}\nTheCard.contentType = THE_CARD_MIME_TYPE;\nTheCard.setFn = function (card, fn) {\n  fn = fn && fn.trim();\n  card = card || {};\n  card.fn = fn || undefined;\n  return card;\n};\nTheCard.getFn = function (card) {\n  if (card && card.fn) {\n    return card.fn;\n  }\n  return null;\n};\nTheCard.setNote = function (card, note) {\n  note = note && note.trim();\n  card = card || {};\n  card.note = note ? note : _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR;\n  return card;\n};\nTheCard.setPhoto = function (card, imageUrl, imageMimeType) {\n  if (imageUrl) {\n    card = card || {};\n    let mimeType = imageMimeType;\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: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR\n      };\n    } else {\n      card.photo = {\n        data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR,\n        ref: imageUrl\n      };\n      if (!mimeType) {\n        const ext = /\\.([a-z0-9]+)$/i.exec(imageUrl);\n        if (ext) {\n          const extLower = ext[1].toLowerCase();\n          const mimeMap = {\n            'jpg': 'image/jpeg',\n            'jpeg': 'image/jpeg',\n            'png': 'image/png',\n            'gif': 'image/gif',\n            'bmp': 'image/bmp',\n            'webp': 'image/webp',\n            'svg': 'image/svg+xml'\n          };\n          mimeType = mimeMap[extLower] || null;\n        }\n      }\n    }\n    card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n  } else {\n    card = card || {};\n    card.photo = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR;\n  }\n  return card;\n};\nTheCard.getPhotoUrl = function (card) {\n  if (card && card.photo) {\n    if (card.photo.ref && card.photo.ref != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) {\n      return card.photo.ref;\n    } else if (card.photo.data && card.photo.data != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) {\n      return 'data:image/' + (card.photo.type || 'jpeg') + ';base64,' + card.photo.data;\n    }\n  }\n  return null;\n};\nTheCard.getOrg = function (card) {\n  if (card && card.org) {\n    return card.org.fn || null;\n  }\n  return null;\n};\nTheCard.setPhone = function (card, phone, type = 'voice') {\n  return addOrSetComm(card, 'tel', phone, type, true);\n};\nTheCard.setEmail = function (card, email, type = 'home') {\n  return addOrSetComm(card, 'email', email, type, true);\n};\nTheCard.setTinodeID = function (card, tinodeID, type = 'home') {\n  return addOrSetComm(card, 'tinode', tinodeID, type, true);\n};\nTheCard.addPhone = function (card, phone, type = 'voice') {\n  return addOrSetComm(card, 'tel', phone, type, false);\n};\nTheCard.addEmail = function (card, email, type = 'home') {\n  return addOrSetComm(card, 'email', email, type, false);\n};\nTheCard.addTinodeID = function (card, tinodeID, type = 'home') {\n  return addOrSetComm(card, 'tinode', tinodeID, type, false);\n};\nTheCard.clearPhone = function (card, phone, type) {\n  return clearComm(card, 'tel', phone, type);\n};\nTheCard.clearEmail = function (card, email, type) {\n  return clearComm(card, 'email', email, type);\n};\nTheCard.clearTinodeID = function (card, tinodeID, type) {\n  return clearComm(card, 'tinode', tinodeID, type);\n};\nTheCard.getComm = function (card, proto) {\n  if (card && Array.isArray(card.comm)) {\n    return card.comm.filter(c => c.proto == proto);\n  }\n  return [];\n};\nTheCard.getEmails = function (card) {\n  return TheCard.getComm(card, 'email').map(c => c.value);\n};\nTheCard.getPhones = function (card) {\n  return TheCard.getComm(card, 'tel').map(c => c.value);\n};\nTheCard.getFirstTinodeID = function (card) {\n  const comms = TheCard.getComm(card, 'tinode');\n  if (comms.length > 0) {\n    return comms[0].value;\n  }\n  return null;\n};\nTheCard.exportVCard = function (card) {\n  if (!card) {\n    return null;\n  }\n  let vcard = 'BEGIN:VCARD\\r\\nVERSION:3.0\\r\\n';\n  if (card.fn) {\n    vcard += `FN:${card.fn}\\r\\n`;\n  }\n  if (card.n) {\n    vcard += `N:${card.n.surname || ''};${card.n.given || ''};${card.n.additional || ''};${card.n.prefix || ''};${card.n.suffix || ''}\\r\\n`;\n  }\n  if (card.org) {\n    if (card.org.fn) {\n      vcard += `ORG:${card.org.fn}\\r\\n`;\n    }\n    if (card.org.title) {\n      vcard += `TITLE:${card.org.title}\\r\\n`;\n    }\n  }\n  if (card.note && card.note != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) {\n    vcard += `NOTE:${card.note}\\r\\n`;\n  }\n  if (card.bday && card.bday.m && card.bday.d) {\n    const year = card.bday.y ? String(card.bday.y).padStart(4, '0') : '--';\n    const month = String(card.bday.m).padStart(2, '0');\n    const day = String(card.bday.d).padStart(2, '0');\n    vcard += `BDAY:${year}-${month}-${day}\\r\\n`;\n  }\n  if (card.photo) {\n    if (card.photo.ref && card.photo.ref != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) {\n      vcard += `PHOTO;VALUE=URI:${card.photo.ref}\\r\\n`;\n    } else if (card.photo.data && card.photo.data != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) {\n      vcard += `PHOTO;TYPE=${card.photo.type.toUpperCase()};ENCODING=b:${card.photo.data}\\r\\n`;\n    }\n  }\n  if (Array.isArray(card.comm)) {\n    card.comm.forEach(comm => {\n      const types = comm.des.join(',').toUpperCase();\n      if (comm.proto === 'tel') {\n        vcard += `TEL;TYPE=${types}:${comm.value}\\r\\n`;\n      } else if (comm.proto === 'email') {\n        vcard += `EMAIL;TYPE=${types}:${comm.value}\\r\\n`;\n      } else if (comm.proto === 'tinode') {\n        vcard += `IMPP;TYPE=${types}:${comm.value}\\r\\n`;\n      } else if (comm.proto === 'http') {\n        vcard += `URL;TYPE=${types}:${comm.value}\\r\\n`;\n      }\n    });\n  }\n  vcard += 'END:VCARD\\r\\n';\n  return vcard;\n};\nTheCard.importVCard = function (vcardStr) {\n  if (!vcardStr || typeof vcardStr !== 'string') {\n    return null;\n  }\n  const rawLines = vcardStr.split(/\\r\\n|\\n/);\n  const lines = [];\n  let currentLine = '';\n  for (let i = 0; i < rawLines.length; i++) {\n    const line = rawLines[i];\n    if (line.startsWith(' ') || line.startsWith('\\t')) {\n      currentLine += line.substring(1);\n    } else if (currentLine.endsWith('=')) {\n      currentLine = currentLine.substring(0, currentLine.length - 1) + line;\n    } else {\n      if (currentLine) {\n        lines.push(currentLine);\n      }\n      currentLine = line;\n    }\n  }\n  if (currentLine) {\n    lines.push(currentLine);\n  }\n  let card = {};\n  const commMap = new Map();\n  const unescapeValue = val => {\n    return val.replace(/\\\\([,;\\\\n])/g, (match, char) => {\n      if (char === 'n') return '\\n';\n      return char;\n    });\n  };\n  const decodeQuotedPrintable = val => {\n    const bytes = [];\n    let i = 0;\n    while (i < val.length) {\n      if (val[i] === '=' && i + 2 < val.length) {\n        const hex = val.substring(i + 1, i + 3);\n        if (/^[0-9A-F]{2}$/i.test(hex)) {\n          bytes.push(parseInt(hex, 16));\n          i += 3;\n        } else {\n          bytes.push(val.charCodeAt(i));\n          i++;\n        }\n      } else {\n        bytes.push(val.charCodeAt(i));\n        i++;\n      }\n    }\n    try {\n      const uint8Array = new Uint8Array(bytes);\n      return new TextDecoder('utf-8').decode(uint8Array);\n    } catch (e) {\n      return val.replace(/=([0-9A-F]{2})/gi, (match, hex) => {\n        return String.fromCharCode(parseInt(hex, 16));\n      });\n    }\n  };\n  lines.forEach(line => {\n    const [keyPart, ...valueParts] = line.split(':');\n    if (!keyPart || valueParts.length === 0) {\n      return;\n    }\n    const value = valueParts.join(':');\n    const keyParams = keyPart.split(';');\n    const key = keyParams[0].trim().toUpperCase();\n    const isQuotedPrintable = keyParams.some(param => param.trim().toUpperCase() === 'QUOTED-PRINTABLE' || param.trim().toUpperCase() === 'ENCODING=QUOTED-PRINTABLE');\n    if (key === 'FN') {\n      let processedValue = value;\n      if (isQuotedPrintable) {\n        processedValue = decodeQuotedPrintable(processedValue);\n      }\n      card.fn = unescapeValue(processedValue);\n    } else if (key === 'N') {\n      let processedValue = value;\n      if (isQuotedPrintable) {\n        processedValue = decodeQuotedPrintable(processedValue);\n      }\n      const parts = processedValue.split(';');\n      card.n = {\n        surname: parts[0] ? unescapeValue(parts[0]) : undefined,\n        given: parts[1] ? unescapeValue(parts[1]) : undefined,\n        additional: parts[2] ? unescapeValue(parts[2]) : undefined,\n        prefix: parts[3] ? unescapeValue(parts[3]) : undefined,\n        suffix: parts[4] ? unescapeValue(parts[4]) : undefined\n      };\n      Object.keys(card.n).forEach(key => card.n[key] === undefined && delete card.n[key]);\n      if (Object.keys(card.n).length === 0) {\n        delete card.n;\n      }\n    } else if (key === 'ORG') {\n      let processedValue = value;\n      if (isQuotedPrintable) {\n        processedValue = decodeQuotedPrintable(processedValue);\n      }\n      const parts = processedValue.split(';');\n      card.org = card.org || {};\n      card.org.fn = parts[0] ? unescapeValue(parts[0]) : undefined;\n      if (!card.org.fn) delete card.org.fn;\n    } else if (key === 'TITLE') {\n      let processedValue = value;\n      if (isQuotedPrintable) {\n        processedValue = decodeQuotedPrintable(processedValue);\n      }\n      card.org = card.org || {};\n      card.org.title = processedValue ? unescapeValue(processedValue) : undefined;\n      if (!card.org.title) delete card.org.title;\n    } else if (key === 'NOTE') {\n      let processedValue = value;\n      if (isQuotedPrintable) {\n        processedValue = decodeQuotedPrintable(processedValue);\n      }\n      card.note = unescapeValue(processedValue);\n    } else if (key === 'BDAY') {\n      let dateStr = value.split(/[T ]/)[0].trim();\n      let year = null;\n      let month = null;\n      let day = null;\n      const noHyphens = dateStr.replace(/-/g, '');\n      if (noHyphens.length === 6 && /^\\d{6}$/.test(noHyphens)) {\n        const yy = parseInt(noHyphens.substring(0, 2), 10);\n        month = parseInt(noHyphens.substring(2, 4), 10);\n        day = parseInt(noHyphens.substring(4, 6), 10);\n        year = yy >= 35 ? 1900 + yy : 2000 + yy;\n      } else if (dateStr.startsWith('--') || dateStr.startsWith('----')) {\n        const cleaned = dateStr.replace(/^-+/, '');\n        if (cleaned.length === 4 && /^\\d{4}$/.test(cleaned)) {\n          month = parseInt(cleaned.substring(0, 2), 10);\n          day = parseInt(cleaned.substring(2, 4), 10);\n        } else if (cleaned.includes('-')) {\n          const parts = cleaned.split('-');\n          if (parts.length >= 2) {\n            month = parseInt(parts[0], 10);\n            day = parseInt(parts[1], 10);\n          }\n        }\n      } else if (noHyphens.length === 8 && /^\\d{8}$/.test(noHyphens)) {\n        year = parseInt(noHyphens.substring(0, 4), 10);\n        month = parseInt(noHyphens.substring(4, 6), 10);\n        day = parseInt(noHyphens.substring(6, 8), 10);\n      } else if (dateStr.includes('-')) {\n        const parts = dateStr.split('-');\n        if (parts[0] && parts[0] !== '' && !/^-+$/.test(parts[0])) {\n          year = parseInt(parts[0], 10);\n        }\n        if (parts.length >= 2) {\n          month = parseInt(parts[1], 10);\n        }\n        if (parts.length >= 3) {\n          day = parseInt(parts[2], 10);\n        }\n      }\n      const isValidMonth = month && month >= 1 && month <= 12;\n      const isValidDay = day && day >= 1 && day <= 31;\n      const isValidYear = !year || year >= 1800 && year <= 2200;\n      if (isValidMonth && isValidDay && isValidYear) {\n        card.bday = {\n          m: month,\n          d: day\n        };\n        if (year) {\n          card.bday.y = year;\n        }\n      }\n    } else if (key === 'PHOTO') {\n      const params = keyPart.split(';').slice(1);\n      let type = 'jpeg';\n      let encoding = null;\n      params.forEach(param => {\n        const [pKey, pValue] = param.split('=');\n        if (pKey && pKey.trim().toUpperCase() === 'TYPE') {\n          type = pValue ? pValue.trim().toLowerCase() : 'jpeg';\n        } else if (pKey && pKey.trim().toUpperCase() === 'ENCODING') {\n          encoding = pValue ? pValue.trim().toLowerCase() : null;\n        }\n      });\n      if (encoding === 'b') {\n        card.photo = {\n          type: type,\n          data: value,\n          ref: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR\n        };\n      } else {\n        card.photo = {\n          type: type,\n          data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR,\n          ref: value\n        };\n      }\n    } else if (key === 'TEL') {\n      const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n      const types = typeParams.flatMap(param => {\n        const equalIndex = param.indexOf('=');\n        const valuesPart = param.substring(equalIndex + 1);\n        return valuesPart.split(',').map(t => {\n          const cleaned = t.trim().toLowerCase();\n          return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n        });\n      }).filter(t => t !== 'internet');\n      const mapKey = `tel|${value}`;\n      if (!commMap.has(mapKey)) {\n        commMap.set(mapKey, new Set());\n      }\n      types.forEach(t => commMap.get(mapKey).add(t));\n    } else if (key === 'EMAIL') {\n      const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n      const types = typeParams.flatMap(param => {\n        const equalIndex = param.indexOf('=');\n        const valuesPart = param.substring(equalIndex + 1);\n        return valuesPart.split(',').map(t => {\n          const cleaned = t.trim().toLowerCase();\n          return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n        });\n      }).filter(t => t !== 'internet');\n      const mapKey = `email|${value}`;\n      if (!commMap.has(mapKey)) {\n        commMap.set(mapKey, new Set());\n      }\n      types.forEach(t => commMap.get(mapKey).add(t));\n    } else if (key === 'IMPP') {\n      const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n      const types = typeParams.flatMap(param => {\n        const equalIndex = param.indexOf('=');\n        const valuesPart = param.substring(equalIndex + 1);\n        return valuesPart.split(',').map(t => {\n          const cleaned = t.trim().toLowerCase();\n          return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n        });\n      }).filter(t => t !== 'internet');\n      const mapKey = value.startsWith('tinode:') ? `tinode|${value}` : `impp|${value}`;\n      if (!commMap.has(mapKey)) {\n        commMap.set(mapKey, new Set());\n      }\n      types.forEach(t => commMap.get(mapKey).add(t));\n    } else if (key === 'URL') {\n      const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n      const types = typeParams.flatMap(param => {\n        const equalIndex = param.indexOf('=');\n        const valuesPart = param.substring(equalIndex + 1);\n        return valuesPart.split(',').map(t => {\n          const cleaned = t.trim().toLowerCase();\n          return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n        });\n      }).filter(t => t !== 'internet');\n      const mapKey = `http|${value}`;\n      if (!commMap.has(mapKey)) {\n        commMap.set(mapKey, new Set());\n      }\n      types.forEach(t => commMap.get(mapKey).add(t));\n    }\n  });\n  if (commMap.size > 0) {\n    card.comm = [];\n    commMap.forEach((types, key) => {\n      const [proto, value] = key.split('|', 2);\n      card.comm.push({\n        proto: proto,\n        des: Array.from(types),\n        value: value\n      });\n    });\n  }\n  return card;\n};\nTheCard.isFileSupported = function (type, name) {\n  return type == 'text/vcard' || (name || '').endsWith('.vcf') || (name || '').endsWith('.vcard');\n};\nfunction theCard(fn, imageUrl, imageMimeType, note) {\n  let card = null;\n  fn = fn && fn.trim();\n  note = note && note.trim();\n  if (fn) {\n    card = {\n      fn: fn\n    };\n  }\n  if (typeof note == 'string') {\n    card = card || {};\n    card.note = note ? note : _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR;\n  }\n  if (imageUrl) {\n    card = card || {};\n    let mimeType = imageMimeType;\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: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR\n      };\n    } else {\n      card.photo = {\n        data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR,\n        ref: imageUrl\n      };\n    }\n    card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n  }\n  return card;\n}\nfunction addOrSetComm(card, proto, value, type, setOnly) {\n  proto = proto && proto.trim();\n  value = value && value.trim();\n  if (proto && value) {\n    card = card || {};\n    card.comm = card.comm || [];\n    if (setOnly) {\n      card.comm = card.comm.filter(c => {\n        if (c.proto != proto) return true;\n        return !c.des.includes(type);\n      });\n    }\n    card.comm.push({\n      proto: proto,\n      des: [type],\n      value: value\n    });\n  }\n  return card;\n}\nfunction clearComm(card, proto, value, type) {\n  if (card && Array.isArray(card.comm)) {\n    card.comm = card.comm.filter(c => {\n      if (c.proto != proto) return true;\n      if (value && c.value != value) return true;\n      if (type) {\n        return !c.des.includes(type);\n      }\n      return false;\n    });\n  }\n  return card;\n}\n\n/***/ }),\n\n/***/ \"./src/topic.js\":\n/*!**********************!*\\\n  !*** ./src/topic.js ***!\n  \\**********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Topic; }\n/* harmony export */ });\n/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ \"./src/access-mode.js\");\n/* harmony import */ var _cbuffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cbuffer.js */ \"./src/cbuffer.js\");\n/* harmony import */ var _comm_error_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./comm-error.js */ \"./src/comm-error.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./drafty.js */ \"./src/drafty.js\");\n/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_drafty_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _meta_builder_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./meta-builder.js */ \"./src/meta-builder.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n\n\n\n\n\n\n\n\n\nclass Topic {\n  constructor(name, callbacks) {\n    this._tinode = null;\n    this.name = name;\n    this.created = null;\n    this.updated = null;\n    this.touched = new Date(0);\n    this.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](null);\n    this.private = null;\n    this.public = null;\n    this.trusted = null;\n    this._users = {};\n    this._queuedSeqId = _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID;\n    this._maxSeq = 0;\n    this._minSeq = 0;\n    this._noEarlierMsgs = false;\n    this._maxDel = 0;\n    this._recvNotificationTimer = null;\n    this._tags = [];\n    this._credentials = [];\n    this._aux = {};\n    this._messageVersions = {};\n    this._messages = new _cbuffer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]((a, b) => {\n      return a.seq - b.seq;\n    }, true);\n    this._attached = false;\n    this._lastSubsUpdate = new Date(0);\n    this._new = true;\n    this._deleted = false;\n    this._delayedLeaveTimer = null;\n    if (callbacks) {\n      this.onData = callbacks.onData;\n      this.onMeta = callbacks.onMeta;\n      this.onPres = callbacks.onPres;\n      this.onInfo = callbacks.onInfo;\n      this.onMetaDesc = callbacks.onMetaDesc;\n      this.onMetaSub = callbacks.onMetaSub;\n      this.onSubsUpdated = callbacks.onSubsUpdated;\n      this.onTagsUpdated = callbacks.onTagsUpdated;\n      this.onCredsUpdated = callbacks.onCredsUpdated;\n      this.onAuxUpdated = callbacks.onAuxUpdated;\n      this.onDeleteTopic = callbacks.onDeleteTopic;\n      this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n    }\n  }\n  static topicType(name) {\n    const types = {\n      'me': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME,\n      'fnd': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_FND,\n      'grp': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,\n      'new': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,\n      'nch': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,\n      'chn': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,\n      'usr': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_P2P,\n      'sys': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SYS,\n      'slf': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SLF\n    };\n    return types[typeof name == 'string' ? name.substring(0, 3) : 'xxx'];\n  }\n  static isMeTopicName(name) {\n    return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME;\n  }\n  static isSelfTopicName(name) {\n    return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SLF;\n  }\n  static isGroupTopicName(name) {\n    return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP;\n  }\n  static isP2PTopicName(name) {\n    return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_P2P;\n  }\n  static isCommTopicName(name) {\n    return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n  }\n  static isNewGroupTopicName(name) {\n    return typeof name == 'string' && (name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW || name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW_CHAN);\n  }\n  static isChannelTopicName(name) {\n    return typeof name == 'string' && (name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_CHAN || name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW_CHAN);\n  }\n  static #isReplacementMsg(pub) {\n    return pub.head && pub.head.replace;\n  }\n  isSubscribed() {\n    return this._attached;\n  }\n  subscribe(getParams, setParams) {\n    clearTimeout(this._delayedLeaveTimer);\n    this._delayedLeaveTimer = null;\n    if (this._attached) {\n      return Promise.resolve(this);\n    }\n    return this._tinode.subscribe(this.name || _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW, getParams, setParams).then(ctrl => {\n      if (ctrl.code >= 300) {\n        return ctrl;\n      }\n      this._attached = true;\n      this._deleted = false;\n      this.acs = ctrl.params && ctrl.params.acs ? ctrl.params.acs : this.acs;\n      if (this._new) {\n        delete this._new;\n        if (this.name != ctrl.topic) {\n          this._cacheDelSelf();\n          this.name = ctrl.topic;\n        }\n        this._cachePutSelf();\n        this.created = ctrl.ts;\n        this.updated = ctrl.ts;\n        if (this.name != _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME && this.name != _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_FND) {\n          const me = this._tinode.getMeTopic();\n          if (me.onMetaSub) {\n            me.onMetaSub(this);\n          }\n          if (me.onSubsUpdated) {\n            me.onSubsUpdated([this.name], 1);\n          }\n        }\n        if (setParams && setParams.desc) {\n          setParams.desc._noForwarding = true;\n          this._processMetaDesc(setParams.desc);\n        }\n      }\n      return ctrl;\n    });\n  }\n  createMessage(data, noEcho) {\n    return this._tinode.createMessage(this.name, data, noEcho);\n  }\n  publish(data, noEcho) {\n    return this.publishMessage(this.createMessage(data, noEcho));\n  }\n  publishMessage(pub) {\n    if (!this._attached) {\n      return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n    }\n    if (this._sending) {\n      return Promise.reject(new Error(\"The message is already being sent\"));\n    }\n    pub._sending = true;\n    pub._failed = false;\n    let attachments = null;\n    if (_drafty_js__WEBPACK_IMPORTED_MODULE_4___default().hasEntities(pub.content)) {\n      attachments = [];\n      _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().entities(pub.content, data => {\n        if (data) {\n          if (data.ref) {\n            attachments.push(data.ref);\n          }\n          if (data.preref) {\n            attachments.push(data.preref);\n          }\n        }\n      });\n      if (attachments.length == 0) {\n        attachments = null;\n      }\n    }\n    return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n      pub._sending = false;\n      pub.ts = ctrl.ts;\n      this.swapMessageId(pub, ctrl.params.seq);\n      this._maybeUpdateMessageVersionsCache(pub);\n      this._routeData(pub);\n      return ctrl;\n    }).catch(err => {\n      this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n      pub._sending = false;\n      pub._failed = true;\n      if (this.onData) {\n        this.onData();\n      }\n    });\n  }\n  publishDraft(pub, prom) {\n    const seq = pub.seq || this._getQueuedSeqId();\n    if (!pub._noForwarding) {\n      pub._noForwarding = true;\n      pub.seq = seq;\n      pub.ts = new Date();\n      pub.from = this._tinode.getCurrentUserID();\n      pub.noecho = true;\n      this._messages.put(pub);\n      this._tinode._db.addMessage(pub);\n      if (this.onData) {\n        this.onData(pub);\n      }\n    }\n    return (prom || Promise.resolve()).then(_ => {\n      if (pub._cancelled) {\n        return {\n          code: 300,\n          text: \"cancelled\"\n        };\n      }\n      return this.publishMessage(pub);\n    }).catch(err => {\n      this._tinode.logger(\"WARNING: Message draft rejected\", err);\n      pub._sending = false;\n      pub._failed = true;\n      pub._fatal = err instanceof _comm_error_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? err.code >= 400 && err.code < 500 : false;\n      if (this.onData) {\n        this.onData();\n      }\n      throw err;\n    });\n  }\n  leave(unsub) {\n    if (!this._attached && !unsub) {\n      return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n    }\n    return this._tinode.leave(this.name, unsub).then(ctrl => {\n      this._resetSub();\n      if (unsub) {\n        this._gone();\n      }\n      return ctrl;\n    });\n  }\n  leaveDelayed(unsub, delay) {\n    clearTimeout(this._delayedLeaveTimer);\n    this._delayedLeaveTimer = setTimeout(_ => {\n      this._delayedLeaveTimer = null;\n      this.leave(unsub);\n    }, delay);\n  }\n  getMeta(params) {\n    return this._tinode.getMeta(this.name, params);\n  }\n  getMessagesPage(limit, gaps, min, max, newer) {\n    let query = gaps ? this.startMetaQuery().withDataRanges(gaps, limit) : newer ? this.startMetaQuery().withData(min, undefined, limit) : this.startMetaQuery().withData(undefined, max, limit);\n    return this._loadMessages(this._tinode._db, query.extract('data')).then(count => {\n      gaps = this.msgHasMoreMessages(min, max, newer);\n      if (gaps.length == 0) {\n        return Promise.resolve({\n          topic: this.name,\n          code: 200,\n          params: {\n            count: count\n          }\n        });\n      }\n      limit -= count;\n      query = this.startMetaQuery().withDataRanges(gaps, limit);\n      return this.getMeta(query.build());\n    });\n  }\n  getPinnedMessages() {\n    const pins = this.aux('pins');\n    if (!Array.isArray(pins)) {\n      return Promise.resolve(0);\n    }\n    const loaded = [];\n    let remains = pins;\n    return this._tinode._db.readMessages(this.name, {\n      ranges: (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(remains)\n    }).then(msgs => {\n      msgs.forEach(data => {\n        if (data) {\n          loaded.push(data.seq);\n          this._messages.put(data);\n          this._maybeUpdateMessageVersionsCache(data);\n        }\n      });\n      if (loaded.length < pins.length) {\n        remains = pins.filter(seq => !loaded.includes(seq));\n        return this._tinode._db.readMessages(this.name, {\n          ranges: (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(remains)\n        });\n      }\n      return null;\n    }).then(ranges => {\n      if (ranges) {\n        remains.forEach(seq => {\n          if (ranges.find(r => r.low <= seq && r.hi > seq)) {\n            loaded.push(seq);\n          }\n        });\n      }\n      if (loaded.length == pins.length) {\n        return Promise.resolve({\n          topic: this.name,\n          code: 200,\n          params: {\n            count: loaded.length\n          }\n        });\n      }\n      remains = pins.filter(seq => !loaded.includes(seq));\n      return this.getMeta(this.startMetaQuery().withDataList(remains).build());\n    });\n  }\n  setMeta(params) {\n    if (params.tags) {\n      params.tags = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.normalizeArray)(params.tags);\n    }\n    return this._tinode.setMeta(this.name, params).then(ctrl => {\n      if (ctrl && ctrl.code >= 300) {\n        return ctrl;\n      }\n      if (params.sub) {\n        params.sub.topic = this.name;\n        if (ctrl.params && ctrl.params.acs) {\n          params.sub.acs = ctrl.params.acs;\n          params.sub.updated = ctrl.ts;\n        }\n        if (!params.sub.user) {\n          params.sub.user = this._tinode.getCurrentUserID();\n          if (!params.desc) {\n            params.desc = {};\n          }\n        }\n        params.sub._noForwarding = true;\n        this._processMetaSubs([params.sub]);\n      }\n      if (params.desc) {\n        if (ctrl.params && ctrl.params.acs) {\n          params.desc.acs = ctrl.params.acs;\n          params.desc.updated = ctrl.ts;\n        }\n        this._processMetaDesc(params.desc);\n      }\n      if (params.tags) {\n        this._processMetaTags(params.tags);\n      }\n      if (params.cred) {\n        this._processMetaCreds([params.cred], true);\n      }\n      if (params.aux) {\n        this._processMetaAux(params.aux);\n      }\n      return ctrl;\n    });\n  }\n  updateMode(uid, update) {\n    const user = uid ? this.subscriber(uid) : null;\n    const am = user ? user.acs.updateGiven(update).getGiven() : this.getAccessMode().updateWant(update).getWant();\n    return this.setMeta({\n      sub: {\n        user: uid,\n        mode: am\n      }\n    });\n  }\n  invite(uid, mode) {\n    return this.setMeta({\n      sub: {\n        user: uid,\n        mode: mode\n      }\n    });\n  }\n  archive(arch) {\n    if (this.private && !this.private.arch == !arch) {\n      return Promise.resolve(arch);\n    }\n    return this.setMeta({\n      desc: {\n        private: {\n          arch: arch ? true : _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR\n        }\n      }\n    });\n  }\n  pinMessage(seq, pin) {\n    let pinned = this.aux('pins');\n    if (!Array.isArray(pinned)) {\n      pinned = [];\n    }\n    let changed = false;\n    if (pin) {\n      if (!pinned.includes(seq)) {\n        changed = true;\n        if (pinned.length == _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PINNED_COUNT) {\n          pinned.shift();\n        }\n        pinned.push(seq);\n      }\n    } else {\n      if (pinned.includes(seq)) {\n        changed = true;\n        pinned = pinned.filter(id => id != seq);\n        if (pinned.length == 0) {\n          pinned = _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR;\n        }\n      }\n    }\n    if (changed) {\n      return this.setMeta({\n        aux: {\n          pins: pinned\n        }\n      });\n    }\n    return Promise.resolve();\n  }\n  pinTopic(topic, pin) {\n    return Promise.reject(new Error(\"Pinning topics is not supported here\"));\n  }\n  pinnedTopicRank(topic) {\n    return 0;\n  }\n  delMessages(ranges, hard) {\n    if (!this._attached) {\n      return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n    }\n    const tosend = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.normalizeRanges)(ranges, this._maxSeq);\n    let result;\n    if (tosend.length > 0) {\n      result = this._tinode.delMessages(this.name, tosend, hard);\n    } else {\n      result = Promise.resolve({\n        params: {\n          del: 0\n        }\n      });\n    }\n    return result.then(ctrl => {\n      if (ctrl.params.del > this._maxDel) {\n        this._maxDel = Math.max(ctrl.params.del, this._maxDel);\n        this.clear = Math.max(ctrl.params.del, this.clear);\n      }\n      ranges.forEach(rec => {\n        if (rec.hi) {\n          this.flushMessageRange(rec.low, rec.hi);\n        } else {\n          this.flushMessage(rec.low);\n        }\n        this._messages.put({\n          seq: rec.low,\n          low: rec.low,\n          hi: rec.hi,\n          _deleted: true\n        });\n      });\n      this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);\n      if (this.onData) {\n        this.onData();\n      }\n      return ctrl;\n    });\n  }\n  delMessagesAll(hardDel) {\n    if (!this._maxSeq || this._maxSeq <= 0) {\n      return Promise.resolve();\n    }\n    return this.delMessages([{\n      low: 1,\n      hi: this._maxSeq + 1,\n      _all: true\n    }], hardDel);\n  }\n  delMessagesList(list, hardDel) {\n    return this.delMessages((0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(list), hardDel);\n  }\n  delMessagesEdits(seq, hardDel) {\n    const list = [seq];\n    this.messageVersions(seq, msg => list.push(msg.seq));\n    return this.delMessagesList(list, hardDel);\n  }\n  delTopic(hard) {\n    if (this._deleted) {\n      this._gone();\n      return Promise.resolve(null);\n    }\n    return this._tinode.delTopic(this.name, hard).then(ctrl => {\n      this._deleted = true;\n      this._resetSub();\n      this._gone();\n      return ctrl;\n    });\n  }\n  delSubscription(user) {\n    if (!this._attached) {\n      return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n    }\n    return this._tinode.delSubscription(this.name, user).then(ctrl => {\n      delete this._users[user];\n      if (this.onSubsUpdated) {\n        this.onSubsUpdated(Object.keys(this._users));\n      }\n      return ctrl;\n    });\n  }\n  note(what, seq) {\n    if (!this._attached) {\n      return;\n    }\n    const user = this._users[this._tinode.getCurrentUserID()];\n    let update = false;\n    if (user) {\n      if (!user[what] || user[what] < seq) {\n        user[what] = seq;\n        update = true;\n      }\n    } else {\n      update = (this[what] | 0) < seq;\n    }\n    if (update) {\n      this._tinode.note(this.name, what, seq);\n      this._updateMyReadRecv(what, seq);\n      if (this.acs != null && !this.acs.isMuted()) {\n        const me = this._tinode.getMeTopic();\n        me._refreshContact(what, this);\n      }\n    }\n  }\n  noteRecv(seq) {\n    this.note('recv', seq);\n  }\n  noteRead(seq) {\n    seq = seq || this._maxSeq;\n    if (seq > 0) {\n      this.note('read', seq);\n    }\n  }\n  noteKeyPress() {\n    if (this._attached) {\n      this._tinode.noteKeyPress(this.name);\n    } else {\n      this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n    }\n  }\n  noteRecording(audioOnly) {\n    if (this._attached) {\n      this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n    } else {\n      this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n    }\n  }\n  videoCall(evt, seq, payload) {\n    if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n      return;\n    }\n    return this._tinode.videoCall(this.name, seq, evt, payload);\n  }\n  _updateMyReadRecv(what, seq, ts) {\n    let oldVal,\n      doUpdate = false;\n    seq = seq | 0;\n    this.seq = this.seq | 0;\n    this.read = this.read | 0;\n    this.recv = this.recv | 0;\n    switch (what) {\n      case 'recv':\n        oldVal = this.recv;\n        this.recv = Math.max(this.recv, seq);\n        doUpdate = oldVal != this.recv;\n        break;\n      case 'read':\n        oldVal = this.read;\n        this.read = Math.max(this.read, seq);\n        doUpdate = oldVal != this.read;\n        break;\n      case 'msg':\n        oldVal = this.seq;\n        this.seq = Math.max(this.seq, seq);\n        if (!this.touched || this.touched < ts) {\n          this.touched = ts;\n        }\n        doUpdate = oldVal != this.seq;\n        break;\n    }\n    if (this.recv < this.read) {\n      this.recv = this.read;\n      doUpdate = true;\n    }\n    if (this.seq < this.recv) {\n      this.seq = this.recv;\n      if (!this.touched || this.touched < ts) {\n        this.touched = ts;\n      }\n      doUpdate = true;\n    }\n    this.unread = this.seq - this.read;\n    return doUpdate;\n  }\n  userDesc(uid) {\n    const user = this._cacheGetUser(uid);\n    if (user) {\n      return user;\n    }\n  }\n  p2pPeerDesc() {\n    if (!this.isP2PType()) {\n      return undefined;\n    }\n    return this._users[this.name];\n  }\n  subscribers(callback, context) {\n    const cb = callback || this.onMetaSub;\n    if (cb) {\n      for (let idx in this._users) {\n        cb.call(context, this._users[idx], idx, this._users);\n      }\n    }\n  }\n  tags() {\n    return this._tags.slice(0);\n  }\n  aux(key) {\n    return this._aux[key];\n  }\n  alias() {\n    const alias = this._tags && this._tags.find(t => t.startsWith(_config_js__WEBPACK_IMPORTED_MODULE_3__.TAG_ALIAS));\n    if (!alias) {\n      return undefined;\n    }\n    return alias.substring(_config_js__WEBPACK_IMPORTED_MODULE_3__.TAG_ALIAS.length);\n  }\n  subscriber(uid) {\n    return this._users[uid];\n  }\n  messageVersions(origSeq, callback, context) {\n    if (!callback) {\n      return;\n    }\n    const versions = this._messageVersions[origSeq];\n    if (!versions) {\n      return;\n    }\n    versions.forEach(callback, undefined, undefined, context);\n  }\n  messages(callback, sinceId, beforeId, context) {\n    const cb = callback || this.onData;\n    if (cb) {\n      const startIdx = typeof sinceId == 'number' ? this._messages.find({\n        seq: sinceId\n      }, true) : undefined;\n      const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n        seq: beforeId\n      }, true) : undefined;\n      if (startIdx != -1 && beforeIdx != -1) {\n        let msgs = [];\n        this._messages.forEach((msg, unused1, unused2, i) => {\n          if (Topic.#isReplacementMsg(msg)) {\n            return;\n          }\n          if (msg._deleted) {\n            return;\n          }\n          const latest = this.latestMsgVersion(msg.seq) || msg;\n          if (!latest._origTs) {\n            latest._origTs = latest.ts;\n            latest._origSeq = latest.seq;\n            latest.ts = msg.ts;\n            latest.seq = msg.seq;\n          }\n          msgs.push({\n            data: latest,\n            idx: i\n          });\n        }, startIdx, beforeIdx, {});\n        msgs.forEach((val, i) => {\n          cb.call(context, val.data, i > 0 ? msgs[i - 1].data : undefined, i < msgs.length - 1 ? msgs[i + 1].data : undefined, val.idx);\n        });\n      }\n    }\n  }\n  findMessage(seq) {\n    const idx = this._messages.find({\n      seq: seq\n    });\n    if (idx >= 0) {\n      return this._messages.getAt(idx);\n    }\n    return undefined;\n  }\n  latestMessage() {\n    return this._messages.getLast(msg => !msg._deleted);\n  }\n  latestMsgVersion(seq) {\n    const versions = this._messageVersions[seq];\n    return versions ? versions.getLast() : null;\n  }\n  maxMsgSeq() {\n    return this._maxSeq;\n  }\n  minMsgSeq() {\n    return this._minSeq;\n  }\n  maxClearId() {\n    return this._maxDel;\n  }\n  messageCount() {\n    return this._messages.length();\n  }\n  queuedMessages(callback, context) {\n    if (!callback) {\n      throw new Error(\"Callback must be provided\");\n    }\n    this.messages(callback, _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID, undefined, context);\n  }\n  msgReceiptCount(what, seq) {\n    let count = 0;\n    if (seq > 0) {\n      const me = this._tinode.getCurrentUserID();\n      for (let idx in this._users) {\n        const user = this._users[idx];\n        if (user.user !== me && user[what] >= seq) {\n          count++;\n        }\n      }\n    }\n    return count;\n  }\n  msgReadCount(seq) {\n    return this.msgReceiptCount('read', seq);\n  }\n  msgRecvCount(seq) {\n    return this.msgReceiptCount('recv', seq);\n  }\n  msgHasMoreMessages(min, max, newer) {\n    const gaps = [];\n    if (min >= max) {\n      return gaps;\n    }\n    let maxSeq = 0;\n    let gap;\n    this._messages.forEach((msg, prev) => {\n      const p = prev || {\n        seq: 0\n      };\n      const expected = p._deleted ? p.hi : p.seq + 1;\n      if (msg.seq > expected) {\n        gap = {\n          low: expected,\n          hi: msg.seq\n        };\n      } else {\n        gap = null;\n      }\n      if (gap && (newer ? gap.hi >= min : gap.low < max)) {\n        gaps.push(gap);\n      }\n      maxSeq = expected;\n    });\n    if (maxSeq < this.seq) {\n      gap = {\n        low: maxSeq + 1,\n        hi: this.seq + 1\n      };\n      if (newer ? gap.hi >= min : gap.low < max) {\n        gaps.push(gap);\n      }\n    }\n    return gaps;\n  }\n  isNewMessage(seqId) {\n    return this._maxSeq <= seqId;\n  }\n  flushMessage(seqId) {\n    const idx = this._messages.find({\n      seq: seqId\n    });\n    delete this._messageVersions[seqId];\n    if (idx >= 0) {\n      this._tinode._db.remMessages(this.name, seqId);\n      return this._messages.delAt(idx);\n    }\n    return undefined;\n  }\n  flushMessageRange(fromId, untilId) {\n    this._tinode._db.remMessages(this.name, fromId, untilId);\n    for (let i = fromId; i < untilId; i++) {\n      delete this._messageVersions[i];\n    }\n    const since = this._messages.find({\n      seq: fromId\n    }, true);\n    return since >= 0 ? this._messages.delRange(since, this._messages.find({\n      seq: untilId\n    }, true)) : [];\n  }\n  swapMessageId(pub, newSeqId) {\n    const idx = this._messages.find(pub);\n    const numMessages = this._messages.length();\n    if (0 <= idx && idx < numMessages) {\n      this._messages.delAt(idx);\n      this._tinode._db.remMessages(this.name, pub.seq);\n      pub.seq = newSeqId;\n      this._messages.put(pub);\n      this._tinode._db.addMessage(pub);\n    }\n  }\n  cancelSend(seqId) {\n    const idx = this._messages.find({\n      seq: seqId\n    });\n    if (idx >= 0) {\n      const msg = this._messages.getAt(idx);\n      const status = this.msgStatus(msg);\n      if (status == _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_QUEUED || status == _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_FAILED || status == _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_FATAL) {\n        this._tinode._db.remMessages(this.name, seqId);\n        msg._cancelled = true;\n        this._messages.delAt(idx);\n        if (this.onData) {\n          this.onData();\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n  getType() {\n    return Topic.topicType(this.name);\n  }\n  getAccessMode() {\n    return this.acs;\n  }\n  setAccessMode(acs) {\n    return this.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](acs);\n  }\n  getDefaultAccess() {\n    return this.defacs;\n  }\n  startMetaQuery() {\n    return new _meta_builder_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this);\n  }\n  isArchived() {\n    return this.private && !!this.private.arch;\n  }\n  isMeType() {\n    return Topic.isMeTopicName(this.name);\n  }\n  isSelfType() {\n    return Topic.isSelfTopicName(this.name);\n  }\n  isChannelType() {\n    return Topic.isChannelTopicName(this.name);\n  }\n  isGroupType() {\n    return Topic.isGroupTopicName(this.name);\n  }\n  isP2PType() {\n    return Topic.isP2PTopicName(this.name);\n  }\n  isCommType() {\n    return Topic.isCommTopicName(this.name);\n  }\n  msgStatus(msg, upd) {\n    let status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_NONE;\n    if (this._tinode.isMe(msg.from)) {\n      if (msg._sending) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_SENDING;\n      } else if (msg._fatal || msg._cancelled) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_FATAL;\n      } else if (msg._failed) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_FAILED;\n      } else if (msg.seq >= _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_QUEUED;\n      } else if (this.msgReadCount(msg.seq) > 0) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_READ;\n      } else if (this.msgRecvCount(msg.seq) > 0) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_RECEIVED;\n      } else if (msg.seq > 0) {\n        status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_SENT;\n      }\n    } else {\n      status = _config_js__WEBPACK_IMPORTED_MODULE_3__.MESSAGE_STATUS_TO_ME;\n    }\n    if (upd && msg._status != status) {\n      msg._status = status;\n      this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n    }\n    return status;\n  }\n  _maybeUpdateMessageVersionsCache(msg) {\n    if (!Topic.#isReplacementMsg(msg)) {\n      if (this._messageVersions[msg.seq]) {\n        this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n        if (this._messageVersions[msg.seq].isEmpty()) {\n          delete this._messageVersions[msg.seq];\n        }\n      }\n      return;\n    }\n    const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n    if (targetSeq > msg.seq) {\n      return;\n    }\n    const targetMsg = this.findMessage(targetSeq);\n    if (targetMsg && targetMsg.from != msg.from) {\n      return;\n    }\n    const versions = this._messageVersions[targetSeq] || new _cbuffer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]((a, b) => {\n      return a.seq - b.seq;\n    }, true);\n    versions.put(msg);\n    this._messageVersions[targetSeq] = versions;\n  }\n  _routeData(data) {\n    if (data.content) {\n      if (!this.touched || this.touched < data.ts) {\n        this.touched = data.ts;\n        this._tinode._db.updTopic(this);\n      }\n    }\n    if (data.seq > this._maxSeq) {\n      this._maxSeq = data.seq;\n      this.msgStatus(data, true);\n      clearTimeout(this._recvNotificationTimer);\n      this._recvNotificationTimer = setTimeout(_ => {\n        this._recvNotificationTimer = null;\n        this.noteRecv(this._maxSeq);\n      }, _config_js__WEBPACK_IMPORTED_MODULE_3__.RECV_TIMEOUT);\n    }\n    if (data.seq < this._minSeq || this._minSeq == 0) {\n      this._minSeq = data.seq;\n    }\n    const outgoing = !this.isChannelType() && !data.from || this._tinode.isMe(data.from);\n    if (data.head && data.head.webrtc && data.head.mime == _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().getContentType() && data.content) {\n      const upd = {\n        state: data.head.webrtc,\n        duration: data.head['webrtc-duration'],\n        incoming: !outgoing\n      };\n      if (data.head.vc) {\n        upd.vc = true;\n      }\n      data.content = _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().updateVideoCall(data.content, upd);\n    }\n    if (!data._noForwarding) {\n      this._messages.put(data);\n      this._tinode._db.addMessage(data);\n      this._maybeUpdateMessageVersionsCache(data);\n    }\n    if (this.onData) {\n      this.onData(data);\n    }\n    const what = outgoing ? 'read' : 'msg';\n    this._updateMyReadRecv(what, data.seq, data.ts);\n    if (!outgoing && data.from) {\n      this._routeInfo({\n        what: 'read',\n        from: data.from,\n        seq: data.seq,\n        _noForwarding: true\n      });\n    }\n    this._tinode.getMeTopic()._refreshContact(what, this);\n  }\n  _routeMeta(meta) {\n    if (meta.desc) {\n      this._processMetaDesc(meta.desc);\n    }\n    if (meta.sub && meta.sub.length > 0) {\n      this._processMetaSubs(meta.sub, true);\n    }\n    if (meta.del) {\n      this._processDelMessages(meta.del.clear, meta.del.delseq);\n    }\n    if (meta.tags) {\n      this._processMetaTags(meta.tags);\n    }\n    if (meta.cred) {\n      this._processMetaCreds(meta.cred);\n    }\n    if (meta.aux) {\n      this._processMetaAux(meta.aux);\n    }\n    if (this.onMeta) {\n      this.onMeta(meta);\n    }\n  }\n  _routePres(pres) {\n    let user, uid;\n    switch (pres.what) {\n      case 'del':\n        this._processDelMessages(pres.clear, pres.delseq);\n        break;\n      case 'on':\n      case 'off':\n        user = this._users[pres.src];\n        if (user) {\n          user.online = pres.what == 'on';\n        } else {\n          this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n        }\n        break;\n      case 'term':\n        this._resetSub();\n        break;\n      case 'upd':\n        if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n          this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n        }\n        break;\n      case 'aux':\n        this.getMeta(this.startMetaQuery().withAux().build());\n        break;\n      case 'acs':\n        uid = pres.src || this._tinode.getCurrentUserID();\n        user = this._users[uid];\n        if (!user) {\n          const acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]().updateAll(pres.dacs);\n          if (acs && acs.mode != _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]._NONE) {\n            user = this._cacheGetUser(uid);\n            if (!user) {\n              user = {\n                user: uid,\n                acs: acs\n              };\n              this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n            } else {\n              user.acs = acs;\n            }\n            user.updated = new Date();\n            this._processMetaSubs([user]);\n          }\n        } else {\n          user.acs.updateAll(pres.dacs);\n          this._processMetaSubs([{\n            user: uid,\n            updated: new Date(),\n            acs: user.acs\n          }]);\n        }\n        break;\n      default:\n        this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n    }\n    if (this.onPres) {\n      this.onPres(pres);\n    }\n  }\n  _routeInfo(info) {\n    switch (info.what) {\n      case 'recv':\n      case 'read':\n        const user = this._users[info.from];\n        if (user) {\n          user[info.what] = info.seq;\n          if (user.recv < user.read) {\n            user.recv = user.read;\n          }\n        }\n        const msg = this.latestMessage();\n        if (msg) {\n          this.msgStatus(msg, true);\n        }\n        if (this._tinode.isMe(info.from) && !info._noForwarding) {\n          this._updateMyReadRecv(info.what, info.seq);\n        }\n        this._tinode.getMeTopic()._refreshContact(info.what, this);\n        break;\n      case 'kp':\n      case 'kpa':\n      case 'kpv':\n        break;\n      case 'call':\n        break;\n      default:\n        this._tinode.logger(\"INFO: Ignored info update\", info.what);\n    }\n    if (this.onInfo) {\n      this.onInfo(info);\n    }\n  }\n  _processMetaDesc(desc) {\n    if (this.isP2PType()) {\n      delete desc.defacs;\n      this._tinode._db.updUser(this.name, desc.public);\n    }\n    (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(this, desc);\n    this._tinode._db.updTopic(this);\n    if (this.name !== _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME && !desc._noForwarding) {\n      const me = this._tinode.getMeTopic();\n      if (me.onMetaSub) {\n        me.onMetaSub(this);\n      }\n      if (me.onSubsUpdated) {\n        me.onSubsUpdated([this.name], 1);\n      }\n    }\n    if (this.onMetaDesc) {\n      this.onMetaDesc(this);\n    }\n  }\n  _processMetaSubs(subs, skipSubcnt) {\n    for (let idx in subs) {\n      const sub = subs[idx];\n      sub.online = !!sub.online;\n      this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n      let user = null;\n      if (!sub.deleted) {\n        if (this._tinode.isMe(sub.user) && sub.acs) {\n          this._processMetaDesc({\n            updated: sub.updated,\n            touched: sub.touched,\n            acs: sub.acs\n          });\n        }\n        if (!this._users[sub.user] && !skipSubcnt) {\n          this.subcnt++;\n        }\n        user = this._updateCachedUser(sub.user, sub);\n      } else {\n        delete this._users[sub.user];\n        if (!skipSubcnt) {\n          this.subcnt--;\n        }\n        user = sub;\n      }\n      if (this.onMetaSub) {\n        this.onMetaSub(user);\n      }\n    }\n    if (this.onSubsUpdated) {\n      this.onSubsUpdated(Object.keys(this._users));\n    }\n  }\n  _processMetaTags(tags) {\n    if (tags == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR || tags.length == 1 && tags[0] == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR) {\n      tags = [];\n    }\n    this._tags = tags;\n    this._tinode._db.updTopic(this);\n    if (this.onTagsUpdated) {\n      this.onTagsUpdated(tags);\n    }\n  }\n  _processMetaCreds(creds) {}\n  _processMetaAux(aux) {\n    aux = !aux || aux == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR ? {} : aux;\n    this._aux = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(this._aux, aux);\n    this._tinode._db.updTopic(this);\n    if (this.onAuxUpdated) {\n      this.onAuxUpdated(this._aux);\n    }\n  }\n  _processDelMessages(clear, delseq) {\n    this._maxDel = Math.max(clear, this._maxDel);\n    this.clear = Math.max(clear, this.clear);\n    let count = 0;\n    if (Array.isArray(delseq)) {\n      delseq.forEach(rec => {\n        if (!rec.hi) {\n          count++;\n          this.flushMessage(rec.low);\n        } else {\n          count += rec.hi - rec.low;\n          this.flushMessageRange(rec.low, rec.hi);\n        }\n        this._messages.put({\n          seq: rec.low,\n          low: rec.low,\n          hi: rec.hi,\n          _deleted: true\n        });\n      });\n      this._tinode._db.addDelLog(this.name, clear, delseq);\n    }\n    if (count > 0) {\n      if (this.onData) {\n        this.onData();\n      }\n    }\n  }\n  _allMessagesReceived(count) {\n    if (this.onAllMessagesReceived) {\n      this.onAllMessagesReceived(count);\n    }\n  }\n  _resetSub() {\n    this._attached = false;\n  }\n  _gone() {\n    this._messages.reset();\n    this._tinode._db.remMessages(this.name);\n    this._users = {};\n    this.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](null);\n    this.private = null;\n    this.public = null;\n    this.trusted = null;\n    this._maxSeq = 0;\n    this._minSeq = 0;\n    this._attached = false;\n    const me = this._tinode.getMeTopic();\n    if (me) {\n      me._routePres({\n        _noForwarding: true,\n        what: 'gone',\n        topic: _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME,\n        src: this.name\n      });\n    }\n    if (this.onDeleteTopic) {\n      this.onDeleteTopic();\n    }\n  }\n  _updateCachedUser(uid, obj) {\n    let cached = this._cacheGetUser(uid);\n    cached = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(cached || {}, obj);\n    this._cachePutUser(uid, cached);\n    return (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeToCache)(this._users, uid, cached);\n  }\n  _getQueuedSeqId() {\n    return this._queuedSeqId++;\n  }\n  _loadMessages(db, query) {\n    query = query || {};\n    query.limit = query.limit || _config_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MESSAGES_PAGE;\n    let count = 0;\n    return db.readMessages(this.name, query).then(msgs => {\n      msgs.forEach(data => {\n        if (data.seq > this._maxSeq) {\n          this._maxSeq = data.seq;\n        }\n        if (data.seq < this._minSeq || this._minSeq == 0) {\n          this._minSeq = data.seq;\n        }\n        this._messages.put(data);\n        this._maybeUpdateMessageVersionsCache(data);\n      });\n      count = msgs.length;\n    }).then(_ => db.readDelLog(this.name, query)).then(dellog => {\n      return dellog.forEach(rec => {\n        this._messages.put({\n          seq: rec.low,\n          low: rec.low,\n          hi: rec.hi,\n          _deleted: true\n        });\n      });\n    }).then(_ => {\n      return count;\n    });\n  }\n  _updateReceived(seq, act) {\n    this.touched = new Date();\n    this.seq = seq | 0;\n    if (!act || this._tinode.isMe(act)) {\n      this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n      this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n    }\n    this.unread = this.seq - (this.read | 0);\n    this._tinode._db.updTopic(this);\n  }\n}\n\n/***/ }),\n\n/***/ \"./src/utils.js\":\n/*!**********************!*\\\n  !*** ./src/utils.js ***!\n  \\**********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   clipInRange: function() { return /* binding */ clipInRange; },\n/* harmony export */   clipOutRange: function() { return /* binding */ clipOutRange; },\n/* harmony export */   isUrlRelative: function() { return /* binding */ isUrlRelative; },\n/* harmony export */   jsonParseHelper: function() { return /* binding */ jsonParseHelper; },\n/* harmony export */   listToRanges: function() { return /* binding */ listToRanges; },\n/* harmony export */   mergeObj: function() { return /* binding */ mergeObj; },\n/* harmony export */   mergeToCache: function() { return /* binding */ mergeToCache; },\n/* harmony export */   normalizeArray: function() { return /* binding */ normalizeArray; },\n/* harmony export */   normalizeRanges: function() { return /* binding */ normalizeRanges; },\n/* harmony export */   rfc3339DateString: function() { return /* binding */ rfc3339DateString; },\n/* harmony export */   simplify: function() { return /* binding */ simplify; }\n/* harmony export */ });\n/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ \"./src/access-mode.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n\n\n\n\nfunction jsonParseHelper(key, val) {\n  if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n    const date = new Date(val);\n    if (!isNaN(date)) {\n      return date;\n    }\n  } else if (key === 'acs' && typeof val === 'object') {\n    return new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](val);\n  }\n  return val;\n}\nfunction isUrlRelative(url) {\n  return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\nfunction isValidDate(d) {\n  return d instanceof Date && !isNaN(d) && d.getTime() != 0;\n}\nfunction rfc3339DateString(d) {\n  if (!isValidDate(d)) {\n    return undefined;\n  }\n  const pad = function (val, sp) {\n    sp = sp || 2;\n    return '0'.repeat(sp - ('' + val).length) + val;\n  };\n  const millis = d.getUTCMilliseconds();\n  return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\nfunction mergeObj(dst, src) {\n  if (typeof src != 'object') {\n    if (src === undefined) {\n      return dst;\n    }\n    if (src === _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR) {\n      return undefined;\n    }\n    return src;\n  }\n  if (src === null) {\n    return dst;\n  }\n  if (src instanceof Date && !isNaN(src)) {\n    return !dst || !(dst instanceof Date) || isNaN(dst) || dst < src ? src : dst;\n  }\n  if (src instanceof _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n    return new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](src);\n  }\n  if (src instanceof Array) {\n    return src;\n  }\n  if (!dst || dst === _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR) {\n    dst = src.constructor();\n  }\n  for (let prop in src) {\n    if (src.hasOwnProperty(prop) && prop != '_noForwarding') {\n      try {\n        dst[prop] = mergeObj(dst[prop], src[prop]);\n      } catch (err) {\n        console.warn(\"Error merging property:\", prop, err);\n      }\n    }\n  }\n  return dst;\n}\nfunction mergeToCache(cache, key, newval) {\n  cache[key] = mergeObj(cache[key], newval);\n  return cache[key];\n}\nfunction simplify(obj) {\n  Object.keys(obj).forEach(key => {\n    if (key[0] == '_') {\n      delete obj[key];\n    } else if (!obj[key]) {\n      delete obj[key];\n    } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n      delete obj[key];\n    } else if (!obj[key]) {\n      delete obj[key];\n    } else if (obj[key] instanceof Date) {\n      if (!isValidDate(obj[key])) {\n        delete obj[key];\n      }\n    } else if (typeof obj[key] == 'object') {\n      simplify(obj[key]);\n      if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n        delete obj[key];\n      }\n    }\n  });\n  return obj;\n}\n;\nfunction normalizeArray(arr) {\n  let out = [];\n  if (Array.isArray(arr)) {\n    for (let i = 0, l = arr.length; i < l; i++) {\n      let t = arr[i];\n      if (t) {\n        t = t.trim().toLowerCase();\n        if (t.length > 1) {\n          out.push(t);\n        }\n      }\n    }\n    out = out.sort().filter((item, pos, ary) => {\n      return !pos || item != ary[pos - 1];\n    });\n  }\n  if (out.length == 0) {\n    out.push(_config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR);\n  }\n  return out;\n}\nfunction normalizeRanges(ranges, maxSeq) {\n  if (!Array.isArray(ranges)) {\n    return [];\n  }\n  ranges.sort((r1, r2) => {\n    if (r1.low < r2.low) {\n      return -1;\n    }\n    if (r1.low == r2.low) {\n      return (r2.hi | 0) - r1.hi;\n    }\n    return 1;\n  });\n  ranges = ranges.reduce((out, r) => {\n    if (r.low < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID && r.low > 0) {\n      if (!r.hi || r.hi < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID) {\n        out.push(r);\n      } else {\n        out.push({\n          low: r.low,\n          hi: maxSeq + 1\n        });\n      }\n    }\n    return out;\n  }, []);\n  ranges = ranges.reduce((out, r) => {\n    if (out.length == 0) {\n      out.push(r);\n    } else {\n      let prev = out[out.length - 1];\n      if (r.low <= prev.hi) {\n        prev.hi = Math.max(prev.hi, r.hi);\n      } else {\n        out.push(r);\n      }\n    }\n    return out;\n  }, []);\n  return ranges;\n}\nfunction listToRanges(list) {\n  list.sort((a, b) => a - b);\n  return list.reduce((out, id) => {\n    if (out.length == 0) {\n      out.push({\n        low: id\n      });\n    } else {\n      let prev = out[out.length - 1];\n      if (!prev.hi && id != prev.low + 1 || id > prev.hi) {\n        out.push({\n          low: id\n        });\n      } else {\n        prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n      }\n    }\n    return out;\n  }, []);\n}\nfunction clipOutRange(src, clip) {\n  if (clip.hi <= src.low || clip.low >= src.hi) {\n    return [src];\n  }\n  if (clip.low <= src.low) {\n    if (clip.hi >= src.hi) {\n      return [];\n    }\n    return [{\n      low: clip.hi,\n      hi: src.hi\n    }];\n  }\n  const result = [{\n    low: src.low,\n    hi: clip.low\n  }];\n  if (clip.hi < src.hi) {\n    result.push({\n      low: clip.hi,\n      hi: src.hi\n    });\n  }\n  return result;\n}\nfunction clipInRange(src, clip) {\n  if (clip.hi <= src.low || clip.low >= src.hi) {\n    return null;\n  }\n  if (src.low >= clip.low && src.hi <= clip.hi) {\n    return src;\n  }\n  return {\n    low: Math.max(src.low, clip.low),\n    hi: Math.min(src.hi, clip.hi)\n  };\n  // removed by dead control flow\n\n}\n\n/***/ }),\n\n/***/ \"./version.js\":\n/*!********************!*\\\n  !*** ./version.js ***!\n  \\********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   PACKAGE_VERSION: function() { return /* binding */ PACKAGE_VERSION; }\n/* harmony export */ });\nconst PACKAGE_VERSION = \"0.25.2\";\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Check if module exists (development only)\n/******/ \t\tif (__webpack_modules__[moduleId] === undefined) {\n/******/ \t\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n/******/ \t\t\te.code = 'MODULE_NOT_FOUND';\n/******/ \t\t\tthrow e;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.\n!function() {\n/*!***********************!*\\\n  !*** ./src/tinode.js ***!\n  \\***********************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AccessMode: function() { return /* reexport safe */ _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; },\n/* harmony export */   Drafty: function() { return /* reexport default from dynamic */ _drafty_js__WEBPACK_IMPORTED_MODULE_5___default.a; },\n/* harmony export */   TheCard: function() { return /* reexport safe */ _the_card_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; },\n/* harmony export */   Tinode: function() { return /* binding */ Tinode; }\n/* harmony export */ });\n/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ \"./src/access-mode.js\");\n/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config.js */ \"./src/config.js\");\n/* harmony import */ var _comm_error_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./comm-error.js */ \"./src/comm-error.js\");\n/* harmony import */ var _connection_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./connection.js */ \"./src/connection.js\");\n/* harmony import */ var _db_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./db.js */ \"./src/db.js\");\n/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./drafty.js */ \"./src/drafty.js\");\n/* harmony import */ var _drafty_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_drafty_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _large_file_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./large-file.js */ \"./src/large-file.js\");\n/* harmony import */ var _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./meta-builder.js */ \"./src/meta-builder.js\");\n/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./topic.js */ \"./src/topic.js\");\n/* harmony import */ var _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./fnd-topic.js */ \"./src/fnd-topic.js\");\n/* harmony import */ var _me_topic_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./me-topic.js */ \"./src/me-topic.js\");\n/* harmony import */ var _the_card_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./the-card.js */ \"./src/the-card.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils.js */ \"./src/utils.js\");\n/**\n * @module tinode-sdk\n *\n * @copyright 2015-2026 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.25\n *\n * See <a href=\"https://github.com/tinode/webapp\">https://github.com/tinode/webapp</a> for real-life usage.\n *\n * @example\n * <head>\n * <script src=\".../tinode.js\"></script>\n * </head>\n *\n * <body>\n *  ...\n * <script>\n *  // Instantiate tinode.\n *  const tinode = new Tinode(config, _ => {\n *    // Called on init completion.\n *  });\n *  tinode.enableLogging(true);\n *  tinode.onDisconnect = err => {\n *    // Handle disconnect.\n *  };\n *  // Connect to the server.\n *  tinode.connect('https://example.com/').then(_ => {\n *    // Connected. Login now.\n *    return tinode.loginBasic(login, password);\n *  }).then(ctrl => {\n *    // Logged in fine, attach callbacks, subscribe to 'me'.\n *    const me = tinode.getMeTopic();\n *    me.onMetaDesc = function(meta) { ... };\n *    // Subscribe, fetch topic description and the list of contacts.\n *    me.subscribe({get: {desc: {}, sub: {}}});\n *  }).catch(err => {\n *    // Login or subscription failed, do something.\n *    ...\n *  });\n *  ...\n * </script>\n * </body>\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n  WebSocketProvider = WebSocket;\n}\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n  XHRProvider = XMLHttpRequest;\n}\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n  IndexedDBProvider = indexedDB;\n}\n\ninitForNonBrowserApp();\nfunction initForNonBrowserApp() {\n  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n  if (typeof btoa == 'undefined') {\n    __webpack_require__.g.btoa = function (input = '') {\n      let str = input;\n      let output = '';\n      for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n        charCode = str.charCodeAt(i += 3 / 4);\n        if (charCode > 0xFF) {\n          throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n        }\n        block = block << 8 | charCode;\n      }\n      return output;\n    };\n  }\n  if (typeof atob == 'undefined') {\n    __webpack_require__.g.atob = function (input = '') {\n      let str = input.replace(/=+$/, '');\n      let output = '';\n      if (str.length % 4 == 1) {\n        throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n      }\n      for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) {\n        buffer = chars.indexOf(buffer);\n      }\n      return output;\n    };\n  }\n  if (typeof window == 'undefined') {\n    __webpack_require__.g.window = {\n      WebSocket: WebSocketProvider,\n      XMLHttpRequest: XHRProvider,\n      indexedDB: IndexedDBProvider,\n      URL: {\n        createObjectURL: function () {\n          throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n        }\n      }\n    };\n  }\n  _connection_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNetworkProviders(WebSocketProvider, XHRProvider);\n  _large_file_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setNetworkProvider(XHRProvider);\n  _db_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setDatabaseProvider(IndexedDBProvider);\n}\nfunction detectTransport() {\n  if (typeof window == 'object') {\n    if (window['WebSocket']) {\n      return 'ws';\n    } else if (window['XMLHttpRequest']) {\n      return 'lp';\n    }\n  }\n  return null;\n}\nfunction b64EncodeUnicode(str) {\n  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) {\n    return String.fromCharCode('0x' + p1);\n  }));\n}\nfunction jsonBuildHelper(key, val) {\n  if (val instanceof Date) {\n    val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.rfc3339DateString)(val);\n  } else if (val instanceof _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n    val = val.jsonHelper();\n  } else if (val === undefined || val === null || val === false || Array.isArray(val) && val.length == 0 || typeof val == 'object' && Object.keys(val).length == 0) {\n    return undefined;\n  }\n  return val;\n}\n;\nfunction jsonLoggerHelper(key, val) {\n  if (typeof val == 'string' && val.length > 128) {\n    return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n  }\n  return jsonBuildHelper(key, val);\n}\n;\nfunction getBrowserInfo(ua, product) {\n  ua = ua || '';\n  let reactnative = '';\n  if (/reactnative/i.test(product)) {\n    reactnative = 'ReactNative; ';\n  }\n  let result;\n  ua = ua.replace(' (KHTML, like Gecko)', '');\n  let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n  if (m) {\n    const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n    let tmp = ua.substr(m.index + m[0].length).split(' ');\n    let tokens = [];\n    let version;\n    for (let i = 0; i < tmp.length; i++) {\n      let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n      if (m2) {\n        tokens.push([m2[1], m2[2], priority.findIndex(e => {\n          return m2[1].toLowerCase().startsWith(e);\n        })]);\n        if (m2[1] == 'Version') {\n          version = m2[2];\n        }\n      }\n    }\n    tokens.sort((a, b) => {\n      return a[2] - b[2];\n    });\n    if (tokens.length > 0) {\n      if (tokens[0][0].toLowerCase().startsWith('edg')) {\n        tokens[0][0] = 'Edge';\n      } else if (tokens[0][0] == 'OPR') {\n        tokens[0][0] = 'Opera';\n      } else if (tokens[0][0] == 'Safari' && version) {\n        tokens[0][1] = version;\n      }\n      result = tokens[0][0] + '/' + tokens[0][1];\n    } else {\n      result = m[1];\n    }\n  } else if (/firefox/i.test(ua)) {\n    m = /Firefox\\/([.\\d]+)/g.exec(ua);\n    if (m) {\n      result = 'Firefox/' + m[1];\n    } else {\n      result = 'Firefox/?';\n    }\n  } else {\n    m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n    if (m) {\n      result = m[1] + '/' + m[2];\n    } else {\n      m = ua.split(' ');\n      result = m[0];\n    }\n  }\n  m = result.split('/');\n  if (m.length > 1) {\n    const v = m[1].split('.');\n    const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n    result = `${m[0]}/${v[0]}${minor}`;\n  }\n  return reactnative + result;\n}\nclass Tinode {\n  _host;\n  _secure;\n  _appName;\n  _apiKey;\n  _browser = '';\n  _platform;\n  _hwos = 'undefined';\n  _humanLanguage = 'xx';\n  _loggingEnabled = false;\n  _trimLongStrings = false;\n  _myUID = null;\n  _authenticated = false;\n  _login = null;\n  _authToken = null;\n  _inPacketCount = 0;\n  _messageId = Math.floor(Math.random() * 0xFFFF + 0xFFFF);\n  _serverInfo = null;\n  _deviceToken = null;\n  _pendingPromises = {};\n  _expirePromises = null;\n  _connection = null;\n  _persist = false;\n  _db = null;\n  _cache = {};\n  constructor(config, onComplete) {\n    this._host = config.host;\n    this._secure = config.secure;\n    this._appName = config.appName || \"Undefined\";\n    this._apiKey = config.apiKey;\n    this._platform = config.platform || 'web';\n    if (typeof navigator != 'undefined') {\n      this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n      this._hwos = navigator.platform;\n      this._humanLanguage = navigator.language || 'en-US';\n    }\n    _connection_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].logger = this.logger;\n    (_drafty_js__WEBPACK_IMPORTED_MODULE_5___default().logger) = this.logger;\n    if (config.transport != 'lp' && config.transport != 'ws') {\n      config.transport = detectTransport();\n    }\n    this._connection = new _connection_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](config, _config_js__WEBPACK_IMPORTED_MODULE_1__.PROTOCOL_VERSION, true);\n    this._connection.onMessage = data => {\n      this.#dispatchMessage(data);\n    };\n    this._connection.onOpen = _ => this.#connectionOpen();\n    this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n    this._connection.onAutoreconnectIteration = (timeout, promise) => {\n      if (this.onAutoreconnectIteration) {\n        this.onAutoreconnectIteration(timeout, promise);\n      }\n    };\n    this._persist = config.persist;\n    this._db = new _db_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.logger, this.logger);\n    if (this._persist) {\n      const prom = [];\n      this._db.initDatabase().then(_ => {\n        return this._db.mapTopics(data => {\n          let topic = this.#cacheGet('topic', data.name);\n          if (topic) {\n            return;\n          }\n          if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {\n            topic = new _me_topic_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n          } else if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) {\n            topic = new _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]();\n          } else {\n            topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"](data.name);\n          }\n          this._db.deserializeTopic(topic, data);\n          this.#attachCacheToTopic(topic);\n          topic._cachePutSelf();\n          this._db.maxDelId(topic.name).then(clear => {\n            topic._maxDel = Math.max(topic._maxDel, clear || 0);\n          });\n          delete topic._new;\n          prom.push(topic._loadMessages(this._db));\n        });\n      }).then(_ => {\n        return this._db.mapUsers(data => {\n          this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, data.public));\n        });\n      }).then(_ => {\n        return Promise.all(prom);\n      }).then(_ => {\n        if (onComplete) {\n          onComplete();\n        }\n        this.logger(\"Persistent cache initialized.\");\n      }).catch(err => {\n        if (onComplete) {\n          onComplete(err);\n        }\n        this.logger(\"Failed to initialize persistent cache:\", err);\n      });\n    } else {\n      this._db.deleteDatabase().then(_ => {\n        if (onComplete) {\n          onComplete();\n        }\n      });\n    }\n  }\n  logger(str, ...args) {\n    if (this._loggingEnabled) {\n      const d = new Date();\n      const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' + ('0' + d.getUTCMinutes()).slice(-2) + ':' + ('0' + d.getUTCSeconds()).slice(-2) + '.' + ('00' + d.getUTCMilliseconds()).slice(-3);\n      console.log('[' + dateString + ']', str, args.join(' '));\n    }\n  }\n  #makePromise(id) {\n    let promise = null;\n    if (id) {\n      promise = new Promise((resolve, reject) => {\n        this._pendingPromises[id] = {\n          'resolve': resolve,\n          'reject': reject,\n          'ts': new Date()\n        };\n      });\n    }\n    return promise;\n  }\n  #execPromise(id, code, onOK, errorText) {\n    const callbacks = this._pendingPromises[id];\n    if (callbacks) {\n      delete this._pendingPromises[id];\n      if (code >= 200 && code < 400) {\n        if (callbacks.resolve) {\n          callbacks.resolve(onOK);\n        }\n      } else if (callbacks.reject) {\n        callbacks.reject(new _comm_error_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](errorText, code));\n      }\n    }\n  }\n  #send(pkt, id) {\n    let promise;\n    if (id) {\n      promise = this.#makePromise(id);\n    }\n    pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.simplify)(pkt);\n    let msg = JSON.stringify(pkt);\n    this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n    try {\n      this._connection.sendText(msg);\n    } catch (err) {\n      if (id) {\n        this.#execPromise(id, _connection_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].NETWORK_ERROR, null, err.message);\n      } else {\n        throw err;\n      }\n    }\n    return promise;\n  }\n  #dispatchMessage(data) {\n    if (!data) return;\n    this._inPacketCount++;\n    if (this.onRawMessage) {\n      this.onRawMessage(data);\n    }\n    if (data === '0') {\n      if (this.onNetworkProbe) {\n        this.onNetworkProbe();\n      }\n      return;\n    }\n    let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_12__.jsonParseHelper);\n    if (!pkt) {\n      this.logger(\"in: \" + data);\n      this.logger(\"ERROR: failed to parse data\");\n    } else {\n      this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n      if (this.onMessage) {\n        this.onMessage(pkt);\n      }\n      if (pkt.ctrl) {\n        if (this.onCtrlMessage) {\n          this.onCtrlMessage(pkt.ctrl);\n        }\n        if (pkt.ctrl.id) {\n          this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n        }\n        setTimeout(_ => {\n          if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n            const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n            if (topic) {\n              topic._resetSub();\n              if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n                topic._gone();\n              }\n            }\n          } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n            if (pkt.ctrl.params.what == 'data') {\n              const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n              if (topic) {\n                topic._allMessagesReceived(pkt.ctrl.params.count);\n              }\n            } else if (pkt.ctrl.params.what == 'sub') {\n              const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n              if (topic) {\n                topic._processMetaSubs([]);\n              }\n            }\n          }\n        }, 0);\n      } else {\n        setTimeout(_ => {\n          if (pkt.meta) {\n            const topic = this.#cacheGet('topic', pkt.meta.topic);\n            if (topic) {\n              topic._routeMeta(pkt.meta);\n            }\n            if (pkt.meta.id) {\n              this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n            }\n            if (this.onMetaMessage) {\n              this.onMetaMessage(pkt.meta);\n            }\n          } else if (pkt.data) {\n            const topic = this.#cacheGet('topic', pkt.data.topic);\n            if (topic) {\n              topic._routeData(pkt.data);\n            }\n            if (this.onDataMessage) {\n              this.onDataMessage(pkt.data);\n            }\n          } else if (pkt.pres) {\n            const topic = this.#cacheGet('topic', pkt.pres.topic);\n            if (topic) {\n              topic._routePres(pkt.pres);\n            }\n            if (this.onPresMessage) {\n              this.onPresMessage(pkt.pres);\n            }\n          } else if (pkt.info) {\n            const topic = this.#cacheGet('topic', pkt.info.topic);\n            if (topic) {\n              topic._routeInfo(pkt.info);\n            }\n            if (this.onInfoMessage) {\n              this.onInfoMessage(pkt.info);\n            }\n          } else {\n            this.logger(\"ERROR: Unknown packet received.\");\n          }\n        }, 0);\n      }\n    }\n  }\n  #connectionOpen() {\n    if (!this._expirePromises) {\n      this._expirePromises = setInterval(_ => {\n        const err = new _comm_error_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](\"timeout\", 504);\n        const expires = new Date(new Date().getTime() - _config_js__WEBPACK_IMPORTED_MODULE_1__.EXPIRE_PROMISES_TIMEOUT);\n        for (let id in this._pendingPromises) {\n          let callbacks = this._pendingPromises[id];\n          if (callbacks && callbacks.ts < expires) {\n            this.logger(\"Promise expired\", id);\n            delete this._pendingPromises[id];\n            if (callbacks.reject) {\n              callbacks.reject(err);\n            }\n          }\n        }\n      }, _config_js__WEBPACK_IMPORTED_MODULE_1__.EXPIRE_PROMISES_PERIOD);\n    }\n    this.hello();\n  }\n  #disconnected(err, code) {\n    this._inPacketCount = 0;\n    this._serverInfo = null;\n    this._authenticated = false;\n    if (this._expirePromises) {\n      clearInterval(this._expirePromises);\n      this._expirePromises = null;\n    }\n    this.#cacheMap('topic', (topic, key) => {\n      topic._resetSub();\n    });\n    for (let key in this._pendingPromises) {\n      const callbacks = this._pendingPromises[key];\n      if (callbacks && callbacks.reject) {\n        callbacks.reject(err);\n      }\n    }\n    this._pendingPromises = {};\n    if (this.onDisconnect) {\n      this.onDisconnect(err);\n    }\n  }\n  #getUserAgent() {\n    return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + _config_js__WEBPACK_IMPORTED_MODULE_1__.LIBRARY;\n  }\n  #initPacket(type, topic) {\n    switch (type) {\n      case 'hi':\n        return {\n          'hi': {\n            'id': this.getNextUniqueId(),\n            'ver': _config_js__WEBPACK_IMPORTED_MODULE_1__.VERSION,\n            'ua': this.#getUserAgent(),\n            'dev': this._deviceToken,\n            'lang': this._humanLanguage,\n            'platf': this._platform\n          }\n        };\n      case 'acc':\n        return {\n          'acc': {\n            'id': this.getNextUniqueId(),\n            'user': null,\n            'scheme': null,\n            'secret': null,\n            'tmpscheme': null,\n            'tmpsecret': null,\n            'login': false,\n            'tags': null,\n            'desc': {},\n            'cred': {}\n          }\n        };\n      case 'login':\n        return {\n          'login': {\n            'id': this.getNextUniqueId(),\n            'scheme': null,\n            'secret': null\n          }\n        };\n      case 'sub':\n        return {\n          'sub': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'set': {},\n            'get': {}\n          }\n        };\n      case 'leave':\n        return {\n          'leave': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'unsub': false\n          }\n        };\n      case 'pub':\n        return {\n          'pub': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'noecho': false,\n            'head': null,\n            'content': {}\n          }\n        };\n      case 'get':\n        return {\n          'get': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'what': null,\n            'desc': {},\n            'sub': {},\n            'data': {}\n          }\n        };\n      case 'set':\n        return {\n          'set': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'desc': {},\n            'sub': {},\n            'tags': [],\n            'aux': {}\n          }\n        };\n      case 'del':\n        return {\n          'del': {\n            'id': this.getNextUniqueId(),\n            'topic': topic,\n            'what': null,\n            'delseq': null,\n            'user': null,\n            'hard': false\n          }\n        };\n      case 'note':\n        return {\n          'note': {\n            'topic': topic,\n            'what': null,\n            'seq': undefined\n          }\n        };\n      default:\n        throw new Error(`Unknown packet type requested: ${type}`);\n    }\n  }\n  #cachePut(type, name, obj) {\n    this._cache[type + ':' + name] = obj;\n  }\n  #cacheGet(type, name) {\n    return this._cache[type + ':' + name];\n  }\n  #cacheDel(type, name) {\n    delete this._cache[type + ':' + name];\n  }\n  #cacheMap(type, func, context) {\n    const key = type ? type + ':' : undefined;\n    for (let idx in this._cache) {\n      if (!key || idx.indexOf(key) == 0) {\n        if (func.call(context, this._cache[idx], idx)) {\n          break;\n        }\n      }\n    }\n  }\n  #attachCacheToTopic(topic) {\n    topic._tinode = this;\n    topic._cacheGetUser = uid => {\n      const pub = this.#cacheGet('user', uid);\n      if (pub) {\n        return {\n          user: uid,\n          public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, pub)\n        };\n      }\n      return undefined;\n    };\n    topic._cachePutUser = (uid, user) => {\n      this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, user.public));\n    };\n    topic._cacheDelUser = uid => {\n      this.#cacheDel('user', uid);\n    };\n    topic._cachePutSelf = _ => {\n      this.#cachePut('topic', topic.name, topic);\n    };\n    topic._cacheDelSelf = _ => {\n      this.#cacheDel('topic', topic.name);\n    };\n  }\n  #loginSuccessful(ctrl) {\n    if (!ctrl.params || !ctrl.params.user) {\n      return ctrl;\n    }\n    this._myUID = ctrl.params.user;\n    this._authenticated = ctrl && ctrl.code >= 200 && ctrl.code < 300;\n    if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n      this._authToken = {\n        token: ctrl.params.token,\n        expires: ctrl.params.expires\n      };\n    } else {\n      this._authToken = null;\n    }\n    if (this.onLogin) {\n      this.onLogin(ctrl.code, ctrl.text);\n    }\n    return ctrl;\n  }\n  static credential(meth, val, params, resp) {\n    if (typeof meth == 'object') {\n      ({\n        val,\n        params,\n        resp,\n        meth\n      } = meth);\n    }\n    if (meth && (val || resp)) {\n      return [{\n        'meth': meth,\n        'val': val,\n        'resp': resp,\n        'params': params\n      }];\n    }\n    return null;\n  }\n  static topicType(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].topicType(name);\n  }\n  static isMeTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isMeTopicName(name);\n  }\n  static isSelfTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isSelfTopicName(name);\n  }\n  static isGroupTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isGroupTopicName(name);\n  }\n  static isP2PTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isP2PTopicName(name);\n  }\n  static isCommTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isCommTopicName(name);\n  }\n  static isNewGroupTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isNewGroupTopicName(name);\n  }\n  static isChannelTopicName(name) {\n    return _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isChannelTopicName(name);\n  }\n  static getVersion() {\n    return _config_js__WEBPACK_IMPORTED_MODULE_1__.VERSION;\n  }\n  static setNetworkProviders(wsProvider, xhrProvider) {\n    WebSocketProvider = wsProvider;\n    XHRProvider = xhrProvider;\n    _connection_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNetworkProviders(WebSocketProvider, XHRProvider);\n    _large_file_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setNetworkProvider(XHRProvider);\n  }\n  static setDatabaseProvider(idbProvider) {\n    IndexedDBProvider = idbProvider;\n    _db_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setDatabaseProvider(IndexedDBProvider);\n  }\n  static getLibrary() {\n    return _config_js__WEBPACK_IMPORTED_MODULE_1__.LIBRARY;\n  }\n  static isNullValue(str) {\n    return str === _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR;\n  }\n  static isServerAssignedSeq(seq) {\n    return seq > 0 && seq < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID;\n  }\n  static parseTinodeUrl(tinodeUrl) {\n    if (!tinodeUrl || typeof tinodeUrl != 'string') {\n      return null;\n    }\n    if (!tinodeUrl.startsWith('tinode:')) {\n      return tinodeUrl;\n    }\n    const parts = tinodeUrl.substring(7).split(\"/\");\n    if (parts.length < 2 || 'id' !== parts[parts.length - 2]) {\n      return tinodeUrl;\n    }\n    return parts[parts.length - 1];\n  }\n  static isValidTagValue(tag) {\n    const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n    return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n  }\n  static tagSplit(tag) {\n    if (!tag) {\n      return null;\n    }\n    tag = tag.trim();\n    const splitAt = tag.indexOf(':');\n    if (splitAt <= 0) {\n      return null;\n    }\n    const value = tag.substring(splitAt + 1);\n    if (!value) {\n      return null;\n    }\n    return {\n      prefix: tag.substring(0, splitAt),\n      value: value\n    };\n  }\n  static setUniqueTag(tags, uniqueTag) {\n    if (!tags || tags.length == 0) {\n      return [uniqueTag];\n    }\n    const parts = Tinode.tagSplit(uniqueTag);\n    if (!parts) {\n      return tags;\n    }\n    tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n    tags.push(uniqueTag);\n    return tags;\n  }\n  static clearTagPrefix(tags, prefix) {\n    if (!tags || tags.length == 0) {\n      return [];\n    }\n    return tags.filter(tag => tag && !tag.startsWith(prefix));\n  }\n  static tagByPrefix(tags, prefix) {\n    if (!tags) {\n      return undefined;\n    }\n    return tags.find(tag => tag && tag.startsWith(prefix));\n  }\n  getNextUniqueId() {\n    return this._messageId != 0 ? '' + this._messageId++ : undefined;\n  }\n  connect(host_) {\n    return this._connection.connect(host_);\n  }\n  reconnect(force) {\n    this._connection.reconnect(force);\n  }\n  disconnect() {\n    this._connection.disconnect();\n  }\n  clearStorage() {\n    if (this._db.isReady()) {\n      return this._db.deleteDatabase();\n    }\n    return Promise.resolve();\n  }\n  initStorage() {\n    if (!this._db.isReady()) {\n      return this._db.initDatabase();\n    }\n    return Promise.resolve();\n  }\n  networkProbe() {\n    this._connection.probe();\n  }\n  isConnected() {\n    return this._connection.isConnected();\n  }\n  isAuthenticated() {\n    return this._authenticated;\n  }\n  authorizeURL(url) {\n    if (typeof url != 'string') {\n      return url;\n    }\n    if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(url)) {\n      const base = 'scheme://host/';\n      const parsed = new URL(url, base);\n      if (this._apiKey) {\n        parsed.searchParams.append('apikey', this._apiKey);\n      }\n      if (this._authToken && this._authToken.token) {\n        parsed.searchParams.append('auth', 'token');\n        parsed.searchParams.append('secret', this._authToken.token);\n      }\n      url = parsed.toString().substring(base.length - 1);\n    }\n    return url;\n  }\n  account(uid, scheme, secret, login, params) {\n    const pkt = this.#initPacket('acc');\n    pkt.acc.user = uid;\n    pkt.acc.scheme = scheme;\n    pkt.acc.secret = secret;\n    pkt.acc.login = login;\n    if (params) {\n      pkt.acc.desc.defacs = params.defacs;\n      pkt.acc.desc.public = params.public;\n      pkt.acc.desc.private = params.private;\n      pkt.acc.desc.trusted = params.trusted;\n      pkt.acc.tags = params.tags;\n      pkt.acc.cred = params.cred;\n      pkt.acc.tmpscheme = params.scheme;\n      pkt.acc.tmpsecret = params.secret;\n      if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n        pkt.extra = {\n          attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref))\n        };\n      }\n    }\n    return this.#send(pkt, pkt.acc.id);\n  }\n  createAccount(scheme, secret, login, params) {\n    let promise = this.account(_config_js__WEBPACK_IMPORTED_MODULE_1__.USER_NEW, scheme, secret, login, params);\n    if (login) {\n      promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n    }\n    return promise;\n  }\n  createAccountBasic(username, password, params) {\n    username = username || '';\n    password = password || '';\n    return this.createAccount('basic', b64EncodeUnicode(username + ':' + password), true, params);\n  }\n  updateAccountBasic(uid, username, password, params) {\n    username = username || '';\n    password = password || '';\n    return this.account(uid, 'basic', b64EncodeUnicode(username + ':' + password), false, params);\n  }\n  hello() {\n    const pkt = this.#initPacket('hi');\n    return this.#send(pkt, pkt.hi.id).then(ctrl => {\n      this._connection.backoffReset();\n      if (ctrl.params) {\n        this._serverInfo = ctrl.params;\n      }\n      if (this.onConnect) {\n        this.onConnect();\n      }\n      return ctrl;\n    }).catch(err => {\n      this._connection.reconnect(true);\n      if (this.onDisconnect) {\n        this.onDisconnect(err);\n      }\n    });\n  }\n  setDeviceToken(dt) {\n    let sent = false;\n    dt = dt || null;\n    if (dt != this._deviceToken) {\n      this._deviceToken = dt;\n      if (this.isConnected() && this.isAuthenticated()) {\n        this.#send({\n          'hi': {\n            'dev': dt || Tinode.DEL_CHAR\n          }\n        });\n        sent = true;\n      }\n    }\n    return sent;\n  }\n  login(scheme, secret, cred) {\n    const pkt = this.#initPacket('login');\n    pkt.login.scheme = scheme;\n    pkt.login.secret = secret;\n    pkt.login.cred = cred;\n    return this.#send(pkt, pkt.login.id).then(ctrl => this.#loginSuccessful(ctrl));\n  }\n  loginBasic(uname, password, cred) {\n    return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred).then(ctrl => {\n      this._login = uname;\n      return ctrl;\n    });\n  }\n  loginToken(token, cred) {\n    return this.login('token', token, cred);\n  }\n  requestResetAuthSecret(scheme, method, value) {\n    return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n  }\n  getAuthToken() {\n    if (this._authToken && this._authToken.expires.getTime() > Date.now()) {\n      return this._authToken;\n    } else {\n      this._authToken = null;\n    }\n    return null;\n  }\n  setAuthToken(token) {\n    this._authToken = token;\n  }\n  subscribe(topicName, getParams, setParams) {\n    const pkt = this.#initPacket('sub', topicName);\n    if (!topicName) {\n      topicName = _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_NEW;\n    }\n    pkt.sub.get = getParams;\n    if (setParams) {\n      if (setParams.sub) {\n        pkt.sub.set.sub = setParams.sub;\n      }\n      if (setParams.desc) {\n        const desc = setParams.desc;\n        if (Tinode.isNewGroupTopicName(topicName)) {\n          pkt.sub.set.desc = desc;\n        } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n          pkt.sub.set.desc = {\n            defacs: desc.defacs\n          };\n        }\n      }\n      if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n        pkt.extra = {\n          attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref))\n        };\n      }\n      if (setParams.tags) {\n        pkt.sub.set.tags = setParams.tags;\n      }\n      if (setParams.aux) {\n        pkt.sub.set.aux = setParams.aux;\n      }\n    }\n    return this.#send(pkt, pkt.sub.id);\n  }\n  leave(topic, unsub) {\n    const pkt = this.#initPacket('leave', topic);\n    pkt.leave.unsub = unsub;\n    return this.#send(pkt, pkt.leave.id);\n  }\n  createMessage(topic, content, noEcho) {\n    const pkt = this.#initPacket('pub', topic);\n    let dft = typeof content == 'string' ? _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().parse(content) : content;\n    if (dft && !_drafty_js__WEBPACK_IMPORTED_MODULE_5___default().isPlainText(dft)) {\n      pkt.pub.head = {\n        mime: _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().getContentType()\n      };\n      content = dft;\n    }\n    pkt.pub.noecho = noEcho;\n    pkt.pub.content = content;\n    return pkt.pub;\n  }\n  publish(topicName, content, noEcho) {\n    return this.publishMessage(this.createMessage(topicName, content, noEcho));\n  }\n  publishMessage(pub, attachments) {\n    pub = Object.assign({}, pub);\n    pub.seq = undefined;\n    pub.from = undefined;\n    pub.ts = undefined;\n    const msg = {\n      pub: pub\n    };\n    if (attachments) {\n      msg.extra = {\n        attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref))\n      };\n    }\n    return this.#send(msg, pub.id);\n  }\n  oobNotification(data) {\n    this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n    switch (data.what) {\n      case 'msg':\n        if (!data.seq || data.seq < 1 || !data.topic) {\n          break;\n        }\n        if (!this.isConnected()) {\n          break;\n        }\n        const topic = this.#cacheGet('topic', data.topic);\n        if (!topic) {\n          break;\n        }\n        if (topic.isSubscribed()) {\n          break;\n        }\n        if (topic.maxMsgSeq() < data.seq) {\n          if (topic.isChannelType()) {\n            topic._updateReceived(data.seq, 'fake-uid');\n          }\n          if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n            this.getMeta(data.xfrom, new _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]().withDesc().build()).catch(err => {\n              this.logger(\"Failed to get the name of a new sender\", err);\n            });\n          }\n          topic.subscribe(null).then(_ => {\n            return topic.getMeta(new _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](topic).withLaterData(24).withLaterDel(24).build());\n          }).then(_ => {\n            topic.leaveDelayed(false, 1000);\n          }).catch(err => {\n            this.logger(\"On push data fetch failed\", err);\n          }).finally(_ => {\n            this.getMeTopic()._refreshContact('msg', topic);\n          });\n        }\n        break;\n      case 'read':\n        this.getMeTopic()._routePres({\n          what: 'read',\n          seq: data.seq\n        });\n        break;\n      case 'sub':\n        if (!this.isMe(data.xfrom)) {\n          break;\n        }\n        const mode = {\n          given: data.modeGiven,\n          want: data.modeWant\n        };\n        const acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](mode);\n        const pres = !acs.mode || acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]._NONE ? {\n          what: 'gone',\n          src: data.topic\n        } : {\n          what: 'acs',\n          src: data.topic,\n          dacs: mode\n        };\n        this.getMeTopic()._routePres(pres);\n        break;\n      default:\n        this.logger(\"Unknown push type ignored\", data.what);\n    }\n  }\n  getMeta(topic, params) {\n    const pkt = this.#initPacket('get', topic);\n    pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)(pkt.get, params);\n    return this.#send(pkt, pkt.get.id);\n  }\n  setMeta(topic, params) {\n    const pkt = this.#initPacket('set', topic);\n    const what = [];\n    if (params) {\n      ['desc', 'sub', 'tags', 'cred', 'aux'].forEach(key => {\n        if (params.hasOwnProperty(key)) {\n          what.push(key);\n          pkt.set[key] = params[key];\n        }\n      });\n      if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n        pkt.extra = {\n          attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref))\n        };\n      }\n    }\n    if (what.length == 0) {\n      return Promise.reject(new Error(\"Invalid {set} parameters\"));\n    }\n    return this.#send(pkt, pkt.set.id);\n  }\n  delMessages(topic, ranges, hard) {\n    const pkt = this.#initPacket('del', topic);\n    pkt.del.what = 'msg';\n    pkt.del.delseq = ranges;\n    pkt.del.hard = hard;\n    return this.#send(pkt, pkt.del.id);\n  }\n  delTopic(topicName, hard) {\n    const pkt = this.#initPacket('del', topicName);\n    pkt.del.what = 'topic';\n    pkt.del.hard = hard;\n    return this.#send(pkt, pkt.del.id);\n  }\n  delSubscription(topicName, user) {\n    const pkt = this.#initPacket('del', topicName);\n    pkt.del.what = 'sub';\n    pkt.del.user = user;\n    return this.#send(pkt, pkt.del.id);\n  }\n  delCredential(method, value) {\n    const pkt = this.#initPacket('del', _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME);\n    pkt.del.what = 'cred';\n    pkt.del.cred = {\n      meth: method,\n      val: value\n    };\n    return this.#send(pkt, pkt.del.id);\n  }\n  delCurrentUser(hard) {\n    const pkt = this.#initPacket('del', null);\n    pkt.del.what = 'user';\n    pkt.del.hard = hard;\n    return this.#send(pkt, pkt.del.id).then(_ => {\n      this._myUID = null;\n    });\n  }\n  note(topicName, what, seq) {\n    if (seq <= 0 || seq >= _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID) {\n      throw new Error(`Invalid message id ${seq}`);\n    }\n    const pkt = this.#initPacket('note', topicName);\n    pkt.note.what = what;\n    pkt.note.seq = seq;\n    this.#send(pkt);\n  }\n  noteKeyPress(topicName, type) {\n    const pkt = this.#initPacket('note', topicName);\n    pkt.note.what = type || 'kp';\n    this.#send(pkt);\n  }\n  videoCall(topicName, seq, evt, payload) {\n    const pkt = this.#initPacket('note', topicName);\n    pkt.note.seq = seq;\n    pkt.note.what = 'call';\n    pkt.note.event = evt;\n    pkt.note.payload = payload;\n    this.#send(pkt, pkt.note.id);\n  }\n  getTopic(topicName) {\n    let topic = this.#cacheGet('topic', topicName);\n    if (!topic && topicName) {\n      if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {\n        topic = new _me_topic_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n      } else if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) {\n        topic = new _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]();\n      } else {\n        topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"](topicName);\n      }\n      this.#attachCacheToTopic(topic);\n      topic._cachePutSelf();\n    }\n    return topic;\n  }\n  cacheGetTopic(topicName) {\n    return this.#cacheGet('topic', topicName);\n  }\n  cacheRemTopic(topicName) {\n    this.#cacheDel('topic', topicName);\n  }\n  mapTopics(func, context) {\n    this.#cacheMap('topic', func, context);\n  }\n  isTopicCached(topicName) {\n    return !!this.#cacheGet('topic', topicName);\n  }\n  newGroupTopicName(isChan) {\n    return (isChan ? _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_NEW_CHAN : _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_NEW) + this.getNextUniqueId();\n  }\n  getMeTopic() {\n    return this.getTopic(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME);\n  }\n  getFndTopic() {\n    return this.getTopic(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND);\n  }\n  getLargeFileHelper() {\n    return new _large_file_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this, _config_js__WEBPACK_IMPORTED_MODULE_1__.PROTOCOL_VERSION);\n  }\n  getCurrentUserID() {\n    return this._myUID;\n  }\n  isMe(uid) {\n    return this._myUID === uid;\n  }\n  getCurrentLogin() {\n    return this._login;\n  }\n  getServerInfo() {\n    return this._serverInfo;\n  }\n  report(action, target) {\n    return this.publish(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_SYS, _drafty_js__WEBPACK_IMPORTED_MODULE_5___default().attachJSON(null, {\n      'action': action,\n      'target': target\n    }));\n  }\n  getServerParam(name, defaultValue) {\n    return this._serverInfo && this._serverInfo[name] || defaultValue;\n  }\n  enableLogging(enabled, trimLongStrings) {\n    this._loggingEnabled = enabled;\n    this._trimLongStrings = enabled && trimLongStrings;\n  }\n  setHumanLanguage(hl) {\n    if (hl) {\n      this._humanLanguage = hl;\n    }\n  }\n  isTopicOnline(name) {\n    const topic = this.#cacheGet('topic', name);\n    return topic && topic.online;\n  }\n  getTopicAccessMode(name) {\n    const topic = this.#cacheGet('topic', name);\n    return topic ? topic.acs : null;\n  }\n  wantAkn(status) {\n    if (status) {\n      this._messageId = Math.floor(Math.random() * 0xFFFFFF + 0xFFFFFF);\n    } else {\n      this._messageId = 0;\n    }\n  }\n  onWebsocketOpen = undefined;\n  onConnect = undefined;\n  onDisconnect = undefined;\n  onLogin = undefined;\n  onCtrlMessage = undefined;\n  onDataMessage = undefined;\n  onPresMessage = undefined;\n  onMessage = undefined;\n  onRawMessage = undefined;\n  onNetworkProbe = undefined;\n  onAutoreconnectIteration = undefined;\n}\n;\nTinode.MESSAGE_STATUS_NONE = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_TO_ME;\nTinode.DEL_CHAR = _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR;\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MIN_TAG_LENGTH = 'minTagLength';\nTinode.MAX_TAG_LENGTH = 'maxTagLength';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\nTinode.MSG_DELETE_AGE = 'msgDelAge';\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:///id/';\nTinode.URI_TOPIC_ALIAS_PREFIX = 'tinode:///alias/';\nTinode.TAG_ALIAS = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_ALIAS;\nTinode.TAG_EMAIL = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_EMAIL;\nTinode.TAG_PHONE = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_PHONE;\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=tinode.dev.js.map"
  },
  {
    "path": "umd/tinode.prod.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.tinode=t():e.tinode=t()}(this,function(){return function(){\"use strict\";var e={767:function(e){const t=\"text/x-drafty\",s=\"text/x-drafty-fr\",i=[\"act\",\"height\",\"duration\",\"fn\",\"incoming\",\"mime\",\"name\",\"premime\",\"preref\",\"preview\",\"ref\",\"size\",\"state\",\"url\",\"val\",\"width\"],n=new Intl.Segmenter,r=[{name:\"ST\",start:/(?:^|[\\W_])(\\*)[^\\s*]/,end:/[^\\s*](\\*)(?=$|[\\W_])/},{name:\"EM\",start:/(?:^|\\W)(_)[^\\s_]/,end:/[^\\s_](_)(?=$|\\W)/},{name:\"DL\",start:/(?:^|[\\W_])(~)[^\\s~]/,end:/[^\\s~](~)(?=$|[\\W_])/},{name:\"CO\",start:/(?:^|\\W)(`)[^`]/,end:/[^`](`)(?=$|\\W)/}],a=[\"QQ\"],o=[{name:\"LN\",dataName:\"url\",pack:function(e){return/^[a-z]+:\\/\\//i.test(e)||(e=\"http://\"+e),{url:e}},re:/(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/gi},{name:\"MN\",dataName:\"val\",pack:function(e){return{val:e.slice(1)}},re:/\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/gu},{name:\"HT\",dataName:\"val\",pack:function(e){return{val:e.slice(1)}},re:/\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/gu}],h={AU:{html_tag:\"audio\",md_tag:void 0,isVoid:!1},BN:{html_tag:\"button\",md_tag:void 0,isVoid:!1},BR:{html_tag:\"br\",md_tag:\"\\n\",isVoid:!0},CO:{html_tag:\"tt\",md_tag:\"`\",isVoid:!1},DL:{html_tag:\"del\",md_tag:\"~\",isVoid:!1},EM:{html_tag:\"i\",md_tag:\"_\",isVoid:!1},EX:{html_tag:\"\",md_tag:void 0,isVoid:!0},FM:{html_tag:\"div\",md_tag:void 0,isVoid:!1},HD:{html_tag:\"\",md_tag:void 0,isVoid:!1},HL:{html_tag:\"span\",md_tag:void 0,isVoid:!1},HT:{html_tag:\"a\",md_tag:void 0,isVoid:!1},IM:{html_tag:\"img\",md_tag:void 0,isVoid:!1},LN:{html_tag:\"a\",md_tag:void 0,isVoid:!1},MN:{html_tag:\"a\",md_tag:void 0,isVoid:!1},RW:{html_tag:\"div\",md_tag:void 0,isVoid:!1},QQ:{html_tag:\"div\",md_tag:void 0,isVoid:!1},ST:{html_tag:\"b\",md_tag:\"*\",isVoid:!1},TC:{html_tag:\"div\",md_tag:void 0,isVoid:!1},VC:{html_tag:\"div\",md_tag:void 0,isVoid:!1},VD:{html_tag:\"video\",md_tag:void 0,isVoid:!1}};function c(e,t,s){if(!e)return null;try{const s=atob(e),i=s.length,n=new ArrayBuffer(i),r=new Uint8Array(n);for(let e=0;e<i;e++)r[e]=s.charCodeAt(e);return URL.createObjectURL(new Blob([n],{type:t}))}catch(e){s&&s(\"Drafty: failed to convert object.\",e.message)}return null}function l(e,t){return e?\"data:\"+(t=t||\"image/jpeg\")+\";base64,\"+e:null}const d={ST:{open:e=>\"<b>\",close:e=>\"</b>\"},EM:{open:e=>\"<i>\",close:e=>\"</i>\"},DL:{open:e=>\"<del>\",close:e=>\"</del>\"},CO:{open:e=>\"<tt>\",close:e=>\"</tt>\"},BR:{open:e=>\"<br/>\",close:e=>\"\"},HD:{open:e=>\"\",close:e=>\"\"},HL:{open:e=>'<span style=\"color:teal\">',close:e=>\"</span>\"},LN:{open:e=>'<a href=\"'+e.url+'\">',close:e=>\"</a>\",props:e=>e?{href:e.url,target:\"_blank\"}:null},MN:{open:e=>'<a href=\"#'+e.val+'\">',close:e=>\"</a>\",props:e=>e?{id:e.val}:null},HT:{open:e=>'<a href=\"#'+e.val+'\">',close:e=>\"</a>\",props:e=>e?{id:e.val}:null},BN:{open:e=>\"<button>\",close:e=>\"</button>\",props:e=>e?{\"data-act\":e.act,\"data-val\":e.val,\"data-name\":e.name,\"data-ref\":e.ref}:null},AU:{open:e=>'<audio controls src=\"'+(e.ref||c(e.val,e.mime,u.logger))+'\">',close:e=>\"</audio>\",props:e=>e?{src:e.ref||c(e.val,e.mime,u.logger),\"data-preload\":e.ref?\"metadata\":\"auto\",\"data-duration\":e.duration,\"data-name\":e.name,\"data-size\":e.val?.75*e.val.length|0:0|e.size,\"data-mime\":e.mime}:null},IM:{open:e=>{const t=l(e._tempPreview,e.mime),s=c(e.val,e.mime,u.logger),i=e.ref||s;return(e.name?'<a href=\"'+i+'\" download=\"'+e.name+'\">':\"\")+'<img src=\"'+(t||s)+'\"'+(e.width?' width=\"'+e.width+'\"':\"\")+(e.height?' height=\"'+e.height+'\"':\"\")+' border=\"0\" />'},close:e=>e.name?\"</a>\":\"\",props:e=>e?{src:l(e._tempPreview,e.mime)||e.ref||c(e.val,e.mime,u.logger),title:e.name,alt:e.name,\"data-width\":e.width,\"data-height\":e.height,\"data-name\":e.name,\"data-size\":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,\"data-mime\":e.mime}:null},FM:{open:e=>\"<div>\",close:e=>\"</div>\"},RW:{open:e=>\"<div>\",close:e=>\"</div>\"},QQ:{open:e=>\"<div>\",close:e=>\"</div>\",props:e=>e?{}:null},TC:{open:e=>\"<div>\",close:e=>\"</div>\",props:e=>e?{\"data-fn\":e.fn,\"data-title\":e.title}:{}},VC:{open:e=>\"<div>\",close:e=>\"</div>\",props:e=>e?{\"data-duration\":e.duration,\"data-state\":e.state}:{}},VD:{open:e=>{const t=l(e._tempPreview,e.mime),s=e.ref||c(e.preview,e.premime||\"image/jpeg\",u.logger);return'<img src=\"'+(t||s)+'\"'+(e.width?' width=\"'+e.width+'\"':\"\")+(e.height?' height=\"'+e.height+'\"':\"\")+' border=\"0\" />'},close:e=>\"\",props:e=>{if(!e)return null;const t=e.preref||c(e.preview,e.premime||\"image/jpeg\",u.logger);return{src:t,\"data-src\":e.ref||c(e.val,e.mime,u.logger),\"data-width\":e.width,\"data-height\":e.height,\"data-preload\":e.ref?\"metadata\":\"auto\",\"data-preview\":t,\"data-duration\":0|e.duration,\"data-name\":e.name,\"data-size\":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,\"data-mime\":e.mime}}}},u=function(){this.txt=\"\",this.fmt=[],this.ent=[]};function p(e,t,s,i){const n=[];if(0==i.length)return[];for(let s in i){const r=i[s];r.at>t&&n.push({txt:e.slice(t,r.at)});const a={tp:r.tp},o=p(e,r.at+1,r.end,r.children);o.length>0?a.children=o:a.txt=r.txt,n.push(a),t=r.end+1}return t<s&&n.push({txt:e.slice(t,s)}),n}function g(e){if(0==e.length)return[];const t=[e[0]];let s=e[0];for(let i=1;i<e.length;i++)e[i].at>s.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=g(t[e].children);return t}function m(e){if(!e)return null;e=\"string\"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||\"\",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const n=[],r=[];s.forEach(e=>{if(!e||\"object\"!=typeof e)return;if(![\"undefined\",\"number\"].includes(typeof e.at))return;if(![\"undefined\",\"number\"].includes(typeof e.len))return;let s=0|e.at,a=0|e.len;if(a<0)return;let o=e.key||0;i.length>0&&(\"number\"!=typeof o||o<0||o>=i.length)||(s<=-1?r.push({start:-1,end:0,key:o}):s+a>D(t).length||(e.tp?n.push({type:e.tp,start:s,end:s+a}):i.length>0&&\"object\"==typeof i[o]&&n.push({start:s,end:s+a,key:o})))}),n.sort((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:a.indexOf(t.type)-a.indexOf(e.type))}),r.length>0&&n.push(...r),n.forEach(e=>{i.length>0&&!e.type&&i[e.key]&&\"object\"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type=\"HD\")});const o=D(t);let h=_({},o,0,o.length,n);return h=w(h,function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e}),h}function f(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function _(e,t,s,i,n){if(!n||0==n.length)return s<i&&f(e,{text:t.slice(s,i).map(e=>e.segment).join(\"\")}),e;for(let i=0;i<n.length;i++){const r=n[i];if(r.start<0&&\"EX\"==r.type){f(e,{type:r.type,data:r.data,key:r.key,att:!0});continue}s<r.start&&(f(e,{text:t.slice(s,r.start).map(e=>e.segment).join(\"\")}),s=r.start);const a=[];for(;i<n.length-1;){const e=n[i+1];if(e.start<0)break;if(!(e.start<r.end))break;if(e.end<=r.end){const t=h[e.tp]||{};(e.start<e.end||t.isVoid)&&a.push(e)}i++}f(e,_({type:r.type,data:r.data,key:r.key},t,s,r.end,a)),s=r.end}return s<i&&f(e,{text:t.slice(s,i).map(e=>e.segment).join(\"\")}),e}function b(e,t,s){if(!t)return e;e.txt=e.txt||\"\";const i=D(e.txt).length;if(t.text?e.txt+=t.text:Array.isArray(t.children)&&t.children.forEach(t=>{b(e,t,s)}),t.type){const n=D(e.txt).length-i;if(e.fmt=e.fmt||[],Object.keys(t.data||{}).length>0){e.ent=e.ent||[];const r=void 0===s[t.key]?e.ent.length:s[t.key];s[t.key]=r,e.ent[r]={tp:t.type,data:t.data},t.att?e.fmt.push({at:-1,len:0,key:r}):e.fmt.push({at:i,len:n,key:r})}else e.fmt.push({tp:t.type,at:i,len:n})}return e}function w(e,t,s){if(!e)return null;let i=t.call(s,e);if(!i||!i.children)return i;const n=[];for(let e in i.children){let r=i.children[e];r&&(r=w(r,t,s),r&&n.push(r))}return 0==n.length?i.children=null:i.children=n,i}function v(e,t,s,i,n){if(!e)return null;i&&e.type&&i.push(e.type);let r=[];for(let s in e.children){const a=v(e.children[s],t,s,i,n);a&&r.push(a)}return 0==r.length&&(r=e.text?[e.text]:null),i&&e.type&&i.pop(),t.call(n,e.type,e.data,r,s,i)}function y(e,t,s){return e?(s&&(t-=s.length),w(e,function(e){if(t<=-1)return null;if(e.att)return e;if(0==t)e.text=s,t=-1;else if(e.text){const i=D(e.text);i.length>t?(e.text=i.slice(0,t).map(e=>e.segment).join(\"\")+s,t=-1):t-=i.length}return e})):null}function T(e,t){return w(e,e=>{const s=S(e.data,!0,t?t(e):null);return s?e.data=s:delete e.data,e})}function M(e){if(\"BR\"==e.type)e=null;else if(e.text)e.type||(e.text=e.text.trimStart(),e.text||(e=null));else if(!e.type&&e.children&&e.children.length>0){const t=M(e.children[0]);t?e.children[0]=t:(e.children.shift(),e.type||0!=e.children.length||(e=null))}return e}function x(e,t){if(!e)return null;if(e.att)e.text=\" \",delete e.att,delete e.children;else if(e.children){const s=[],i=[];for(let n in e.children){const r=e.children[n];if(r.att){if(s.length==t)continue;if(u.isFormResponseType(r.data.mime))continue;delete r.att,delete r.children,r.text=\" \",s.push(r)}else i.push(r)}e.children=i.concat(s)}return e}function P(e,t){let s=\"\",i=[];for(let n in e){const r=e[n];if(!r.txt){const e=P(r.children,s.length+t);r.txt=e.txt,i=i.concat(e.fmt)}r.tp&&i.push({at:s.length+t,len:r.txt.length,tp:r.tp}),s+=r.txt}return{txt:s,fmt:i}}function S(e,t,s){if(e&&Object.entries(e).length>0){s=s||[];const n={};if(i.forEach(i=>{if(e[i]){if(t&&!s.includes(i)&&(\"string\"==typeof e[i]||Array.isArray(e[i]))&&e[i].length>64)return;if(\"object\"==typeof e[i])return;n[i]=e[i]}}),0!=Object.entries(n).length)return n}return null}function E(e){return 0==Object.keys(e??{}).length}function A(e,t,s){const i=function(e){const t=[];let s=0,i=0;for(const{segment:n}of e){for(let e=0;e<n.length;e++)t[i+e]=s;i+=n.length,s++}return t}(t=t??n.segment(s)),r=i[e.at];return{at:r,len:(e.at+e.len<=s.length?i[e.at+e.len-1]-r:e.len)+1}}function D(e){return Array.from(n.segment(e))}u.init=function(e){if(void 0===e)e=\"\";else if(\"string\"!=typeof e)return null;return{txt:e}},u.parse=function(e){if(\"string\"!=typeof e)return null;const t=e.split(/\\r?\\n/),s=[],i={},a=[];t.forEach(e=>{let t,n,h=[];if(r.forEach(t=>{h=h.concat(function(e,t,s,i){const n=[];let r=0,a=e.slice(0);for(;a.length>0;){const o=t.exec(a);if(null==o)break;let h=o.index+o[0].lastIndexOf(o[1]);a=a.slice(h+1),h+=r,r=h+1;const c=s?s.exec(a):null;if(null==c)break;let l=c.index+c[0].indexOf(c[1]);a=a.slice(l+1),l+=r,r=l+1,n.push({txt:e.slice(h+1,l),children:[],at:h,end:l,tp:i})}return n}(e,t.start,t.end,t.name))}),0==h.length)n={txt:e};else{h.sort((e,t)=>{const s=e.at-t.at;return 0!=s?s:t.end-e.end}),h=g(h);const t=P(p(e,0,e.length,h),0);n={txt:t.txt,fmt:t.fmt}}if(t=function(e){let t,s=[];if(o.forEach(i=>{for(;null!==(t=i.re.exec(e));)s.push({offset:t.index,len:t[0].length,unique:t[0],data:i.pack(t[0]),type:i.name})}),0==s.length)return s;s.sort((e,t)=>e.offset-t.offset);let i=-1;return s=s.filter(e=>{const t=e.offset>i;return i=e.offset+e.len,t}),s}(n.txt),t.length>0){const e=[];for(let n in t){const r=t[n];let a=i[r.unique];a||(a=s.length,i[r.unique]=a,s.push({tp:r.type,data:r.data})),e.push({at:r.offset,len:r.len,key:a})}n.ent=e}a.push(n)});const h={txt:\"\"};if(a.length>0){if(h.txt=a[0].txt,h.fmt=(a[0].fmt||[]).concat(a[0].ent||[]),h.fmt.length){const e=n.segment(h.txt);for(const t of h.fmt)({at:t.at,len:t.len}=A(t,e,h.txt))}for(let e=1;e<a.length;e++){const t=a[e],s=D(h.txt).length+1;h.fmt.push({tp:\"BR\",len:1,at:s-1});let i={};h.txt+=\" \"+t.txt,t.fmt&&(i=n.segment(t.txt),h.fmt=h.fmt.concat(t.fmt.map(e=>{const{at:n,len:r}=A(e,i,t.txt);return e.at=n+s,e.len=r,e}))),t.ent&&(E(i)&&(i=n.segment(t.txt)),h.fmt=h.fmt.concat(t.ent.map(e=>{const{at:n,len:r}=A(e,i,t.txt);return e.at=n+s,e.len=r,e})))}0==h.fmt.length&&delete h.fmt,s.length>0&&(h.ent=s)}return h},u.append=function(e,t){if(!e)return t;if(!t)return e;e.txt=e.txt||\"\";const s=D(e.txt).length;return\"string\"==typeof t?e.txt+=t:t.txt&&(e.txt+=t.txt),Array.isArray(t.fmt)&&(e.fmt=e.fmt||[],Array.isArray(t.ent)&&(e.ent=e.ent||[]),t.fmt.forEach(i=>{const n={at:(0|i.at)+s,len:0|i.len};-1==i.at&&(n.at=-1,n.len=0),i.tp?n.tp=i.tp:(n.key=e.ent.length,e.ent.push(t.ent[i.key||0])),e.fmt.push(n)})),e},u.insertImage=function(e,t,s){(e=e||{txt:\" \"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:\"IM\",data:{mime:s.mime,ref:s.refurl,val:s.bits||s.preview,width:s.width,height:s.height,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.insertVideo=function(e,t,s){(e=e||{txt:\" \"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:\"VD\",data:{mime:s.mime,ref:s.refurl,val:s.bits,preref:s.preref,preview:s.preview,width:s.width,height:s.height,duration:0|s.duration,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e[0],i.data.preref=e[1],i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.insertAudio=function(e,t,s){(e=e||{txt:\" \"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:\"AU\",data:{mime:s.mime,val:s.bits,duration:0|s.duration,preview:s.preview,name:s.filename,size:0|s.size,ref:s.refurl}};return s.urlPromise&&(i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.videoCall=function(e){return{txt:\" \",fmt:[{at:0,len:1,key:0}],ent:[{tp:\"VC\",data:{aonly:e}}]}},u.updateVideoCall=function(e,t){const s=((e||{}).fmt||[])[0];if(!s)return e;let i;if(\"VC\"==s.tp)delete s.tp,s.key=0,i={tp:\"VC\"},e.ent=[i];else if(i=(e.ent||[])[0|s.key],!i||\"VC\"!=i.tp)return e;return i.data=i.data||{},Object.assign(i.data,t),e},u.quote=function(e,t,s){const i=u.append(u.appendLineBreak(u.mention(e,t)),s);return i.fmt.push({at:0,len:D(i.txt).length,tp:\"QQ\"}),i},u.mention=function(e,t){return{txt:e||\"\",fmt:[{at:0,len:D(e||\"\").length,key:0}],ent:[{tp:\"MN\",data:{val:t}}]}},u.appendLink=function(e,t){(e=e||{txt:\"\"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:e.txt.length,len:t.txt.length,key:e.ent.length}),e.txt+=t.txt;const s={tp:\"LN\",data:{url:t.url}};return e.ent.push(s),e},u.appendImage=function(e,t){return(e=e||{txt:\"\"}).txt+=\" \",u.insertImage(e,e.txt.length-1,t)},u.appendAudio=function(e,t){return(e=e||{txt:\"\"}).txt+=\" \",u.insertAudio(e,e.txt.length-1,t)},u.attachFile=function(e,t){(e=e||{txt:\"\"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:-1,len:0,key:e.ent.length});const s={tp:\"EX\",data:{mime:t.mime,val:t.data,name:t.filename,ref:t.refurl,size:0|t.size}};return t.urlPromise&&(s.data._processing=!0,t.urlPromise.then(e=>{s.data.ref=e,s.data._processing=void 0},e=>{s.data._processing=void 0})),e.ent.push(s),e},u.wrapInto=function(e,t,s,i){return\"string\"==typeof e&&(e={txt:e}),e.fmt=e.fmt||[],e.fmt.push({at:s||0,len:i||e.txt.length,tp:t}),e},u.wrapAsForm=function(e,t,s){return u.wrapInto(e,\"FM\",t,s)},u.insertButton=function(e,t,s,i,n,r,a){return\"string\"==typeof e&&(e={txt:e}),!e||!e.txt||e.txt.length<t+s||s<=0||-1==[\"url\",\"pub\"].indexOf(n)?null:\"url\"!=n||a?(a=\"\"+a,e.ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:s,key:e.ent.length}),e.ent.push({tp:\"BN\",data:{act:n,val:r,ref:a,name:i}}),e):null},u.appendButton=function(e,t,s,i,n,r){const a=(e=e||{txt:\"\"}).txt.length;return e.txt+=t,u.insertButton(e,a,t.length,s,i,n,r)},u.attachJSON=function(e,t){return(e=e||{txt:\"\"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:-1,len:0,key:e.ent.length}),e.ent.push({tp:\"EX\",data:{mime:s,val:t}}),e},u.appendLineBreak=function(e){return(e=e||{txt:\"\"}).fmt=e.fmt||[],e.fmt.push({at:D(e.txt).length,len:1,tp:\"BR\"}),e.txt+=\" \",e},u.appendTheCard=function(e,t){return(e=e||{txt:\"\"}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:D(e.txt).length,len:1,key:e.ent.length}),e.txt+=\" \",e.ent.push({tp:\"TC\",data:t}),e},u.UNSAFE_toHTML=function(e){return v(m(e),function(e,t,s){const i=d[e];let n=s?s.join(\"\"):\"\";return i&&(n=i.open(t)+n+i.close(t)),n},0)},u.format=function(e,t,s){return v(m(e),t,0,[],s)},u.shorten=function(e,t,s){let i=m(e);return i=y(i,t,\"…\"),i&&s&&(i=T(i)),b({},i,[])},u.forwardedContent=function(e){let t=m(e);return t=w(t,function(e){return\"MN\"!=e.type||e.parent&&e.parent.type?e:null}),t=M(t),b({},t,[])},u.replyContent=function(e,t){let s=m(e);return s?(s=w(s,function(e){return\"QQ\"==e.type?null:(\"MN\"==e.type?e.parent&&e.parent.type||!(e.text||\"\").startsWith(\"➦\")||(e.text=\"➦\",delete e.children,delete e.data):\"BR\"==e.type&&(e.text=\" \",delete e.type,delete e.children),e)}),s=x(s,3),s=y(s,t,\"…\"),s=T(s,e=>{switch(e.type){case\"IM\":return[\"val\"];case\"VD\":return[\"preview\"]}return null}),b({},s,[])):e},u.preview=function(e,t,s){let i=m(e);if(i=x(i,3),i=w(i,function(e){return\"MN\"==e.type?e.parent&&e.parent.type||!(e.text||\"\").startsWith(\"➦\")||(e.text=\"➦\",delete e.children):\"QQ\"==e.type?(e.text=\" \",delete e.children):\"BR\"==e.type&&(e.text=\" \",delete e.children,delete e.type),e}),i=y(i,t,\"…\"),s){const e={IM:[\"val\"],VD:[\"preview\"]};i=T(i,t=>e[t.type])}else i=T(i);return b({},i,[])},u.toPlainText=function(e){return\"string\"==typeof e?e:e.txt},u.isPlainText=function(e){return\"string\"==typeof e||!(e.fmt||e.ent)},u.toMarkdown=function(e){return v(m(e),function(e,t,s){const i=h[e];let n=s?s.join(\"\"):\"\";return i&&(i.isVoid?n=i.md_tag||\"\":i.md_tag&&(n=i.md_tag+n+i.md_tag)),n},0)},u.isValid=function(e){if(!e)return!1;const{txt:t,fmt:s,ent:i}=e;if(!t&&\"\"!==t&&!s&&!i)return!1;const n=typeof t;return!(\"string\"!=n&&\"undefined\"!=n&&null!==t||void 0!==s&&!Array.isArray(s)&&null!==s||void 0!==i&&!Array.isArray(i)&&null!==i)},u.hasAttachments=function(e){if(!Array.isArray(e.fmt))return!1;for(let t in e.fmt){const s=e.fmt[t];if(s&&s.at<0){const t=e.ent[0|s.key];return t&&\"EX\"==t.tp&&t.data}}return!1},u.attachments=function(e,t,s){if(!Array.isArray(e.fmt))return;let i=0;for(let n in e.fmt){let r=e.fmt[n];if(r&&r.at<0){const n=e.ent[0|r.key];if(n&&\"EX\"==n.tp&&n.data&&t.call(s,n.data,i++,\"EX\"))break}}},u.hasEntities=function(e){return e.ent&&e.ent.length>0},u.entities=function(e,t,s){if(e.ent&&e.ent.length>0)for(let i in e.ent)if(e.ent[i]&&t.call(s,e.ent[i].data,i,e.ent[i].tp))break},u.styles=function(e,t,s){if(e.fmt&&e.fmt.length>0)for(let i in e.fmt){const n=e.fmt[i];if(n&&t.call(s,n.tp,n.at,n.len,n.key,i))break}},u.sanitizeEntities=function(e){if(e&&e.ent&&e.ent.length>0)for(let t in e.ent){const s=e.ent[t];if(s&&s.data){const i=S(s.data);i?e.ent[t].data=i:delete e.ent[t].data}}return e},u.getDownloadUrl=function(e){let t=null;return!u.isFormResponseType(e.mime)&&e.val?t=c(e.val,e.mime,u.logger):\"string\"==typeof e.ref&&(t=e.ref),t},u.isProcessing=function(e){return!!e._processing},u.getPreviewUrl=function(e){return e.val?c(e.val,e.mime,u.logger):null},u.getEntitySize=function(e){return e.size?e.size:e.val?.75*e.val.length|0:0},u.getEntityMimeType=function(e){return e.mime||\"text/plain\"},u.tagName=function(e){return h[e]&&h[e].html_tag},u.attrValue=function(e,t){if(t&&d[e]&&d[e].props)return d[e].props(t)},u.getContentType=function(){return t},u.contentType=t,u.isFormResponseType=function(e){return e===s||\"application/json\"===e},e.exports=u}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var r=t[i]={exports:{}};return e[i](r,r.exports,s),r.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var i={};s.r(i),s.d(i,{AccessMode:function(){return n},Drafty:function(){return q()},TheCard:function(){return z},Tinode:function(){return Y}});class n{constructor(e){e&&(this.given=\"number\"==typeof e.given?e.given:n.decode(e.given),this.want=\"number\"==typeof e.want?e.want:n.decode(e.want),this.mode=e.mode?\"number\"==typeof e.mode?e.mode:n.decode(e.mode):this.given&this.want)}static#e(e,t,s){if([\"given\",\"want\",\"mode\"].includes(t=t||\"mode\"))return 0!=(e[t]&s);throw new Error(`Invalid AccessMode component '${t}'`)}static decode(e){if(!e)return null;if(\"number\"==typeof e)return e&n._BITMASK;if(\"N\"===e||\"n\"===e)return n._NONE;const t={J:n._JOIN,R:n._READ,W:n._WRITE,P:n._PRES,A:n._APPROVE,S:n._SHARE,D:n._DELETE,O:n._OWNER};let s=n._NONE;for(let i=0;i<e.length;i++){const n=t[e.charAt(i).toUpperCase()];n&&(s|=n)}return s}static encode(e){if(null===e||e===n._INVALID)return null;if(e===n._NONE)return\"N\";const t=[\"J\",\"R\",\"W\",\"P\",\"A\",\"S\",\"D\",\"O\"];let s=\"\";for(let i=0;i<t.length;i++)e&1<<i&&(s+=t[i]);return s}static update(e,t){if(!t||\"string\"!=typeof t)return e;let s=t.charAt(0);if(\"+\"==s||\"-\"==s){let i=e;const r=t.split(/([-+])/);for(let t=1;t<r.length-1;t+=2){s=r[t];const a=n.decode(r[t+1]);if(a==n._INVALID)return e;null!=a&&(\"+\"===s?i|=a:\"-\"===s&&(i&=~a))}e=i}else{const s=n.decode(t);s!=n._INVALID&&(e=s)}return e}static diff(e,t){return e=n.decode(e),t=n.decode(t),e==n._INVALID||t==n._INVALID?n._INVALID:e&~t}toString(){return'{\"mode\": \"'+n.encode(this.mode)+'\", \"given\": \"'+n.encode(this.given)+'\", \"want\": \"'+n.encode(this.want)+'\"}'}jsonHelper(){return{mode:n.encode(this.mode),given:n.encode(this.given),want:n.encode(this.want)}}setMode(e){return this.mode=n.decode(e),this}updateMode(e){return this.mode=n.update(this.mode,e),this}getMode(){return n.encode(this.mode)}setGiven(e){return this.given=n.decode(e),this}updateGiven(e){return this.given=n.update(this.given,e),this}getGiven(){return n.encode(this.given)}setWant(e){return this.want=n.decode(e),this}updateWant(e){return this.want=n.update(this.want,e),this}getWant(){return n.encode(this.want)}getMissing(){return n.encode(this.want&~this.given)}getExcessive(){return n.encode(this.given&~this.want)}updateAll(e){return e&&(this.updateGiven(e.given),this.updateWant(e.want),this.mode=this.given&this.want),this}isOwner(e){return n.#e(this,e,n._OWNER)}isPresencer(e){return n.#e(this,e,n._PRES)}isMuted(e){return!this.isPresencer(e)}isJoiner(e){return n.#e(this,e,n._JOIN)}isReader(e){return n.#e(this,e,n._READ)}isWriter(e){return n.#e(this,e,n._WRITE)}isApprover(e){return n.#e(this,e,n._APPROVE)}isAdmin(e){return this.isOwner(e)||this.isApprover(e)}isSharer(e){return this.isAdmin(e)||n.#e(this,e,n._SHARE)}isDeleter(e){return n.#e(this,e,n._DELETE)}}n._NONE=0,n._JOIN=1,n._READ=2,n._WRITE=4,n._PRES=8,n._APPROVE=16,n._SHARE=32,n._DELETE=64,n._OWNER=128,n._BITMASK=n._JOIN|n._READ|n._WRITE|n._PRES|n._APPROVE|n._SHARE|n._DELETE|n._OWNER,n._INVALID=1048576;const r=\"0.25.2\",a=\"tinodejs/\"+r,o=\"new\",h=\"nch\",c=\"me\",l=\"fnd\",d=\"grp\",u=268435455,p=\"␡\",g=\"alias:\";class m extends Error{constructor(e,t){super(`${e} (${t})`),this.name=\"CommError\",this.code=t}}function f(e,t){if(\"string\"==typeof t&&t.length>=20&&t.length<=24&&[\"ts\",\"touched\",\"updated\",\"created\",\"when\",\"deleted\",\"expires\"].includes(e)){const e=new Date(t);if(!isNaN(e))return e}else if(\"acs\"===e&&\"object\"==typeof t)return new n(t);return t}function _(e){return e&&!/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(e)}function b(e){return e instanceof Date&&!isNaN(e)&&0!=e.getTime()}function w(e,t){if(\"object\"!=typeof t){if(void 0===t)return e;if(t===p)return;return t}if(null===t)return e;if(t instanceof Date&&!isNaN(t))return!e||!(e instanceof Date)||isNaN(e)||e<t?t:e;if(t instanceof n)return new n(t);if(t instanceof Array)return t;e&&e!==p||(e=t.constructor());for(let s in t)if(t.hasOwnProperty(s)&&\"_noForwarding\"!=s)try{e[s]=w(e[s],t[s])}catch(e){console.warn(\"Error merging property:\",s,e)}return e}function v(e,t,s){return e[t]=w(e[t],s),e[t]}function y(e){return Object.keys(e).forEach(t=>{\"_\"==t[0]?delete e[t]:e[t]?Array.isArray(e[t])&&0==e[t].length?delete e[t]:e[t]?e[t]instanceof Date?b(e[t])||delete e[t]:\"object\"==typeof e[t]&&(y(e[t]),0==Object.getOwnPropertyNames(e[t]).length&&delete e[t]):delete e[t]:delete e[t]}),e}function T(e,t){return Array.isArray(e)?(e.sort((e,t)=>e.low<t.low?-1:e.low==t.low?(0|t.hi)-e.hi:1),e=(e=e.reduce((e,s)=>(s.low<u&&s.low>0&&(!s.hi||s.hi<u?e.push(s):e.push({low:s.low,hi:t+1})),e),[])).reduce((e,t)=>{if(0==e.length)e.push(t);else{let s=e[e.length-1];t.low<=s.hi?s.hi=Math.max(s.hi,t.hi):e.push(t)}return e},[])):[]}function M(e){return e.sort((e,t)=>e-t),e.reduce((e,t)=>{if(0==e.length)e.push({low:t});else{let s=e[e.length-1];!s.hi&&t!=s.low+1||t>s.hi?e.push({low:t}):s.hi=s.hi?Math.max(s.hi,t+1):t+1}return e},[])}let x,P;const S=\"Connection failed\",E=418,A=\"Disconnected by client\";function D(e,t,s,i){let n=null;return[\"http\",\"https\",\"ws\",\"wss\"].includes(t)&&(n=`${t}://${e}`,\"/\"!==n.charAt(n.length-1)&&(n+=\"/\"),n+=\"v\"+s+\"/channels\",[\"http\",\"https\"].includes(t)&&(n+=\"/lp\"),n+=\"?apikey=\"+i),n}class N{static#t=e=>{};#s=null;#i=0;#n=!1;#r=null;host;secure;apiKey;version;autoreconnect;initialized;constructor(e,t,s){if(this.host=e.host,this.secure=e.secure,this.apiKey=e.apiKey,this.version=t,this.autoreconnect=s,\"lp\"===e.transport?(this.#a(),this.initialized=\"lp\"):\"ws\"===e.transport&&(this.#o(),this.initialized=\"ws\"),!this.initialized)throw N.#t(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\"),new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\")}static setNetworkProviders(e,t){x=e,P=t}static set logger(e){N.#t=e}connect(e,t){return Promise.reject(null)}reconnect(e){}disconnect(){}sendText(e){}isConnected(){return!1}transport(){return this.initialized}probe(){this.sendText(\"1\")}backoffReset(){this.#h()}#c(){clearTimeout(this.#s);const e=Math.pow(2,this.#i)*(1+.3*Math.random())*2e3;this.#i=this.#i>=10?this.#i:this.#i+1,this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e),this.#s=setTimeout(t=>{if(N.#t(`Reconnecting, iter=${this.#i}, timeout=${e}`),this.#n)this.onAutoreconnectIteration&&this.onAutoreconnectIteration(-1);else{const e=this.connect();this.onAutoreconnectIteration?this.onAutoreconnectIteration(0,e):e.catch(e=>{})}},e)}#l(){clearTimeout(this.#s),this.#s=null}#h(){this.#i=0}#a(){let e=null,t=null,s=null,i=(t,s,n)=>{let r=new P,a=!1;return r.onreadystatechange=o=>{if(4==r.readyState)if(201==r.status){let n=JSON.parse(r.responseText,f);e=t+\"&sid=\"+n.ctrl.params.sid,r=i(e),r.send(null),this.onOpen&&this.onOpen(),s&&(a=!0,s()),this.autoreconnect&&this.#l()}else if(r.status>0&&r.status<400)this.onMessage&&this.onMessage(r.responseText),r=i(e),r.send(null);else{if(n&&!a&&(a=!0,n(r.responseText)),this.onMessage&&r.responseText&&this.onMessage(r.responseText),this.onDisconnect){const e=r.status||(this.#n?E:503),t=r.responseText||(this.#n?A:S);this.onDisconnect(new m(t,e),e)}r=null,!this.#n&&this.autoreconnect&&this.#c()}},r.open(\"POST\",t,!0),r};this.connect=(e,s)=>{if(this.#n=!1,t){if(!s)return Promise.resolve();t.onreadystatechange=void 0,t.abort(),t=null}return e&&(this.host=e),new Promise((e,s)=>{const n=D(this.host,this.secure?\"https\":\"http\",this.version,this.apiKey);N.#t(\"LP connecting to:\",n),t=i(n,e,s),t.send(null)}).catch(e=>{N.#t(\"LP connection failed:\",e)})},this.reconnect=e=>{this.#l(),this.connect(null,e)},this.disconnect=i=>{this.#n=!0,this.#l(),s&&(s.onreadystatechange=void 0,s.abort(),s=null),t&&(t.onreadystatechange=void 0,t.abort(),t=null),this.onDisconnect&&this.onDisconnect(new m(A,E),E),e=null},this.sendText=t=>{if(s=(e=>{const t=new P;return t.onreadystatechange=e=>{if(4==t.readyState&&t.status>=400)throw new m(\"LP sender failed\",t.status)},t.open(\"POST\",e,!0),t})(e),!s||1!=s.readyState)throw new Error(\"Long poller failed to connect\");s.send(t)},this.isConnected=e=>t&&!0}#o(){this.connect=(e,t)=>{if(this.#n=!1,this.#r){if(!t&&this.#r.readyState==this.#r.OPEN)return this.probe(),Promise.resolve();this.#r.close(),this.#r=null}return e&&(this.host=e),new Promise((e,t)=>{const s=D(this.host,this.secure?\"wss\":\"ws\",this.version,this.apiKey);N.#t(\"WS connecting to: \",s);const i=new x(s);i.onerror=e=>{t(e)},i.onopen=t=>{this.autoreconnect&&this.#l(),this.onOpen&&this.onOpen(),e()},i.onclose=e=>{if(this.#r=null,this.onDisconnect){const e=this.#n?E:503;this.onDisconnect(new m(this.#n?A:S,e),e)}!this.#n&&this.autoreconnect&&this.#c()},i.onmessage=e=>{this.onMessage&&this.onMessage(e.data)},this.#r=i})},this.reconnect=e=>{this.#l(),this.connect(null,e)},this.disconnect=e=>{this.#n=!0,this.#l(),this.#r&&(this.#r.close(),this.#r=null)},this.sendText=e=>{if(!this.#r||this.#r.readyState!=this.#r.OPEN)throw new Error(\"Websocket is not connected\");this.#r.send(e)},this.isConnected=e=>this.#r&&this.#r.readyState==this.#r.OPEN}onMessage=void 0;onDisconnect=void 0;onOpen=void 0;onAutoreconnectIteration=void 0}N.NETWORK_ERROR=503,N.NETWORK_ERROR_TEXT=S,N.NETWORK_USER=E,N.NETWORK_USER_TEXT=A;const I=\"tinode-web\";let R;class C{#d=e=>{};#u=e=>{};db=null;disabled=!0;constructor(e,t){this.#d=e||this.#d,this.#u=t||this.#u}#p(e,t,s){return this.db?new Promise((i,n)=>{const r=this.db.transaction([e]);r.onerror=t=>{this.#u(\"PCache\",\"mapObjects\",e,t.target.error),n(t.target.error)},r.objectStore(e).getAll().onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):disabled?Promise.resolve([]):Promise.reject(new Error(\"not initialized\"))}initDatabase(){return new Promise((e,t)=>{const s=R.open(I,3);s.onsuccess=t=>{this.db=t.target.result,this.disabled=!1,this.db.onversionchange=e=>{this.#u(\"PCache\",\"another tab tries to upgrade DB, shutting down\"),this.db.close(),this.db=null,this.disabled=!0},e(this.db)},s.onerror=e=>{this.#u(\"PCache\",\"failed to initialize\",e),t(e.target.error),this.#d(e.target.error)},s.onupgradeneeded=e=>{if(this.db=e.target.result,this.db.onerror=e=>{this.#u(\"PCache\",\"failed to create storage\",e),this.#d(e.target.error)},this.db.objectStoreNames.contains(\"topic\")||this.db.createObjectStore(\"topic\",{keyPath:\"name\"}),this.db.objectStoreNames.contains(\"user\")||this.db.createObjectStore(\"user\",{keyPath:\"uid\"}),this.db.objectStoreNames.contains(\"subscription\")||this.db.createObjectStore(\"subscription\",{keyPath:[\"topic\",\"uid\"]}),this.db.objectStoreNames.contains(\"message\")||this.db.createObjectStore(\"message\",{keyPath:[\"topic\",\"seq\"]}),!this.db.objectStoreNames.contains(\"dellog\")){const e=this.db.createObjectStore(\"dellog\",{keyPath:[\"topic\",\"low\",\"hi\"]});e.indexNames.contains(\"topic_clear\")||e.createIndex(\"topic_clear\",[\"topic\",\"clear\"],{unique:!1})}}})}deleteDatabase(){return this.db&&(this.db.close(),this.db=null),new Promise((e,t)=>{const s=R.deleteDatabase(I);s.onblocked=e=>{this.db&&this.db.close();const s=new Error(\"blocked\");this.#u(\"PCache\",\"deleteDatabase\",s),t(s)},s.onsuccess=t=>{this.db=null,this.disabled=!0,e(!0)},s.onerror=e=>{this.#u(\"PCache\",\"deleteDatabase\",e.target.error),t(e.target.error)}})}isReady(){return!!this.db}updTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"topic\"],\"readwrite\");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u(\"PCache\",\"updTopic\",e.target.error),s(e.target.error)};const n=i.objectStore(\"topic\").get(e.name);n.onsuccess=t=>{i.objectStore(\"topic\").put(C.#g(n.result,e)),i.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}markTopicAsDeleted(e,t){return this.isReady()?new Promise((s,i)=>{const n=this.db.transaction([\"topic\"],\"readwrite\");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u(\"PCache\",\"markTopicAsDeleted\",e.target.error),i(e.target.error)},n.objectStore(\"topic\").get(e).onsuccess=e=>{const s=e.target.result;s&&s._deleted!=t&&(s._deleted=t,n.objectStore(\"topic\").put(s)),n.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}remTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"topic\",\"subscription\",\"message\"],\"readwrite\");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u(\"PCache\",\"remTopic\",e.target.error),s(e.target.error)},i.objectStore(\"topic\").delete(IDBKeyRange.only(e)),i.objectStore(\"subscription\").delete(IDBKeyRange.bound([e,\"-\"],[e,\"~\"])),i.objectStore(\"message\").delete(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER])),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}mapTopics(e,t){return this.#p(\"topic\",e,t)}deserializeTopic(e,t){C.#m(e,t)}updUser(e,t){if(!(arguments.length<2||void 0===t))return this.isReady()?new Promise((s,i)=>{const n=this.db.transaction([\"user\"],\"readwrite\");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u(\"PCache\",\"updUser\",e.target.error),i(e.target.error)},n.objectStore(\"user\").put({uid:e,public:t}),n.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}remUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"user\"],\"readwrite\");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u(\"PCache\",\"remUser\",e.target.error),s(e.target.error)},i.objectStore(\"user\").delete(IDBKeyRange.only(e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}mapUsers(e,t){return this.#p(\"user\",e,t)}getUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"user\"]);i.oncomplete=e=>{const s=e.target.result;t({user:s.uid,public:s.public})},i.onerror=e=>{this.#u(\"PCache\",\"getUser\",e.target.error),s(e.target.error)},i.objectStore(\"user\").get(e)}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}updSubscription(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction([\"subscription\"],\"readwrite\");r.oncomplete=e=>{i(e.target.result)},r.onerror=e=>{this.#u(\"PCache\",\"updSubscription\",e.target.error),n(e.target.error)},r.objectStore(\"subscription\").get([e,t]).onsuccess=i=>{r.objectStore(\"subscription\").put(C.#f(i.target.result,e,t,s)),r.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}mapSubscriptions(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction([\"subscription\"]);r.onerror=e=>{this.#u(\"PCache\",\"mapSubscriptions\",e.target.error),n(e.target.error)},r.objectStore(\"subscription\").getAll(IDBKeyRange.bound([e,\"-\"],[e,\"~\"])).onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):this.disabled?Promise.resolve([]):Promise.reject(new Error(\"not initialized\"))}addMessage(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"message\"],\"readwrite\");i.onsuccess=e=>{t(e.target.result)},i.onerror=e=>{this.#u(\"PCache\",\"addMessage\",e.target.error),s(e.target.error)},i.objectStore(\"message\").add(C.#_(null,e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}updMessageStatus(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction([\"message\"],\"readwrite\");r.onsuccess=e=>{i(e.target.result)},r.onerror=e=>{this.#u(\"PCache\",\"updMessageStatus\",e.target.error),n(e.target.error)};const a=r.objectStore(\"message\").get(IDBKeyRange.only([e,t]));a.onsuccess=i=>{const n=a.result||i.target.result;n&&n._status!=s?(r.objectStore(\"message\").put(C.#_(n,{topic:e,seq:t,_status:s})),r.commit()):r.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}remMessages(e,t,s){return this.isReady()?new Promise((i,n)=>{t||s||(t=0,s=Number.MAX_SAFE_INTEGER);const r=s>0?IDBKeyRange.bound([e,t],[e,s],!1,!0):IDBKeyRange.only([e,t]),a=this.db.transaction([\"message\"],\"readwrite\");a.onsuccess=e=>{i(e.target.result)},a.onerror=e=>{this.#u(\"PCache\",\"remMessages\",e.target.error),n(e.target.error)},a.objectStore(\"message\").delete(r),a.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}readMessages(e,t,s,i){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error(\"not initialized\"));const n=this.db.transaction([\"message\"]);let r=[];return Array.isArray(t.ranges)?new Promise((a,o)=>{n.onerror=e=>{this.#u(\"PCache\",\"readMessages\",e.target.error),o(e.target.error)};let h=0;t.ranges.forEach(o=>{const c=o.hi?IDBKeyRange.bound([e,o.low],[e,o.hi],!1,!0):IDBKeyRange.only([e,o.low]);n.objectStore(\"message\").getAll(c).onsuccess=e=>{const n=e.target.result;n&&(s&&s.call(i,n),Array.isArray(n)?r=r.concat(n):r.push(n)),h++,h==t.ranges.length&&a(r)}})}):new Promise((a,o)=>{const h=t.since>0?t.since:0,c=t.before>0?t.before:Number.MAX_SAFE_INTEGER,l=0|t.limit;n.onerror=e=>{this.#u(\"PCache\",\"readMessages\",e.target.error),o(e.target.error)};const d=IDBKeyRange.bound([e,h],[e,c],!1,!0);n.objectStore(\"message\").openCursor(d,\"prev\").onsuccess=e=>{const t=e.target.result;t?(s&&s.call(i,t.value),r.push(t.value),l<=0||r.length<l?t.continue():a(r)):a(r)}})}addDelLog(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction([\"dellog\"],\"readwrite\");r.onsuccess=e=>{i(e.target.result)},r.onerror=e=>{this.#u(\"PCache\",\"addDelLog\",e.target.error),n(e.target.error)},s.forEach(s=>r.objectStore(\"dellog\").add({topic:e,clear:t,low:s.low,hi:s.hi||s.low+1})),r.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error(\"not initialized\"))}readDelLog(e,t){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error(\"not initialized\"));const s=this.db.transaction([\"dellog\"]);let i=[];return Array.isArray(t.ranges)?new Promise((n,r)=>{s.onerror=e=>{this.#u(\"PCache\",\"readDelLog\",e.target.error),r(e.target.error)};let a=0;t.ranges.forEach(r=>{const o=r.hi||r.low+1,h=IDBKeyRange.bound([e,0,r.low],[e,o,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore(\"dellog\").getAll(h).onsuccess=e=>{const s=e.target.result;s&&(Array.isArray(s)?i=i.concat(s.map(e=>({low:e.low,hi:e.hi}))):i.push({low:s.low,hi:s.hi})),a++,a==t.ranges.length&&n(i)}})}):new Promise((i,n)=>{const r=t.since>0?t.since:0,a=t.before>0?t.before:Number.MAX_SAFE_INTEGER,o=0|t.limit;s.onerror=e=>{this.#u(\"PCache\",\"readDelLog\",e.target.error),n(e.target.error)};let h=0;const c=[],l=IDBKeyRange.bound([e,0,r],[e,a,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore(\"dellog\").openCursor(l,\"prev\").onsuccess=e=>{const t=e.target.result;t?(c.push({low:t.value.low,hi:t.value.hi}),h+=t.value.hi-t.value.low,o<=0||h<o?t.continue():i(c)):i(c)}})}maxDelId(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction([\"dellog\"]);i.onerror=e=>{this.#u(\"PCache\",\"maxDelId\",e.target.error),s(e.target.error)},i.objectStore(\"dellog\").index(\"topic_clear\").openCursor(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER]),\"prev\").onsuccess=e=>{e.target.result&&t(e.target.result.value)}}):this.disabled?Promise.resolve(0):Promise.reject(new Error(\"not initialized\"))}static#b=[\"created\",\"updated\",\"deleted\",\"touched\",\"read\",\"recv\",\"seq\",\"clear\",\"defacs\",\"creds\",\"public\",\"trusted\",\"private\",\"_aux\",\"_deleted\"];static#m(e,t){C.#b.forEach(s=>{t.hasOwnProperty(s)&&(e[s]=t[s])}),Array.isArray(t.tags)&&(e._tags=t.tags),t.acs&&e.setAccessMode(t.acs),e.seq|=0,e.read|=0,e.unread=Math.max(0,e.seq-e.read)}static#g(e,t){const s=e||{name:t.name};return C.#b.forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),Array.isArray(t._tags)&&(s.tags=t._tags),t.acs&&(s.acs=t.getAccessMode().jsonHelper()),s}static#f(e,t,s,i){const n=e||{topic:t,uid:s};return[\"updated\",\"mode\",\"read\",\"recv\",\"clear\",\"lastSeen\",\"userAgent\"].forEach(e=>{i.hasOwnProperty(e)&&(n[e]=i[e])}),n}static#_(e,t){const s=e||{};return[\"topic\",\"seq\",\"ts\",\"_status\",\"from\",\"head\",\"content\"].forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),s}static setDatabaseProvider(e){R=e}}var k=s(767),q=s.n(k);let U;class O{constructor(e,t){this._tinode=e,this._version=t,this._apiKey=e._apiKey,this._authToken=e.getAuthToken(),this.xhr=[]}uploadWithBaseUrl(e,t,s,i,n,r){let a=`/v${this._version}/file/u/`;if(e){let t=e;if(t.endsWith(\"/\")&&(t=t.slice(0,-1)),!t.startsWith(\"http://\")&&!t.startsWith(\"https://\"))throw new Error(`Invalid base URL '${e}'`);a=t+a}const o=this,h=new U;this.xhr.push(h),h.open(\"POST\",a,!0),h.setRequestHeader(\"X-Tinode-APIKey\",this._apiKey),this._authToken&&h.setRequestHeader(\"X-Tinode-Auth\",`Token ${this._authToken.token}`);let c=null,l=null;const d=new Promise((e,t)=>{c=e,l=t});h.upload.onprogress=e=>{e.lengthComputable&&(i&&i(e.loaded/e.total),this.onProgress&&this.onProgress(e.loaded/e.total))},h.onload=function(){let e;try{e=JSON.parse(this.response,f)}catch(t){o._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\",this.response),e={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(c&&c(e.ctrl.params.url),n&&n(e.ctrl)):this.status>=400?(l&&l(new m(e.ctrl.text,e.ctrl.code)),r&&r(e.ctrl)):o._tinode.logger(\"ERROR: Unexpected server response status\",this.status,this.response)},h.onerror=function(e){l&&l(e||new Error(\"failed\")),r&&r(null)},h.onabort=function(e){l&&l(new Error(\"upload cancelled by user\")),r&&r(null)};try{const e=new FormData;e.append(\"file\",t),e.set(\"id\",this._tinode.getNextUniqueId()),s&&e.set(\"topic\",s),h.send(e)}catch(e){l&&l(e),r&&r(null)}return d}upload(e,t,s,i,n){const r=(this._tinode._secure?\"https://\":\"http://\")+this._tinode._host;return this.uploadWithBaseUrl(r,e,t,s,i,n)}download(e,t,s,i,n){if(!_(e))return void(n&&n(`The URL '${e}' must be relative, not absolute`));if(!this._authToken)return void(n&&n(\"Must authenticate first\"));const r=this,a=new U;this.xhr.push(a),e=function(e){const t=new URL(e,window.location.origin);return t.searchParams.append(\"asatt\",\"1\"),t.toString().substring(window.location.origin.length)}(e),a.open(\"GET\",e,!0),a.setRequestHeader(\"X-Tinode-APIKey\",this._apiKey),a.setRequestHeader(\"X-Tinode-Auth\",\"Token \"+this._authToken.token),a.responseType=\"blob\",a.onprogress=function(e){i&&i(e.loaded)};let o=null,h=null;const c=new Promise((e,t)=>{o=e,h=t});a.onload=function(){if(200==this.status){const e=document.createElement(\"a\");e.href=window.URL.createObjectURL(new Blob([this.response],{type:s})),e.style.display=\"none\",e.setAttribute(\"download\",t),document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(e.href),o&&o()}else if(this.status>=400&&h){const e=new FileReader;e.onload=function(){try{const e=JSON.parse(this.result,f);h(new m(e.ctrl.text,e.ctrl.code))}catch(e){r._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\",this.result),h(e)}},e.readAsText(this.response)}},a.onerror=function(e){h&&h(new Error(\"failed\")),n&&n(e)},a.onabort=function(){h&&h(null)};try{a.send()}catch(e){h&&h(e),n&&n(e)}return c}cancel(){this.xhr.forEach(e=>{e.readyState<4&&e.abort()})}static setNetworkProvider(e){U=e}}class j{constructor(e){this.topic=e,this.what={}}#w(){return this.topic._deleted?void 0:this.topic.updated}#v(){return this.topic.isP2PType()?this.#w():this.topic._deleted?void 0:this.topic._lastSubsUpdate}withData(e,t,s){return this.what.data={since:e,before:t,limit:s},this}withLaterData(e){return this.withData(this.topic._maxSeq>0?this.topic._maxSeq+1:void 0,void 0,e)}withDataRanges(e,t){return this.what.data={ranges:T(e,this.topic._maxSeq),limit:t},this}withDataList(e){return this.withDataRanges(M(e))}withEarlierData(e){return this.withData(void 0,this.topic._minSeq>0?this.topic._minSeq:void 0,e)}withDesc(e){return this.what.desc={ims:e},this}withLaterDesc(){return this.withDesc(this.#w())}withSub(e,t,s){const i={ims:e,limit:t};return\"me\"==this.topic.getType()?i.topic=s:i.user=s,this.what.sub=i,this}withOneSub(e,t){return this.withSub(e,void 0,t)}withLaterOneSub(e){return this.withOneSub(this.topic._lastSubsUpdate,e)}withLaterSub(e){return this.withSub(this.#v(),e)}withTags(){return this.what.tags=!0,this}withCred(){return\"me\"==this.topic.getType()?this.what.cred=!0:this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\",this.topic.getType()),this}withAux(){return this.what.aux=!0,this}withDel(e,t){return(e||t)&&(this.what.del={since:e,limit:t}),this}withLaterDel(e){return this.withDel(this.topic._maxSeq>0?this.topic._maxDel+1:void 0,e)}extract(e){return this.what[e]}build(){const e=[];let t={};return[\"data\",\"sub\",\"desc\",\"tags\",\"cred\",\"aux\",\"del\"].forEach(s=>{this.what.hasOwnProperty(s)&&(e.push(s),Object.getOwnPropertyNames(this.what[s]).length>0&&(t[s]=this.what[s]))}),e.length>0?t.what=e.join(\" \"):t=void 0,t}}class L{#y=void 0;#T=!1;buffer=[];constructor(e,t){this.#y=e||((e,t)=>e===t?0:e<t?-1:1),this.#T=t}#M(e,t,s){let i=0,n=t.length-1,r=0,a=0,o=!1;for(;i<=n;)if(r=(i+n)/2|0,a=this.#y(t[r],e),a<0)i=r+1;else{if(!(a>0)){o=!0;break}n=r-1}return o?{idx:r,exact:!0}:s?{idx:-1}:{idx:a<0?r+1:r}}#x(e,t){const s=this.#M(e,t,!1),i=s.exact&&this.#T?1:0;return t.splice(s.idx,i,e),t}getAt(e){return this.buffer[e]}getLast(e){return e?this.buffer.findLast(e):this.buffer[this.buffer.length-1]}put(){let e;e=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:arguments;for(let t in e)this.#x(e[t],this.buffer)}delAt(e){e|=0;let t=this.buffer.splice(e,1);if(t&&t.length>0)return t[0]}delRange(e,t){return this.buffer.splice(e,t-e)}length(){return this.buffer.length}reset(){this.buffer=[]}forEach(e,t,s,i){t=Math.max(0,0|t),s=Math.min(s||this.buffer.length,this.buffer.length);for(let n=t;n<s;n++)e.call(i,this.buffer[n],n>t?this.buffer[n-1]:void 0,n<s-1?this.buffer[n+1]:void 0,n)}find(e,t){const{idx:s}=this.#M(e,this.buffer,!t);return s}filter(e,t){let s=0;for(let i=0;i<this.buffer.length;i++)e.call(t,this.buffer[i],i)&&(this.buffer[s]=this.buffer[i],s++);this.buffer.splice(s)}isEmpty(){return 0==this.buffer.length}}class V{constructor(e,t){this._tinode=null,this.name=e,this.created=null,this.updated=null,this.touched=new Date(0),this.acs=new n(null),this.private=null,this.public=null,this.trusted=null,this._users={},this._queuedSeqId=u,this._maxSeq=0,this._minSeq=0,this._noEarlierMsgs=!1,this._maxDel=0,this._recvNotificationTimer=null,this._tags=[],this._credentials=[],this._aux={},this._messageVersions={},this._messages=new L((e,t)=>e.seq-t.seq,!0),this._attached=!1,this._lastSubsUpdate=new Date(0),this._new=!0,this._deleted=!1,this._delayedLeaveTimer=null,t&&(this.onData=t.onData,this.onMeta=t.onMeta,this.onPres=t.onPres,this.onInfo=t.onInfo,this.onMetaDesc=t.onMetaDesc,this.onMetaSub=t.onMetaSub,this.onSubsUpdated=t.onSubsUpdated,this.onTagsUpdated=t.onTagsUpdated,this.onCredsUpdated=t.onCredsUpdated,this.onAuxUpdated=t.onAuxUpdated,this.onDeleteTopic=t.onDeleteTopic,this.onAllMessagesReceived=t.onAllMessagesReceived)}static topicType(e){return{me:c,fnd:l,grp:d,new:d,nch:d,chn:d,usr:\"p2p\",sys:\"sys\",slf:\"slf\"}[\"string\"==typeof e?e.substring(0,3):\"xxx\"]}static isMeTopicName(e){return V.topicType(e)==c}static isSelfTopicName(e){return\"slf\"==V.topicType(e)}static isGroupTopicName(e){return V.topicType(e)==d}static isP2PTopicName(e){return\"p2p\"==V.topicType(e)}static isCommTopicName(e){return V.isP2PTopicName(e)||V.isGroupTopicName(e)||V.isSelfTopicName(e)}static isNewGroupTopicName(e){return\"string\"==typeof e&&(e.substring(0,3)==o||e.substring(0,3)==h)}static isChannelTopicName(e){return\"string\"==typeof e&&(\"chn\"==e.substring(0,3)||e.substring(0,3)==h)}static#P(e){return e.head&&e.head.replace}isSubscribed(){return this._attached}subscribe(e,t){return clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=null,this._attached?Promise.resolve(this):this._tinode.subscribe(this.name||o,e,t).then(e=>{if(e.code>=300)return e;if(this._attached=!0,this._deleted=!1,this.acs=e.params&&e.params.acs?e.params.acs:this.acs,this._new){if(delete this._new,this.name!=e.topic&&(this._cacheDelSelf(),this.name=e.topic),this._cachePutSelf(),this.created=e.ts,this.updated=e.ts,this.name!=c&&this.name!=l){const e=this._tinode.getMeTopic();e.onMetaSub&&e.onMetaSub(this),e.onSubsUpdated&&e.onSubsUpdated([this.name],1)}t&&t.desc&&(t.desc._noForwarding=!0,this._processMetaDesc(t.desc))}return e})}createMessage(e,t){return this._tinode.createMessage(this.name,e,t)}publish(e,t){return this.publishMessage(this.createMessage(e,t))}publishMessage(e){if(!this._attached)return Promise.reject(new Error(\"Cannot publish on inactive topic\"));if(this._sending)return Promise.reject(new Error(\"The message is already being sent\"));e._sending=!0,e._failed=!1;let t=null;return q().hasEntities(e.content)&&(t=[],q().entities(e.content,e=>{e&&(e.ref&&t.push(e.ref),e.preref&&t.push(e.preref))}),0==t.length&&(t=null)),this._tinode.publishMessage(e,t).then(t=>(e._sending=!1,e.ts=t.ts,this.swapMessageId(e,t.params.seq),this._maybeUpdateMessageVersionsCache(e),this._routeData(e),t)).catch(t=>{this._tinode.logger(\"WARNING: Message rejected by the server\",t),e._sending=!1,e._failed=!0,this.onData&&this.onData()})}publishDraft(e,t){const s=e.seq||this._getQueuedSeqId();return e._noForwarding||(e._noForwarding=!0,e.seq=s,e.ts=new Date,e.from=this._tinode.getCurrentUserID(),e.noecho=!0,this._messages.put(e),this._tinode._db.addMessage(e),this.onData&&this.onData(e)),(t||Promise.resolve()).then(t=>e._cancelled?{code:300,text:\"cancelled\"}:this.publishMessage(e)).catch(t=>{throw this._tinode.logger(\"WARNING: Message draft rejected\",t),e._sending=!1,e._failed=!0,e._fatal=t instanceof m&&t.code>=400&&t.code<500,this.onData&&this.onData(),t})}leave(e){return this._attached||e?this._tinode.leave(this.name,e).then(t=>(this._resetSub(),e&&this._gone(),t)):Promise.reject(new Error(\"Cannot leave inactive topic\"))}leaveDelayed(e,t){clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=setTimeout(t=>{this._delayedLeaveTimer=null,this.leave(e)},t)}getMeta(e){return this._tinode.getMeta(this.name,e)}getMessagesPage(e,t,s,i,n){let r=t?this.startMetaQuery().withDataRanges(t,e):n?this.startMetaQuery().withData(s,void 0,e):this.startMetaQuery().withData(void 0,i,e);return this._loadMessages(this._tinode._db,r.extract(\"data\")).then(a=>0==(t=this.msgHasMoreMessages(s,i,n)).length?Promise.resolve({topic:this.name,code:200,params:{count:a}}):(e-=a,r=this.startMetaQuery().withDataRanges(t,e),this.getMeta(r.build())))}getPinnedMessages(){const e=this.aux(\"pins\");if(!Array.isArray(e))return Promise.resolve(0);const t=[];let s=e;return this._tinode._db.readMessages(this.name,{ranges:M(s)}).then(i=>(i.forEach(e=>{e&&(t.push(e.seq),this._messages.put(e),this._maybeUpdateMessageVersionsCache(e))}),t.length<e.length?(s=e.filter(e=>!t.includes(e)),this._tinode._db.readMessages(this.name,{ranges:M(s)})):null)).then(i=>(i&&s.forEach(e=>{i.find(t=>t.low<=e&&t.hi>e)&&t.push(e)}),t.length==e.length?Promise.resolve({topic:this.name,code:200,params:{count:t.length}}):(s=e.filter(e=>!t.includes(e)),this.getMeta(this.startMetaQuery().withDataList(s).build()))))}setMeta(e){return e.tags&&(e.tags=function(e){let t=[];if(Array.isArray(e)){for(let s=0,i=e.length;s<i;s++){let i=e[s];i&&(i=i.trim().toLowerCase(),i.length>1&&t.push(i))}t=t.sort().filter((e,t,s)=>!t||e!=s[t-1])}return 0==t.length&&t.push(p),t}(e.tags)),this._tinode.setMeta(this.name,e).then(t=>(t&&t.code>=300||(e.sub&&(e.sub.topic=this.name,t.params&&t.params.acs&&(e.sub.acs=t.params.acs,e.sub.updated=t.ts),e.sub.user||(e.sub.user=this._tinode.getCurrentUserID(),e.desc||(e.desc={})),e.sub._noForwarding=!0,this._processMetaSubs([e.sub])),e.desc&&(t.params&&t.params.acs&&(e.desc.acs=t.params.acs,e.desc.updated=t.ts),this._processMetaDesc(e.desc)),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds([e.cred],!0),e.aux&&this._processMetaAux(e.aux)),t))}updateMode(e,t){const s=e?this.subscriber(e):null,i=s?s.acs.updateGiven(t).getGiven():this.getAccessMode().updateWant(t).getWant();return this.setMeta({sub:{user:e,mode:i}})}invite(e,t){return this.setMeta({sub:{user:e,mode:t}})}archive(e){return this.private&&!this.private.arch==!e?Promise.resolve(e):this.setMeta({desc:{private:{arch:!!e||p}}})}pinMessage(e,t){let s=this.aux(\"pins\");Array.isArray(s)||(s=[]);let i=!1;return t?s.includes(e)||(i=!0,5==s.length&&s.shift(),s.push(e)):s.includes(e)&&(i=!0,s=s.filter(t=>t!=e),0==s.length&&(s=p)),i?this.setMeta({aux:{pins:s}}):Promise.resolve()}pinTopic(e,t){return Promise.reject(new Error(\"Pinning topics is not supported here\"))}pinnedTopicRank(e){return 0}delMessages(e,t){if(!this._attached)return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));const s=T(e,this._maxSeq);let i;return i=s.length>0?this._tinode.delMessages(this.name,s,t):Promise.resolve({params:{del:0}}),i.then(t=>(t.params.del>this._maxDel&&(this._maxDel=Math.max(t.params.del,this._maxDel),this.clear=Math.max(t.params.del,this.clear)),e.forEach(e=>{e.hi?this.flushMessageRange(e.low,e.hi):this.flushMessage(e.low),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,t.params.del,e),this.onData&&this.onData(),t))}delMessagesAll(e){return!this._maxSeq||this._maxSeq<=0?Promise.resolve():this.delMessages([{low:1,hi:this._maxSeq+1,_all:!0}],e)}delMessagesList(e,t){return this.delMessages(M(e),t)}delMessagesEdits(e,t){const s=[e];return this.messageVersions(e,e=>s.push(e.seq)),this.delMessagesList(s,t)}delTopic(e){return this._deleted?(this._gone(),Promise.resolve(null)):this._tinode.delTopic(this.name,e).then(e=>(this._deleted=!0,this._resetSub(),this._gone(),e))}delSubscription(e){return this._attached?this._tinode.delSubscription(this.name,e).then(t=>(delete this._users[e],this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users)),t)):Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"))}note(e,t){if(!this._attached)return;const s=this._users[this._tinode.getCurrentUserID()];let i=!1;s?(!s[e]||s[e]<t)&&(s[e]=t,i=!0):i=(0|this[e])<t,i&&(this._tinode.note(this.name,e,t),this._updateMyReadRecv(e,t),null!=this.acs&&!this.acs.isMuted())&&this._tinode.getMeTopic()._refreshContact(e,this)}noteRecv(e){this.note(\"recv\",e)}noteRead(e){(e=e||this._maxSeq)>0&&this.note(\"read\",e)}noteKeyPress(){this._attached?this._tinode.noteKeyPress(this.name):this._tinode.logger(\"INFO: Cannot send notification in inactive topic\")}noteRecording(e){this._attached?this._tinode.noteKeyPress(this.name,e?\"kpa\":\"kpv\"):this._tinode.logger(\"INFO: Cannot send notification in inactive topic\")}videoCall(e,t,s){if(this._attached||[\"ringing\",\"hang-up\"].includes(e))return this._tinode.videoCall(this.name,t,e,s)}_updateMyReadRecv(e,t,s){let i,n=!1;switch(t|=0,this.seq=0|this.seq,this.read=0|this.read,this.recv=0|this.recv,e){case\"recv\":i=this.recv,this.recv=Math.max(this.recv,t),n=i!=this.recv;break;case\"read\":i=this.read,this.read=Math.max(this.read,t),n=i!=this.read;break;case\"msg\":i=this.seq,this.seq=Math.max(this.seq,t),(!this.touched||this.touched<s)&&(this.touched=s),n=i!=this.seq}return this.recv<this.read&&(this.recv=this.read,n=!0),this.seq<this.recv&&(this.seq=this.recv,(!this.touched||this.touched<s)&&(this.touched=s),n=!0),this.unread=this.seq-this.read,n}userDesc(e){const t=this._cacheGetUser(e);if(t)return t}p2pPeerDesc(){if(this.isP2PType())return this._users[this.name]}subscribers(e,t){const s=e||this.onMetaSub;if(s)for(let e in this._users)s.call(t,this._users[e],e,this._users)}tags(){return this._tags.slice(0)}aux(e){return this._aux[e]}alias(){const e=this._tags&&this._tags.find(e=>e.startsWith(g));if(e)return e.substring(6)}subscriber(e){return this._users[e]}messageVersions(e,t,s){if(!t)return;const i=this._messageVersions[e];i&&i.forEach(t,void 0,void 0,s)}messages(e,t,s,i){const n=e||this.onData;if(n){const e=\"number\"==typeof t?this._messages.find({seq:t},!0):void 0,r=\"number\"==typeof s?this._messages.find({seq:s},!0):void 0;if(-1!=e&&-1!=r){let t=[];this._messages.forEach((e,s,i,n)=>{if(V.#P(e))return;if(e._deleted)return;const r=this.latestMsgVersion(e.seq)||e;r._origTs||(r._origTs=r.ts,r._origSeq=r.seq,r.ts=e.ts,r.seq=e.seq),t.push({data:r,idx:n})},e,r,{}),t.forEach((e,s)=>{n.call(i,e.data,s>0?t[s-1].data:void 0,s<t.length-1?t[s+1].data:void 0,e.idx)})}}}findMessage(e){const t=this._messages.find({seq:e});if(t>=0)return this._messages.getAt(t)}latestMessage(){return this._messages.getLast(e=>!e._deleted)}latestMsgVersion(e){const t=this._messageVersions[e];return t?t.getLast():null}maxMsgSeq(){return this._maxSeq}minMsgSeq(){return this._minSeq}maxClearId(){return this._maxDel}messageCount(){return this._messages.length()}queuedMessages(e,t){if(!e)throw new Error(\"Callback must be provided\");this.messages(e,u,void 0,t)}msgReceiptCount(e,t){let s=0;if(t>0){const i=this._tinode.getCurrentUserID();for(let n in this._users){const r=this._users[n];r.user!==i&&r[e]>=t&&s++}}return s}msgReadCount(e){return this.msgReceiptCount(\"read\",e)}msgRecvCount(e){return this.msgReceiptCount(\"recv\",e)}msgHasMoreMessages(e,t,s){const i=[];if(e>=t)return i;let n,r=0;return this._messages.forEach((a,o)=>{const h=o||{seq:0},c=h._deleted?h.hi:h.seq+1;n=a.seq>c?{low:c,hi:a.seq}:null,n&&(s?n.hi>=e:n.low<t)&&i.push(n),r=c}),r<this.seq&&(n={low:r+1,hi:this.seq+1},(s?n.hi>=e:n.low<t)&&i.push(n)),i}isNewMessage(e){return this._maxSeq<=e}flushMessage(e){const t=this._messages.find({seq:e});if(delete this._messageVersions[e],t>=0)return this._tinode._db.remMessages(this.name,e),this._messages.delAt(t)}flushMessageRange(e,t){this._tinode._db.remMessages(this.name,e,t);for(let s=e;s<t;s++)delete this._messageVersions[s];const s=this._messages.find({seq:e},!0);return s>=0?this._messages.delRange(s,this._messages.find({seq:t},!0)):[]}swapMessageId(e,t){const s=this._messages.find(e),i=this._messages.length();0<=s&&s<i&&(this._messages.delAt(s),this._tinode._db.remMessages(this.name,e.seq),e.seq=t,this._messages.put(e),this._tinode._db.addMessage(e))}cancelSend(e){const t=this._messages.find({seq:e});if(t>=0){const s=this._messages.getAt(t),i=this.msgStatus(s);if(10==i||30==i||40==i)return this._tinode._db.remMessages(this.name,e),s._cancelled=!0,this._messages.delAt(t),this.onData&&this.onData(),!0}return!1}getType(){return V.topicType(this.name)}getAccessMode(){return this.acs}setAccessMode(e){return this.acs=new n(e)}getDefaultAccess(){return this.defacs}startMetaQuery(){return new j(this)}isArchived(){return this.private&&!!this.private.arch}isMeType(){return V.isMeTopicName(this.name)}isSelfType(){return V.isSelfTopicName(this.name)}isChannelType(){return V.isChannelTopicName(this.name)}isGroupType(){return V.isGroupTopicName(this.name)}isP2PType(){return V.isP2PTopicName(this.name)}isCommType(){return V.isCommTopicName(this.name)}msgStatus(e,t){let s=0;return this._tinode.isMe(e.from)?e._sending?s=20:e._fatal||e._cancelled?s=40:e._failed?s=30:e.seq>=u?s=10:this.msgReadCount(e.seq)>0?s=70:this.msgRecvCount(e.seq)>0?s=60:e.seq>0&&(s=50):s=80,t&&e._status!=s&&(e._status=s,this._tinode._db.updMessageStatus(this.name,e.seq,s)),s}_maybeUpdateMessageVersionsCache(e){if(!V.#P(e))return void(this._messageVersions[e.seq]&&(this._messageVersions[e.seq].filter(t=>t.from==e.from),this._messageVersions[e.seq].isEmpty()&&delete this._messageVersions[e.seq]));const t=parseInt(e.head.replace.split(\":\")[1]);if(t>e.seq)return;const s=this.findMessage(t);if(s&&s.from!=e.from)return;const i=this._messageVersions[t]||new L((e,t)=>e.seq-t.seq,!0);i.put(e),this._messageVersions[t]=i}_routeData(e){e.content&&(!this.touched||this.touched<e.ts)&&(this.touched=e.ts,this._tinode._db.updTopic(this)),e.seq>this._maxSeq&&(this._maxSeq=e.seq,this.msgStatus(e,!0),clearTimeout(this._recvNotificationTimer),this._recvNotificationTimer=setTimeout(e=>{this._recvNotificationTimer=null,this.noteRecv(this._maxSeq)},100)),(e.seq<this._minSeq||0==this._minSeq)&&(this._minSeq=e.seq);const t=!this.isChannelType()&&!e.from||this._tinode.isMe(e.from);if(e.head&&e.head.webrtc&&e.head.mime==q().getContentType()&&e.content){const s={state:e.head.webrtc,duration:e.head[\"webrtc-duration\"],incoming:!t};e.head.vc&&(s.vc=!0),e.content=q().updateVideoCall(e.content,s)}e._noForwarding||(this._messages.put(e),this._tinode._db.addMessage(e),this._maybeUpdateMessageVersionsCache(e)),this.onData&&this.onData(e);const s=t?\"read\":\"msg\";this._updateMyReadRecv(s,e.seq,e.ts),!t&&e.from&&this._routeInfo({what:\"read\",from:e.from,seq:e.seq,_noForwarding:!0}),this._tinode.getMeTopic()._refreshContact(s,this)}_routeMeta(e){e.desc&&this._processMetaDesc(e.desc),e.sub&&e.sub.length>0&&this._processMetaSubs(e.sub,!0),e.del&&this._processDelMessages(e.del.clear,e.del.delseq),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds(e.cred),e.aux&&this._processMetaAux(e.aux),this.onMeta&&this.onMeta(e)}_routePres(e){let t,s;switch(e.what){case\"del\":this._processDelMessages(e.clear,e.delseq);break;case\"on\":case\"off\":t=this._users[e.src],t?t.online=\"on\"==e.what:this._tinode.logger(\"WARNING: Presence update for an unknown user\",this.name,e.src);break;case\"term\":this._resetSub();break;case\"upd\":e.src&&!this._tinode.isTopicCached(e.src)&&this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());break;case\"aux\":this.getMeta(this.startMetaQuery().withAux().build());break;case\"acs\":if(s=e.src||this._tinode.getCurrentUserID(),t=this._users[s],t)t.acs.updateAll(e.dacs),this._processMetaSubs([{user:s,updated:new Date,acs:t.acs}]);else{const i=(new n).updateAll(e.dacs);i&&i.mode!=n._NONE&&(t=this._cacheGetUser(s),t?t.acs=i:(t={user:s,acs:i},this.getMeta(this.startMetaQuery().withOneSub(void 0,s).build())),t.updated=new Date,this._processMetaSubs([t]))}break;default:this._tinode.logger(\"INFO: Ignored presence update\",e.what)}this.onPres&&this.onPres(e)}_routeInfo(e){switch(e.what){case\"recv\":case\"read\":const t=this._users[e.from];t&&(t[e.what]=e.seq,t.recv<t.read&&(t.recv=t.read));const s=this.latestMessage();s&&this.msgStatus(s,!0),this._tinode.isMe(e.from)&&!e._noForwarding&&this._updateMyReadRecv(e.what,e.seq),this._tinode.getMeTopic()._refreshContact(e.what,this);break;case\"kp\":case\"kpa\":case\"kpv\":case\"call\":break;default:this._tinode.logger(\"INFO: Ignored info update\",e.what)}this.onInfo&&this.onInfo(e)}_processMetaDesc(e){if(this.isP2PType()&&(delete e.defacs,this._tinode._db.updUser(this.name,e.public)),w(this,e),this._tinode._db.updTopic(this),this.name!==c&&!e._noForwarding){const e=this._tinode.getMeTopic();e.onMetaSub&&e.onMetaSub(this),e.onSubsUpdated&&e.onSubsUpdated([this.name],1)}this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(e,t){for(let s in e){const i=e[s];i.online=!!i.online,this._lastSubsUpdate=new Date(Math.max(this._lastSubsUpdate,i.updated));let n=null;i.deleted?(delete this._users[i.user],t||this.subcnt--,n=i):(this._tinode.isMe(i.user)&&i.acs&&this._processMetaDesc({updated:i.updated,touched:i.touched,acs:i.acs}),this._users[i.user]||t||this.subcnt++,n=this._updateCachedUser(i.user,i)),this.onMetaSub&&this.onMetaSub(n)}this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users))}_processMetaTags(e){(e==p||1==e.length&&e[0]==p)&&(e=[]),this._tags=e,this._tinode._db.updTopic(this),this.onTagsUpdated&&this.onTagsUpdated(e)}_processMetaCreds(e){}_processMetaAux(e){e=e&&e!=p?e:{},this._aux=w(this._aux,e),this._tinode._db.updTopic(this),this.onAuxUpdated&&this.onAuxUpdated(this._aux)}_processDelMessages(e,t){this._maxDel=Math.max(e,this._maxDel),this.clear=Math.max(e,this.clear);let s=0;Array.isArray(t)&&(t.forEach(e=>{e.hi?(s+=e.hi-e.low,this.flushMessageRange(e.low,e.hi)):(s++,this.flushMessage(e.low)),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,e,t)),s>0&&this.onData&&this.onData()}_allMessagesReceived(e){this.onAllMessagesReceived&&this.onAllMessagesReceived(e)}_resetSub(){this._attached=!1}_gone(){this._messages.reset(),this._tinode._db.remMessages(this.name),this._users={},this.acs=new n(null),this.private=null,this.public=null,this.trusted=null,this._maxSeq=0,this._minSeq=0,this._attached=!1;const e=this._tinode.getMeTopic();e&&e._routePres({_noForwarding:!0,what:\"gone\",topic:c,src:this.name}),this.onDeleteTopic&&this.onDeleteTopic()}_updateCachedUser(e,t){let s=this._cacheGetUser(e);return s=w(s||{},t),this._cachePutUser(e,s),v(this._users,e,s)}_getQueuedSeqId(){return this._queuedSeqId++}_loadMessages(e,t){(t=t||{}).limit=t.limit||24;let s=0;return e.readMessages(this.name,t).then(e=>{e.forEach(e=>{e.seq>this._maxSeq&&(this._maxSeq=e.seq),(e.seq<this._minSeq||0==this._minSeq)&&(this._minSeq=e.seq),this._messages.put(e),this._maybeUpdateMessageVersionsCache(e)}),s=e.length}).then(s=>e.readDelLog(this.name,t)).then(e=>e.forEach(e=>{this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})})).then(e=>s)}_updateReceived(e,t){this.touched=new Date,this.seq=0|e,t&&!this._tinode.isMe(t)||(this.read=this.read?Math.max(this.read,this.seq):this.seq,this.recv=this.recv?Math.max(this.read,this.recv):this.read),this.unread=this.seq-(0|this.read),this._tinode._db.updTopic(this)}}class W extends V{_contacts={};constructor(e){super(l,e)}_processMetaSubs(e){let t=Object.getOwnPropertyNames(this._contacts).length;this._contacts={};for(let s in e){let i=e[s];const n=i.topic?i.topic:i.user;i=v(this._contacts,n,i),t++,this.onMetaSub&&this.onMetaSub(i)}t>0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))}publish(){return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"))}setMeta(e){return Object.getPrototypeOf(W.prototype).setMeta.call(this,e).then(e=>{Object.keys(this._contacts).length>0&&(this._contacts={},this.onSubsUpdated&&this.onSubsUpdated([]))})}checkTagUniqueness(e,t){return new Promise((s,i)=>{this.subscribe().then(t=>this.setMeta({desc:{public:e}})).then(e=>this.getMeta(this.startMetaQuery().withTags().build())).then(e=>{e&&Array.isArray(e.tags)&&0!=e.tags.length||s(!0);const i=e.tags.filter(e=>e!==t);s(0==i.length)}).catch(e=>{i(e)})})}contacts(e,t){const s=e||this.onMetaSub;if(s)for(let e in this._contacts)s.call(t,this._contacts[e],e,this._contacts)}}class G extends V{onContactUpdate;constructor(e){super(c,e),e&&(this.onContactUpdate=e.onContactUpdate)}_processMetaDesc(e){const t=e.acs&&!e.acs.isPresencer()&&this.acs&&this.acs.isPresencer();w(this,e),this._tinode._db.updTopic(this),this._updateCachedUser(this._tinode._myUID,e),t&&this._tinode.mapTopics(e=>{e.online&&(e.online=!1,e.seen=Object.assign(e.seen||{},{when:new Date}),this._refreshContact(\"off\",e))}),this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(e){let t=0;if(e.forEach(e=>{const s=e.topic;if(s==l||s==c)return;e.online=!!e.online;let i=null;if(e.deleted)i=e,this._tinode.cacheRemTopic(s),this._tinode._db.remTopic(s);else{void 0!==e.seq&&(e.seq=0|e.seq,e.recv=0|e.recv,e.read=0|e.read,e.unread=e.seq-e.read);const t=this._tinode.getTopic(s);t._new&&delete t._new,i=w(t,e),this._tinode._db.updTopic(i),V.isP2PTopicName(s)&&(this._cachePutUser(s,i),this._tinode._db.updUser(s,i.public)),!e._noForwarding&&t&&(e._noForwarding=!0,t._processMetaDesc(e))}t++,this.onMetaSub&&this.onMetaSub(i)}),this.onSubsUpdated&&t>0){const s=[];e.forEach(e=>{s.push(e.topic)}),this.onSubsUpdated(s,t)}}_processMetaCreds(e,t){1==e.length&&e[0]==p&&(e=[]),t?e.forEach(e=>{if(e.val){let t=this._credentials.findIndex(t=>t.meth==e.meth&&t.val==e.val);t<0?(e.done||(t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done),t>=0&&this._credentials.splice(t,1)),this._credentials.push(e)):this._credentials[t].done=e.done}else if(e.resp){const t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done);t>=0&&(this._credentials[t].done=!0)}}):this._credentials=e,this.onCredsUpdated&&this.onCredsUpdated(this._credentials)}_routePres(e){if(\"term\"==e.what)return void this._resetSub();if(\"upd\"==e.what&&e.src==c)return void this.getMeta(this.startMetaQuery().withDesc().build());const t=this._tinode.cacheGetTopic(e.src);if(t){switch(e.what){case\"on\":t.online=!0;break;case\"off\":t.online&&(t.online=!1,t.seen=Object.assign(t.seen||{},{when:new Date}));break;case\"msg\":t._updateReceived(e.seq,e.act);break;case\"upd\":this.getMeta(this.startMetaQuery().withLaterOneSub(e.src).build());break;case\"acs\":e.tgt||(t.acs?t.acs.updateAll(e.dacs):t.acs=(new n).updateAll(e.dacs),t.touched=new Date);break;case\"ua\":t.seen={when:new Date,ua:e.ua};break;case\"recv\":e.seq=0|e.seq,t.recv=t.recv?Math.max(t.recv,e.seq):e.seq;break;case\"read\":e.seq=0|e.seq,t.read=t.read?Math.max(t.read,e.seq):e.seq,t.recv=t.recv?Math.max(t.read,t.recv):t.recv,t.unread=t.seq-t.read;break;case\"gone\":this._tinode.cacheRemTopic(e.src),t._deleted?this._tinode._db.remTopic(e.src):(t._deleted=!0,t._attached=!1,this._tinode._db.markTopicAsDeleted(e.src,!0));break;case\"del\":break;default:this._tinode.logger(\"INFO: Unsupported presence update in 'me'\",e.what)}this._refreshContact(e.what,t)}else{if(\"acs\"==e.what){const t=new n(e.dacs);if(!t||t.mode==n._INVALID)return void this._tinode.logger(\"ERROR: Invalid access mode update\",e.src,e.dacs);if(t.mode==n._NONE)return void this._tinode.logger(\"WARNING: Removing non-existent subscription\",e.src,e.dacs);{this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const s=this._tinode.getTopic(e.src);s.topic=e.src,s.online=!1,s.acs=t,this._tinode._db.updTopic(s)}}else if(\"tags\"==e.what)this.getMeta(this.startMetaQuery().withTags().build());else if(\"msg\"==e.what){this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const t=this._tinode.getTopic(e.src);t._deleted=!1,this._tinode._db.updTopic(t)}this._refreshContact(e.what,t)}this.onPres&&this.onPres(e)}_refreshContact(e,t){this.onContactUpdate&&this.onContactUpdate(e,t)}publish(){return Promise.reject(new Error(\"Publishing to 'me' is not supported\"))}delCredential(e,t){return this._attached?this._tinode.delCredential(e,t).then(s=>{const i=this._credentials.findIndex(s=>s.meth==e&&s.val==t);return i>-1&&this._credentials.splice(i,1),this.onCredsUpdated&&this.onCredsUpdated(this._credentials),s}):Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"))}contacts(e,t,s){this._tinode.mapTopics((i,n)=>{!i.isCommType()||t&&!t(i)||e.call(s,i,n)})}getContact(e){return this._tinode.cacheGetTopic(e)}getAccessMode(e){if(e){const t=this._tinode.cacheGetTopic(e);return t?t.acs:null}return this.acs}isArchived(e){const t=this._tinode.cacheGetTopic(e);return t&&t.private&&!!t.private.arch}getCredentials(){return this._credentials}pinTopic(e,t){if(!this._attached)return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));if(!V.isCommTopicName(e))return Promise.reject(new Error(\"Invalid topic to pin\"));const s=Array.isArray(this.private&&this.private.tpin)?this.private.tpin:[],i=s.includes(e);return t&&i||!t&&!i?Promise.resolve(s):(t?s.unshift(e):s.splice(s.indexOf(e),1),this.setMeta({desc:{private:{tpin:s.length>0?s:p}}}))}pinnedTopicRank(e){if(!this.private||!this.private.tpin)return 0;const t=this.private.tpin.indexOf(e);return t<0?0:this.private.tpin.length-t}}const F=\"text/x-the-card\";class z{constructor(e,t,s,i){Object.assign(this,function(e,t,s,i){let n=null;if((e=e&&e.trim())&&(n={fn:e}),\"string\"==typeof(i=i&&i.trim())&&(n=n||{},n.note=i||p),t){n=n||{};let e=s;const i=/^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);i?(e=i[1],n.photo={data:t.substring(t.indexOf(\",\")+1),ref:p}):n.photo={data:p,ref:t},n.photo.type=(e||\"image/jpeg\").substring(6)}return n}(e,t,s,i)||{})}merge(e){Object.assign(this,e)}get contentType(){return F}get size(){return JSON.stringify(this).length}}function $(e,t,s,i,n){return t=t&&t.trim(),s=s&&s.trim(),t&&s&&((e=e||{}).comm=e.comm||[],n&&(e.comm=e.comm.filter(e=>e.proto!=t||!e.des.includes(i))),e.comm.push({proto:t,des:[i],value:s})),e}function B(e,t,s,i){return e&&Array.isArray(e.comm)&&(e.comm=e.comm.filter(e=>e.proto!=t||!(!s||e.value==s)||!!i&&!e.des.includes(i))),e}let K,H,Q;function X(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return String.fromCharCode(\"0x\"+t)}))}function J(e,t){return\"string\"==typeof t&&t.length>128?\"<\"+t.length+\", bytes: \"+t.substring(0,12)+\"...\"+t.substring(t.length-12)+\">\":function(e,t){if(t instanceof Date)t=function(e){if(!b(e))return;const t=function(e,t){return\"0\".repeat((t=t||2)-(\"\"+e).length)+e},s=e.getUTCMilliseconds();return e.getUTCFullYear()+\"-\"+t(e.getUTCMonth()+1)+\"-\"+t(e.getUTCDate())+\"T\"+t(e.getUTCHours())+\":\"+t(e.getUTCMinutes())+\":\"+t(e.getUTCSeconds())+(s?\".\"+t(s,3):\"\")+\"Z\"}(t);else if(t instanceof n)t=t.jsonHelper();else if(null==t||!1===t||Array.isArray(t)&&0==t.length||\"object\"==typeof t&&0==Object.keys(t).length)return;return t}(0,t)}z.contentType=F,z.setFn=function(e,t){return t=t&&t.trim(),(e=e||{}).fn=t||void 0,e},z.getFn=function(e){return e&&e.fn?e.fn:null},z.setNote=function(e,t){return t=t&&t.trim(),(e=e||{}).note=t||p,e},z.setPhoto=function(e,t,s){if(t){e=e||{};let i=s;const n=/^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);if(n)i=n[1],e.photo={data:t.substring(t.indexOf(\",\")+1),ref:p};else if(e.photo={data:p,ref:t},!i){const e=/\\.([a-z0-9]+)$/i.exec(t);e&&(i={jpg:\"image/jpeg\",jpeg:\"image/jpeg\",png:\"image/png\",gif:\"image/gif\",bmp:\"image/bmp\",webp:\"image/webp\",svg:\"image/svg+xml\"}[e[1].toLowerCase()]||null)}e.photo.type=(i||\"image/jpeg\").substring(6)}else(e=e||{}).photo=p;return e},z.getPhotoUrl=function(e){if(e&&e.photo){if(e.photo.ref&&e.photo.ref!=p)return e.photo.ref;if(e.photo.data&&e.photo.data!=p)return\"data:image/\"+(e.photo.type||\"jpeg\")+\";base64,\"+e.photo.data}return null},z.getOrg=function(e){return e&&e.org&&e.org.fn||null},z.setPhone=function(e,t,s=\"voice\"){return $(e,\"tel\",t,s,!0)},z.setEmail=function(e,t,s=\"home\"){return $(e,\"email\",t,s,!0)},z.setTinodeID=function(e,t,s=\"home\"){return $(e,\"tinode\",t,s,!0)},z.addPhone=function(e,t,s=\"voice\"){return $(e,\"tel\",t,s,!1)},z.addEmail=function(e,t,s=\"home\"){return $(e,\"email\",t,s,!1)},z.addTinodeID=function(e,t,s=\"home\"){return $(e,\"tinode\",t,s,!1)},z.clearPhone=function(e,t,s){return B(e,\"tel\",t,s)},z.clearEmail=function(e,t,s){return B(e,\"email\",t,s)},z.clearTinodeID=function(e,t,s){return B(e,\"tinode\",t,s)},z.getComm=function(e,t){return e&&Array.isArray(e.comm)?e.comm.filter(e=>e.proto==t):[]},z.getEmails=function(e){return z.getComm(e,\"email\").map(e=>e.value)},z.getPhones=function(e){return z.getComm(e,\"tel\").map(e=>e.value)},z.getFirstTinodeID=function(e){const t=z.getComm(e,\"tinode\");return t.length>0?t[0].value:null},z.exportVCard=function(e){if(!e)return null;let t=\"BEGIN:VCARD\\r\\nVERSION:3.0\\r\\n\";if(e.fn&&(t+=`FN:${e.fn}\\r\\n`),e.n&&(t+=`N:${e.n.surname||\"\"};${e.n.given||\"\"};${e.n.additional||\"\"};${e.n.prefix||\"\"};${e.n.suffix||\"\"}\\r\\n`),e.org&&(e.org.fn&&(t+=`ORG:${e.org.fn}\\r\\n`),e.org.title&&(t+=`TITLE:${e.org.title}\\r\\n`)),e.note&&e.note!=p&&(t+=`NOTE:${e.note}\\r\\n`),e.bday&&e.bday.m&&e.bday.d){const s=e.bday.y?String(e.bday.y).padStart(4,\"0\"):\"--\",i=String(e.bday.m).padStart(2,\"0\"),n=String(e.bday.d).padStart(2,\"0\");t+=`BDAY:${s}-${i}-${n}\\r\\n`}return e.photo&&(e.photo.ref&&e.photo.ref!=p?t+=`PHOTO;VALUE=URI:${e.photo.ref}\\r\\n`:e.photo.data&&e.photo.data!=p&&(t+=`PHOTO;TYPE=${e.photo.type.toUpperCase()};ENCODING=b:${e.photo.data}\\r\\n`)),Array.isArray(e.comm)&&e.comm.forEach(e=>{const s=e.des.join(\",\").toUpperCase();\"tel\"===e.proto?t+=`TEL;TYPE=${s}:${e.value}\\r\\n`:\"email\"===e.proto?t+=`EMAIL;TYPE=${s}:${e.value}\\r\\n`:\"tinode\"===e.proto?t+=`IMPP;TYPE=${s}:${e.value}\\r\\n`:\"http\"===e.proto&&(t+=`URL;TYPE=${s}:${e.value}\\r\\n`)}),t+=\"END:VCARD\\r\\n\",t},z.importVCard=function(e){if(!e||\"string\"!=typeof e)return null;const t=e.split(/\\r\\n|\\n/),s=[];let i=\"\";for(let e=0;e<t.length;e++){const n=t[e];n.startsWith(\" \")||n.startsWith(\"\\t\")?i+=n.substring(1):i.endsWith(\"=\")?i=i.substring(0,i.length-1)+n:(i&&s.push(i),i=n)}i&&s.push(i);let n={};const r=new Map,a=e=>e.replace(/\\\\([,;\\\\n])/g,(e,t)=>\"n\"===t?\"\\n\":t),o=e=>{const t=[];let s=0;for(;s<e.length;)if(\"=\"===e[s]&&s+2<e.length){const i=e.substring(s+1,s+3);/^[0-9A-F]{2}$/i.test(i)?(t.push(parseInt(i,16)),s+=3):(t.push(e.charCodeAt(s)),s++)}else t.push(e.charCodeAt(s)),s++;try{const e=new Uint8Array(t);return new TextDecoder(\"utf-8\").decode(e)}catch(t){return e.replace(/=([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16)))}};return s.forEach(e=>{const[t,...s]=e.split(\":\");if(!t||0===s.length)return;const i=s.join(\":\"),h=t.split(\";\"),c=h[0].trim().toUpperCase(),l=h.some(e=>\"QUOTED-PRINTABLE\"===e.trim().toUpperCase()||\"ENCODING=QUOTED-PRINTABLE\"===e.trim().toUpperCase());if(\"FN\"===c){let e=i;l&&(e=o(e)),n.fn=a(e)}else if(\"N\"===c){let e=i;l&&(e=o(e));const t=e.split(\";\");n.n={surname:t[0]?a(t[0]):void 0,given:t[1]?a(t[1]):void 0,additional:t[2]?a(t[2]):void 0,prefix:t[3]?a(t[3]):void 0,suffix:t[4]?a(t[4]):void 0},Object.keys(n.n).forEach(e=>void 0===n.n[e]&&delete n.n[e]),0===Object.keys(n.n).length&&delete n.n}else if(\"ORG\"===c){let e=i;l&&(e=o(e));const t=e.split(\";\");n.org=n.org||{},n.org.fn=t[0]?a(t[0]):void 0,n.org.fn||delete n.org.fn}else if(\"TITLE\"===c){let e=i;l&&(e=o(e)),n.org=n.org||{},n.org.title=e?a(e):void 0,n.org.title||delete n.org.title}else if(\"NOTE\"===c){let e=i;l&&(e=o(e)),n.note=a(e)}else if(\"BDAY\"===c){let e=i.split(/[T ]/)[0].trim(),t=null,s=null,r=null;const a=e.replace(/-/g,\"\");if(6===a.length&&/^\\d{6}$/.test(a)){const e=parseInt(a.substring(0,2),10);s=parseInt(a.substring(2,4),10),r=parseInt(a.substring(4,6),10),t=e>=35?1900+e:2e3+e}else if(e.startsWith(\"--\")||e.startsWith(\"----\")){const t=e.replace(/^-+/,\"\");if(4===t.length&&/^\\d{4}$/.test(t))s=parseInt(t.substring(0,2),10),r=parseInt(t.substring(2,4),10);else if(t.includes(\"-\")){const e=t.split(\"-\");e.length>=2&&(s=parseInt(e[0],10),r=parseInt(e[1],10))}}else if(8===a.length&&/^\\d{8}$/.test(a))t=parseInt(a.substring(0,4),10),s=parseInt(a.substring(4,6),10),r=parseInt(a.substring(6,8),10);else if(e.includes(\"-\")){const i=e.split(\"-\");i[0]&&\"\"!==i[0]&&!/^-+$/.test(i[0])&&(t=parseInt(i[0],10)),i.length>=2&&(s=parseInt(i[1],10)),i.length>=3&&(r=parseInt(i[2],10))}s&&s>=1&&s<=12&&r&&r>=1&&r<=31&&(!t||t>=1800&&t<=2200)&&(n.bday={m:s,d:r},t&&(n.bday.y=t))}else if(\"PHOTO\"===c){const e=t.split(\";\").slice(1);let s=\"jpeg\",r=null;e.forEach(e=>{const[t,i]=e.split(\"=\");t&&\"TYPE\"===t.trim().toUpperCase()?s=i?i.trim().toLowerCase():\"jpeg\":t&&\"ENCODING\"===t.trim().toUpperCase()&&(r=i?i.trim().toLowerCase():null)}),n.photo=\"b\"===r?{type:s,data:i,ref:p}:{type:s,data:p,ref:i}}else if(\"TEL\"===c){const e=t.split(\";\").filter(e=>e.trim().toUpperCase().startsWith(\"TYPE=\")).flatMap(e=>{const t=e.indexOf(\"=\");return e.substring(t+1).split(\",\").map(e=>{const t=e.trim().toLowerCase();return t.startsWith(\"type=\")?t.substring(5):t})}).filter(e=>\"internet\"!==e),s=`tel|${i}`;r.has(s)||r.set(s,new Set),e.forEach(e=>r.get(s).add(e))}else if(\"EMAIL\"===c){const e=t.split(\";\").filter(e=>e.trim().toUpperCase().startsWith(\"TYPE=\")).flatMap(e=>{const t=e.indexOf(\"=\");return e.substring(t+1).split(\",\").map(e=>{const t=e.trim().toLowerCase();return t.startsWith(\"type=\")?t.substring(5):t})}).filter(e=>\"internet\"!==e),s=`email|${i}`;r.has(s)||r.set(s,new Set),e.forEach(e=>r.get(s).add(e))}else if(\"IMPP\"===c){const e=t.split(\";\").filter(e=>e.trim().toUpperCase().startsWith(\"TYPE=\")).flatMap(e=>{const t=e.indexOf(\"=\");return e.substring(t+1).split(\",\").map(e=>{const t=e.trim().toLowerCase();return t.startsWith(\"type=\")?t.substring(5):t})}).filter(e=>\"internet\"!==e),s=i.startsWith(\"tinode:\")?`tinode|${i}`:`impp|${i}`;r.has(s)||r.set(s,new Set),e.forEach(e=>r.get(s).add(e))}else if(\"URL\"===c){const e=t.split(\";\").filter(e=>e.trim().toUpperCase().startsWith(\"TYPE=\")).flatMap(e=>{const t=e.indexOf(\"=\");return e.substring(t+1).split(\",\").map(e=>{const t=e.trim().toLowerCase();return t.startsWith(\"type=\")?t.substring(5):t})}).filter(e=>\"internet\"!==e),s=`http|${i}`;r.has(s)||r.set(s,new Set),e.forEach(e=>r.get(s).add(e))}}),r.size>0&&(n.comm=[],r.forEach((e,t)=>{const[s,i]=t.split(\"|\",2);n.comm.push({proto:s,des:Array.from(e),value:i})})),n},z.isFileSupported=function(e,t){return\"text/vcard\"==e||(t||\"\").endsWith(\".vcf\")||(t||\"\").endsWith(\".vcard\")},\"undefined\"!=typeof WebSocket&&(K=WebSocket),\"undefined\"!=typeof XMLHttpRequest&&(H=XMLHttpRequest),\"undefined\"!=typeof indexedDB&&(Q=indexedDB),function(){const e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\"undefined\"==typeof btoa&&(s.g.btoa=function(t=\"\"){let s=t,i=\"\";for(let t,n=0,r=0,a=e;s.charAt(0|r)||(a=\"=\",r%1);i+=a.charAt(63&n>>8-r%1*8)){if(t=s.charCodeAt(r+=3/4),t>255)throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");n=n<<8|t}return i}),\"undefined\"==typeof atob&&(s.g.atob=function(t=\"\"){let s=t.replace(/=+$/,\"\"),i=\"\";if(s.length%4==1)throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(let t,n=0,r=0,a=0;t=s.charAt(a++);~t&&(r=n%4?64*r+t:t,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)t=e.indexOf(t);return i}),\"undefined\"==typeof window&&(s.g.window={WebSocket:K,XMLHttpRequest:H,indexedDB:Q,URL:{createObjectURL:function(){throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\")}}}),N.setNetworkProviders(K,H),O.setNetworkProvider(H),C.setDatabaseProvider(Q)}();class Y{_host;_secure;_appName;_apiKey;_browser=\"\";_platform;_hwos=\"undefined\";_humanLanguage=\"xx\";_loggingEnabled=!1;_trimLongStrings=!1;_myUID=null;_authenticated=!1;_login=null;_authToken=null;_inPacketCount=0;_messageId=Math.floor(65535*Math.random()+65535);_serverInfo=null;_deviceToken=null;_pendingPromises={};_expirePromises=null;_connection=null;_persist=!1;_db=null;_cache={};constructor(e,t){if(this._host=e.host,this._secure=e.secure,this._appName=e.appName||\"Undefined\",this._apiKey=e.apiKey,this._platform=e.platform||\"web\",\"undefined\"!=typeof navigator&&(this._browser=function(e,t){e=e||\"\";let s,i=\"\";/reactnative/i.test(t)&&(i=\"ReactNative; \");let n=(e=e.replace(\" (KHTML, like Gecko)\",\"\")).match(/(AppleWebKit\\/[.\\d]+)/i);if(n){const t=[\"edg\",\"chrome\",\"safari\",\"mobile\",\"version\"];let i,r=e.substr(n.index+n[0].length).split(\" \"),a=[];for(let e=0;e<r.length;e++){let s=/([\\w.]+)[\\/]([\\.\\d]+)/.exec(r[e]);s&&(a.push([s[1],s[2],t.findIndex(e=>s[1].toLowerCase().startsWith(e))]),\"Version\"==s[1]&&(i=s[2]))}a.sort((e,t)=>e[2]-t[2]),a.length>0?(a[0][0].toLowerCase().startsWith(\"edg\")?a[0][0]=\"Edge\":\"OPR\"==a[0][0]?a[0][0]=\"Opera\":\"Safari\"==a[0][0]&&i&&(a[0][1]=i),s=a[0][0]+\"/\"+a[0][1]):s=n[1]}else/firefox/i.test(e)?(n=/Firefox\\/([.\\d]+)/g.exec(e),s=n?\"Firefox/\"+n[1]:\"Firefox/?\"):(n=/([\\w.]+)\\/([.\\d]+)/.exec(e),n?s=n[1]+\"/\"+n[2]:(n=e.split(\" \"),s=n[0]));if(n=s.split(\"/\"),n.length>1){const e=n[1].split(\".\"),t=e[1]?\".\"+e[1].substr(0,2):\"\";s=`${n[0]}/${e[0]}${t}`}return i+s}(navigator.userAgent,navigator.product),this._hwos=navigator.platform,this._humanLanguage=navigator.language||\"en-US\"),N.logger=this.logger,q().logger=this.logger,\"lp\"!=e.transport&&\"ws\"!=e.transport&&(e.transport=function(){if(\"object\"==typeof window){if(window.WebSocket)return\"ws\";if(window.XMLHttpRequest)return\"lp\"}return null}()),this._connection=new N(e,\"0\",!0),this._connection.onMessage=e=>{this.#S(e)},this._connection.onOpen=e=>this.#E(),this._connection.onDisconnect=(e,t)=>this.#A(e,t),this._connection.onAutoreconnectIteration=(e,t)=>{this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e,t)},this._persist=e.persist,this._db=new C(this.logger,this.logger),this._persist){const e=[];this._db.initDatabase().then(t=>this._db.mapTopics(t=>{let s=this.#D(\"topic\",t.name);s||(s=t.name==c?new G:t.name==l?new W:new V(t.name),this._db.deserializeTopic(s,t),this.#N(s),s._cachePutSelf(),this._db.maxDelId(s.name).then(e=>{s._maxDel=Math.max(s._maxDel,e||0)}),delete s._new,e.push(s._loadMessages(this._db)))})).then(e=>this._db.mapUsers(e=>{this.#I(\"user\",e.uid,w({},e.public))})).then(t=>Promise.all(e)).then(e=>{t&&t(),this.logger(\"Persistent cache initialized.\")}).catch(e=>{t&&t(e),this.logger(\"Failed to initialize persistent cache:\",e)})}else this._db.deleteDatabase().then(e=>{t&&t()})}logger(e,...t){if(this._loggingEnabled){const s=new Date,i=(\"0\"+s.getUTCHours()).slice(-2)+\":\"+(\"0\"+s.getUTCMinutes()).slice(-2)+\":\"+(\"0\"+s.getUTCSeconds()).slice(-2)+\".\"+(\"00\"+s.getUTCMilliseconds()).slice(-3);console.log(\"[\"+i+\"]\",e,t.join(\" \"))}}#R(e){let t=null;return e&&(t=new Promise((t,s)=>{this._pendingPromises[e]={resolve:t,reject:s,ts:new Date}})),t}#C(e,t,s,i){const n=this._pendingPromises[e];n&&(delete this._pendingPromises[e],t>=200&&t<400?n.resolve&&n.resolve(s):n.reject&&n.reject(new m(i,t)))}#k(e,t){let s;t&&(s=this.#R(t)),e=y(e);let i=JSON.stringify(e);this.logger(\"out: \"+(this._trimLongStrings?JSON.stringify(e,J):i));try{this._connection.sendText(i)}catch(e){if(!t)throw e;this.#C(t,N.NETWORK_ERROR,null,e.message)}return s}#S(e){if(!e)return;if(this._inPacketCount++,this.onRawMessage&&this.onRawMessage(e),\"0\"===e)return void(this.onNetworkProbe&&this.onNetworkProbe());let t=JSON.parse(e,f);t?(this.logger(\"in: \"+(this._trimLongStrings?JSON.stringify(t,J):e)),this.onMessage&&this.onMessage(t),t.ctrl?(this.onCtrlMessage&&this.onCtrlMessage(t.ctrl),t.ctrl.id&&this.#C(t.ctrl.id,t.ctrl.code,t.ctrl,t.ctrl.text),setTimeout(e=>{if(205==t.ctrl.code&&\"evicted\"==t.ctrl.text){const e=this.#D(\"topic\",t.ctrl.topic);e&&(e._resetSub(),t.ctrl.params&&t.ctrl.params.unsub&&e._gone())}else if(t.ctrl.code<300&&t.ctrl.params)if(\"data\"==t.ctrl.params.what){const e=this.#D(\"topic\",t.ctrl.topic);e&&e._allMessagesReceived(t.ctrl.params.count)}else if(\"sub\"==t.ctrl.params.what){const e=this.#D(\"topic\",t.ctrl.topic);e&&e._processMetaSubs([])}},0)):setTimeout(e=>{if(t.meta){const e=this.#D(\"topic\",t.meta.topic);e&&e._routeMeta(t.meta),t.meta.id&&this.#C(t.meta.id,200,t.meta,\"META\"),this.onMetaMessage&&this.onMetaMessage(t.meta)}else if(t.data){const e=this.#D(\"topic\",t.data.topic);e&&e._routeData(t.data),this.onDataMessage&&this.onDataMessage(t.data)}else if(t.pres){const e=this.#D(\"topic\",t.pres.topic);e&&e._routePres(t.pres),this.onPresMessage&&this.onPresMessage(t.pres)}else if(t.info){const e=this.#D(\"topic\",t.info.topic);e&&e._routeInfo(t.info),this.onInfoMessage&&this.onInfoMessage(t.info)}else this.logger(\"ERROR: Unknown packet received.\")},0)):(this.logger(\"in: \"+e),this.logger(\"ERROR: failed to parse data\"))}#E(){this._expirePromises||(this._expirePromises=setInterval(e=>{const t=new m(\"timeout\",504),s=new Date((new Date).getTime()-5e3);for(let e in this._pendingPromises){let i=this._pendingPromises[e];i&&i.ts<s&&(this.logger(\"Promise expired\",e),delete this._pendingPromises[e],i.reject&&i.reject(t))}},1e3)),this.hello()}#A(e,t){this._inPacketCount=0,this._serverInfo=null,this._authenticated=!1,this._expirePromises&&(clearInterval(this._expirePromises),this._expirePromises=null),this.#q(\"topic\",(e,t)=>{e._resetSub()});for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#U(){return this._appName+\" (\"+(this._browser?this._browser+\"; \":\"\")+this._hwos+\"); \"+a}#O(e,t){switch(e){case\"hi\":return{hi:{id:this.getNextUniqueId(),ver:r,ua:this.#U(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case\"acc\":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case\"login\":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case\"sub\":return{sub:{id:this.getNextUniqueId(),topic:t,set:{},get:{}}};case\"leave\":return{leave:{id:this.getNextUniqueId(),topic:t,unsub:!1}};case\"pub\":return{pub:{id:this.getNextUniqueId(),topic:t,noecho:!1,head:null,content:{}}};case\"get\":return{get:{id:this.getNextUniqueId(),topic:t,what:null,desc:{},sub:{},data:{}}};case\"set\":return{set:{id:this.getNextUniqueId(),topic:t,desc:{},sub:{},tags:[],aux:{}}};case\"del\":return{del:{id:this.getNextUniqueId(),topic:t,what:null,delseq:null,user:null,hard:!1}};case\"note\":return{note:{topic:t,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#I(e,t,s){this._cache[e+\":\"+t]=s}#D(e,t){return this._cache[e+\":\"+t]}#j(e,t){delete this._cache[e+\":\"+t]}#q(e,t,s){const i=e?e+\":\":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#N(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#D(\"user\",e);if(t)return{user:e,public:w({},t)}},e._cachePutUser=(e,t)=>{this.#I(\"user\",e,w({},t.public))},e._cacheDelUser=e=>{this.#j(\"user\",e)},e._cachePutSelf=t=>{this.#I(\"topic\",e.name,e)},e._cacheDelSelf=t=>{this.#j(\"topic\",e.name)}}#L(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return\"object\"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return V.topicType(e)}static isMeTopicName(e){return V.isMeTopicName(e)}static isSelfTopicName(e){return V.isSelfTopicName(e)}static isGroupTopicName(e){return V.isGroupTopicName(e)}static isP2PTopicName(e){return V.isP2PTopicName(e)}static isCommTopicName(e){return V.isCommTopicName(e)}static isNewGroupTopicName(e){return V.isNewGroupTopicName(e)}static isChannelTopicName(e){return V.isChannelTopicName(e)}static getVersion(){return r}static setNetworkProviders(e,t){K=e,H=t,N.setNetworkProviders(K,H),O.setNetworkProvider(H)}static setDatabaseProvider(e){Q=e,C.setDatabaseProvider(Q)}static getLibrary(){return a}static isNullValue(e){return e===p}static isServerAssignedSeq(e){return e>0&&e<u}static parseTinodeUrl(e){if(!e||\"string\"!=typeof e)return null;if(!e.startsWith(\"tinode:\"))return e;const t=e.substring(7).split(\"/\");return t.length<2||\"id\"!==t[t.length-2]?e:t[t.length-1]}static isValidTagValue(e){return e&&\"string\"==typeof e&&e.length>3&&e.length<24&&/^[a-z0-9][a-z0-9_\\-]{3,23}$/i.test(e)}static tagSplit(e){if(!e)return null;const t=(e=e.trim()).indexOf(\":\");if(t<=0)return null;const s=e.substring(t+1);return s?{prefix:e.substring(0,t),value:s}:null}static setUniqueTag(e,t){if(!e||0==e.length)return[t];const s=Y.tagSplit(t);return s?((e=e.filter(e=>e&&!e.startsWith(s.prefix))).push(t),e):e}static clearTagPrefix(e,t){return e&&0!=e.length?e.filter(e=>e&&!e.startsWith(t)):[]}static tagByPrefix(e,t){if(e)return e.find(e=>e&&e.startsWith(t))}getNextUniqueId(){return 0!=this._messageId?\"\"+this._messageId++:void 0}connect(e){return this._connection.connect(e)}reconnect(e){this._connection.reconnect(e)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(e){if(\"string\"!=typeof e)return e;if(_(e)){const t=\"scheme://host/\",s=new URL(e,t);this._apiKey&&s.searchParams.append(\"apikey\",this._apiKey),this._authToken&&this._authToken.token&&(s.searchParams.append(\"auth\",\"token\"),s.searchParams.append(\"secret\",this._authToken.token)),e=s.toString().substring(t.length-1)}return e}account(e,t,s,i,n){const r=this.#O(\"acc\");return r.acc.user=e,r.acc.scheme=t,r.acc.secret=s,r.acc.login=i,n&&(r.acc.desc.defacs=n.defacs,r.acc.desc.public=n.public,r.acc.desc.private=n.private,r.acc.desc.trusted=n.trusted,r.acc.tags=n.tags,r.acc.cred=n.cred,r.acc.tmpscheme=n.scheme,r.acc.tmpsecret=n.secret,Array.isArray(n.attachments)&&n.attachments.length>0&&(r.extra={attachments:n.attachments.filter(e=>_(e))})),this.#k(r,r.acc.id)}createAccount(e,t,s,i){let n=this.account(\"new\",e,t,s,i);return s&&(n=n.then(e=>this.#L(e))),n}createAccountBasic(e,t,s){return e=e||\"\",t=t||\"\",this.createAccount(\"basic\",X(e+\":\"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||\"\",s=s||\"\",this.account(e,\"basic\",X(t+\":\"+s),!1,i)}hello(){const e=this.#O(\"hi\");return this.#k(e,e.hi.id).then(e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e)).catch(e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)})}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#k({hi:{dev:e||Y.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#O(\"login\");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#k(i,i.login.id).then(e=>this.#L(e))}loginBasic(e,t,s){return this.login(\"basic\",X(e+\":\"+t),s).then(t=>(this._login=e,t))}loginToken(e,t){return this.login(\"token\",e,t)}requestResetAuthSecret(e,t,s){return this.login(\"reset\",X(e+\":\"+t+\":\"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#O(\"sub\",e);if(e||(e=o),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;Y.isNewGroupTopicName(e)?i.sub.set.desc=t:Y.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter(e=>_(e))}),s.tags&&(i.sub.set.tags=s.tags),s.aux&&(i.sub.set.aux=s.aux)}return this.#k(i,i.sub.id)}leave(e,t){const s=this.#O(\"leave\",e);return s.leave.unsub=t,this.#k(s,s.leave.id)}createMessage(e,t,s){const i=this.#O(\"pub\",e);let n=\"string\"==typeof t?q().parse(t):t;return n&&!q().isPlainText(n)&&(i.pub.head={mime:q().getContentType()},t=n),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter(e=>_(e))}),this.#k(s,e.id)}oobNotification(e){switch(this.logger(\"oob: \"+(this._trimLongStrings?JSON.stringify(e,J):e)),e.what){case\"msg\":if(!e.seq||e.seq<1||!e.topic)break;if(!this.isConnected())break;const t=this.#D(\"topic\",e.topic);if(!t)break;if(t.isSubscribed())break;t.maxMsgSeq()<e.seq&&(t.isChannelType()&&t._updateReceived(e.seq,\"fake-uid\"),e.xfrom&&!this.#D(\"user\",e.xfrom)&&this.getMeta(e.xfrom,(new j).withDesc().build()).catch(e=>{this.logger(\"Failed to get the name of a new sender\",e)}),t.subscribe(null).then(e=>t.getMeta(new j(t).withLaterData(24).withLaterDel(24).build())).then(e=>{t.leaveDelayed(!1,1e3)}).catch(e=>{this.logger(\"On push data fetch failed\",e)}).finally(e=>{this.getMeTopic()._refreshContact(\"msg\",t)}));break;case\"read\":this.getMeTopic()._routePres({what:\"read\",seq:e.seq});break;case\"sub\":if(!this.isMe(e.xfrom))break;const s={given:e.modeGiven,want:e.modeWant},i=new n(s),r=i.mode&&i.mode!=n._NONE?{what:\"acs\",src:e.topic,dacs:s}:{what:\"gone\",src:e.topic};this.getMeTopic()._routePres(r);break;default:this.logger(\"Unknown push type ignored\",e.what)}}getMeta(e,t){const s=this.#O(\"get\",e);return s.get=w(s.get,t),this.#k(s,s.get.id)}setMeta(e,t){const s=this.#O(\"set\",e),i=[];return t&&([\"desc\",\"sub\",\"tags\",\"cred\",\"aux\"].forEach(e=>{t.hasOwnProperty(e)&&(i.push(e),s.set[e]=t[e])}),Array.isArray(t.attachments)&&t.attachments.length>0&&(s.extra={attachments:t.attachments.filter(e=>_(e))})),0==i.length?Promise.reject(new Error(\"Invalid {set} parameters\")):this.#k(s,s.set.id)}delMessages(e,t,s){const i=this.#O(\"del\",e);return i.del.what=\"msg\",i.del.delseq=t,i.del.hard=s,this.#k(i,i.del.id)}delTopic(e,t){const s=this.#O(\"del\",e);return s.del.what=\"topic\",s.del.hard=t,this.#k(s,s.del.id)}delSubscription(e,t){const s=this.#O(\"del\",e);return s.del.what=\"sub\",s.del.user=t,this.#k(s,s.del.id)}delCredential(e,t){const s=this.#O(\"del\",c);return s.del.what=\"cred\",s.del.cred={meth:e,val:t},this.#k(s,s.del.id)}delCurrentUser(e){const t=this.#O(\"del\",null);return t.del.what=\"user\",t.del.hard=e,this.#k(t,t.del.id).then(e=>{this._myUID=null})}note(e,t,s){if(s<=0||s>=u)throw new Error(`Invalid message id ${s}`);const i=this.#O(\"note\",e);i.note.what=t,i.note.seq=s,this.#k(i)}noteKeyPress(e,t){const s=this.#O(\"note\",e);s.note.what=t||\"kp\",this.#k(s)}videoCall(e,t,s,i){const n=this.#O(\"note\",e);n.note.seq=t,n.note.what=\"call\",n.note.event=s,n.note.payload=i,this.#k(n,n.note.id)}getTopic(e){let t=this.#D(\"topic\",e);return!t&&e&&(t=e==c?new G:e==l?new W:new V(e),this.#N(t),t._cachePutSelf()),t}cacheGetTopic(e){return this.#D(\"topic\",e)}cacheRemTopic(e){this.#j(\"topic\",e)}mapTopics(e,t){this.#q(\"topic\",e,t)}isTopicCached(e){return!!this.#D(\"topic\",e)}newGroupTopicName(e){return(e?h:o)+this.getNextUniqueId()}getMeTopic(){return this.getTopic(c)}getFndTopic(){return this.getTopic(l)}getLargeFileHelper(){return new O(this,\"0\")}getCurrentUserID(){return this._myUID}isMe(e){return this._myUID===e}getCurrentLogin(){return this._login}getServerInfo(){return this._serverInfo}report(e,t){return this.publish(\"sys\",q().attachJSON(null,{action:e,target:t}))}getServerParam(e,t){return this._serverInfo&&this._serverInfo[e]||t}enableLogging(e,t){this._loggingEnabled=e,this._trimLongStrings=e&&t}setHumanLanguage(e){e&&(this._humanLanguage=e)}isTopicOnline(e){const t=this.#D(\"topic\",e);return t&&t.online}getTopicAccessMode(e){const t=this.#D(\"topic\",e);return t?t.acs:null}wantAkn(e){this._messageId=e?Math.floor(16777215*Math.random()+16777215):0}onWebsocketOpen=void 0;onConnect=void 0;onDisconnect=void 0;onLogin=void 0;onCtrlMessage=void 0;onDataMessage=void 0;onPresMessage=void 0;onMessage=void 0;onRawMessage=void 0;onNetworkProbe=void 0;onAutoreconnectIteration=void 0}return Y.MESSAGE_STATUS_NONE=0,Y.MESSAGE_STATUS_QUEUED=10,Y.MESSAGE_STATUS_SENDING=20,Y.MESSAGE_STATUS_FAILED=30,Y.MESSAGE_STATUS_FATAL=40,Y.MESSAGE_STATUS_SENT=50,Y.MESSAGE_STATUS_RECEIVED=60,Y.MESSAGE_STATUS_READ=70,Y.MESSAGE_STATUS_TO_ME=80,Y.DEL_CHAR=p,Y.MAX_MESSAGE_SIZE=\"maxMessageSize\",Y.MAX_SUBSCRIBER_COUNT=\"maxSubscriberCount\",Y.MIN_TAG_LENGTH=\"minTagLength\",Y.MAX_TAG_LENGTH=\"maxTagLength\",Y.MAX_TAG_COUNT=\"maxTagCount\",Y.MAX_FILE_UPLOAD_SIZE=\"maxFileUploadSize\",Y.REQ_CRED_VALIDATORS=\"reqCred\",Y.MSG_DELETE_AGE=\"msgDelAge\",Y.URI_TOPIC_ID_PREFIX=\"tinode:///id/\",Y.URI_TOPIC_ALIAS_PREFIX=\"tinode:///alias/\",Y.TAG_ALIAS=g,Y.TAG_EMAIL=\"email:\",Y.TAG_PHONE=\"tel:\",i}()});"
  },
  {
    "path": "umd/vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-7e28c7.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-7e28c7\"],{\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouType.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouType.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouType; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n/* harmony import */ var _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeState.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeState.js\");\n/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js\");\n/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\");\n/* harmony import */ var _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AsYouTypeParser.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeParser.js\");\n/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n/* harmony import */ var _helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./helpers/getCountryByNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\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    this.metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\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    // `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    this.defaultCountry = defaultCountry;\n    this.defaultCallingCode = defaultCallingCode;\n    this.reset();\n  }\n  return _createClass(AsYouType, [{\n    key: \"getCountryAndCallingCode\",\n    value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n      // Set `defaultCountry` and `defaultCallingCode` options.\n      var defaultCountry;\n      var defaultCallingCode;\n      // Turns out `null` also has type \"object\". Weird.\n      if (optionsOrDefaultCountry) {\n        if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(optionsOrDefaultCountry)) {\n          defaultCountry = optionsOrDefaultCountry.defaultCountry;\n          defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n        } else {\n          defaultCountry = optionsOrDefaultCountry;\n        }\n      }\n      if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n        defaultCountry = undefined;\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      return [defaultCountry, defaultCallingCode];\n    }\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    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      if (justLeadingPlus) {\n        this.formattedOutput = '+';\n      } else if (digits) {\n        this.determineTheCountryIfNeeded();\n        // Match the available formats by the currently available leading digits.\n        if (this.state.nationalSignificantNumber) {\n          this.formatter.narrowDownMatchingFormats(this.state);\n        }\n        var formattedNationalNumber;\n        if (this.metadata.hasSelectedNumberingPlan()) {\n          formattedNationalNumber = this.formatter.format(digits, this.state);\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();\n            // If it could, then re-try formatting the new national (significant) number.\n            var nationalDigits = this.state.getNationalDigits();\n            if (nationalDigits) {\n              formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n            }\n          }\n        }\n        this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n      }\n      return this.formattedOutput;\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var _this = this;\n      this.state = new _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n        onCountryChange: function onCountryChange(country) {\n          // Before version `1.6.0`, the official `AsYouType` formatter API\n          // included a `.country` property on 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          _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n          _this.parser.reset(_this.metadata.numberingPlan);\n        }\n      });\n      this.formatter = new _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n        state: this.state,\n        metadata: this.metadata\n      });\n      this.parser = new _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n        defaultCountry: this.defaultCountry,\n        defaultCallingCode: this.defaultCallingCode,\n        metadata: this.metadata,\n        state: this.state,\n        onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n          _this.determineTheCountryIfNeeded();\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\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    key: \"isInternational\",\n    value: function isInternational() {\n      return this.state.international;\n    }\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    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    }\n\n    // A legacy alias.\n  }, {\n    key: \"getCountryCallingCode\",\n    value: function getCountryCallingCode() {\n      return this.getCallingCode();\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     * Returns `undefined` if no phone number has been input yet.\r\n     * @return {string} [country]\r\n     */\n  }, {\n    key: \"getCountry\",\n    value: function getCountry() {\n      var digits = this.state.digits;\n      // Return `undefined` if no digits have been input yet.\n      if (digits) {\n        return this._getCountry();\n      }\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    key: \"_getCountry\",\n    value: function _getCountry() {\n      var country = this.state.country;\n      /* istanbul ignore if */\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      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    }\n\n    // Prepends `+CountryCode ` in case of an international phone number\n  }, {\n    key: \"getFullNumber\",\n    value: function getFullNumber(formattedNationalNumber) {\n      var _this2 = this;\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        var callingCode = this.state.callingCode;\n        if (!callingCode) {\n          return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n        }\n        if (!formattedNationalNumber) {\n          return prefix(callingCode);\n        }\n        return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\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        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,\n        nationalPrefix = _this$state.nationalPrefix;\n      var number = nationalSignificantNumber;\n      var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;\n      if (prefix) {\n        number = prefix + number;\n      }\n      return number;\n    }\n  }, {\n    key: \"getNonFormattedNumber\",\n    value: function getNonFormattedNumber() {\n      var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;\n      return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());\n    }\n  }, {\n    key: \"getNonFormattedTemplate\",\n    value: function getNonFormattedTemplate() {\n      var number = this.getNonFormattedNumber();\n      if (number) {\n        return number.replace(/[\\+\\d]/g, _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__.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    }\n\n    // Determines the exact country of the phone number\n    // entered so far based on the country phone code\n    // and the national phone number.\n  }, {\n    key: \"determineTheCountry\",\n    value: function determineTheCountry() {\n      this.state.setCountry((0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n        nationalNumber: this.state.nationalSignificantNumber,\n        metadata: this.metadata\n      }));\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    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;\n\n      // Will return `undefined` if no digits have been input.\n      if (!digits) {\n        return;\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\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    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;\n\n      // `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      var country = this._getCountry();\n      if (!nationalSignificantNumber) {\n        return;\n      }\n\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      if (!country && !callingCode) {\n        return;\n      }\n\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      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_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.metadata.metadata);\n          metadata.selectNumberingPlan(country);\n          var _callingCode = metadata.numberingPlan.callingCode();\n          var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n          if (ambiguousCountries.length > 1) {\n            var exactCountry = (0,_helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(nationalSignificantNumber, {\n              countries: ambiguousCountries,\n              metadata: this.metadata.metadata\n            });\n            if (exactCountry) {\n              country = exactCountry;\n            }\n          }\n        }\n      }\n      var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n      if (carrierCode) {\n        phoneNumber.carrierCode = carrierCode;\n      }\n      // Phone number extensions are not supported by \"As You Type\" formatter.\n      return phoneNumber;\n    }\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    key: \"isPossible\",\n    value: function isPossible() {\n      var phoneNumber = this.getNumber();\n      if (!phoneNumber) {\n        return false;\n      }\n      return phoneNumber.isPossible();\n    }\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    key: \"isValid\",\n    value: function isValid() {\n      var phoneNumber = this.getNumber();\n      if (!phoneNumber) {\n        return false;\n      }\n      return phoneNumber.isValid();\n    }\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    key: \"getNationalNumber\",\n    value: function getNationalNumber() {\n      return this.state.nationalSignificantNumber;\n    }\n\n    /**\r\n     * Returns the phone number characters entered by the user.\r\n     * @return {string}\r\n     */\n  }, {\n    key: \"getChars\",\n    value: function getChars() {\n      return (this.state.international ? '+' : '') + this.state.digits;\n    }\n\n    /**\r\n     * Returns the template for the formatted phone number.\r\n     * @return {string}\r\n     */\n  }, {\n    key: \"getTemplate\",\n    value: function getTemplate() {\n      return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouType.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js\":\n/*!*********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js ***!\n  \\*********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PatternMatcher; }\n/* harmony export */ });\n/* harmony import */ var _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternParser.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar PatternMatcher = /*#__PURE__*/function () {\n  function PatternMatcher(pattern) {\n    _classCallCheck(this, PatternMatcher);\n    this.matchTree = new _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]().parse(pattern);\n  }\n  return _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      if (!string) {\n        throw new Error('String is required');\n      }\n      var result = _match(string.split(''), this.matchTree, true);\n      if (result && result.match) {\n        delete result.matchedChars;\n      }\n      if (result && result.overflow) {\n        if (!allowOverflow) {\n          return;\n        }\n      }\n      return result;\n    }\n  }]);\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\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    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      /* istanbul ignore else */\n      if (characters.length === tree.length) {\n        return {\n          match: true,\n          matchedChars: characters\n        };\n      }\n      // `tree` is always a single character.\n      // If `tree.indexOf(characterString) === 0`\n      // then `characters.length === tree.length`.\n      /* istanbul ignore next */\n      return {\n        partialMatch: true\n        // matchedChars: characters\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        /* istanbul ignore else */\n        if (characters.length > tree.length) {\n          return {\n            overflow: true\n          };\n        }\n      }\n      return {\n        match: true,\n        matchedChars: characters.slice(0, tree.length)\n      };\n    }\n    return;\n  }\n  if (Array.isArray(tree)) {\n    var restCharacters = characters.slice();\n    var i = 0;\n    while (i < tree.length) {\n      var subtree = tree[i];\n      var result = _match(restCharacters, subtree, last && i === tree.length - 1);\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        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\n              // matchedChars: characters\n            };\n          }\n        }\n      } else {\n        /* istanbul ignore else */\n        if (result.partialMatch) {\n          return {\n            partialMatch: true\n            // matchedChars: characters\n          };\n        } else {\n          throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n        }\n      }\n      i++;\n    }\n    // If `last` then overflow has already been checked\n    // by the last element of the `tree` array.\n    /* istanbul ignore if */\n    if (last) {\n      return {\n        overflow: true\n      };\n    }\n    return {\n      match: true,\n      matchedChars: characters.slice(0, characters.length - restCharacters.length)\n    };\n  }\n  switch (tree.op) {\n    case '|':\n      var partialMatch;\n      for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n        var branch = _step.value;\n        var _result = _match(characters, branch, last);\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      if (partialMatch) {\n        return {\n          partialMatch: true\n          // matchedChars: ...\n        };\n      }\n      // Not even a partial match.\n      return;\n    case '[]':\n      for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n        var _char = _step2.value;\n        if (characters[0] === _char) {\n          if (characters.length === 1) {\n            return {\n              match: true,\n              matchedChars: characters\n            };\n          }\n          if (last) {\n            return {\n              overflow: true\n            };\n          }\n          return {\n            match: true,\n            matchedChars: [_char]\n          };\n        }\n      }\n      // No character matches.\n      return;\n\n    /* istanbul ignore next */\n    default:\n      throw new Error(\"Unsupported instruction tree: \".concat(tree));\n  }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js\":\n/*!********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js ***!\n  \\********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PatternParser; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar PatternParser = /*#__PURE__*/function () {\n  function PatternParser() {\n    _classCallCheck(this, PatternParser);\n  }\n  return _createClass(PatternParser, [{\n    key: \"parse\",\n    value: function parse(pattern) {\n      this.context = [{\n        or: true,\n        instructions: []\n      }];\n      this.parsePattern(pattern);\n      if (this.context.length !== 1) {\n        throw new Error('Non-finalized contexts left when pattern parse ended');\n      }\n      var _this$context$ = this.context[0],\n        branches = _this$context$.branches,\n        instructions = _this$context$.instructions;\n      if (branches) {\n        return {\n          op: '|',\n          args: branches.concat([expandSingleElementArray(instructions)])\n        };\n      }\n\n      /* istanbul ignore if */\n      if (instructions.length === 0) {\n        throw new Error('Pattern is required');\n      }\n      if (instructions.length === 1) {\n        return instructions[0];\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      var match = pattern.match(OPERATOR);\n      if (!match) {\n        if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n          throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n        }\n        this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n        return;\n      }\n      var operator = match[1];\n      var before = pattern.slice(0, match.index);\n      var rightPart = pattern.slice(match.index + operator.length);\n      switch (operator) {\n        case '(?:':\n          if (before) {\n            this.parsePattern(before);\n          }\n          this.startContext({\n            or: true,\n            instructions: [],\n            branches: []\n          });\n          break;\n        case ')':\n          if (!this.getContext().or) {\n            throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n          }\n          if (before) {\n            this.parsePattern(before);\n          }\n          if (this.getContext().instructions.length === 0) {\n            throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n          }\n          var _this$getContext = this.getContext(),\n            branches = _this$getContext.branches;\n          branches.push(expandSingleElementArray(this.getContext().instructions));\n          this.endContext();\n          this.getContext().instructions.push({\n            op: '|',\n            args: branches\n          });\n          break;\n        case '|':\n          if (!this.getContext().or) {\n            throw new Error('\"|\" operator can only be used inside \"or\" groups');\n          }\n          if (before) {\n            this.parsePattern(before);\n          }\n          // The top-level is an implicit \"or\" group, if required.\n          if (!this.getContext().branches) {\n            // `branches` are not defined only for the root implicit \"or\" operator.\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          this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n          this.getContext().instructions = [];\n          break;\n        case '[':\n          if (before) {\n            this.parsePattern(before);\n          }\n          this.startContext({\n            oneOfSet: true\n          });\n          break;\n        case ']':\n          if (!this.getContext().oneOfSet) {\n            throw new Error('\"]\" operator must be preceded by \"[\" operator');\n          }\n          this.endContext();\n          this.getContext().instructions.push({\n            op: '[]',\n            args: parseOneOfSet(before)\n          });\n          break;\n\n        /* istanbul ignore next */\n        default:\n          throw new Error(\"Unknown operator: \".concat(operator));\n      }\n      if (rightPart) {\n        this.parsePattern(rightPart);\n      }\n    }\n  }]);\n}();\n\nfunction parseOneOfSet(pattern) {\n  var values = [];\n  var i = 0;\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      var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n      var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n      var value = prevValue;\n      while (value <= nextValue) {\n        values.push(String.fromCharCode(value));\n        value++;\n      }\n    } else {\n      values.push(pattern[i]);\n    }\n    i++;\n  }\n  return values;\n}\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp(\n// any of:\n'(' +\n// or operator\n'\\\\|' +\n// or\n'|' +\n// or group start\n'\\\\(\\\\?\\\\:' +\n// or\n'|' +\n// or group end\n'\\\\)' +\n// or\n'|' +\n// one-of set start\n'\\\\[' +\n// or\n'|' +\n// one-of set end\n'\\\\]' + ')');\nfunction expandSingleElementArray(array) {\n  if (array.length === 1) {\n    return array[0];\n  }\n  return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   canFormatCompleteNumber: function() { return /* binding */ canFormatCompleteNumber; },\n/* harmony export */   \"default\": function() { return /* binding */ formatCompleteNumber; }\n/* harmony export */ });\n/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n\n\n\nfunction 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  if (matcher.test(state.nationalSignificantNumber)) {\n    return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n      metadata: metadata,\n      shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n    });\n  }\n}\nfunction canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {\n  return (0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';\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\n  var nationalSignificantNumber = state.nationalSignificantNumber,\n    international = state.international,\n    nationalPrefix = state.nationalPrefix,\n    carrierCode = state.carrierCode;\n\n  // 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  if (shouldTryNationalPrefixFormattingRule(format)) {\n    var formattedNumber = formatNationalNumber(state, format, {\n      useNationalPrefixFormattingRule: true,\n      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n      metadata: metadata\n    });\n    if (formattedNumber) {\n      return formattedNumber;\n    }\n  }\n\n  // Format the number without using `national_prefix_formatting_rule`.\n  return formatNationalNumber(state, format, {\n    useNationalPrefixFormattingRule: false,\n    getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n    metadata: metadata\n  });\n}\nfunction formatNationalNumber(state, format, _ref3) {\n  var metadata = _ref3.metadata,\n    useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n    getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n  var formattedNationalNumber = (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.nationalSignificantNumber, format, {\n    carrierCode: state.carrierCode,\n    useInternationalFormat: state.international,\n    withNationalPrefix: useNationalPrefixFormattingRule,\n    metadata: metadata\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.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n      formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;\n    }\n  }\n  if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n    return formattedNationalNumber;\n  }\n}\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//\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n  return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* reexport safe */ _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER; },\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeFormatter; }\n/* harmony export */ });\n/* harmony import */ var _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.util.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\");\n/* harmony import */ var _AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsYouTypeFormatter.complete.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js\");\n/* harmony import */ var _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternMatcher.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/applyInternationalSeparatorStyle.js */ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// 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.\nvar LONGEST_DUMMY_PHONE_NUMBER = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// 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.\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;\n\n// 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.\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true;\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n  return /\\[([^\\[\\]])*\\]/g;\n};\n\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.\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n  return /\\d(?=[^,}][^,}])/g;\n};\n\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//\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' +\n// 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' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*)*' + '$');\n\n// 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.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n  function AsYouTypeFormatter(_ref) {\n    var state = _ref.state,\n      metadata = _ref.metadata;\n    _classCallCheck(this, AsYouTypeFormatter);\n    this.metadata = metadata;\n    this.resetFormat();\n  }\n  return _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      if (numberingPlan) {\n        this.isNANP = numberingPlan.callingCode() === '1';\n        this.matchingFormats = numberingPlan.formats();\n        if (state.nationalSignificantNumber) {\n          this.narrowDownMatchingFormats(state);\n        }\n      } else {\n        this.isNANP = undefined;\n        this.matchingFormats = [];\n      }\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    key: \"format\",\n    value: function format(nextDigits, state) {\n      var _this = this;\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 ((0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__.canFormatCompleteNumber)(state.nationalSignificantNumber, state.country, this.metadata)) {\n        for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n          var _format = _step.value;\n          var formattedCompleteNumber = (0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(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          if (formattedCompleteNumber) {\n            this.resetFormat();\n            this.chosenFormat = _format;\n            this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER), state);\n            this.populatedNationalNumberTemplate = formattedCompleteNumber;\n            // With a new formatting template, the matched position\n            // using the old template needs to be reset.\n            this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n            return formattedCompleteNumber;\n          }\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      return this.formatNationalNumberWithNextDigits(nextDigits, state);\n    }\n\n    // Formats the next phone number digits.\n  }, {\n    key: \"formatNationalNumberWithNextDigits\",\n    value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n      var previouslyChosenFormat = this.chosenFormat;\n\n      // Choose a format from the list of matching ones.\n      var newlyChosenFormat = this.chooseFormat(state);\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      var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n        nationalPrefix = _ref2.nationalPrefix,\n        international = _ref2.international;\n      var leadingDigits = nationalSignificantNumber;\n\n      // \"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\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      var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n      if (leadingDigitsPatternIndex < 0) {\n        leadingDigitsPatternIndex = 0;\n      }\n      this.matchingFormats = this.matchingFormats.filter(function (format) {\n        return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n      });\n\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 `<leadingDigits>`\n      // and yielding another format for 4 `<leadingDigits>` (Australia in this case).\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() &&\n      // !format.domesticCarrierCodeFormattingRule() &&\n      !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n        return false;\n      }\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      if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n        return false;\n      }\n      return true;\n    }\n  }, {\n    key: \"formatMatches\",\n    value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n      var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;\n\n      // 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      if (leadingDigitsPatternsCount === 0) {\n        return true;\n      }\n\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\n      // `leading_digits_patterns` start with 3 digits min\n      // and then go up from there one digit at a time.\n      leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n      var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];\n\n      // 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      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 _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](leadingDigitsPattern).match(leadingDigits, {\n            allowOverflow: true\n          }) !== undefined;\n        } catch (error) /* istanbul ignore next */{\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      }\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      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      var _loop = function _loop() {\n          var format = _step2.value;\n          // If this format is currently being used\n          // and is still suitable, then stick to it.\n          if (_this3.chosenFormat === format) {\n            return 0; // break\n          }\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          /* istanbul ignore if */\n          if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n            return 1; // continue\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 1; // continue\n          }\n          _this3.chosenFormat = format;\n          return 0; // break\n        },\n        _ret;\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      /* istanbul ignore next */\n      for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n        _ret = _loop();\n        if (_ret === 0) break;\n        if (_ret === 1) continue;\n      }\n      if (!this.chosenFormat) {\n        // No format matches the national (significant) phone number.\n        this.resetFormat();\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      /* istanbul ignore if */\n      if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n        return;\n      }\n      // Get formatting template for this phone number format\n      var template = this.getTemplateForFormat(format, state);\n      // If the national number entered is too long\n      // for any phone number format, then abort.\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      }\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      if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n        return ' ';\n      }\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      return '';\n    }\n  }, {\n    key: \"getInternationalPrefixBeforeCountryCallingCode\",\n    value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n      var IDDPrefix = _ref3.IDDPrefix,\n        missingPlus = _ref3.missingPlus;\n      if (IDDPrefix) {\n        return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n      }\n      if (missingPlus) {\n        return '';\n      }\n      return '+';\n    }\n  }, {\n    key: \"getTemplate\",\n    value: function getTemplate(state) {\n      if (!this.template) {\n        return;\n      }\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      var index = -1;\n      var i = 0;\n      var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n        spacing: false\n      }) : '';\n      while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n        index = this.template.indexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, index + 1);\n        i++;\n      }\n      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.template, index + 1);\n    }\n  }, {\n    key: \"setNationalNumberTemplate\",\n    value: function setNationalNumberTemplate(template, state) {\n      this.nationalNumberTemplate = template;\n      this.populatedNationalNumberTemplate = template;\n      // With a new formatting template, the matched position\n      // using the old template needs to be reset.\n      this.populatedNationalNumberTemplatePosition = -1;\n      // 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      if (state.international) {\n        this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER) + (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n      } else {\n        this.template = template;\n      }\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    key: \"getTemplateForFormat\",\n    value: function getTemplateForFormat(format, _ref4) {\n      var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n        international = _ref4.international,\n        nationalPrefix = _ref4.nationalPrefix,\n        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n      var pattern = format.pattern();\n\n      /* istanbul ignore else */\n      if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n        pattern = pattern\n        // Replace anything in the form of [..] with \\d\n        .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\n        // Replace any standalone digit (not the one in `{}`) with \\d\n        .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n      }\n\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      var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];\n\n      // If the national number entered is too long\n      // for any phone number format, then abort.\n      if (nationalSignificantNumber.length > digits.length) {\n        return;\n      }\n\n      // Get a formatting template which can be used to efficiently format\n      // a partial number where digits are added one by one.\n\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      var strictPattern = new RegExp('^' + pattern + '$');\n      var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT);\n\n      // If `this.nationalSignificantNumber` has already sufficient length\n      // to satisfy the `pattern` completely then use it\n      // instead of `digits`.\n      if (strictPattern.test(nationalNumberDummyDigits)) {\n        digits = nationalNumberDummyDigits;\n      }\n      var numberFormat = this.getFormatFormat(format, international);\n      var nationalPrefixIncludedInTemplate;\n\n      // 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      if (this.shouldTryNationalPrefixFormattingRule(format, {\n        international: international,\n        nationalPrefix: nationalPrefix\n      })) {\n        var numberFormatWithNationalPrefix = numberFormat.replace(_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__.FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n        // 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        /* istanbul ignore else */\n        if ((0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])('$1')) {\n          numberFormat = numberFormatWithNationalPrefix;\n          nationalPrefixIncludedInTemplate = true;\n          // Replace all digits of the national prefix in the formatting template\n          // with `DIGIT_PLACEHOLDER`s.\n          if (nationalPrefix) {\n            var i = nationalPrefix.length;\n            while (i > 0) {\n              numberFormat = numberFormat.replace(/\\d/, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n              i--;\n            }\n          }\n        }\n      }\n\n      // Generate formatting template for this phone number format.\n      var template = digits\n      // Format the dummy phone number according to the format.\n      .replace(new RegExp(pattern), numberFormat)\n      // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n      .replace(new RegExp(DUMMY_DIGIT, 'g'), _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n\n      // 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      if (!nationalPrefixIncludedInTemplate) {\n        if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n          // Prepend the prefix to the template manually.\n          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;\n        } else if (nationalPrefix) {\n          // Prepend national prefix to the template manually.\n          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n        }\n      }\n      if (international) {\n        template = (0,_helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(template);\n      }\n      return template;\n    }\n  }, {\n    key: \"formatNextNationalNumberDigits\",\n    value: function formatNextNationalNumberDigits(digits) {\n      var result = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.populateTemplateWithDigits)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n      if (!result) {\n        // Reset the format.\n        this.resetFormat();\n        return;\n      }\n      this.populatedNationalNumberTemplate = result[0];\n      this.populatedNationalNumberTemplatePosition = result[1];\n\n      // Return the formatted phone number so far.\n      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);\n\n      // 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      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        if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n          return true;\n        }\n      }\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouTypeFormatter.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* binding */ DIGIT_PLACEHOLDER; },\n/* harmony export */   closeNonPairedParens: function() { return /* binding */ closeNonPairedParens; },\n/* harmony export */   countOccurences: function() { return /* binding */ countOccurences; },\n/* harmony export */   cutAndStripNonPairedParens: function() { return /* binding */ cutAndStripNonPairedParens; },\n/* harmony export */   populateTemplateWithDigits: function() { return /* binding */ populateTemplateWithDigits; },\n/* harmony export */   repeat: function() { return /* binding */ repeat; },\n/* harmony export */   stripNonPairedParens: function() { return /* binding */ stripNonPairedParens; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nvar DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nfunction countOccurences(symbol, string) {\n  var count = 0;\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 counting brackets it is safe.\n  // for (const character of string)\n  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    if (character === symbol) {\n      count++;\n    }\n  }\n  return count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nfunction repeat(string, times) {\n  if (times < 1) {\n    return '';\n  }\n  var result = '';\n  while (times > 1) {\n    if (times & 1) {\n      result += string;\n    }\n    times >>= 1;\n    string += string;\n  }\n  return result + string;\n}\nfunction cutAndStripNonPairedParens(string, cutBeforeIndex) {\n  if (string[cutBeforeIndex] === ')') {\n    cutBeforeIndex++;\n  }\n  return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nfunction 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  while (dangling_braces > 0 && cut_before < template.length) {\n    if (template[cut_before] === ')') {\n      dangling_braces--;\n    }\n    cut_before++;\n  }\n  return template.slice(0, cut_before);\n}\nfunction stripNonPairedParens(string) {\n  var dangling_braces = [];\n  var i = 0;\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    i++;\n  }\n  var start = 0;\n  var cleared_string = '';\n  dangling_braces.push(string.length);\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  return cleared_string;\n}\nfunction 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    // 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    position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n    template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n  }\n  return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeParser.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeParser.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeParser; },\n/* harmony export */   extractFormattedDigitsAndPlus: function() { return /* binding */ extractFormattedDigitsAndPlus; }\n/* harmony export */ });\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\");\n/* harmony import */ var _helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/extractNationalNumberFromPossiblyIncompleteNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\");\n/* harmony import */ var _helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/stripIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.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 = '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.PLUS_CHARS + ']' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']*' + '|' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + '.*' + '$');\n\n// Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\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    _classCallCheck(this, AsYouTypeParser);\n    this.defaultCountry = defaultCountry;\n    this.defaultCallingCode = defaultCallingCode;\n    this.metadata = metadata;\n    this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n  }\n  return _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      var digits = (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(formattedDigits);\n      // Checks for a special case: just a leading `+` has been entered.\n      var justLeadingPlus;\n      if (hasPlus) {\n        if (!state.digits) {\n          state.startInternationalNumber(undefined, undefined);\n          if (!digits) {\n            justLeadingPlus = true;\n          }\n        }\n      }\n      if (digits) {\n        this.inputDigits(digits, state);\n      }\n      return {\n        digits: digits,\n        justLeadingPlus: justLeadingPlus\n      };\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    key: \"inputDigits\",\n    value: function inputDigits(nextDigits, state) {\n      var digits = state.digits;\n      var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;\n\n      // Append phone number digits.\n      state.appendDigits(nextDigits);\n\n      // 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      if (hasReceivedThreeLeadingDigits) {\n        this.extractIddPrefix(state);\n      }\n      if (this.isWaitingForCountryCallingCode(state)) {\n        if (!this.extractCountryCallingCode(state)) {\n          return;\n        }\n      } else {\n        state.appendNationalSignificantNumberDigits(nextDigits);\n      }\n\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      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    }\n\n    // Extracts a country calling code from a number\n    // being entered in internatonal format.\n  }, {\n    key: \"extractCountryCallingCode\",\n    value: function extractCountryCallingCode(state) {\n      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n        countryCallingCode = _extractCountryCallin.countryCallingCode,\n        number = _extractCountryCallin.number;\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        var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n        this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n      } else {\n        this.hasSelectedNumberingPlan = undefined;\n        this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n      }\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    key: \"extractNationalSignificantNumber\",\n    value: function extractNationalSignificantNumber(nationalDigits, setState) {\n      if (!this.hasSelectedNumberingPlan) {\n        return;\n      }\n      var _extractNationalNumbe = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalDigits, this.metadata),\n        nationalPrefix = _extractNationalNumbe.nationalPrefix,\n        nationalNumber = _extractNationalNumbe.nationalNumber,\n        carrierCode = _extractNationalNumbe.carrierCode;\n      if (nationalNumber === nationalDigits) {\n        return;\n      }\n      this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n      return true;\n    }\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    key: \"extractAnotherNationalSignificantNumber\",\n    value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n      if (!this.hasExtractedNationalSignificantNumber) {\n        return this.extractNationalSignificantNumber(nationalDigits, setState);\n      }\n      if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n        return;\n      }\n      var _extractNationalNumbe2 = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalDigits, this.metadata),\n        nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n        nationalNumber = _extractNationalNumbe2.nationalNumber,\n        carrierCode = _extractNationalNumbe2.carrierCode;\n      // 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      /* istanbul ignore if */\n      if (nationalNumber === prevNationalSignificantNumber) {\n        return;\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      // Tells if the parsed national (significant) number is present as-is in the input string.\n      // For example, when inputting \"0343515551212999\" Argentinian mobile number,\n      // the parsed national (significant) number is \"93435551212999\".\n      // There, one can see how it stripped \"0\" national prefix and prepended a \"9\",\n      // because that's how it is instructed to do in Argentina's metadata.\n      // So in the described example, the parsed national (significant) number is not present\n      // as-is in the input string. Instead, it's \"modified\" in the input string.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n      var nationalSignificantNumberIsModified = false;\n\n      // In some countries, a phone number could have a prefix that is not a \"national prefix\"\n      // but rather some other type of \"utility\" prefix.\n      // For example, when calling within Australia, one could prepend `1831` prefix to hide\n      // caller's phone number.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n      var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n\n      // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.\n      var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);\n\n      // If the parsed national (significant) number is the last substring of the `nationalDigits`,\n      // then it means that it's present as-is in the input string.\n      // In any other case, the parsed national (significant) number is \"modified\" in the input string.\n      if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {\n        nationalSignificantNumberIsModified = true;\n      } else {\n        var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);\n        // When national (significant) number is equal to the `nationalDigits`,\n        // this `onExtractedNationalNumber()` function simply doesn't get called.\n        // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.\n        // Still, added this `if` check just to prevent potential silly bugs.\n        // The `!prefixBeforeNationalNumber` case is not really testable\n        // so this line is exluded from the code coverage.\n        /* istanbul ignore if */\n        if (prefixBeforeNationalNumber) {\n          if (prefixBeforeNationalNumber !== nationalPrefix) {\n            prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;\n          }\n        }\n      }\n      setState({\n        nationalPrefix: nationalPrefix,\n        carrierCode: carrierCode,\n        nationalSignificantNumber: nationalSignificantNumber,\n        nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,\n        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix\n      });\n      // `onExtractedNationalNumber()` is only called when\n      // the national (significant) number actually did change.\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      }\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      if (this.extractIddPrefix(state)) {\n        this.extractCallingCodeAndNationalSignificantNumber(state);\n        return true;\n      }\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      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      if (international || IDDPrefix) {\n        return;\n      }\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      var numberWithoutIDD = (0,_helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\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 = (0,_helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n          newCallingCode = _extractCountryCallin2.countryCallingCode;\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);\n      // If a national (significant) number has been extracted before, reset it.\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/**\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\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  if (startsAt < 0) {\n    return;\n  }\n  // Trim everything to the left of the phone number.\n  text = text.slice(startsAt);\n  // Trim the `+`.\n  var hasPlus;\n  if (text[0] === '+') {\n    hasPlus = true;\n    text = text.slice('+'.length);\n  }\n  // Trim everything to the right of the phone number.\n  text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');\n  // Re-add the previously trimmed `+`.\n  if (hasPlus) {\n    text = '+' + text;\n  }\n  return text;\n}\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 */\nfunction _extractFormattedDigitsAndPlus(text) {\n  // Extract a formatted phone number part from text.\n  var extractedNumber = extractFormattedPhoneNumber(text) || '';\n  // Trim a `+`.\n  if (extractedNumber[0] === '+') {\n    return [extractedNumber.slice('+'.length), true];\n  }\n  return [extractedNumber];\n}\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 */\nfunction extractFormattedDigitsAndPlus(text) {\n  var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n    _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n    formattedDigits = _extractFormattedDigi4[0],\n    hasPlus = _extractFormattedDigi4[1];\n  // 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  if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n    formattedDigits = '';\n  }\n  return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeState.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeState.js ***!\n  \\**************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeState; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string` — The exact country of the phone number, if it could be determined.\n//                        When inputting a phone number in \"international\" format, it will derive the `country` from \"country calling code\" and the phone number digits.\n//                        When inputting a phone number in \"national\" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.\n//                        Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for \"non-geographic phone numbers\" `state.country` would've been \"001\".\n// * `callingCode?: string` — \"Country calling code\" that has been extracted from the input phone number.\n//                        When inputting a phone number in \"international\" format, it will extract the \"country calling code\" from the digits that follow the \"+\" character.\n//                        When inputting a phone number in \"national\" format, `callingCode` will be `undefined`.\n//                        Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in \"international\" format.\n// * `digits: string` — Phone number digits that have been input so far, including the \"+\" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.\n// * `international: boolean` — Whether the phone number is being input in \"international\" format, i.e. with a \"+\" character.\n// * `missingPlus: boolean` — Whether it's a phone number in \"international\" format that is missing the leading \"+\" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.\n// * `IDDPrefix?: string` — An \"IDD prefix\", when the phone number is being input in an \"out-of-country dialing\" format. https://wikitravel.org/en/International_dialling_prefix\n// * `carrierCode?: string` — A \"carrier code\", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.\n// * `nationalPrefix?: string` — \"National prefix\", if present in the phone number input.\n// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.\n// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting \"0343515551212999\" Argentinian mobile number, the parsed national (significant) number is \"93435551212999\". There, one can see how it stripped \"0\" national prefix and prepended a \"9\", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's \"modified\" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a \"national prefix\" but rather some other type of \"utility\" prefix.\n//                                                                             For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.\n//                                                                             https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n  function AsYouTypeState(_ref) {\n    var onCountryChange = _ref.onCountryChange,\n      onCallingCodeChange = _ref.onCallingCodeChange;\n    _classCallCheck(this, AsYouTypeState);\n    this.onCountryChange = onCountryChange;\n    this.onCallingCodeChange = onCallingCodeChange;\n  }\n  return _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.nationalSignificantNumberIsModified = false;\n      this.nationalPrefix = undefined;\n      this.carrierCode = undefined;\n      this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = 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;\n      // If a default country was set then reset it\n      // because an explicitly international phone\n      // number is being entered.\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\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    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      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      return this.digits;\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouTypeState.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/ParseError.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/ParseError.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ParseError; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\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  function ParseError(code) {\n    var _this;\n    _classCallCheck(this, ParseError);\n    _this = _callSuper(this, ParseError, [code]);\n    // Set the prototype explicitly.\n    // Any subclass of FooError will have to manually set the prototype as well.\n    Object.setPrototypeOf(_this, ParseError.prototype);\n    _this.name = _this.constructor.name;\n    return _this;\n  }\n  _inherits(ParseError, _Error);\n  return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\n\n//# sourceMappingURL=ParseError.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/PhoneNumber.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PhoneNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isPossible.js */ \"./node_modules/libphonenumber-js/es6/isPossible.js\");\n/* harmony import */ var _isValid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isValid.js */ \"./node_modules/libphonenumber-js/es6/isValid.js\");\n/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\n/* harmony import */ var _helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/getPossibleCountriesForNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js\");\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\n/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./format.js */ \"./node_modules/libphonenumber-js/es6/format.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\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    // Validate `countryOrCountryCallingCode` argument.\n    if (!countryOrCountryCallingCode) {\n      throw new TypeError('First argument is required');\n    }\n    if (typeof countryOrCountryCallingCode !== 'string') {\n      throw new TypeError('First argument must be a string');\n    }\n\n    // In case of public API use: `constructor(number, metadata)`.\n    // Transform the arguments from `constructor(number, metadata)` to\n    // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n    if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n      throw new TypeError('`metadata` argument not passed');\n    }\n    if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nationalNumber) && (0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nationalNumber.countries)) {\n      metadata = nationalNumber;\n      var e164Number = countryOrCountryCallingCode;\n      if (!E164_NUMBER_REGEXP.test(e164Number)) {\n        throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n      }\n      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(e164Number, undefined, undefined, undefined, metadata),\n        _countryCallingCode = _extractCountryCallin.countryCallingCode,\n        number = _extractCountryCallin.number;\n      nationalNumber = number;\n      countryOrCountryCallingCode = _countryCallingCode;\n      if (!nationalNumber) {\n        throw new Error('Invalid `number` argument passed: too short');\n      }\n    }\n\n    // Validate `nationalNumber` argument.\n    if (!nationalNumber) {\n      throw new TypeError('`nationalNumber` argument is required');\n    }\n    if (typeof nationalNumber !== 'string') {\n      throw new TypeError('`nationalNumber` argument must be a string');\n    }\n\n    // Validate `metadata` argument.\n    (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.validateMetadata)(metadata);\n\n    // Initialize properties.\n    var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n      country = _getCountryAndCountry.country,\n      countryCallingCode = _getCountryAndCountry.countryCallingCode;\n    this.country = country;\n    this.countryCallingCode = countryCallingCode;\n    this.nationalNumber = nationalNumber;\n    this.number = '+' + this.countryCallingCode + this.nationalNumber;\n    // 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    this.getMetadata = function () {\n      return metadata;\n    };\n  }\n  return _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      return (0,_helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n    }\n  }, {\n    key: \"isPossible\",\n    value: function isPossible() {\n      return (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"isValid\",\n    value: function isValid() {\n      return (0,_isValid_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"isNonGeographic\",\n    value: function isNonGeographic() {\n      var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](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    }\n\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    key: \"getType\",\n    value: function getType() {\n      return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"format\",\n    value: function format(_format, options) {\n      return (0,_format_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(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\nvar isCountryCode = function isCountryCode(value) {\n  return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n  var country;\n  var countryCallingCode;\n  var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadataJson);\n  // If country code is passed then derive `countryCallingCode` from it.\n  // Also store the country code as `.country`.\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    if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n      if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n        country = '001';\n      }\n    }\n  }\n  return {\n    country: country,\n    countryCallingCode: countryCallingCode\n  };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/constants.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/constants.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MAX_LENGTH_COUNTRY_CODE: function() { return /* binding */ MAX_LENGTH_COUNTRY_CODE; },\n/* harmony export */   MAX_LENGTH_FOR_NSN: function() { return /* binding */ MAX_LENGTH_FOR_NSN; },\n/* harmony export */   MIN_LENGTH_FOR_NSN: function() { return /* binding */ MIN_LENGTH_FOR_NSN; },\n/* harmony export */   PLUS_CHARS: function() { return /* binding */ PLUS_CHARS; },\n/* harmony export */   VALID_DIGITS: function() { return /* binding */ VALID_DIGITS; },\n/* harmony export */   VALID_PUNCTUATION: function() { return /* binding */ VALID_PUNCTUATION; },\n/* harmony export */   WHITESPACE: function() { return /* binding */ WHITESPACE; }\n/* harmony export */ });\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nvar VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nvar WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// 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.\nvar VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nvar PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/format.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/format.js ***!\n  \\******************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   chooseFormatForNumber: function() { return /* binding */ chooseFormatForNumber; },\n/* harmony export */   \"default\": function() { return /* binding */ formatNumber; }\n/* harmony export */ });\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js\");\n/* harmony import */ var _helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/RFC3966.js */ \"./node_modules/libphonenumber-js/es6/helpers/RFC3966.js\");\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\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n  formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n    return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n  }\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 */\nfunction formatNumber(input, format, options, metadata) {\n  // Apply default options.\n  if (options) {\n    // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n    // for some weird reason: this line of code would cause the code coverage\n    // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n    // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n    //\n    // options = { ...DEFAULT_OPTIONS, ...options }\n    //\n    options = merge({}, DEFAULT_OPTIONS, options);\n  } else {\n    options = DEFAULT_OPTIONS;\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\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    metadata.selectNumberingPlan(input.country);\n  } else if (input.countryCallingCode) {\n    metadata.selectNumberingPlan(input.countryCallingCode);\n  } else return input.phone || '';\n  var countryCallingCode = metadata.countryCallingCode();\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n  // This variable should have been declared inside `case`s\n  // but Babel has a bug and it says \"duplicate variable declaration\".\n  var number;\n  switch (format) {\n    case 'NATIONAL':\n      // Legacy argument support.\n      // (`{ country: ..., phone: '' }`)\n      if (!nationalNumber) {\n        return '';\n      }\n      number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n      return addExtension(number, input.ext, metadata, options.formatExtension);\n    case 'INTERNATIONAL':\n      // Legacy argument support.\n      // (`{ country: ..., phone: '' }`)\n      if (!nationalNumber) {\n        return \"+\".concat(countryCallingCode);\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    case 'E.164':\n      // `E.164` doesn't define \"phone number extensions\".\n      return \"+\".concat(countryCallingCode).concat(nationalNumber);\n    case 'RFC3966':\n      return (0,_helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__.formatRFC3966)({\n        number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n        ext: input.ext\n      });\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    case 'IDD':\n      if (!options.fromCountry) {\n        return;\n        // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n      }\n      var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n      return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n    default:\n      throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n  }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n  var format = chooseFormatForNumber(metadata.formats(), number);\n  if (!format) {\n    return number;\n  }\n  return (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(number, format, {\n    useInternationalFormat: formatAs === 'INTERNATIONAL',\n    withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n    carrierCode: carrierCode,\n    metadata: metadata\n  });\n}\nfunction chooseFormatForNumber(availableFormats, nationalNumber) {\n  // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n  // for some weird reason, it showed code coverage less than 100%.\n  // That's because `babel`/`istanbul`, for some weird reason,\n  // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n  //\n  // for (const format of availableFormats) { ... }\n  //\n  return pickFirstMatchingElement(availableFormats, function (format) {\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];\n      // If leading digits don't match then move on to the next phone number format\n      if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n        return false;\n      }\n    }\n    // Check that the national number matches the phone number format regular expression\n    return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalNumber, format.pattern());\n  });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n  return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n  var fromCountryCallingCode = (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(fromCountry, metadata.metadata);\n  // When calling within the same country calling code.\n  if (fromCountryCallingCode === countryCallingCode) {\n    var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n    // For NANPA regions, return the national format for these regions\n    // but prefix it with the country calling code.\n    if (countryCallingCode === '1') {\n      return countryCallingCode + ' ' + formattedNumber;\n    }\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    return formattedNumber;\n  }\n  var iddPrefix = (0,_helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(fromCountry, undefined, metadata.metadata);\n  if (iddPrefix) {\n    return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n  }\n}\nfunction merge() {\n  var i = 1;\n  for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n    objects[_key] = arguments[_key];\n  }\n  while (i < objects.length) {\n    if (objects[i]) {\n      for (var key in objects[i]) {\n        objects[0][key] = objects[i][key];\n      }\n    }\n    i++;\n  }\n  return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n  var i = 0;\n  while (i < elements.length) {\n    if (testFunction(elements[i])) {\n      return elements[i];\n    }\n    i++;\n  }\n}\n//# sourceMappingURL=format.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/getExampleNumber.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/getExampleNumber.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getExampleNumber; }\n/* harmony export */ });\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n\nfunction getExampleNumber(country, examples, metadata) {\n  if (examples[country]) {\n    return new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](country, examples[country], metadata);\n  }\n}\n//# sourceMappingURL=getExampleNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/RFC3966.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/RFC3966.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   formatRFC3966: function() { return /* binding */ formatRFC3966; },\n/* harmony export */   parseRFC3966: function() { return /* binding */ parseRFC3966; }\n/* harmony export */ });\n/* harmony import */ var _isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isViablePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\");\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\n// 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 */\nfunction parseRFC3966(text) {\n  var number;\n  var ext;\n\n  // Replace \"tel:\" with \"tel=\" for parsing convenience.\n  text = text.replace(/^tel:/, 'tel=');\n  for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n    var part = _step.value;\n    var _part$split = part.split('='),\n      _part$split2 = _slicedToArray(_part$split, 2),\n      name = _part$split2[0],\n      value = _part$split2[1];\n    switch (name) {\n      case 'tel':\n        number = value;\n        break;\n      case 'ext':\n        ext = value;\n        break;\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        break;\n    }\n  }\n\n  // If the phone number is not viable, then abort.\n  if (!(0,_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number)) {\n    return {};\n  }\n  var result = {\n    number: number\n  };\n  if (ext) {\n    result.ext = ext;\n  }\n  return result;\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nfunction formatRFC3966(_ref) {\n  var number = _ref.number,\n    ext = _ref.ext;\n  if (!number) {\n    return '';\n  }\n  if (number[0] !== '+') {\n    throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n  }\n  return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\":\n/*!****************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js ***!\n  \\****************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ applyInternationalSeparatorStyle; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n// 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 `<intlFormat/>`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 `<intlFormat/>` 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//\nfunction applyInternationalSeparatorStyle(formattedNumber) {\n  return formattedNumber.replace(new RegExp(\"[\".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js ***!\n  \\*************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   checkNumberLengthForType: function() { return /* binding */ checkNumberLengthForType; },\n/* harmony export */   \"default\": function() { return /* binding */ checkNumberLength; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergeArrays.js */ \"./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js\");\n\n\nfunction checkNumberLength(nationalNumber, country, metadata) {\n  return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nfunction checkNumberLengthForType(nationalNumber, country, type, metadata) {\n  // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n  // Most likely, in cases when there're multiple countries corresponding to the same\n  // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n  if (country) {\n    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata.metadata);\n    metadata.selectNumberingPlan(country);\n  }\n  var type_info = metadata.type(type);\n\n  // There should always be \"<possiblePengths/>\" 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 \"<possiblePengths/>\" 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  var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n  // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n  // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n  if (!possible_lengths) {\n    return 'IS_POSSIBLE';\n  }\n  if (type === 'FIXED_LINE_OR_MOBILE') {\n    // No such country in metadata.\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, country, 'MOBILE', metadata);\n    }\n    var mobile_type = metadata.type('MOBILE');\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 = (0,_mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(possible_lengths, mobile_type.possibleLengths());\n      // 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\n      // if (local_lengths) {\n      // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n      // } else {\n      // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n      // }\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  var actual_length = nationalNumber.length;\n\n  // 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  if (minimum_length === actual_length) {\n    return 'IS_POSSIBLE';\n  }\n  if (minimum_length > actual_length) {\n    return 'TOO_SHORT';\n  }\n  if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n    return 'TOO_LONG';\n  }\n\n  // We skip the first element since we've already checked it.\n  return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\":\n/*!****************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js ***!\n  \\****************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ createExtensionPattern; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\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 */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n  return \"([\".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\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 */\nfunction 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  /** @type {string} */\n  var extLimitAfterExplicitLabel = '20';\n  /** @type {string} */\n  var extLimitAfterLikelyLabel = '15';\n  /** @type {string} */\n  var extLimitAfterAmbiguousChar = '9';\n  /** @type {string} */\n  var extLimitWhenNotSure = '6';\n\n  /** @type {string} */\n  var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n  // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n  /** @type {string} */\n  var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n  /** @type {string} */\n  var optionalExtnSuffix = \"#?\";\n\n  // Here the extension is called out in more explicit way, i.e mentioning it obvious\n  // patterns like \"ext.\".\n  /** @type {string} */\n  var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n  // One-character symbols that can be used to indicate an extension, and less\n  // commonly used or more ambiguous extension labels.\n  /** @type {string} */\n  var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n  // When extension is not separated clearly.\n  /** @type {string} */\n  var ambiguousSeparator = \"[- ]+\";\n  // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n  // comma as extension label may have it.\n  /** @type {string} */\n  var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n  // \",,\" 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  /** @type {string} */\n  var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n  /** @type {string} */\n  var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n  /** @type {string} */\n  var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n  /** @type {string} */\n  var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n  /** @type {string} */\n  var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n  /** @type {string} */\n  var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n  /** @type {string} */\n  var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n  // 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  return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js\":\n/*!**********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js ***!\n  \\**********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractExtension; }\n/* harmony export */ });\n/* harmony import */ var _createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createExtensionPattern.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\");\n\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + (0,_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])() + ')$', 'i');\n\n// 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.\nfunction extractExtension(number) {\n  var start = number.search(EXTN_PATTERN);\n  if (start < 0) {\n    return {};\n  }\n  // If we find a potential extension, and the number preceding this is a viable\n  // number, we assume it is an extension.\n  var numberWithoutExtension = number.slice(0, start);\n  var matches = number.match(EXTN_PATTERN);\n  var i = 1;\n  while (i < matches.length) {\n    if (matches[i]) {\n      return {\n        number: numberWithoutExtension,\n        ext: matches[i]\n      };\n    }\n    i++;\n  }\n}\n//# sourceMappingURL=extractExtension.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\":\n/*!*********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js ***!\n  \\*********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractCountryCallingCode; }\n/* harmony export */ });\n/* harmony import */ var _stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stripIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\");\n/* harmony import */ var _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n\n\n\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] — Country.\r\n * @param  {string} [defaultCountry] — Default country.\r\n * @param  {string} [defaultCallingCode] — 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', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nfunction extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n  if (!number) {\n    return {};\n  }\n  var isNumberWithIddPrefix;\n\n  // 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  if (number[0] !== '+') {\n    // Convert an \"out-of-country\" dialing phone number\n    // to a proper international phone number.\n    var numberWithoutIDD = (0,_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number, country || defaultCountry, defaultCallingCode, metadata);\n    // If an IDD prefix was stripped then\n    // convert the number to international one\n    // for subsequent parsing.\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 || defaultCountry || defaultCallingCode) {\n        var _extractCountryCallin = (0,_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(number, country, defaultCountry, defaultCallingCode, metadata),\n          countryCallingCode = _extractCountryCallin.countryCallingCode,\n          shorterNumber = _extractCountryCallin.number;\n        if (countryCallingCode) {\n          return {\n            countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n            countryCallingCode: countryCallingCode,\n            number: shorterNumber\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  }\n\n  // `number` can only be international at this point.\n\n  // Fast abortion: country codes do not begin with a '0'\n  if (number[1] === '0') {\n    return {};\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\n\n  // 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  var i = 2;\n  while (i - 1 <= _constants_js__WEBPACK_IMPORTED_MODULE_3__.MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n    var _countryCallingCode = number.slice(1, i);\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    i++;\n  }\n  return {};\n}\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\":\n/*!***********************************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js ***!\n  \\***********************************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractCountryCallingCodeFromInternationalNumberWithoutPlusSign; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../getCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./extractNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\");\n/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n\n\n\n\n\n\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] — Exact country of the phone number.\r\n * @param  {string} [defaultCountry]\r\n * @param  {string} [defaultCallingCode]\r\n * @param  {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nfunction extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n  var countryCallingCode = country || defaultCountry ? (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.getCountryCallingCode)(country || defaultCountry, metadata) : defaultCallingCode;\n  if (number.indexOf(countryCallingCode) === 0) {\n    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n    metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n    var possibleShorterNumber = number.slice(countryCallingCode.length);\n    var _extractNationalNumbe = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(possibleShorterNumber, country, metadata),\n      possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n    var _extractNationalNumbe2 = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(number, country, metadata),\n      nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n    // 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    if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern()) && (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || (0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(nationalNumber, country, metadata) === 'TOO_LONG') {\n      return {\n        countryCallingCode: countryCallingCode,\n        number: possibleShorterNumber\n      };\n    }\n  }\n  return {\n    number: number\n  };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js\":\n/*!***************************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js ***!\n  \\***************************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractFormattedPhoneNumberFromPossibleRfc3966NumberUri; }\n/* harmony export */ });\n/* harmony import */ var _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractPhoneContext.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ParseError.js */ \"./node_modules/libphonenumber-js/es6/ParseError.js\");\n\n\n\n/**\r\n * @param  {string} numberToParse\r\n * @param  {string} nationalNumber\r\n * @return {}\r\n */\nfunction extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n  var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n  var phoneContext = (0,_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(numberToParse);\n  if (!(0,_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.isPhoneContextValid)(phoneContext)) {\n    throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('NOT_A_NUMBER');\n  }\n  var phoneNumberString;\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 = '';\n\n    // If the phone context contains a phone number prefix, we need to capture\n    // it, whereas domains will be ignored.\n    if (phoneContext.charAt(0) === _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_SIGN) {\n      phoneNumberString += phoneContext;\n    }\n\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    var indexOfRfc3966Prefix = numberToParse.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PREFIX_);\n    var indexOfNationalNumber;\n    // RFC 3966 \"tel:\" prefix is preset at this stage because\n    // `isPhoneContextValid()` requires it to be present.\n    /* istanbul ignore else */\n    if (indexOfRfc3966Prefix >= 0) {\n      indexOfNationalNumber = indexOfRfc3966Prefix + _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PREFIX_.length;\n    } else {\n      indexOfNationalNumber = 0;\n    }\n    var indexOfPhoneContext = numberToParse.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PHONE_CONTEXT_);\n    phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n  }\n\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  var indexOfIsdn = phoneNumberString.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_ISDN_SUBADDRESS_);\n  if (indexOfIsdn > 0) {\n    phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n  }\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  if (phoneNumberString !== '') {\n    return phoneNumberString;\n  }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\":\n/*!*****************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js ***!\n  \\*****************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractNationalNumber; }\n/* harmony export */ });\n/* harmony import */ var _extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractNationalNumberFromPossiblyIncompleteNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n/* harmony import */ var _getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n\n\n\n\n\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  {string?} country — Country, if known.\r\n * @param  {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nfunction extractNationalNumber(number, country, 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 = (0,_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number, metadata),\n    carrierCode = _extractNationalNumbe.carrierCode,\n    nationalNumber = _extractNationalNumbe.nationalNumber;\n  if (nationalNumber !== number) {\n    if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n      // Don't strip the national prefix.\n      return {\n        nationalNumber: number\n      };\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    if (metadata.numberingPlan.possibleLengths()) {\n      // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n      if (!country) {\n        country = (0,_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(metadata.numberingPlan.callingCode(), {\n          nationalNumber: nationalNumber,\n          metadata: metadata\n        });\n      }\n\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, country, metadata)) {\n        // Don't strip the national prefix.\n        return {\n          nationalNumber: number\n        };\n      }\n    }\n  }\n  return {\n    nationalNumber: nationalNumber,\n    carrierCode: carrierCode\n  };\n}\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`.\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 ((0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumberBefore, metadata.nationalNumberPattern()) && !(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumberAfter, metadata.nationalNumberPattern())) {\n    return false;\n  }\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  return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n  switch ((0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalNumber, country, 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    default:\n      return true;\n  }\n}\n//# sourceMappingURL=extractNationalNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\":\n/*!*********************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js ***!\n  \\*********************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractNationalNumberFromPossiblyIncompleteNumber; }\n/* harmony export */ });\n/**\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 */\nfunction 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    if (prefixMatch) {\n      var nationalNumber;\n      var carrierCode;\n      // 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      var capturedGroupsCount = prefixMatch.length - 1;\n      var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n      if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n        nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n        // If there's more than one captured group,\n        // then carrier code is the second one.\n        if (capturedGroupsCount > 1) {\n          carrierCode = prefixMatch[1];\n        }\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);\n        // If there's at least one captured group,\n        // then carrier code is the first one.\n        if (hasCapturedGroups) {\n          carrierCode = prefixMatch[1];\n        }\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      var nationalPrefix;\n      if (hasCapturedGroups) {\n        var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n        var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n        // 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        if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n          nationalPrefix = metadata.numberingPlan.nationalPrefix();\n        }\n      } else {\n        nationalPrefix = prefixMatch[0];\n      }\n      return {\n        nationalNumber: nationalNumber,\n        nationalPrefix: nationalPrefix,\n        carrierCode: carrierCode\n      };\n    }\n  }\n  return {\n    nationalNumber: number\n  };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   PLUS_SIGN: function() { return /* binding */ PLUS_SIGN; },\n/* harmony export */   RFC3966_ISDN_SUBADDRESS_: function() { return /* binding */ RFC3966_ISDN_SUBADDRESS_; },\n/* harmony export */   RFC3966_PHONE_CONTEXT_: function() { return /* binding */ RFC3966_PHONE_CONTEXT_; },\n/* harmony export */   RFC3966_PREFIX_: function() { return /* binding */ RFC3966_PREFIX_; },\n/* harmony export */   \"default\": function() { return /* binding */ extractPhoneContext; },\n/* harmony export */   isPhoneContextValid: function() { return /* binding */ isPhoneContextValid; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n// 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.\n\n\nvar PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\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 */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = _constants_js__WEBPACK_IMPORTED_MODULE_0__.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\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nvar RFC3966_PREFIX_ = 'tel:';\nvar RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nvar RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\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 */\nfunction extractPhoneContext(numberToExtractFrom) {\n  var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n  // If no phone-context parameter is present\n  if (indexOfPhoneContext < 0) {\n    return null;\n  }\n  var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n  // If phone-context parameter is empty\n  if (phoneContextStart >= numberToExtractFrom.length) {\n    return '';\n  }\n  var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n  // If phone-context is not the last parameter\n  if (phoneContextEnd >= 0) {\n    return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n  } else {\n    return numberToExtractFrom.substring(phoneContextStart);\n  }\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 */\nfunction isPhoneContextValid(phoneContext) {\n  if (phoneContext === null) {\n    return true;\n  }\n  if (phoneContext.length === 0) {\n    return false;\n  }\n\n  // Does phone-context value match pattern of global-number-digits or domainname.\n  return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\":\n/*!***************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js ***!\n  \\***************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FIRST_GROUP_PATTERN: function() { return /* binding */ FIRST_GROUP_PATTERN; },\n/* harmony export */   \"default\": function() { return /* binding */ formatNationalNumberUsingFormat; }\n/* harmony export */ });\n/* harmony import */ var _applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyInternationalSeparatorStyle.js */ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\");\n\n\n// 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.\nvar FIRST_GROUP_PATTERN = /(\\$\\d)/;\nfunction 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() :\n  // 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  if (useInternationalFormat) {\n    return (0,_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(formattedNumber);\n  }\n  return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\":\n/*!*******************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js ***!\n  \\*******************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getCountryByCallingCode; }\n/* harmony export */ });\n/* harmony import */ var _getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCountryByNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\");\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nfunction getCountryByCallingCode(callingCode, _ref) {\n  var nationalPhoneNumber = _ref.nationalNumber,\n    metadata = _ref.metadata;\n  /* istanbul ignore if */\n  if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n    if (metadata.isNonGeographicCallingCode(callingCode)) {\n      return '001';\n    }\n  }\n  var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n  if (!possibleCountries) {\n    return;\n  }\n  // If there's just one country corresponding to the country code,\n  // then just return it, without further phone number digits validation.\n  if (possibleCountries.length === 1) {\n    return possibleCountries[0];\n  }\n  return (0,_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalPhoneNumber, {\n    countries: possibleCountries,\n    metadata: metadata.metadata\n  });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\":\n/*!**********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js ***!\n  \\**********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getCountryByNationalNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _getNumberType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nfunction getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n  var countries = _ref.countries,\n    metadata = _ref.metadata;\n  // Re-create `metadata` because it will be selecting a `country`.\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n\n  // const matchingCountries = []\n\n  for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n    var country = _step.value;\n    metadata.selectNumberingPlan(country);\n    // \"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    if (metadata.leadingDigits()) {\n      if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n        return country;\n      }\n    }\n    // Else perform full validation with all of those\n    // fixed-line/mobile/etc regular expressions.\n    else if ((0,_getNumberType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      phone: nationalPhoneNumber,\n      country: country\n    }, undefined, metadata.metadata)) {\n      // When multiple countries share the same \"country calling code\",\n      // type patterns aren't guaranteed to be unique among them.\n      // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n      //\n      // That means that this `if` condition could be `true` for multiple countries from the list.\n      // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n      // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n      // it could as well be `\"CA\"`.\n      //\n      // There was also a time when this attempted to be overly smart\n      // and kept track of all such multiple matching countries\n      // and then picked the one that matched the `defaultCountry`, if provided.\n      // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n      // it would've returned `\"CA\"` instead of `\"US\"`.\n      // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n      // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n      // for the \"country calling code\".\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n      //\n      return country;\n      //\n      // The \"overly smart\" behavior code:\n      //\n      // if (defaultCountry) {\n      // \tif (country === defaultCountry) {\n      // \t\treturn country\n      // \t} else {\n      // \t\tmatchingCountries.push(country)\n      // \t}\n      // } else {\n      // \treturn country\n      // }\n    }\n  }\n\n  // // Return the first (\"main\") one of the `matchingCountries`.\n  // if (matchingCountries.length > 0) {\n  // \treturn matchingCountries[0]\n  // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getIddPrefix; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n\n\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 */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nfunction getIddPrefix(country, callingCode, metadata) {\n  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  countryMetadata.selectNumberingPlan(country, callingCode);\n  if (countryMetadata.defaultIDDPrefix()) {\n    return countryMetadata.defaultIDDPrefix();\n  }\n  if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n    return countryMetadata.IDDPrefix();\n  }\n}\n//# sourceMappingURL=getIddPrefix.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getNumberType.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getNumberType; },\n/* harmony export */   isNumberTypeEqualTo: function() { return /* binding */ isNumberTypeEqualTo; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nfunction 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 || {};\n\n  // When `parse()` returns an empty object — `{}` —\n  // that means that the phone number is malformed,\n  // so it can't possibly be valid.\n  if (!input.country && !input.countryCallingCode) {\n    return;\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n  // The following is copy-pasted from the original function:\n  // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n  // Is this national number even valid for this country\n  if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern())) {\n    return;\n  }\n\n  // Is it fixed line number\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    }\n\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    if (!metadata.type('MOBILE')) {\n      return 'FIXED_LINE_OR_MOBILE';\n    }\n\n    // Check if the number happens to qualify as both fixed line and mobile.\n    // (no such country in the minimal metadata set)\n    /* istanbul ignore if */\n    if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n      return 'FIXED_LINE_OR_MOBILE';\n    }\n    return 'FIXED_LINE';\n  }\n  for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n    var type = _step.value;\n    if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n      return type;\n    }\n  }\n}\nfunction isNumberTypeEqualTo(nationalNumber, type, metadata) {\n  type = metadata.type(type);\n  if (!type || !type.pattern()) {\n    return false;\n  }\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  if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n    return false;\n  }\n  return (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js\":\n/*!*************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js ***!\n  \\*************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getPossibleCountriesForNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n\n\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 */\nfunction getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n  if (!possibleCountries) {\n    return [];\n  }\n  return possibleCountries.filter(function (country) {\n    return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n  });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  _metadata.selectNumberingPlan(country);\n  if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n    return true;\n  }\n  return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/isObject.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isObject; }\n/* harmony export */ });\nvar objectConstructor = {}.constructor;\nfunction isObject(object) {\n  return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   VALID_PHONE_NUMBER: function() { return /* binding */ VALID_PHONE_NUMBER; },\n/* harmony export */   VALID_PHONE_NUMBER_WITH_EXTENSION: function() { return /* binding */ VALID_PHONE_NUMBER_WITH_EXTENSION; },\n/* harmony export */   \"default\": function() { return /* binding */ isViablePhoneNumber; },\n/* harmony export */   isViablePhoneNumberStart: function() { return /* binding */ isViablePhoneNumberStart; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extension/createExtensionPattern.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\");\n\n\n\n//  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//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']{' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){3,}' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']*';\n\n// 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.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nvar VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + (0,_extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// 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//\nfunction isViablePhoneNumber(number) {\n  return number.length >= _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\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.\nfunction isViablePhoneNumberStart(number) {\n  return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ matchesEntirely; }\n/* harmony export */ });\n/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nfunction matchesEntirely(text, regularExpressionText) {\n  // If the assigning of the `''` default value is moved to the arguments above,\n  // the code coverage would decrease for some weird reason.\n  text = text || '';\n  return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ mergeArrays; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param  {*} a\r\n * @param  {*} b\r\n * @return {*}\r\n */\nfunction mergeArrays(a, b) {\n  var merged = a.slice();\n  for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n    var element = _step.value;\n    if (a.indexOf(element) < 0) {\n      merged.push(element);\n    }\n  }\n  return merged.sort(function (a, b) {\n    return a - b;\n  });\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/parseDigits.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGITS: function() { return /* binding */ DIGITS; },\n/* harmony export */   \"default\": function() { return /* binding */ parseDigits; },\n/* harmony export */   parseDigit: function() { return /* binding */ parseDigit; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return 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//\nvar 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};\nfunction parseDigit(character) {\n  return DIGITS[character];\n}\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 */\nfunction parseDigits(string) {\n  var result = '';\n  // 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  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    var digit = parseDigit(character);\n    if (digit) {\n      result += digit;\n    }\n  }\n  return result;\n}\n//# sourceMappingURL=parseDigits.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ stripIddPrefix; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + _constants_js__WEBPACK_IMPORTED_MODULE_1__.VALID_DIGITS + '])');\nfunction stripIddPrefix(number, country, callingCode, metadata) {\n  if (!country) {\n    return;\n  }\n  // Check if the number is IDD-prefixed.\n  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  countryMetadata.selectNumberingPlan(country, callingCode);\n  var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n  if (number.search(IDDPrefixPattern) !== 0) {\n    return;\n  }\n  // Strip IDD prefix.\n  number = number.slice(number.match(IDDPrefixPattern)[0].length);\n  // 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  var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n  if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n    if (matchedGroups[1] === '0') {\n      return;\n    }\n  }\n  return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/isPossible.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/isPossible.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isPossiblePhoneNumber; },\n/* harmony export */   isPossibleNumber: function() { return /* binding */ isPossibleNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n\n\n\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 */\nfunction isPossiblePhoneNumber(input, options, metadata) {\n  /* istanbul ignore if */\n  if (options === undefined) {\n    options = {};\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  if (options.v2) {\n    if (!input.countryCallingCode) {\n      throw new Error('Invalid phone number object passed');\n    }\n    metadata.selectNumberingPlan(input.countryCallingCode);\n  } else {\n    if (!input.phone) {\n      return false;\n    }\n    if (input.country) {\n      if (!metadata.hasCountry(input.country)) {\n        throw new Error(\"Unknown country: \".concat(input.country));\n      }\n      metadata.selectNumberingPlan(input.country);\n    } else {\n      if (!input.countryCallingCode) {\n        throw new Error('Invalid phone number object passed');\n      }\n      metadata.selectNumberingPlan(input.countryCallingCode);\n    }\n  }\n\n  // Old metadata (< 1.0.18) had no \"possible length\" data.\n  if (metadata.possibleLengths()) {\n    return isPossibleNumber(input.phone || input.nationalNumber, input.country, 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}\nfunction isPossibleNumber(nationalNumber, country, metadata) {\n  //, isInternational) {\n  switch ((0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, country, 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    default:\n      return false;\n  }\n}\n//# sourceMappingURL=isPossible.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/isValid.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/isValid.js ***!\n  \\*******************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isValidNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\n\n\n\n\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 */\nfunction 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_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n  // By default, countries only have type regexps when it's required for\n  // distinguishing different countries having the same `countryCallingCode`.\n  if (metadata.hasTypes()) {\n    return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(input, options, metadata.metadata) !== undefined;\n  }\n\n  // If there are no type regexps for this country in metadata then use\n  // `nationalNumberPattern` as a \"better than nothing\" replacement.\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n  return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/metadata.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/metadata.js ***!\n  \\********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Metadata; },\n/* harmony export */   getCountryCallingCode: function() { return /* binding */ getCountryCallingCode; },\n/* harmony export */   getExtPrefix: function() { return /* binding */ getExtPrefix; },\n/* harmony export */   isSupportedCountry: function() { return /* binding */ isSupportedCountry; },\n/* harmony export */   validateMetadata: function() { return /* binding */ validateMetadata; }\n/* harmony export */ });\n/* harmony import */ var _tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/semver-compare.js */ \"./node_modules/libphonenumber-js/es6/tools/semver-compare.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n  function Metadata(metadata) {\n    _classCallCheck(this, Metadata);\n    validateMetadata(metadata);\n    this.metadata = metadata;\n    setVersion.call(this, metadata);\n  }\n  return _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;\n      // `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      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      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        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    }\n\n    // Deprecated.\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      if (countryCode && countryCode !== '001') {\n        if (!this.hasCountry(countryCode)) {\n          throw new Error(\"Unknown country: \".concat(countryCode));\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        this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n      } else {\n        this.numberingPlan = undefined;\n      }\n      return this;\n    }\n  }, {\n    key: \"getCountryCodesForCallingCode\",\n    value: function getCountryCodesForCallingCode(callingCode) {\n      var countryCodes = this.countryCallingCodes()[callingCode];\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        return countryCodes;\n      }\n    }\n  }, {\n    key: \"getCountryCodeForCallingCode\",\n    value: function getCountryCodeForCallingCode(callingCode) {\n      var countryCodes = this.getCountryCodesForCallingCode(callingCode);\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      if (countryCode) {\n        return this.getCountryMetadata(countryCode);\n      }\n      if (this.nonGeographic()) {\n        var metadata = this.nonGeographic()[callingCode];\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        if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n          return this.metadata.countries['001'];\n        }\n      }\n    }\n\n    // Deprecated.\n  }, {\n    key: \"countryCallingCode\",\n    value: function countryCallingCode() {\n      return this.numberingPlan.callingCode();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"IDDPrefix\",\n    value: function IDDPrefix() {\n      return this.numberingPlan.IDDPrefix();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"defaultIDDPrefix\",\n    value: function defaultIDDPrefix() {\n      return this.numberingPlan.defaultIDDPrefix();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalNumberPattern\",\n    value: function nationalNumberPattern() {\n      return this.numberingPlan.nationalNumberPattern();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"possibleLengths\",\n    value: function possibleLengths() {\n      return this.numberingPlan.possibleLengths();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"formats\",\n    value: function formats() {\n      return this.numberingPlan.formats();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalPrefixForParsing\",\n    value: function nationalPrefixForParsing() {\n      return this.numberingPlan.nationalPrefixForParsing();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalPrefixTransformRule\",\n    value: function nationalPrefixTransformRule() {\n      return this.numberingPlan.nationalPrefixTransformRule();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"leadingDigits\",\n    value: function leadingDigits() {\n      return this.numberingPlan.leadingDigits();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"hasTypes\",\n    value: function hasTypes() {\n      return this.numberingPlan.hasTypes();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"type\",\n    value: function type(_type) {\n      return this.numberingPlan.type(_type);\n    }\n\n    // Deprecated.\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    }\n\n    // Deprecated.\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\nvar NumberingPlan = /*#__PURE__*/function () {\n  function NumberingPlan(metadata, globalMetadataObject) {\n    _classCallCheck(this, NumberingPlan);\n    this.globalMetadataObject = globalMetadataObject;\n    this.metadata = metadata;\n    setVersion.call(this, globalMetadataObject.metadata);\n  }\n  return _createClass(NumberingPlan, [{\n    key: \"callingCode\",\n    value: function callingCode() {\n      return this.metadata[0];\n    }\n\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    key: \"getDefaultCountryMetadataForRegion\",\n    value: function getDefaultCountryMetadataForRegion() {\n      return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n    }\n\n    // Is always present.\n  }, {\n    key: \"IDDPrefix\",\n    value: function IDDPrefix() {\n      if (this.v1 || this.v2) return;\n      return this.metadata[1];\n    }\n\n    // Is only present when a country supports multiple IDD prefixes.\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    }\n\n    // \"possible length\" data is always present in Google's metadata.\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    }\n\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    key: \"formats\",\n    value: function formats() {\n      var _this = this;\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    }\n\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    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    }\n\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    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      /* istanbul ignore next */\n      if (this.types() && this.types().length === 0) {\n        return false;\n      }\n      // Versions <= 1.2.4: can be `undefined`.\n      // Version >= 1.2.5: can be `0`.\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}();\nvar Format = /*#__PURE__*/function () {\n  function Format(format, metadata) {\n    _classCallCheck(this, Format);\n    this._format = format;\n    this.metadata = metadata;\n  }\n  return _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    }\n\n    // Checks whether national prefix formatting rule contains national prefix.\n  }, {\n    key: \"usesNationalPrefix\",\n    value: function usesNationalPrefix() {\n      return this.nationalPrefixFormattingRule() &&\n      // Check that national prefix formatting rule is not a \"dummy\" one.\n      !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n      // 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/**\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 */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n  function Type(type, metadata) {\n    _classCallCheck(this, Type);\n    this.type = type;\n    this.metadata = metadata;\n  }\n  return _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}();\nfunction getType(types, type) {\n  switch (type) {\n    case 'FIXED_LINE':\n      return types[0];\n    case 'MOBILE':\n      return types[1];\n    case 'TOLL_FREE':\n      return types[2];\n    case 'PREMIUM_RATE':\n      return types[3];\n    case 'PERSONAL_NUMBER':\n      return types[4];\n    case 'VOICEMAIL':\n      return types[5];\n    case 'UAN':\n      return types[6];\n    case 'PAGER':\n      return types[7];\n    case 'VOIP':\n      return types[8];\n    case 'SHARED_COST':\n      return types[9];\n  }\n}\nfunction validateMetadata(metadata) {\n  if (!metadata) {\n    throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n  }\n\n  // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n  // For that reason, it's not used in this detection algorithm.\n  // Instead, it detects by `countries: {}` property existence.\n  if (!(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(metadata) || !(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(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((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n  }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n  return _typeof(_);\n};\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 */\nfunction getExtPrefix(country, metadata) {\n  metadata = new Metadata(metadata);\n  if (metadata.hasCountry(country)) {\n    return metadata.selectNumberingPlan(country).ext();\n  }\n  return DEFAULT_EXT_PREFIX;\n}\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 */\nfunction getCountryCallingCode(country, metadata) {\n  metadata = new Metadata(metadata);\n  if (metadata.hasCountry(country)) {\n    return metadata.selectNumberingPlan(country).countryCallingCode();\n  }\n  throw new Error(\"Unknown country: \".concat(country));\n}\nfunction isSupportedCountry(country, metadata) {\n  // metadata = new Metadata(metadata)\n  // return metadata.hasCountry(country)\n  return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n  var version = metadata.version;\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 ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(version, V3) === -1) {\n      this.v2 = true;\n    } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(version, V4) === -1) {\n      this.v3 = true;\n    } else {\n      this.v4 = true;\n    }\n  }\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/normalizeArguments.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/normalizeArguments.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ normalizeArguments; }\n/* harmony export */ });\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nfunction 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  var text;\n  var options;\n  var metadata;\n\n  // If the phone number is passed as a string.\n  // `parsePhoneNumber('88005553535', ...)`.\n  if (typeof arg_1 === 'string') {\n    text = arg_1;\n  } else throw new TypeError('A text for parsing must be a string.');\n\n  // If \"default country\" argument is being passed then move it to `options`.\n  // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\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    if (arg_2) {\n      options = _objectSpread({\n        defaultCountry: arg_2\n      }, options);\n    }\n  }\n  // `defaultCountry` is not passed.\n  // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n  else if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(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  return {\n    text: text,\n    options: options,\n    metadata: metadata\n  };\n}\n//# sourceMappingURL=normalizeArguments.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parse.js\":\n/*!*****************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parse.js ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parse; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ParseError.js */ \"./node_modules/libphonenumber-js/es6/ParseError.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/isViablePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\");\n/* harmony import */ var _helpers_extension_extractExtension_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/extension/extractExtension.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js\");\n/* harmony import */ var _parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./parseIncompletePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js\");\n/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isPossible.js */ \"./node_modules/libphonenumber-js/es6/isPossible.js\");\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./helpers/extractNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\");\n/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n/* harmony import */ var _helpers_extractFormattedPhoneNumberFromPossibleRfc3966NumberUri_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js\");\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\n\n\n\n\n\n\n\n\n\n// import { parseRFC3966 } from './helpers/RFC3966.js'\n\n\n\n\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\n\n\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']');\n\n// 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\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// 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 */\nfunction 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_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\n\n  // Validate `defaultCountry`.\n  if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('INVALID_COUNTRY');\n    }\n    throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n  }\n\n  // Parse the phone number.\n  var _parseInput = parseInput(text, options.v2, options.extract),\n    formattedPhoneNumber = _parseInput.number,\n    ext = _parseInput.ext,\n    error = _parseInput.error;\n\n  // If the phone number is not viable then return nothing.\n  if (!formattedPhoneNumber) {\n    if (options.v2) {\n      if (error === 'TOO_SHORT') {\n        throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_SHORT');\n      }\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('NOT_A_NUMBER');\n    }\n    return {};\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  if (!metadata.hasSelectedNumberingPlan()) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('INVALID_COUNTRY');\n    }\n    return {};\n  }\n\n  // Validate national (significant) number length.\n  if (!nationalNumber || nationalNumber.length < _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN) {\n    // Won't throw here because the regexp already demands length > 1.\n    /* istanbul ignore if */\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_SHORT');\n    }\n    // Google's demo just throws an error in this case.\n    return {};\n  }\n\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  if (nationalNumber.length > _constants_js__WEBPACK_IMPORTED_MODULE_0__.MAX_LENGTH_FOR_NSN) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_LONG');\n    }\n    // Google's demo just throws an error in this case.\n    return {};\n  }\n  if (options.v2) {\n    var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](countryCallingCode, nationalNumber, metadata.metadata);\n    if (country) {\n      phoneNumber.country = country;\n    }\n    if (carrierCode) {\n      phoneNumber.carrierCode = carrierCode;\n    }\n    if (ext) {\n      phoneNumber.ext = ext;\n    }\n    phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n    return phoneNumber;\n  }\n\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  var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(nationalNumber, metadata.nationalNumberPattern()) : false;\n  if (!options.extended) {\n    return valid ? result(country, nationalNumber, ext) : {};\n  }\n\n  // isInternational: countryCallingCode !== undefined\n\n  return {\n    country: country,\n    countryCallingCode: countryCallingCode,\n    carrierCode: carrierCode,\n    valid: valid,\n    possible: valid ? true : options.extended === true && metadata.possibleLengths() && (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_6__.isPossibleNumber)(nationalNumber, country, metadata) ? true : false,\n    phone: nationalNumber,\n    ext: ext\n  };\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 */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n  if (!text) {\n    return;\n  }\n  if (text.length > MAX_INPUT_STRING_LENGTH) {\n    if (throwOnError) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_LONG');\n    }\n    return;\n  }\n  if (extract === false) {\n    return text;\n  }\n  // Attempt to extract a possible number from the string passed in\n  var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n  if (startsAt < 0) {\n    return;\n  }\n  return text\n  // Trim everything to the left of the phone number\n  .slice(startsAt)\n  // Remove trailing non-numerical characters\n  .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\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 */\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 = (0,_helpers_extractFormattedPhoneNumberFromPossibleRfc3966NumberUri_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(text, {\n    extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n      return _extractFormattedPhoneNumber(text, extract, v2);\n    }\n  });\n  // If the phone number is not viable, then abort.\n  if (!number) {\n    return {};\n  }\n  if (!(0,_helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(number)) {\n    if ((0,_helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__.isViablePhoneNumberStart)(number)) {\n      return {\n        error: 'TOO_SHORT'\n      };\n    }\n    return {};\n  }\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  var withExtensionStripped = (0,_helpers_extension_extractExtension_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(number);\n  if (withExtensionStripped.ext) {\n    return withExtensionStripped;\n  }\n  return {\n    number: number\n  };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n  var result = {\n    country: country,\n    phone: nationalNumber\n  };\n  if (ext) {\n    result.ext = ext;\n  }\n  return result;\n}\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 */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n  // Extract calling code from phone number.\n  var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])((0,_parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n    countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n    countryCallingCode = _extractCountryCallin.countryCallingCode,\n    number = _extractCountryCallin.number;\n\n  // The exact country of the phone number\n  var country;\n\n  // If `formattedPhoneNumber` is passed in \"international\" format,\n  // choose a country by `countryCallingCode`.\n  if (countryCallingCode) {\n    metadata.selectNumberingPlan(countryCallingCode);\n  }\n  // Else, 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    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    countryCallingCode = defaultCallingCode || (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(defaultCountry, metadata.metadata);\n  } else return {};\n  if (!number) {\n    return {\n      countryCallingCodeSource: countryCallingCodeSource,\n      countryCallingCode: countryCallingCode\n    };\n  }\n  var _extractNationalNumbe = (0,_helpers_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])((0,_parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(number), country, metadata),\n    nationalNumber = _extractNationalNumbe.nationalNumber,\n    carrierCode = _extractNationalNumbe.carrierCode;\n\n  // 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  var exactCountry = (0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(countryCallingCode, {\n    nationalNumber: nationalNumber,\n    metadata: metadata\n  });\n  if (exactCountry) {\n    country = exactCountry;\n    /* istanbul ignore if */\n    if (exactCountry === '001') {\n      // 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.selectNumberingPlan(country);\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js ***!\n  \\**************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parseIncompletePhoneNumber; },\n/* harmony export */   parsePhoneNumberCharacter: function() { return /* binding */ parsePhoneNumberCharacter; }\n/* harmony export */ });\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\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 */\nfunction parseIncompletePhoneNumber(string) {\n  var result = '';\n  // 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  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    result += parsePhoneNumberCharacter(character, result) || '';\n  }\n  return result;\n}\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  {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nfunction parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\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      // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n      // Any 3rd-party code that used to `import` and call this function before that\n      // won't be passing any `eventListener` argument.\n      //\n      // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n      // of parsing an input string when the user inputs something like `\"2+7\"\n      // https://github.com/catamphetamine/react-phone-number-input/issues/437\n      //\n      // If the parser encounters an unexpected `+` in a string being parsed\n      // then it simply discards that out-of-place `+` and any following characters.\n      //\n      if (typeof eventListener === 'function') {\n        eventListener('end');\n      }\n      return;\n    }\n    return '+';\n  }\n  // Allow digits.\n  return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_0__.parseDigit)(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js ***!\n  \\*************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _parsePhoneNumberWithError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsePhoneNumberWithError_.js */ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js\");\n/* harmony import */ var _normalizeArguments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normalizeArguments.js */ \"./node_modules/libphonenumber-js/es6/normalizeArguments.js\");\n\n\nfunction parsePhoneNumberWithError() {\n  var _normalizeArguments = (0,_normalizeArguments_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arguments),\n    text = _normalizeArguments.text,\n    options = _normalizeArguments.options,\n    metadata = _normalizeArguments.metadata;\n  return (0,_parsePhoneNumberWithError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js ***!\n  \\**************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parse.js */ \"./node_modules/libphonenumber-js/es6/parse.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nfunction parsePhoneNumberWithError(text, options, metadata) {\n  return (0,_parse_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(text, _objectSpread(_objectSpread({}, options), {}, {\n    v2: true\n  }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/tools/semver-compare.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/tools/semver-compare.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }\n/* harmony export */ });\n// 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\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n  a = a.split('-');\n  b = b.split('-');\n  var pa = a[0].split('.');\n  var pb = b[0].split('.');\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  if (a[1] && b[1]) {\n    return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n  }\n  return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/examples.mobile.json.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/examples.mobile.json.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n// 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\n/* harmony default export */ __webpack_exports__[\"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\":\"0195123456\",\"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\":\"34412345\",\"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\":\"60123456\",\"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\":\"2221234567\",\"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\"});\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/metadata.mobile.json.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n// 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\n/* harmony default export */ __webpack_exports__[\"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-79]\\\\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)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\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-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|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])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[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[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|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(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|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(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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(?:[15]|28|4[14])|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]|2[23]\"],\"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|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\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|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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]|9[02])\\\\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)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|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-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\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|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|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|7[39])|9(?:0[25]|42))[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\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{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"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[02-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,12],[[\"(\\\\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,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"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{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\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(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[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)|2\\\\d{3}|3(?:(?:2\\\\d|50)\\\\d|3(?:[03467]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389]|9[0-8])|600)|646[59])|(?:(?:3[2-5]|[47][1-35]|5[1-3578]|6[13-57])\\\\d|8(?:0[1-8]|[1-9]\\\\d))\\\\d\\\\d|9(?:(?:10[01]|(?:[2458]\\\\d|7[1-9])\\\\d)\\\\d|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]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}\",[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|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|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(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"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])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[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\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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,10,11,12],[[\"(\\\\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,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"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{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"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,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{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[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"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-3])|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(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\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,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?: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,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|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{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"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|180020\",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]|49|5[6-8])|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(?:0(?:0(?:1[09]|70)|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}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-4])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|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])|7093[0-3])\\\\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|180020\",\"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,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\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|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-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[478])|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-39]|70))\\\\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[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:3[0-4]|4[0-48]|6[0-5]))|5(?:35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-25])|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])|70[1-59]|84[0-39]|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\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{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\",[\"6|7[245]\"],\"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-57]\"],\"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|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\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]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\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,[\"55(?:4(?:0[0-2]|[16]0|5[0-7])|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[34]|5[0-25689]|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|180020\",\"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|8(?:28[235-7]|3))|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])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|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,[\"(?:6(?:1279|828[01489])|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])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|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-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|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,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\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]|43\"]],[\"(\\\\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\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\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|427|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\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-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)|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])|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])|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\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[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-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[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]|9(?:12|9[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\",[\"[36]0|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[0-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|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|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,\"33622|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\",[\"3\"],\"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(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,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-6]|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,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\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\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\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\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[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]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",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|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-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{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\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\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\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|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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-46-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[35-8])\\\\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-478]\\\\d|6[01])|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[0-3]|[679]\\\\d|8[2-59])\\\\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\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"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,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|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|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"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[67]\\\\d\\\\d|7091[0-3])\\\\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-6]|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]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?: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]|[267][1-9]|3[1-8]|[45]\\\\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-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\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[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\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-7]))|(?:[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,[\"(?:[579]\\\\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[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[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\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\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]|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(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[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[1-48])\\\\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-247]\\\\d|3[0-79]|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,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\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-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\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(?:[049]\\\\d|3[034]))\\\\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]|78)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-7])\"],\"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]|7[1-6]|8[1-7]|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[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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,0,[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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[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{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|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]\",\"(?:[2489]\\\\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,12],[[\"(\\\\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-9]|[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,[\"89(?:8[02-9]|90)\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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[1-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(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\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]|[6-8]\\\\d|90)\\\\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-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-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\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:00[0-4]|100)|[67]\\\\d{3})\\\\d{4}\",[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-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\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[5-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|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[56])\\\\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[0-29]|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,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\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|71)\\\\d{6}\",[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\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"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-8])\\\\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,[\"(?:5(?:4[0-5]|5[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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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,[\"(?:6[125-9]|7[13-9])\\\\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,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|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,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|36|9[0-2589])\\\\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,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|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-57-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]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|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-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[78]|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])))|7(?:[07]\\\\d{3}|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]))|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}\"]]],\"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,12],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[246])\\\\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\\\\d|10|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\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-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\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\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"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\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\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)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|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|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\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(?:[1278]\\\\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}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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,[\"348[57]\\\\d{7}\",[11]],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[0-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}\"]]]}});\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/AsYouType.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/AsYouType.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AsYouType: function() { return /* binding */ AsYouType; }\n/* harmony export */ });\n/* harmony import */ var _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.mobile.json.js */ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/AsYouType.js\");\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\n\r\n\r\n\r\n\r\nfunction AsYouType(country) {\r\n\treturn _core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].call(this, country, _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\r\n}\r\n\r\nAsYouType.prototype = Object.create(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].prototype, {})\r\nAsYouType.prototype.constructor = AsYouType\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getExampleNumber: function() { return /* binding */ getExampleNumber; }\n/* harmony export */ });\n/* harmony import */ var _withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withMetadataArgument.js */ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/getExampleNumber.js\");\n\r\n\r\n\r\nfunction getExampleNumber() {\r\n\treturn (0,_withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], arguments)\r\n}\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\":\n/*!************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js ***!\n  \\************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   parsePhoneNumberWithError: function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withMetadataArgument.js */ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js\");\n\r\n\r\n\r\nfunction parsePhoneNumberWithError() {\r\n\treturn (0,_withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], arguments)\r\n}\r\n\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\":\n/*!*******************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js ***!\n  \\*******************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ withMetadataArgument; }\n/* harmony export */ });\n/* harmony import */ var _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.mobile.json.js */ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\");\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\n\r\n\r\nfunction withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(_metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\r\n\treturn func.apply(this, args)\r\n}\n\n/***/ })\n\n}]);\n//# sourceMappingURL=vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-7e28c7.dev.js.map"
  },
  {
    "path": "umd/vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54\"],{\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouType.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouType.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouType; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n/* harmony import */ var _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeState.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeState.js\");\n/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js\");\n/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\");\n/* harmony import */ var _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AsYouTypeParser.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeParser.js\");\n/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n/* harmony import */ var _helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./helpers/getCountryByNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\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    this.metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\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    // `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    this.defaultCountry = defaultCountry;\n    this.defaultCallingCode = defaultCallingCode;\n    this.reset();\n  }\n  return _createClass(AsYouType, [{\n    key: \"getCountryAndCallingCode\",\n    value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n      // Set `defaultCountry` and `defaultCallingCode` options.\n      var defaultCountry;\n      var defaultCallingCode;\n      // Turns out `null` also has type \"object\". Weird.\n      if (optionsOrDefaultCountry) {\n        if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(optionsOrDefaultCountry)) {\n          defaultCountry = optionsOrDefaultCountry.defaultCountry;\n          defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n        } else {\n          defaultCountry = optionsOrDefaultCountry;\n        }\n      }\n      if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n        defaultCountry = undefined;\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      return [defaultCountry, defaultCallingCode];\n    }\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    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      if (justLeadingPlus) {\n        this.formattedOutput = '+';\n      } else if (digits) {\n        this.determineTheCountryIfNeeded();\n        // Match the available formats by the currently available leading digits.\n        if (this.state.nationalSignificantNumber) {\n          this.formatter.narrowDownMatchingFormats(this.state);\n        }\n        var formattedNationalNumber;\n        if (this.metadata.hasSelectedNumberingPlan()) {\n          formattedNationalNumber = this.formatter.format(digits, this.state);\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();\n            // If it could, then re-try formatting the new national (significant) number.\n            var nationalDigits = this.state.getNationalDigits();\n            if (nationalDigits) {\n              formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n            }\n          }\n        }\n        this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n      }\n      return this.formattedOutput;\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var _this = this;\n      this.state = new _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n        onCountryChange: function onCountryChange(country) {\n          // Before version `1.6.0`, the official `AsYouType` formatter API\n          // included a `.country` property on 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          _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n          _this.parser.reset(_this.metadata.numberingPlan);\n        }\n      });\n      this.formatter = new _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n        state: this.state,\n        metadata: this.metadata\n      });\n      this.parser = new _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n        defaultCountry: this.defaultCountry,\n        defaultCallingCode: this.defaultCallingCode,\n        metadata: this.metadata,\n        state: this.state,\n        onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n          _this.determineTheCountryIfNeeded();\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\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    key: \"isInternational\",\n    value: function isInternational() {\n      return this.state.international;\n    }\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    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    }\n\n    // A legacy alias.\n  }, {\n    key: \"getCountryCallingCode\",\n    value: function getCountryCallingCode() {\n      return this.getCallingCode();\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     * Returns `undefined` if no phone number has been input yet.\r\n     * @return {string} [country]\r\n     */\n  }, {\n    key: \"getCountry\",\n    value: function getCountry() {\n      var digits = this.state.digits;\n      // Return `undefined` if no digits have been input yet.\n      if (digits) {\n        return this._getCountry();\n      }\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    key: \"_getCountry\",\n    value: function _getCountry() {\n      var country = this.state.country;\n      /* istanbul ignore if */\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      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    }\n\n    // Prepends `+CountryCode ` in case of an international phone number\n  }, {\n    key: \"getFullNumber\",\n    value: function getFullNumber(formattedNationalNumber) {\n      var _this2 = this;\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        var callingCode = this.state.callingCode;\n        if (!callingCode) {\n          return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n        }\n        if (!formattedNationalNumber) {\n          return prefix(callingCode);\n        }\n        return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\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        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,\n        nationalPrefix = _this$state.nationalPrefix;\n      var number = nationalSignificantNumber;\n      var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;\n      if (prefix) {\n        number = prefix + number;\n      }\n      return number;\n    }\n  }, {\n    key: \"getNonFormattedNumber\",\n    value: function getNonFormattedNumber() {\n      var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;\n      return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());\n    }\n  }, {\n    key: \"getNonFormattedTemplate\",\n    value: function getNonFormattedTemplate() {\n      var number = this.getNonFormattedNumber();\n      if (number) {\n        return number.replace(/[\\+\\d]/g, _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__.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    }\n\n    // Determines the exact country of the phone number\n    // entered so far based on the country phone code\n    // and the national phone number.\n  }, {\n    key: \"determineTheCountry\",\n    value: function determineTheCountry() {\n      this.state.setCountry((0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n        nationalNumber: this.state.nationalSignificantNumber,\n        metadata: this.metadata\n      }));\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    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;\n\n      // Will return `undefined` if no digits have been input.\n      if (!digits) {\n        return;\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\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    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;\n\n      // `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      var country = this._getCountry();\n      if (!nationalSignificantNumber) {\n        return;\n      }\n\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      if (!country && !callingCode) {\n        return;\n      }\n\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      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_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.metadata.metadata);\n          metadata.selectNumberingPlan(country);\n          var _callingCode = metadata.numberingPlan.callingCode();\n          var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n          if (ambiguousCountries.length > 1) {\n            var exactCountry = (0,_helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(nationalSignificantNumber, {\n              countries: ambiguousCountries,\n              metadata: this.metadata.metadata\n            });\n            if (exactCountry) {\n              country = exactCountry;\n            }\n          }\n        }\n      }\n      var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n      if (carrierCode) {\n        phoneNumber.carrierCode = carrierCode;\n      }\n      // Phone number extensions are not supported by \"As You Type\" formatter.\n      return phoneNumber;\n    }\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    key: \"isPossible\",\n    value: function isPossible() {\n      var phoneNumber = this.getNumber();\n      if (!phoneNumber) {\n        return false;\n      }\n      return phoneNumber.isPossible();\n    }\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    key: \"isValid\",\n    value: function isValid() {\n      var phoneNumber = this.getNumber();\n      if (!phoneNumber) {\n        return false;\n      }\n      return phoneNumber.isValid();\n    }\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    key: \"getNationalNumber\",\n    value: function getNationalNumber() {\n      return this.state.nationalSignificantNumber;\n    }\n\n    /**\r\n     * Returns the phone number characters entered by the user.\r\n     * @return {string}\r\n     */\n  }, {\n    key: \"getChars\",\n    value: function getChars() {\n      return (this.state.international ? '+' : '') + this.state.digits;\n    }\n\n    /**\r\n     * Returns the template for the formatted phone number.\r\n     * @return {string}\r\n     */\n  }, {\n    key: \"getTemplate\",\n    value: function getTemplate() {\n      return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouType.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js\":\n/*!*********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js ***!\n  \\*********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PatternMatcher; }\n/* harmony export */ });\n/* harmony import */ var _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternParser.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar PatternMatcher = /*#__PURE__*/function () {\n  function PatternMatcher(pattern) {\n    _classCallCheck(this, PatternMatcher);\n    this.matchTree = new _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]().parse(pattern);\n  }\n  return _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      if (!string) {\n        throw new Error('String is required');\n      }\n      var result = _match(string.split(''), this.matchTree, true);\n      if (result && result.match) {\n        delete result.matchedChars;\n      }\n      if (result && result.overflow) {\n        if (!allowOverflow) {\n          return;\n        }\n      }\n      return result;\n    }\n  }]);\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\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    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      /* istanbul ignore else */\n      if (characters.length === tree.length) {\n        return {\n          match: true,\n          matchedChars: characters\n        };\n      }\n      // `tree` is always a single character.\n      // If `tree.indexOf(characterString) === 0`\n      // then `characters.length === tree.length`.\n      /* istanbul ignore next */\n      return {\n        partialMatch: true\n        // matchedChars: characters\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        /* istanbul ignore else */\n        if (characters.length > tree.length) {\n          return {\n            overflow: true\n          };\n        }\n      }\n      return {\n        match: true,\n        matchedChars: characters.slice(0, tree.length)\n      };\n    }\n    return;\n  }\n  if (Array.isArray(tree)) {\n    var restCharacters = characters.slice();\n    var i = 0;\n    while (i < tree.length) {\n      var subtree = tree[i];\n      var result = _match(restCharacters, subtree, last && i === tree.length - 1);\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        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\n              // matchedChars: characters\n            };\n          }\n        }\n      } else {\n        /* istanbul ignore else */\n        if (result.partialMatch) {\n          return {\n            partialMatch: true\n            // matchedChars: characters\n          };\n        } else {\n          throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n        }\n      }\n      i++;\n    }\n    // If `last` then overflow has already been checked\n    // by the last element of the `tree` array.\n    /* istanbul ignore if */\n    if (last) {\n      return {\n        overflow: true\n      };\n    }\n    return {\n      match: true,\n      matchedChars: characters.slice(0, characters.length - restCharacters.length)\n    };\n  }\n  switch (tree.op) {\n    case '|':\n      var partialMatch;\n      for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n        var branch = _step.value;\n        var _result = _match(characters, branch, last);\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      if (partialMatch) {\n        return {\n          partialMatch: true\n          // matchedChars: ...\n        };\n      }\n      // Not even a partial match.\n      return;\n    case '[]':\n      for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n        var _char = _step2.value;\n        if (characters[0] === _char) {\n          if (characters.length === 1) {\n            return {\n              match: true,\n              matchedChars: characters\n            };\n          }\n          if (last) {\n            return {\n              overflow: true\n            };\n          }\n          return {\n            match: true,\n            matchedChars: [_char]\n          };\n        }\n      }\n      // No character matches.\n      return;\n\n    /* istanbul ignore next */\n    default:\n      throw new Error(\"Unsupported instruction tree: \".concat(tree));\n  }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js\":\n/*!********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js ***!\n  \\********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PatternParser; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar PatternParser = /*#__PURE__*/function () {\n  function PatternParser() {\n    _classCallCheck(this, PatternParser);\n  }\n  return _createClass(PatternParser, [{\n    key: \"parse\",\n    value: function parse(pattern) {\n      this.context = [{\n        or: true,\n        instructions: []\n      }];\n      this.parsePattern(pattern);\n      if (this.context.length !== 1) {\n        throw new Error('Non-finalized contexts left when pattern parse ended');\n      }\n      var _this$context$ = this.context[0],\n        branches = _this$context$.branches,\n        instructions = _this$context$.instructions;\n      if (branches) {\n        return {\n          op: '|',\n          args: branches.concat([expandSingleElementArray(instructions)])\n        };\n      }\n\n      /* istanbul ignore if */\n      if (instructions.length === 0) {\n        throw new Error('Pattern is required');\n      }\n      if (instructions.length === 1) {\n        return instructions[0];\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      var match = pattern.match(OPERATOR);\n      if (!match) {\n        if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n          throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n        }\n        this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n        return;\n      }\n      var operator = match[1];\n      var before = pattern.slice(0, match.index);\n      var rightPart = pattern.slice(match.index + operator.length);\n      switch (operator) {\n        case '(?:':\n          if (before) {\n            this.parsePattern(before);\n          }\n          this.startContext({\n            or: true,\n            instructions: [],\n            branches: []\n          });\n          break;\n        case ')':\n          if (!this.getContext().or) {\n            throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n          }\n          if (before) {\n            this.parsePattern(before);\n          }\n          if (this.getContext().instructions.length === 0) {\n            throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n          }\n          var _this$getContext = this.getContext(),\n            branches = _this$getContext.branches;\n          branches.push(expandSingleElementArray(this.getContext().instructions));\n          this.endContext();\n          this.getContext().instructions.push({\n            op: '|',\n            args: branches\n          });\n          break;\n        case '|':\n          if (!this.getContext().or) {\n            throw new Error('\"|\" operator can only be used inside \"or\" groups');\n          }\n          if (before) {\n            this.parsePattern(before);\n          }\n          // The top-level is an implicit \"or\" group, if required.\n          if (!this.getContext().branches) {\n            // `branches` are not defined only for the root implicit \"or\" operator.\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          this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n          this.getContext().instructions = [];\n          break;\n        case '[':\n          if (before) {\n            this.parsePattern(before);\n          }\n          this.startContext({\n            oneOfSet: true\n          });\n          break;\n        case ']':\n          if (!this.getContext().oneOfSet) {\n            throw new Error('\"]\" operator must be preceded by \"[\" operator');\n          }\n          this.endContext();\n          this.getContext().instructions.push({\n            op: '[]',\n            args: parseOneOfSet(before)\n          });\n          break;\n\n        /* istanbul ignore next */\n        default:\n          throw new Error(\"Unknown operator: \".concat(operator));\n      }\n      if (rightPart) {\n        this.parsePattern(rightPart);\n      }\n    }\n  }]);\n}();\n\nfunction parseOneOfSet(pattern) {\n  var values = [];\n  var i = 0;\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      var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n      var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n      var value = prevValue;\n      while (value <= nextValue) {\n        values.push(String.fromCharCode(value));\n        value++;\n      }\n    } else {\n      values.push(pattern[i]);\n    }\n    i++;\n  }\n  return values;\n}\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp(\n// any of:\n'(' +\n// or operator\n'\\\\|' +\n// or\n'|' +\n// or group start\n'\\\\(\\\\?\\\\:' +\n// or\n'|' +\n// or group end\n'\\\\)' +\n// or\n'|' +\n// one-of set start\n'\\\\[' +\n// or\n'|' +\n// one-of set end\n'\\\\]' + ')');\nfunction expandSingleElementArray(array) {\n  if (array.length === 1) {\n    return array[0];\n  }\n  return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   canFormatCompleteNumber: function() { return /* binding */ canFormatCompleteNumber; },\n/* harmony export */   \"default\": function() { return /* binding */ formatCompleteNumber; }\n/* harmony export */ });\n/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n\n\n\nfunction 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  if (matcher.test(state.nationalSignificantNumber)) {\n    return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n      metadata: metadata,\n      shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n    });\n  }\n}\nfunction canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {\n  return (0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';\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\n  var nationalSignificantNumber = state.nationalSignificantNumber,\n    international = state.international,\n    nationalPrefix = state.nationalPrefix,\n    carrierCode = state.carrierCode;\n\n  // 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  if (shouldTryNationalPrefixFormattingRule(format)) {\n    var formattedNumber = formatNationalNumber(state, format, {\n      useNationalPrefixFormattingRule: true,\n      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n      metadata: metadata\n    });\n    if (formattedNumber) {\n      return formattedNumber;\n    }\n  }\n\n  // Format the number without using `national_prefix_formatting_rule`.\n  return formatNationalNumber(state, format, {\n    useNationalPrefixFormattingRule: false,\n    getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n    metadata: metadata\n  });\n}\nfunction formatNationalNumber(state, format, _ref3) {\n  var metadata = _ref3.metadata,\n    useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n    getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n  var formattedNationalNumber = (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.nationalSignificantNumber, format, {\n    carrierCode: state.carrierCode,\n    useInternationalFormat: state.international,\n    withNationalPrefix: useNationalPrefixFormattingRule,\n    metadata: metadata\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.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n      formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;\n    }\n  }\n  if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n    return formattedNationalNumber;\n  }\n}\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//\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n  return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* reexport safe */ _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER; },\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeFormatter; }\n/* harmony export */ });\n/* harmony import */ var _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.util.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\");\n/* harmony import */ var _AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsYouTypeFormatter.complete.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js\");\n/* harmony import */ var _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternMatcher.js */ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/applyInternationalSeparatorStyle.js */ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// 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.\nvar LONGEST_DUMMY_PHONE_NUMBER = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// 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.\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;\n\n// 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.\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true;\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n  return /\\[([^\\[\\]])*\\]/g;\n};\n\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.\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n  return /\\d(?=[^,}][^,}])/g;\n};\n\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//\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' +\n// 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' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*)*' + '$');\n\n// 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.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n  function AsYouTypeFormatter(_ref) {\n    var state = _ref.state,\n      metadata = _ref.metadata;\n    _classCallCheck(this, AsYouTypeFormatter);\n    this.metadata = metadata;\n    this.resetFormat();\n  }\n  return _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      if (numberingPlan) {\n        this.isNANP = numberingPlan.callingCode() === '1';\n        this.matchingFormats = numberingPlan.formats();\n        if (state.nationalSignificantNumber) {\n          this.narrowDownMatchingFormats(state);\n        }\n      } else {\n        this.isNANP = undefined;\n        this.matchingFormats = [];\n      }\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    key: \"format\",\n    value: function format(nextDigits, state) {\n      var _this = this;\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 ((0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__.canFormatCompleteNumber)(state.nationalSignificantNumber, state.country, this.metadata)) {\n        for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n          var _format = _step.value;\n          var formattedCompleteNumber = (0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(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          if (formattedCompleteNumber) {\n            this.resetFormat();\n            this.chosenFormat = _format;\n            this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER), state);\n            this.populatedNationalNumberTemplate = formattedCompleteNumber;\n            // With a new formatting template, the matched position\n            // using the old template needs to be reset.\n            this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n            return formattedCompleteNumber;\n          }\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      return this.formatNationalNumberWithNextDigits(nextDigits, state);\n    }\n\n    // Formats the next phone number digits.\n  }, {\n    key: \"formatNationalNumberWithNextDigits\",\n    value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n      var previouslyChosenFormat = this.chosenFormat;\n\n      // Choose a format from the list of matching ones.\n      var newlyChosenFormat = this.chooseFormat(state);\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      var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n        nationalPrefix = _ref2.nationalPrefix,\n        international = _ref2.international;\n      var leadingDigits = nationalSignificantNumber;\n\n      // \"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\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      var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n      if (leadingDigitsPatternIndex < 0) {\n        leadingDigitsPatternIndex = 0;\n      }\n      this.matchingFormats = this.matchingFormats.filter(function (format) {\n        return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n      });\n\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 `<leadingDigits>`\n      // and yielding another format for 4 `<leadingDigits>` (Australia in this case).\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() &&\n      // !format.domesticCarrierCodeFormattingRule() &&\n      !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n        return false;\n      }\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      if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n        return false;\n      }\n      return true;\n    }\n  }, {\n    key: \"formatMatches\",\n    value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n      var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;\n\n      // 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      if (leadingDigitsPatternsCount === 0) {\n        return true;\n      }\n\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\n      // `leading_digits_patterns` start with 3 digits min\n      // and then go up from there one digit at a time.\n      leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n      var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];\n\n      // 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      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 _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](leadingDigitsPattern).match(leadingDigits, {\n            allowOverflow: true\n          }) !== undefined;\n        } catch (error) /* istanbul ignore next */{\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      }\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      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      var _loop = function _loop() {\n          var format = _step2.value;\n          // If this format is currently being used\n          // and is still suitable, then stick to it.\n          if (_this3.chosenFormat === format) {\n            return 0; // break\n          }\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          /* istanbul ignore if */\n          if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n            return 1; // continue\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 1; // continue\n          }\n          _this3.chosenFormat = format;\n          return 0; // break\n        },\n        _ret;\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      /* istanbul ignore next */\n      for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n        _ret = _loop();\n        if (_ret === 0) break;\n        if (_ret === 1) continue;\n      }\n      if (!this.chosenFormat) {\n        // No format matches the national (significant) phone number.\n        this.resetFormat();\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      /* istanbul ignore if */\n      if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n        return;\n      }\n      // Get formatting template for this phone number format\n      var template = this.getTemplateForFormat(format, state);\n      // If the national number entered is too long\n      // for any phone number format, then abort.\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      }\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      if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n        return ' ';\n      }\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      return '';\n    }\n  }, {\n    key: \"getInternationalPrefixBeforeCountryCallingCode\",\n    value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n      var IDDPrefix = _ref3.IDDPrefix,\n        missingPlus = _ref3.missingPlus;\n      if (IDDPrefix) {\n        return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n      }\n      if (missingPlus) {\n        return '';\n      }\n      return '+';\n    }\n  }, {\n    key: \"getTemplate\",\n    value: function getTemplate(state) {\n      if (!this.template) {\n        return;\n      }\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      var index = -1;\n      var i = 0;\n      var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n        spacing: false\n      }) : '';\n      while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n        index = this.template.indexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, index + 1);\n        i++;\n      }\n      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.template, index + 1);\n    }\n  }, {\n    key: \"setNationalNumberTemplate\",\n    value: function setNationalNumberTemplate(template, state) {\n      this.nationalNumberTemplate = template;\n      this.populatedNationalNumberTemplate = template;\n      // With a new formatting template, the matched position\n      // using the old template needs to be reset.\n      this.populatedNationalNumberTemplatePosition = -1;\n      // 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      if (state.international) {\n        this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER) + (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n      } else {\n        this.template = template;\n      }\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    key: \"getTemplateForFormat\",\n    value: function getTemplateForFormat(format, _ref4) {\n      var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n        international = _ref4.international,\n        nationalPrefix = _ref4.nationalPrefix,\n        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n      var pattern = format.pattern();\n\n      /* istanbul ignore else */\n      if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n        pattern = pattern\n        // Replace anything in the form of [..] with \\d\n        .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\n        // Replace any standalone digit (not the one in `{}`) with \\d\n        .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n      }\n\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      var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];\n\n      // If the national number entered is too long\n      // for any phone number format, then abort.\n      if (nationalSignificantNumber.length > digits.length) {\n        return;\n      }\n\n      // Get a formatting template which can be used to efficiently format\n      // a partial number where digits are added one by one.\n\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      var strictPattern = new RegExp('^' + pattern + '$');\n      var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT);\n\n      // If `this.nationalSignificantNumber` has already sufficient length\n      // to satisfy the `pattern` completely then use it\n      // instead of `digits`.\n      if (strictPattern.test(nationalNumberDummyDigits)) {\n        digits = nationalNumberDummyDigits;\n      }\n      var numberFormat = this.getFormatFormat(format, international);\n      var nationalPrefixIncludedInTemplate;\n\n      // 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      if (this.shouldTryNationalPrefixFormattingRule(format, {\n        international: international,\n        nationalPrefix: nationalPrefix\n      })) {\n        var numberFormatWithNationalPrefix = numberFormat.replace(_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__.FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n        // 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        /* istanbul ignore else */\n        if ((0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])('$1')) {\n          numberFormat = numberFormatWithNationalPrefix;\n          nationalPrefixIncludedInTemplate = true;\n          // Replace all digits of the national prefix in the formatting template\n          // with `DIGIT_PLACEHOLDER`s.\n          if (nationalPrefix) {\n            var i = nationalPrefix.length;\n            while (i > 0) {\n              numberFormat = numberFormat.replace(/\\d/, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n              i--;\n            }\n          }\n        }\n      }\n\n      // Generate formatting template for this phone number format.\n      var template = digits\n      // Format the dummy phone number according to the format.\n      .replace(new RegExp(pattern), numberFormat)\n      // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n      .replace(new RegExp(DUMMY_DIGIT, 'g'), _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);\n\n      // 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      if (!nationalPrefixIncludedInTemplate) {\n        if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n          // Prepend the prefix to the template manually.\n          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;\n        } else if (nationalPrefix) {\n          // Prepend national prefix to the template manually.\n          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n        }\n      }\n      if (international) {\n        template = (0,_helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(template);\n      }\n      return template;\n    }\n  }, {\n    key: \"formatNextNationalNumberDigits\",\n    value: function formatNextNationalNumberDigits(digits) {\n      var result = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.populateTemplateWithDigits)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n      if (!result) {\n        // Reset the format.\n        this.resetFormat();\n        return;\n      }\n      this.populatedNationalNumberTemplate = result[0];\n      this.populatedNationalNumberTemplatePosition = result[1];\n\n      // Return the formatted phone number so far.\n      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);\n\n      // 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      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        if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n          return true;\n        }\n      }\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouTypeFormatter.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* binding */ DIGIT_PLACEHOLDER; },\n/* harmony export */   closeNonPairedParens: function() { return /* binding */ closeNonPairedParens; },\n/* harmony export */   countOccurences: function() { return /* binding */ countOccurences; },\n/* harmony export */   cutAndStripNonPairedParens: function() { return /* binding */ cutAndStripNonPairedParens; },\n/* harmony export */   populateTemplateWithDigits: function() { return /* binding */ populateTemplateWithDigits; },\n/* harmony export */   repeat: function() { return /* binding */ repeat; },\n/* harmony export */   stripNonPairedParens: function() { return /* binding */ stripNonPairedParens; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nvar DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nfunction countOccurences(symbol, string) {\n  var count = 0;\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 counting brackets it is safe.\n  // for (const character of string)\n  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    if (character === symbol) {\n      count++;\n    }\n  }\n  return count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nfunction repeat(string, times) {\n  if (times < 1) {\n    return '';\n  }\n  var result = '';\n  while (times > 1) {\n    if (times & 1) {\n      result += string;\n    }\n    times >>= 1;\n    string += string;\n  }\n  return result + string;\n}\nfunction cutAndStripNonPairedParens(string, cutBeforeIndex) {\n  if (string[cutBeforeIndex] === ')') {\n    cutBeforeIndex++;\n  }\n  return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nfunction 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  while (dangling_braces > 0 && cut_before < template.length) {\n    if (template[cut_before] === ')') {\n      dangling_braces--;\n    }\n    cut_before++;\n  }\n  return template.slice(0, cut_before);\n}\nfunction stripNonPairedParens(string) {\n  var dangling_braces = [];\n  var i = 0;\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    i++;\n  }\n  var start = 0;\n  var cleared_string = '';\n  dangling_braces.push(string.length);\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  return cleared_string;\n}\nfunction 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    // 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    position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n    template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n  }\n  return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeParser.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeParser.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeParser; },\n/* harmony export */   extractFormattedDigitsAndPlus: function() { return /* binding */ extractFormattedDigitsAndPlus; }\n/* harmony export */ });\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\");\n/* harmony import */ var _helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/extractNationalNumberFromPossiblyIncompleteNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\");\n/* harmony import */ var _helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/stripIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\");\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.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 = '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.PLUS_CHARS + ']' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']*' + '|' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + '.*' + '$');\n\n// Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\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    _classCallCheck(this, AsYouTypeParser);\n    this.defaultCountry = defaultCountry;\n    this.defaultCallingCode = defaultCallingCode;\n    this.metadata = metadata;\n    this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n  }\n  return _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      var digits = (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(formattedDigits);\n      // Checks for a special case: just a leading `+` has been entered.\n      var justLeadingPlus;\n      if (hasPlus) {\n        if (!state.digits) {\n          state.startInternationalNumber(undefined, undefined);\n          if (!digits) {\n            justLeadingPlus = true;\n          }\n        }\n      }\n      if (digits) {\n        this.inputDigits(digits, state);\n      }\n      return {\n        digits: digits,\n        justLeadingPlus: justLeadingPlus\n      };\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    key: \"inputDigits\",\n    value: function inputDigits(nextDigits, state) {\n      var digits = state.digits;\n      var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;\n\n      // Append phone number digits.\n      state.appendDigits(nextDigits);\n\n      // 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      if (hasReceivedThreeLeadingDigits) {\n        this.extractIddPrefix(state);\n      }\n      if (this.isWaitingForCountryCallingCode(state)) {\n        if (!this.extractCountryCallingCode(state)) {\n          return;\n        }\n      } else {\n        state.appendNationalSignificantNumberDigits(nextDigits);\n      }\n\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      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    }\n\n    // Extracts a country calling code from a number\n    // being entered in internatonal format.\n  }, {\n    key: \"extractCountryCallingCode\",\n    value: function extractCountryCallingCode(state) {\n      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n        countryCallingCode = _extractCountryCallin.countryCallingCode,\n        number = _extractCountryCallin.number;\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        var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n        this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n      } else {\n        this.hasSelectedNumberingPlan = undefined;\n        this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n      }\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    key: \"extractNationalSignificantNumber\",\n    value: function extractNationalSignificantNumber(nationalDigits, setState) {\n      if (!this.hasSelectedNumberingPlan) {\n        return;\n      }\n      var _extractNationalNumbe = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalDigits, this.metadata),\n        nationalPrefix = _extractNationalNumbe.nationalPrefix,\n        nationalNumber = _extractNationalNumbe.nationalNumber,\n        carrierCode = _extractNationalNumbe.carrierCode;\n      if (nationalNumber === nationalDigits) {\n        return;\n      }\n      this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n      return true;\n    }\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    key: \"extractAnotherNationalSignificantNumber\",\n    value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n      if (!this.hasExtractedNationalSignificantNumber) {\n        return this.extractNationalSignificantNumber(nationalDigits, setState);\n      }\n      if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n        return;\n      }\n      var _extractNationalNumbe2 = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalDigits, this.metadata),\n        nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n        nationalNumber = _extractNationalNumbe2.nationalNumber,\n        carrierCode = _extractNationalNumbe2.carrierCode;\n      // 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      /* istanbul ignore if */\n      if (nationalNumber === prevNationalSignificantNumber) {\n        return;\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      // Tells if the parsed national (significant) number is present as-is in the input string.\n      // For example, when inputting \"0343515551212999\" Argentinian mobile number,\n      // the parsed national (significant) number is \"93435551212999\".\n      // There, one can see how it stripped \"0\" national prefix and prepended a \"9\",\n      // because that's how it is instructed to do in Argentina's metadata.\n      // So in the described example, the parsed national (significant) number is not present\n      // as-is in the input string. Instead, it's \"modified\" in the input string.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n      var nationalSignificantNumberIsModified = false;\n\n      // In some countries, a phone number could have a prefix that is not a \"national prefix\"\n      // but rather some other type of \"utility\" prefix.\n      // For example, when calling within Australia, one could prepend `1831` prefix to hide\n      // caller's phone number.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n      var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n\n      // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.\n      var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);\n\n      // If the parsed national (significant) number is the last substring of the `nationalDigits`,\n      // then it means that it's present as-is in the input string.\n      // In any other case, the parsed national (significant) number is \"modified\" in the input string.\n      if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {\n        nationalSignificantNumberIsModified = true;\n      } else {\n        var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);\n        // When national (significant) number is equal to the `nationalDigits`,\n        // this `onExtractedNationalNumber()` function simply doesn't get called.\n        // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.\n        // Still, added this `if` check just to prevent potential silly bugs.\n        // The `!prefixBeforeNationalNumber` case is not really testable\n        // so this line is exluded from the code coverage.\n        /* istanbul ignore if */\n        if (prefixBeforeNationalNumber) {\n          if (prefixBeforeNationalNumber !== nationalPrefix) {\n            prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;\n          }\n        }\n      }\n      setState({\n        nationalPrefix: nationalPrefix,\n        carrierCode: carrierCode,\n        nationalSignificantNumber: nationalSignificantNumber,\n        nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,\n        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix\n      });\n      // `onExtractedNationalNumber()` is only called when\n      // the national (significant) number actually did change.\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      }\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      if (this.extractIddPrefix(state)) {\n        this.extractCallingCodeAndNationalSignificantNumber(state);\n        return true;\n      }\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      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      if (international || IDDPrefix) {\n        return;\n      }\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      var numberWithoutIDD = (0,_helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\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 = (0,_helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n          newCallingCode = _extractCountryCallin2.countryCallingCode;\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);\n      // If a national (significant) number has been extracted before, reset it.\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/**\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\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  if (startsAt < 0) {\n    return;\n  }\n  // Trim everything to the left of the phone number.\n  text = text.slice(startsAt);\n  // Trim the `+`.\n  var hasPlus;\n  if (text[0] === '+') {\n    hasPlus = true;\n    text = text.slice('+'.length);\n  }\n  // Trim everything to the right of the phone number.\n  text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');\n  // Re-add the previously trimmed `+`.\n  if (hasPlus) {\n    text = '+' + text;\n  }\n  return text;\n}\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 */\nfunction _extractFormattedDigitsAndPlus(text) {\n  // Extract a formatted phone number part from text.\n  var extractedNumber = extractFormattedPhoneNumber(text) || '';\n  // Trim a `+`.\n  if (extractedNumber[0] === '+') {\n    return [extractedNumber.slice('+'.length), true];\n  }\n  return [extractedNumber];\n}\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 */\nfunction extractFormattedDigitsAndPlus(text) {\n  var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n    _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n    formattedDigits = _extractFormattedDigi4[0],\n    hasPlus = _extractFormattedDigi4[1];\n  // 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  if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n    formattedDigits = '';\n  }\n  return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/AsYouTypeState.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/AsYouTypeState.js ***!\n  \\**************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ AsYouTypeState; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string` — The exact country of the phone number, if it could be determined.\n//                        When inputting a phone number in \"international\" format, it will derive the `country` from \"country calling code\" and the phone number digits.\n//                        When inputting a phone number in \"national\" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.\n//                        Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for \"non-geographic phone numbers\" `state.country` would've been \"001\".\n// * `callingCode?: string` — \"Country calling code\" that has been extracted from the input phone number.\n//                        When inputting a phone number in \"international\" format, it will extract the \"country calling code\" from the digits that follow the \"+\" character.\n//                        When inputting a phone number in \"national\" format, `callingCode` will be `undefined`.\n//                        Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in \"international\" format.\n// * `digits: string` — Phone number digits that have been input so far, including the \"+\" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.\n// * `international: boolean` — Whether the phone number is being input in \"international\" format, i.e. with a \"+\" character.\n// * `missingPlus: boolean` — Whether it's a phone number in \"international\" format that is missing the leading \"+\" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.\n// * `IDDPrefix?: string` — An \"IDD prefix\", when the phone number is being input in an \"out-of-country dialing\" format. https://wikitravel.org/en/International_dialling_prefix\n// * `carrierCode?: string` — A \"carrier code\", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.\n// * `nationalPrefix?: string` — \"National prefix\", if present in the phone number input.\n// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.\n// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting \"0343515551212999\" Argentinian mobile number, the parsed national (significant) number is \"93435551212999\". There, one can see how it stripped \"0\" national prefix and prepended a \"9\", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's \"modified\" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a \"national prefix\" but rather some other type of \"utility\" prefix.\n//                                                                             For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.\n//                                                                             https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n  function AsYouTypeState(_ref) {\n    var onCountryChange = _ref.onCountryChange,\n      onCallingCodeChange = _ref.onCallingCodeChange;\n    _classCallCheck(this, AsYouTypeState);\n    this.onCountryChange = onCountryChange;\n    this.onCallingCodeChange = onCallingCodeChange;\n  }\n  return _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.nationalSignificantNumberIsModified = false;\n      this.nationalPrefix = undefined;\n      this.carrierCode = undefined;\n      this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = 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;\n      // If a default country was set then reset it\n      // because an explicitly international phone\n      // number is being entered.\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\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    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      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      return this.digits;\n    }\n  }]);\n}();\n\n//# sourceMappingURL=AsYouTypeState.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/getExampleNumber.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/getExampleNumber.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getExampleNumber; }\n/* harmony export */ });\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n\nfunction getExampleNumber(country, examples, metadata) {\n  if (examples[country]) {\n    return new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](country, examples[country], metadata);\n  }\n}\n//# sourceMappingURL=getExampleNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/examples.mobile.json.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/examples.mobile.json.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n// 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\n/* harmony default export */ __webpack_exports__[\"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\":\"0195123456\",\"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\":\"34412345\",\"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\":\"60123456\",\"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\":\"2221234567\",\"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\"});\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/AsYouType.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/AsYouType.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AsYouType: function() { return /* binding */ AsYouType; }\n/* harmony export */ });\n/* harmony import */ var _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.mobile.json.js */ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/AsYouType.js\");\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\n\r\n\r\n\r\n\r\nfunction AsYouType(country) {\r\n\treturn _core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].call(this, country, _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\r\n}\r\n\r\nAsYouType.prototype = Object.create(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].prototype, {})\r\nAsYouType.prototype.constructor = AsYouType\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getExampleNumber: function() { return /* binding */ getExampleNumber; }\n/* harmony export */ });\n/* harmony import */ var _withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withMetadataArgument.js */ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/getExampleNumber.js\");\n\r\n\r\n\r\nfunction getExampleNumber() {\r\n\treturn (0,_withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], arguments)\r\n}\n\n/***/ })\n\n}]);\n//# sourceMappingURL=vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54.dev.js.map"
  },
  {
    "path": "umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js",
    "content": "\"use strict\";\n(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js\"],{\n\n/***/ \"./node_modules/libphonenumber-js/es6/ParseError.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/ParseError.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ ParseError; }\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\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  function ParseError(code) {\n    var _this;\n    _classCallCheck(this, ParseError);\n    _this = _callSuper(this, ParseError, [code]);\n    // Set the prototype explicitly.\n    // Any subclass of FooError will have to manually set the prototype as well.\n    Object.setPrototypeOf(_this, ParseError.prototype);\n    _this.name = _this.constructor.name;\n    return _this;\n  }\n  _inherits(ParseError, _Error);\n  return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\n\n//# sourceMappingURL=ParseError.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/PhoneNumber.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ PhoneNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isPossible.js */ \"./node_modules/libphonenumber-js/es6/isPossible.js\");\n/* harmony import */ var _isValid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isValid.js */ \"./node_modules/libphonenumber-js/es6/isValid.js\");\n/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\n/* harmony import */ var _helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/getPossibleCountriesForNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js\");\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\n/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./format.js */ \"./node_modules/libphonenumber-js/es6/format.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\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    // Validate `countryOrCountryCallingCode` argument.\n    if (!countryOrCountryCallingCode) {\n      throw new TypeError('First argument is required');\n    }\n    if (typeof countryOrCountryCallingCode !== 'string') {\n      throw new TypeError('First argument must be a string');\n    }\n\n    // In case of public API use: `constructor(number, metadata)`.\n    // Transform the arguments from `constructor(number, metadata)` to\n    // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n    if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n      throw new TypeError('`metadata` argument not passed');\n    }\n    if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nationalNumber) && (0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nationalNumber.countries)) {\n      metadata = nationalNumber;\n      var e164Number = countryOrCountryCallingCode;\n      if (!E164_NUMBER_REGEXP.test(e164Number)) {\n        throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n      }\n      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(e164Number, undefined, undefined, undefined, metadata),\n        _countryCallingCode = _extractCountryCallin.countryCallingCode,\n        number = _extractCountryCallin.number;\n      nationalNumber = number;\n      countryOrCountryCallingCode = _countryCallingCode;\n      if (!nationalNumber) {\n        throw new Error('Invalid `number` argument passed: too short');\n      }\n    }\n\n    // Validate `nationalNumber` argument.\n    if (!nationalNumber) {\n      throw new TypeError('`nationalNumber` argument is required');\n    }\n    if (typeof nationalNumber !== 'string') {\n      throw new TypeError('`nationalNumber` argument must be a string');\n    }\n\n    // Validate `metadata` argument.\n    (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.validateMetadata)(metadata);\n\n    // Initialize properties.\n    var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n      country = _getCountryAndCountry.country,\n      countryCallingCode = _getCountryAndCountry.countryCallingCode;\n    this.country = country;\n    this.countryCallingCode = countryCallingCode;\n    this.nationalNumber = nationalNumber;\n    this.number = '+' + this.countryCallingCode + this.nationalNumber;\n    // 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    this.getMetadata = function () {\n      return metadata;\n    };\n  }\n  return _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      return (0,_helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n    }\n  }, {\n    key: \"isPossible\",\n    value: function isPossible() {\n      return (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"isValid\",\n    value: function isValid() {\n      return (0,_isValid_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"isNonGeographic\",\n    value: function isNonGeographic() {\n      var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](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    }\n\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    key: \"getType\",\n    value: function getType() {\n      return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(this, {\n        v2: true\n      }, this.getMetadata());\n    }\n  }, {\n    key: \"format\",\n    value: function format(_format, options) {\n      return (0,_format_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(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\nvar isCountryCode = function isCountryCode(value) {\n  return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n  var country;\n  var countryCallingCode;\n  var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadataJson);\n  // If country code is passed then derive `countryCallingCode` from it.\n  // Also store the country code as `.country`.\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    if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n      if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n        country = '001';\n      }\n    }\n  }\n  return {\n    country: country,\n    countryCallingCode: countryCallingCode\n  };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/constants.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/constants.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MAX_LENGTH_COUNTRY_CODE: function() { return /* binding */ MAX_LENGTH_COUNTRY_CODE; },\n/* harmony export */   MAX_LENGTH_FOR_NSN: function() { return /* binding */ MAX_LENGTH_FOR_NSN; },\n/* harmony export */   MIN_LENGTH_FOR_NSN: function() { return /* binding */ MIN_LENGTH_FOR_NSN; },\n/* harmony export */   PLUS_CHARS: function() { return /* binding */ PLUS_CHARS; },\n/* harmony export */   VALID_DIGITS: function() { return /* binding */ VALID_DIGITS; },\n/* harmony export */   VALID_PUNCTUATION: function() { return /* binding */ VALID_PUNCTUATION; },\n/* harmony export */   WHITESPACE: function() { return /* binding */ WHITESPACE; }\n/* harmony export */ });\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nvar VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nvar WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// 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.\nvar VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nvar PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/format.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/format.js ***!\n  \\******************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   chooseFormatForNumber: function() { return /* binding */ chooseFormatForNumber; },\n/* harmony export */   \"default\": function() { return /* binding */ formatNumber; }\n/* harmony export */ });\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js\");\n/* harmony import */ var _helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/RFC3966.js */ \"./node_modules/libphonenumber-js/es6/helpers/RFC3966.js\");\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\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n  formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n    return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n  }\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 */\nfunction formatNumber(input, format, options, metadata) {\n  // Apply default options.\n  if (options) {\n    // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n    // for some weird reason: this line of code would cause the code coverage\n    // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n    // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n    //\n    // options = { ...DEFAULT_OPTIONS, ...options }\n    //\n    options = merge({}, DEFAULT_OPTIONS, options);\n  } else {\n    options = DEFAULT_OPTIONS;\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\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    metadata.selectNumberingPlan(input.country);\n  } else if (input.countryCallingCode) {\n    metadata.selectNumberingPlan(input.countryCallingCode);\n  } else return input.phone || '';\n  var countryCallingCode = metadata.countryCallingCode();\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n  // This variable should have been declared inside `case`s\n  // but Babel has a bug and it says \"duplicate variable declaration\".\n  var number;\n  switch (format) {\n    case 'NATIONAL':\n      // Legacy argument support.\n      // (`{ country: ..., phone: '' }`)\n      if (!nationalNumber) {\n        return '';\n      }\n      number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n      return addExtension(number, input.ext, metadata, options.formatExtension);\n    case 'INTERNATIONAL':\n      // Legacy argument support.\n      // (`{ country: ..., phone: '' }`)\n      if (!nationalNumber) {\n        return \"+\".concat(countryCallingCode);\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    case 'E.164':\n      // `E.164` doesn't define \"phone number extensions\".\n      return \"+\".concat(countryCallingCode).concat(nationalNumber);\n    case 'RFC3966':\n      return (0,_helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__.formatRFC3966)({\n        number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n        ext: input.ext\n      });\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    case 'IDD':\n      if (!options.fromCountry) {\n        return;\n        // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n      }\n      var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n      return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n    default:\n      throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n  }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n  var format = chooseFormatForNumber(metadata.formats(), number);\n  if (!format) {\n    return number;\n  }\n  return (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(number, format, {\n    useInternationalFormat: formatAs === 'INTERNATIONAL',\n    withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n    carrierCode: carrierCode,\n    metadata: metadata\n  });\n}\nfunction chooseFormatForNumber(availableFormats, nationalNumber) {\n  // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n  // for some weird reason, it showed code coverage less than 100%.\n  // That's because `babel`/`istanbul`, for some weird reason,\n  // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n  //\n  // for (const format of availableFormats) { ... }\n  //\n  return pickFirstMatchingElement(availableFormats, function (format) {\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];\n      // If leading digits don't match then move on to the next phone number format\n      if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n        return false;\n      }\n    }\n    // Check that the national number matches the phone number format regular expression\n    return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalNumber, format.pattern());\n  });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n  return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n  var fromCountryCallingCode = (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(fromCountry, metadata.metadata);\n  // When calling within the same country calling code.\n  if (fromCountryCallingCode === countryCallingCode) {\n    var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n    // For NANPA regions, return the national format for these regions\n    // but prefix it with the country calling code.\n    if (countryCallingCode === '1') {\n      return countryCallingCode + ' ' + formattedNumber;\n    }\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    return formattedNumber;\n  }\n  var iddPrefix = (0,_helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(fromCountry, undefined, metadata.metadata);\n  if (iddPrefix) {\n    return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n  }\n}\nfunction merge() {\n  var i = 1;\n  for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n    objects[_key] = arguments[_key];\n  }\n  while (i < objects.length) {\n    if (objects[i]) {\n      for (var key in objects[i]) {\n        objects[0][key] = objects[i][key];\n      }\n    }\n    i++;\n  }\n  return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n  var i = 0;\n  while (i < elements.length) {\n    if (testFunction(elements[i])) {\n      return elements[i];\n    }\n    i++;\n  }\n}\n//# sourceMappingURL=format.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/RFC3966.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/RFC3966.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   formatRFC3966: function() { return /* binding */ formatRFC3966; },\n/* harmony export */   parseRFC3966: function() { return /* binding */ parseRFC3966; }\n/* harmony export */ });\n/* harmony import */ var _isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isViablePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\");\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\n// 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 */\nfunction parseRFC3966(text) {\n  var number;\n  var ext;\n\n  // Replace \"tel:\" with \"tel=\" for parsing convenience.\n  text = text.replace(/^tel:/, 'tel=');\n  for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n    var part = _step.value;\n    var _part$split = part.split('='),\n      _part$split2 = _slicedToArray(_part$split, 2),\n      name = _part$split2[0],\n      value = _part$split2[1];\n    switch (name) {\n      case 'tel':\n        number = value;\n        break;\n      case 'ext':\n        ext = value;\n        break;\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        break;\n    }\n  }\n\n  // If the phone number is not viable, then abort.\n  if (!(0,_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number)) {\n    return {};\n  }\n  var result = {\n    number: number\n  };\n  if (ext) {\n    result.ext = ext;\n  }\n  return result;\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nfunction formatRFC3966(_ref) {\n  var number = _ref.number,\n    ext = _ref.ext;\n  if (!number) {\n    return '';\n  }\n  if (number[0] !== '+') {\n    throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n  }\n  return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\":\n/*!****************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js ***!\n  \\****************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ applyInternationalSeparatorStyle; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n// 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 `<intlFormat/>`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 `<intlFormat/>` 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//\nfunction applyInternationalSeparatorStyle(formattedNumber) {\n  return formattedNumber.replace(new RegExp(\"[\".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js ***!\n  \\*************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   checkNumberLengthForType: function() { return /* binding */ checkNumberLengthForType; },\n/* harmony export */   \"default\": function() { return /* binding */ checkNumberLength; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergeArrays.js */ \"./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js\");\n\n\nfunction checkNumberLength(nationalNumber, country, metadata) {\n  return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nfunction checkNumberLengthForType(nationalNumber, country, type, metadata) {\n  // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n  // Most likely, in cases when there're multiple countries corresponding to the same\n  // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n  if (country) {\n    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata.metadata);\n    metadata.selectNumberingPlan(country);\n  }\n  var type_info = metadata.type(type);\n\n  // There should always be \"<possiblePengths/>\" 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 \"<possiblePengths/>\" 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  var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n  // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n  // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n  if (!possible_lengths) {\n    return 'IS_POSSIBLE';\n  }\n  if (type === 'FIXED_LINE_OR_MOBILE') {\n    // No such country in metadata.\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, country, 'MOBILE', metadata);\n    }\n    var mobile_type = metadata.type('MOBILE');\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 = (0,_mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(possible_lengths, mobile_type.possibleLengths());\n      // 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\n      // if (local_lengths) {\n      // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n      // } else {\n      // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n      // }\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  var actual_length = nationalNumber.length;\n\n  // 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  if (minimum_length === actual_length) {\n    return 'IS_POSSIBLE';\n  }\n  if (minimum_length > actual_length) {\n    return 'TOO_SHORT';\n  }\n  if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n    return 'TOO_LONG';\n  }\n\n  // We skip the first element since we've already checked it.\n  return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\":\n/*!****************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js ***!\n  \\****************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ createExtensionPattern; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\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 */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n  return \"([\".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\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 */\nfunction 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  /** @type {string} */\n  var extLimitAfterExplicitLabel = '20';\n  /** @type {string} */\n  var extLimitAfterLikelyLabel = '15';\n  /** @type {string} */\n  var extLimitAfterAmbiguousChar = '9';\n  /** @type {string} */\n  var extLimitWhenNotSure = '6';\n\n  /** @type {string} */\n  var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n  // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n  /** @type {string} */\n  var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n  /** @type {string} */\n  var optionalExtnSuffix = \"#?\";\n\n  // Here the extension is called out in more explicit way, i.e mentioning it obvious\n  // patterns like \"ext.\".\n  /** @type {string} */\n  var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n  // One-character symbols that can be used to indicate an extension, and less\n  // commonly used or more ambiguous extension labels.\n  /** @type {string} */\n  var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n  // When extension is not separated clearly.\n  /** @type {string} */\n  var ambiguousSeparator = \"[- ]+\";\n  // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n  // comma as extension label may have it.\n  /** @type {string} */\n  var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n  // \",,\" 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  /** @type {string} */\n  var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n  /** @type {string} */\n  var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n  /** @type {string} */\n  var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n  /** @type {string} */\n  var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n  /** @type {string} */\n  var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n  /** @type {string} */\n  var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n  /** @type {string} */\n  var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n  // 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  return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js\":\n/*!**********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js ***!\n  \\**********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractExtension; }\n/* harmony export */ });\n/* harmony import */ var _createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createExtensionPattern.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\");\n\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + (0,_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])() + ')$', 'i');\n\n// 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.\nfunction extractExtension(number) {\n  var start = number.search(EXTN_PATTERN);\n  if (start < 0) {\n    return {};\n  }\n  // If we find a potential extension, and the number preceding this is a viable\n  // number, we assume it is an extension.\n  var numberWithoutExtension = number.slice(0, start);\n  var matches = number.match(EXTN_PATTERN);\n  var i = 1;\n  while (i < matches.length) {\n    if (matches[i]) {\n      return {\n        number: numberWithoutExtension,\n        ext: matches[i]\n      };\n    }\n    i++;\n  }\n}\n//# sourceMappingURL=extractExtension.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\":\n/*!*********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js ***!\n  \\*********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractCountryCallingCode; }\n/* harmony export */ });\n/* harmony import */ var _stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stripIddPrefix.js */ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\");\n/* harmony import */ var _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\n\n\n\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] — Country.\r\n * @param  {string} [defaultCountry] — Default country.\r\n * @param  {string} [defaultCallingCode] — 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', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nfunction extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n  if (!number) {\n    return {};\n  }\n  var isNumberWithIddPrefix;\n\n  // 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  if (number[0] !== '+') {\n    // Convert an \"out-of-country\" dialing phone number\n    // to a proper international phone number.\n    var numberWithoutIDD = (0,_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number, country || defaultCountry, defaultCallingCode, metadata);\n    // If an IDD prefix was stripped then\n    // convert the number to international one\n    // for subsequent parsing.\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 || defaultCountry || defaultCallingCode) {\n        var _extractCountryCallin = (0,_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(number, country, defaultCountry, defaultCallingCode, metadata),\n          countryCallingCode = _extractCountryCallin.countryCallingCode,\n          shorterNumber = _extractCountryCallin.number;\n        if (countryCallingCode) {\n          return {\n            countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n            countryCallingCode: countryCallingCode,\n            number: shorterNumber\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  }\n\n  // `number` can only be international at this point.\n\n  // Fast abortion: country codes do not begin with a '0'\n  if (number[1] === '0') {\n    return {};\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\n\n  // 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  var i = 2;\n  while (i - 1 <= _constants_js__WEBPACK_IMPORTED_MODULE_3__.MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n    var _countryCallingCode = number.slice(1, i);\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    i++;\n  }\n  return {};\n}\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js\":\n/*!***********************************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js ***!\n  \\***********************************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractCountryCallingCodeFromInternationalNumberWithoutPlusSign; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../getCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./extractNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\");\n/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n\n\n\n\n\n\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] — Exact country of the phone number.\r\n * @param  {string} [defaultCountry]\r\n * @param  {string} [defaultCallingCode]\r\n * @param  {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nfunction extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n  var countryCallingCode = country || defaultCountry ? (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.getCountryCallingCode)(country || defaultCountry, metadata) : defaultCallingCode;\n  if (number.indexOf(countryCallingCode) === 0) {\n    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n    metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n    var possibleShorterNumber = number.slice(countryCallingCode.length);\n    var _extractNationalNumbe = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(possibleShorterNumber, country, metadata),\n      possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n    var _extractNationalNumbe2 = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(number, country, metadata),\n      nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n    // 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    if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern()) && (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || (0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(nationalNumber, country, metadata) === 'TOO_LONG') {\n      return {\n        countryCallingCode: countryCallingCode,\n        number: possibleShorterNumber\n      };\n    }\n  }\n  return {\n    number: number\n  };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js\":\n/*!***************************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js ***!\n  \\***************************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractFormattedPhoneNumberFromPossibleRfc3966NumberUri; }\n/* harmony export */ });\n/* harmony import */ var _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractPhoneContext.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ParseError.js */ \"./node_modules/libphonenumber-js/es6/ParseError.js\");\n\n\n\n/**\r\n * @param  {string} numberToParse\r\n * @param  {string} nationalNumber\r\n * @return {}\r\n */\nfunction extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n  var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n  var phoneContext = (0,_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(numberToParse);\n  if (!(0,_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.isPhoneContextValid)(phoneContext)) {\n    throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('NOT_A_NUMBER');\n  }\n  var phoneNumberString;\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 = '';\n\n    // If the phone context contains a phone number prefix, we need to capture\n    // it, whereas domains will be ignored.\n    if (phoneContext.charAt(0) === _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_SIGN) {\n      phoneNumberString += phoneContext;\n    }\n\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    var indexOfRfc3966Prefix = numberToParse.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PREFIX_);\n    var indexOfNationalNumber;\n    // RFC 3966 \"tel:\" prefix is preset at this stage because\n    // `isPhoneContextValid()` requires it to be present.\n    /* istanbul ignore else */\n    if (indexOfRfc3966Prefix >= 0) {\n      indexOfNationalNumber = indexOfRfc3966Prefix + _extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PREFIX_.length;\n    } else {\n      indexOfNationalNumber = 0;\n    }\n    var indexOfPhoneContext = numberToParse.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_PHONE_CONTEXT_);\n    phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n  }\n\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  var indexOfIsdn = phoneNumberString.indexOf(_extractPhoneContext_js__WEBPACK_IMPORTED_MODULE_0__.RFC3966_ISDN_SUBADDRESS_);\n  if (indexOfIsdn > 0) {\n    phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n  }\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  if (phoneNumberString !== '') {\n    return phoneNumberString;\n  }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\":\n/*!*****************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js ***!\n  \\*****************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractNationalNumber; }\n/* harmony export */ });\n/* harmony import */ var _extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractNationalNumberFromPossiblyIncompleteNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n/* harmony import */ var _getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n\n\n\n\n\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  {string?} country — Country, if known.\r\n * @param  {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nfunction extractNationalNumber(number, country, 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 = (0,_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(number, metadata),\n    carrierCode = _extractNationalNumbe.carrierCode,\n    nationalNumber = _extractNationalNumbe.nationalNumber;\n  if (nationalNumber !== number) {\n    if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n      // Don't strip the national prefix.\n      return {\n        nationalNumber: number\n      };\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    if (metadata.numberingPlan.possibleLengths()) {\n      // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n      if (!country) {\n        country = (0,_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(metadata.numberingPlan.callingCode(), {\n          nationalNumber: nationalNumber,\n          metadata: metadata\n        });\n      }\n\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, country, metadata)) {\n        // Don't strip the national prefix.\n        return {\n          nationalNumber: number\n        };\n      }\n    }\n  }\n  return {\n    nationalNumber: nationalNumber,\n    carrierCode: carrierCode\n  };\n}\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`.\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 ((0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumberBefore, metadata.nationalNumberPattern()) && !(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumberAfter, metadata.nationalNumberPattern())) {\n    return false;\n  }\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  return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n  switch ((0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(nationalNumber, country, 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    default:\n      return true;\n  }\n}\n//# sourceMappingURL=extractNationalNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js\":\n/*!*********************************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js ***!\n  \\*********************************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ extractNationalNumberFromPossiblyIncompleteNumber; }\n/* harmony export */ });\n/**\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 */\nfunction 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    if (prefixMatch) {\n      var nationalNumber;\n      var carrierCode;\n      // 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      var capturedGroupsCount = prefixMatch.length - 1;\n      var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n      if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n        nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n        // If there's more than one captured group,\n        // then carrier code is the second one.\n        if (capturedGroupsCount > 1) {\n          carrierCode = prefixMatch[1];\n        }\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);\n        // If there's at least one captured group,\n        // then carrier code is the first one.\n        if (hasCapturedGroups) {\n          carrierCode = prefixMatch[1];\n        }\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      var nationalPrefix;\n      if (hasCapturedGroups) {\n        var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n        var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n        // 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        if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n          nationalPrefix = metadata.numberingPlan.nationalPrefix();\n        }\n      } else {\n        nationalPrefix = prefixMatch[0];\n      }\n      return {\n        nationalNumber: nationalNumber,\n        nationalPrefix: nationalPrefix,\n        carrierCode: carrierCode\n      };\n    }\n  }\n  return {\n    nationalNumber: number\n  };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   PLUS_SIGN: function() { return /* binding */ PLUS_SIGN; },\n/* harmony export */   RFC3966_ISDN_SUBADDRESS_: function() { return /* binding */ RFC3966_ISDN_SUBADDRESS_; },\n/* harmony export */   RFC3966_PHONE_CONTEXT_: function() { return /* binding */ RFC3966_PHONE_CONTEXT_; },\n/* harmony export */   RFC3966_PREFIX_: function() { return /* binding */ RFC3966_PREFIX_; },\n/* harmony export */   \"default\": function() { return /* binding */ extractPhoneContext; },\n/* harmony export */   isPhoneContextValid: function() { return /* binding */ isPhoneContextValid; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n// 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.\n\n\nvar PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\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 */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = _constants_js__WEBPACK_IMPORTED_MODULE_0__.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\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nvar RFC3966_PREFIX_ = 'tel:';\nvar RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nvar RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\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 */\nfunction extractPhoneContext(numberToExtractFrom) {\n  var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n  // If no phone-context parameter is present\n  if (indexOfPhoneContext < 0) {\n    return null;\n  }\n  var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n  // If phone-context parameter is empty\n  if (phoneContextStart >= numberToExtractFrom.length) {\n    return '';\n  }\n  var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n  // If phone-context is not the last parameter\n  if (phoneContextEnd >= 0) {\n    return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n  } else {\n    return numberToExtractFrom.substring(phoneContextStart);\n  }\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 */\nfunction isPhoneContextValid(phoneContext) {\n  if (phoneContext === null) {\n    return true;\n  }\n  if (phoneContext.length === 0) {\n    return false;\n  }\n\n  // Does phone-context value match pattern of global-number-digits or domainname.\n  return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js\":\n/*!***************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js ***!\n  \\***************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FIRST_GROUP_PATTERN: function() { return /* binding */ FIRST_GROUP_PATTERN; },\n/* harmony export */   \"default\": function() { return /* binding */ formatNationalNumberUsingFormat; }\n/* harmony export */ });\n/* harmony import */ var _applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyInternationalSeparatorStyle.js */ \"./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js\");\n\n\n// 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.\nvar FIRST_GROUP_PATTERN = /(\\$\\d)/;\nfunction 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() :\n  // 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  if (useInternationalFormat) {\n    return (0,_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(formattedNumber);\n  }\n  return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\":\n/*!*******************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js ***!\n  \\*******************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getCountryByCallingCode; }\n/* harmony export */ });\n/* harmony import */ var _getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCountryByNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\");\n\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nfunction getCountryByCallingCode(callingCode, _ref) {\n  var nationalPhoneNumber = _ref.nationalNumber,\n    metadata = _ref.metadata;\n  /* istanbul ignore if */\n  if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n    if (metadata.isNonGeographicCallingCode(callingCode)) {\n      return '001';\n    }\n  }\n  var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n  if (!possibleCountries) {\n    return;\n  }\n  // If there's just one country corresponding to the country code,\n  // then just return it, without further phone number digits validation.\n  if (possibleCountries.length === 1) {\n    return possibleCountries[0];\n  }\n  return (0,_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(nationalPhoneNumber, {\n    countries: possibleCountries,\n    metadata: metadata.metadata\n  });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js\":\n/*!**********************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js ***!\n  \\**********************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getCountryByNationalNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _getNumberType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nfunction getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n  var countries = _ref.countries,\n    metadata = _ref.metadata;\n  // Re-create `metadata` because it will be selecting a `country`.\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n\n  // const matchingCountries = []\n\n  for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n    var country = _step.value;\n    metadata.selectNumberingPlan(country);\n    // \"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    if (metadata.leadingDigits()) {\n      if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n        return country;\n      }\n    }\n    // Else perform full validation with all of those\n    // fixed-line/mobile/etc regular expressions.\n    else if ((0,_getNumberType_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n      phone: nationalPhoneNumber,\n      country: country\n    }, undefined, metadata.metadata)) {\n      // When multiple countries share the same \"country calling code\",\n      // type patterns aren't guaranteed to be unique among them.\n      // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n      //\n      // That means that this `if` condition could be `true` for multiple countries from the list.\n      // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n      // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n      // it could as well be `\"CA\"`.\n      //\n      // There was also a time when this attempted to be overly smart\n      // and kept track of all such multiple matching countries\n      // and then picked the one that matched the `defaultCountry`, if provided.\n      // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n      // it would've returned `\"CA\"` instead of `\"US\"`.\n      // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n      // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n      // for the \"country calling code\".\n      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n      //\n      return country;\n      //\n      // The \"overly smart\" behavior code:\n      //\n      // if (defaultCountry) {\n      // \tif (country === defaultCountry) {\n      // \t\treturn country\n      // \t} else {\n      // \t\tmatchingCountries.push(country)\n      // \t}\n      // } else {\n      // \treturn country\n      // }\n    }\n  }\n\n  // // Return the first (\"main\") one of the `matchingCountries`.\n  // if (matchingCountries.length > 0) {\n  // \treturn matchingCountries[0]\n  // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getIddPrefix; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n\n\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 */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nfunction getIddPrefix(country, callingCode, metadata) {\n  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  countryMetadata.selectNumberingPlan(country, callingCode);\n  if (countryMetadata.defaultIDDPrefix()) {\n    return countryMetadata.defaultIDDPrefix();\n  }\n  if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n    return countryMetadata.IDDPrefix();\n  }\n}\n//# sourceMappingURL=getIddPrefix.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getNumberType.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getNumberType; },\n/* harmony export */   isNumberTypeEqualTo: function() { return /* binding */ isNumberTypeEqualTo; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nfunction 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 || {};\n\n  // When `parse()` returns an empty object — `{}` —\n  // that means that the phone number is malformed,\n  // so it can't possibly be valid.\n  if (!input.country && !input.countryCallingCode) {\n    return;\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n  // The following is copy-pasted from the original function:\n  // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n  // Is this national number even valid for this country\n  if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern())) {\n    return;\n  }\n\n  // Is it fixed line number\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    }\n\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    if (!metadata.type('MOBILE')) {\n      return 'FIXED_LINE_OR_MOBILE';\n    }\n\n    // Check if the number happens to qualify as both fixed line and mobile.\n    // (no such country in the minimal metadata set)\n    /* istanbul ignore if */\n    if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n      return 'FIXED_LINE_OR_MOBILE';\n    }\n    return 'FIXED_LINE';\n  }\n  for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n    var type = _step.value;\n    if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n      return type;\n    }\n  }\n}\nfunction isNumberTypeEqualTo(nationalNumber, type, metadata) {\n  type = metadata.type(type);\n  if (!type || !type.pattern()) {\n    return false;\n  }\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  if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n    return false;\n  }\n  return (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js\":\n/*!*************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js ***!\n  \\*************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ getPossibleCountriesForNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n\n\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 */\nfunction getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n  if (!possibleCountries) {\n    return [];\n  }\n  return possibleCountries.filter(function (country) {\n    return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n  });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  _metadata.selectNumberingPlan(country);\n  if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n    return true;\n  }\n  return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/isObject.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isObject; }\n/* harmony export */ });\nvar objectConstructor = {}.constructor;\nfunction isObject(object) {\n  return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   VALID_PHONE_NUMBER: function() { return /* binding */ VALID_PHONE_NUMBER; },\n/* harmony export */   VALID_PHONE_NUMBER_WITH_EXTENSION: function() { return /* binding */ VALID_PHONE_NUMBER_WITH_EXTENSION; },\n/* harmony export */   \"default\": function() { return /* binding */ isViablePhoneNumber; },\n/* harmony export */   isViablePhoneNumberStart: function() { return /* binding */ isViablePhoneNumberStart; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extension/createExtensionPattern.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js\");\n\n\n\n//  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//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']{' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){3,}' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']*';\n\n// 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.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nvar VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + (0,_extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// 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//\nfunction isViablePhoneNumber(number) {\n  return number.length >= _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\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.\nfunction isViablePhoneNumberStart(number) {\n  return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ matchesEntirely; }\n/* harmony export */ });\n/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nfunction matchesEntirely(text, regularExpressionText) {\n  // If the assigning of the `''` default value is moved to the arguments above,\n  // the code coverage would decrease for some weird reason.\n  text = text || '';\n  return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ mergeArrays; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param  {*} a\r\n * @param  {*} b\r\n * @return {*}\r\n */\nfunction mergeArrays(a, b) {\n  var merged = a.slice();\n  for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n    var element = _step.value;\n    if (a.indexOf(element) < 0) {\n      merged.push(element);\n    }\n  }\n  return merged.sort(function (a, b) {\n    return a - b;\n  });\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/parseDigits.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DIGITS: function() { return /* binding */ DIGITS; },\n/* harmony export */   \"default\": function() { return /* binding */ parseDigits; },\n/* harmony export */   parseDigit: function() { return /* binding */ parseDigit; }\n/* harmony export */ });\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return 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//\nvar 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};\nfunction parseDigit(character) {\n  return DIGITS[character];\n}\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 */\nfunction parseDigits(string) {\n  var result = '';\n  // 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  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    var digit = parseDigit(character);\n    if (digit) {\n      result += digit;\n    }\n  }\n  return result;\n}\n//# sourceMappingURL=parseDigits.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ stripIddPrefix; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n\n\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + _constants_js__WEBPACK_IMPORTED_MODULE_1__.VALID_DIGITS + '])');\nfunction stripIddPrefix(number, country, callingCode, metadata) {\n  if (!country) {\n    return;\n  }\n  // Check if the number is IDD-prefixed.\n  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  countryMetadata.selectNumberingPlan(country, callingCode);\n  var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n  if (number.search(IDDPrefixPattern) !== 0) {\n    return;\n  }\n  // Strip IDD prefix.\n  number = number.slice(number.match(IDDPrefixPattern)[0].length);\n  // 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  var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n  if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n    if (matchedGroups[1] === '0') {\n      return;\n    }\n  }\n  return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/isPossible.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/isPossible.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isPossiblePhoneNumber; },\n/* harmony export */   isPossibleNumber: function() { return /* binding */ isPossibleNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ \"./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js\");\n\n\n\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 */\nfunction isPossiblePhoneNumber(input, options, metadata) {\n  /* istanbul ignore if */\n  if (options === undefined) {\n    options = {};\n  }\n  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  if (options.v2) {\n    if (!input.countryCallingCode) {\n      throw new Error('Invalid phone number object passed');\n    }\n    metadata.selectNumberingPlan(input.countryCallingCode);\n  } else {\n    if (!input.phone) {\n      return false;\n    }\n    if (input.country) {\n      if (!metadata.hasCountry(input.country)) {\n        throw new Error(\"Unknown country: \".concat(input.country));\n      }\n      metadata.selectNumberingPlan(input.country);\n    } else {\n      if (!input.countryCallingCode) {\n        throw new Error('Invalid phone number object passed');\n      }\n      metadata.selectNumberingPlan(input.countryCallingCode);\n    }\n  }\n\n  // Old metadata (< 1.0.18) had no \"possible length\" data.\n  if (metadata.possibleLengths()) {\n    return isPossibleNumber(input.phone || input.nationalNumber, input.country, 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}\nfunction isPossibleNumber(nationalNumber, country, metadata) {\n  //, isInternational) {\n  switch ((0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, country, 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    default:\n      return false;\n  }\n}\n//# sourceMappingURL=isPossible.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/isValid.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/isValid.js ***!\n  \\*******************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ isValidNumber; }\n/* harmony export */ });\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/getNumberType.js */ \"./node_modules/libphonenumber-js/es6/helpers/getNumberType.js\");\n\n\n\n\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 */\nfunction 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_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](metadata);\n  metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n  // By default, countries only have type regexps when it's required for\n  // distinguishing different countries having the same `countryCallingCode`.\n  if (metadata.hasTypes()) {\n    return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(input, options, metadata.metadata) !== undefined;\n  }\n\n  // If there are no type regexps for this country in metadata then use\n  // `nationalNumberPattern` as a \"better than nothing\" replacement.\n  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n  return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/metadata.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/metadata.js ***!\n  \\********************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Metadata; },\n/* harmony export */   getCountryCallingCode: function() { return /* binding */ getCountryCallingCode; },\n/* harmony export */   getExtPrefix: function() { return /* binding */ getExtPrefix; },\n/* harmony export */   isSupportedCountry: function() { return /* binding */ isSupportedCountry; },\n/* harmony export */   validateMetadata: function() { return /* binding */ validateMetadata; }\n/* harmony export */ });\n/* harmony import */ var _tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/semver-compare.js */ \"./node_modules/libphonenumber-js/es6/tools/semver-compare.js\");\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n  function Metadata(metadata) {\n    _classCallCheck(this, Metadata);\n    validateMetadata(metadata);\n    this.metadata = metadata;\n    setVersion.call(this, metadata);\n  }\n  return _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;\n      // `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      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      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        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    }\n\n    // Deprecated.\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      if (countryCode && countryCode !== '001') {\n        if (!this.hasCountry(countryCode)) {\n          throw new Error(\"Unknown country: \".concat(countryCode));\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        this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n      } else {\n        this.numberingPlan = undefined;\n      }\n      return this;\n    }\n  }, {\n    key: \"getCountryCodesForCallingCode\",\n    value: function getCountryCodesForCallingCode(callingCode) {\n      var countryCodes = this.countryCallingCodes()[callingCode];\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        return countryCodes;\n      }\n    }\n  }, {\n    key: \"getCountryCodeForCallingCode\",\n    value: function getCountryCodeForCallingCode(callingCode) {\n      var countryCodes = this.getCountryCodesForCallingCode(callingCode);\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      if (countryCode) {\n        return this.getCountryMetadata(countryCode);\n      }\n      if (this.nonGeographic()) {\n        var metadata = this.nonGeographic()[callingCode];\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        if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n          return this.metadata.countries['001'];\n        }\n      }\n    }\n\n    // Deprecated.\n  }, {\n    key: \"countryCallingCode\",\n    value: function countryCallingCode() {\n      return this.numberingPlan.callingCode();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"IDDPrefix\",\n    value: function IDDPrefix() {\n      return this.numberingPlan.IDDPrefix();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"defaultIDDPrefix\",\n    value: function defaultIDDPrefix() {\n      return this.numberingPlan.defaultIDDPrefix();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalNumberPattern\",\n    value: function nationalNumberPattern() {\n      return this.numberingPlan.nationalNumberPattern();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"possibleLengths\",\n    value: function possibleLengths() {\n      return this.numberingPlan.possibleLengths();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"formats\",\n    value: function formats() {\n      return this.numberingPlan.formats();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalPrefixForParsing\",\n    value: function nationalPrefixForParsing() {\n      return this.numberingPlan.nationalPrefixForParsing();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"nationalPrefixTransformRule\",\n    value: function nationalPrefixTransformRule() {\n      return this.numberingPlan.nationalPrefixTransformRule();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"leadingDigits\",\n    value: function leadingDigits() {\n      return this.numberingPlan.leadingDigits();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"hasTypes\",\n    value: function hasTypes() {\n      return this.numberingPlan.hasTypes();\n    }\n\n    // Deprecated.\n  }, {\n    key: \"type\",\n    value: function type(_type) {\n      return this.numberingPlan.type(_type);\n    }\n\n    // Deprecated.\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    }\n\n    // Deprecated.\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\nvar NumberingPlan = /*#__PURE__*/function () {\n  function NumberingPlan(metadata, globalMetadataObject) {\n    _classCallCheck(this, NumberingPlan);\n    this.globalMetadataObject = globalMetadataObject;\n    this.metadata = metadata;\n    setVersion.call(this, globalMetadataObject.metadata);\n  }\n  return _createClass(NumberingPlan, [{\n    key: \"callingCode\",\n    value: function callingCode() {\n      return this.metadata[0];\n    }\n\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    key: \"getDefaultCountryMetadataForRegion\",\n    value: function getDefaultCountryMetadataForRegion() {\n      return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n    }\n\n    // Is always present.\n  }, {\n    key: \"IDDPrefix\",\n    value: function IDDPrefix() {\n      if (this.v1 || this.v2) return;\n      return this.metadata[1];\n    }\n\n    // Is only present when a country supports multiple IDD prefixes.\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    }\n\n    // \"possible length\" data is always present in Google's metadata.\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    }\n\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    key: \"formats\",\n    value: function formats() {\n      var _this = this;\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    }\n\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    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    }\n\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    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      /* istanbul ignore next */\n      if (this.types() && this.types().length === 0) {\n        return false;\n      }\n      // Versions <= 1.2.4: can be `undefined`.\n      // Version >= 1.2.5: can be `0`.\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}();\nvar Format = /*#__PURE__*/function () {\n  function Format(format, metadata) {\n    _classCallCheck(this, Format);\n    this._format = format;\n    this.metadata = metadata;\n  }\n  return _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    }\n\n    // Checks whether national prefix formatting rule contains national prefix.\n  }, {\n    key: \"usesNationalPrefix\",\n    value: function usesNationalPrefix() {\n      return this.nationalPrefixFormattingRule() &&\n      // Check that national prefix formatting rule is not a \"dummy\" one.\n      !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n      // 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/**\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 */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n  function Type(type, metadata) {\n    _classCallCheck(this, Type);\n    this.type = type;\n    this.metadata = metadata;\n  }\n  return _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}();\nfunction getType(types, type) {\n  switch (type) {\n    case 'FIXED_LINE':\n      return types[0];\n    case 'MOBILE':\n      return types[1];\n    case 'TOLL_FREE':\n      return types[2];\n    case 'PREMIUM_RATE':\n      return types[3];\n    case 'PERSONAL_NUMBER':\n      return types[4];\n    case 'VOICEMAIL':\n      return types[5];\n    case 'UAN':\n      return types[6];\n    case 'PAGER':\n      return types[7];\n    case 'VOIP':\n      return types[8];\n    case 'SHARED_COST':\n      return types[9];\n  }\n}\nfunction validateMetadata(metadata) {\n  if (!metadata) {\n    throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n  }\n\n  // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n  // For that reason, it's not used in this detection algorithm.\n  // Instead, it detects by `countries: {}` property existence.\n  if (!(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(metadata) || !(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(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((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n  }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n  return _typeof(_);\n};\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 */\nfunction getExtPrefix(country, metadata) {\n  metadata = new Metadata(metadata);\n  if (metadata.hasCountry(country)) {\n    return metadata.selectNumberingPlan(country).ext();\n  }\n  return DEFAULT_EXT_PREFIX;\n}\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 */\nfunction getCountryCallingCode(country, metadata) {\n  metadata = new Metadata(metadata);\n  if (metadata.hasCountry(country)) {\n    return metadata.selectNumberingPlan(country).countryCallingCode();\n  }\n  throw new Error(\"Unknown country: \".concat(country));\n}\nfunction isSupportedCountry(country, metadata) {\n  // metadata = new Metadata(metadata)\n  // return metadata.hasCountry(country)\n  return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n  var version = metadata.version;\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 ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(version, V3) === -1) {\n      this.v2 = true;\n    } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(version, V4) === -1) {\n      this.v3 = true;\n    } else {\n      this.v4 = true;\n    }\n  }\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/normalizeArguments.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/normalizeArguments.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ normalizeArguments; }\n/* harmony export */ });\n/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/isObject.js */ \"./node_modules/libphonenumber-js/es6/helpers/isObject.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nfunction 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  var text;\n  var options;\n  var metadata;\n\n  // If the phone number is passed as a string.\n  // `parsePhoneNumber('88005553535', ...)`.\n  if (typeof arg_1 === 'string') {\n    text = arg_1;\n  } else throw new TypeError('A text for parsing must be a string.');\n\n  // If \"default country\" argument is being passed then move it to `options`.\n  // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\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    if (arg_2) {\n      options = _objectSpread({\n        defaultCountry: arg_2\n      }, options);\n    }\n  }\n  // `defaultCountry` is not passed.\n  // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n  else if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(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  return {\n    text: text,\n    options: options,\n    metadata: metadata\n  };\n}\n//# sourceMappingURL=normalizeArguments.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parse.js\":\n/*!*****************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parse.js ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parse; }\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/libphonenumber-js/es6/constants.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ParseError.js */ \"./node_modules/libphonenumber-js/es6/ParseError.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/metadata.js\");\n/* harmony import */ var _helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/isViablePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js\");\n/* harmony import */ var _helpers_extension_extractExtension_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/extension/extractExtension.js */ \"./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js\");\n/* harmony import */ var _parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./parseIncompletePhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js\");\n/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isPossible.js */ \"./node_modules/libphonenumber-js/es6/isPossible.js\");\n/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PhoneNumber.js */ \"./node_modules/libphonenumber-js/es6/PhoneNumber.js\");\n/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ \"./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js\");\n/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js\");\n/* harmony import */ var _helpers_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./helpers/extractNationalNumber.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js\");\n/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ \"./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js\");\n/* harmony import */ var _helpers_extractFormattedPhoneNumberFromPossibleRfc3966NumberUri_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js */ \"./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js\");\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\n\n\n\n\n\n\n\n\n\n// import { parseRFC3966 } from './helpers/RFC3966.js'\n\n\n\n\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\n\n\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']');\n\n// 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\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// 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 */\nfunction 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_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](metadata);\n\n  // Validate `defaultCountry`.\n  if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('INVALID_COUNTRY');\n    }\n    throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n  }\n\n  // Parse the phone number.\n  var _parseInput = parseInput(text, options.v2, options.extract),\n    formattedPhoneNumber = _parseInput.number,\n    ext = _parseInput.ext,\n    error = _parseInput.error;\n\n  // If the phone number is not viable then return nothing.\n  if (!formattedPhoneNumber) {\n    if (options.v2) {\n      if (error === 'TOO_SHORT') {\n        throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_SHORT');\n      }\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('NOT_A_NUMBER');\n    }\n    return {};\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  if (!metadata.hasSelectedNumberingPlan()) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('INVALID_COUNTRY');\n    }\n    return {};\n  }\n\n  // Validate national (significant) number length.\n  if (!nationalNumber || nationalNumber.length < _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN) {\n    // Won't throw here because the regexp already demands length > 1.\n    /* istanbul ignore if */\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_SHORT');\n    }\n    // Google's demo just throws an error in this case.\n    return {};\n  }\n\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  if (nationalNumber.length > _constants_js__WEBPACK_IMPORTED_MODULE_0__.MAX_LENGTH_FOR_NSN) {\n    if (options.v2) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_LONG');\n    }\n    // Google's demo just throws an error in this case.\n    return {};\n  }\n  if (options.v2) {\n    var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](countryCallingCode, nationalNumber, metadata.metadata);\n    if (country) {\n      phoneNumber.country = country;\n    }\n    if (carrierCode) {\n      phoneNumber.carrierCode = carrierCode;\n    }\n    if (ext) {\n      phoneNumber.ext = ext;\n    }\n    phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n    return phoneNumber;\n  }\n\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  var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(nationalNumber, metadata.nationalNumberPattern()) : false;\n  if (!options.extended) {\n    return valid ? result(country, nationalNumber, ext) : {};\n  }\n\n  // isInternational: countryCallingCode !== undefined\n\n  return {\n    country: country,\n    countryCallingCode: countryCallingCode,\n    carrierCode: carrierCode,\n    valid: valid,\n    possible: valid ? true : options.extended === true && metadata.possibleLengths() && (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_6__.isPossibleNumber)(nationalNumber, country, metadata) ? true : false,\n    phone: nationalNumber,\n    ext: ext\n  };\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 */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n  if (!text) {\n    return;\n  }\n  if (text.length > MAX_INPUT_STRING_LENGTH) {\n    if (throwOnError) {\n      throw new _ParseError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('TOO_LONG');\n    }\n    return;\n  }\n  if (extract === false) {\n    return text;\n  }\n  // Attempt to extract a possible number from the string passed in\n  var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n  if (startsAt < 0) {\n    return;\n  }\n  return text\n  // Trim everything to the left of the phone number\n  .slice(startsAt)\n  // Remove trailing non-numerical characters\n  .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\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 */\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 = (0,_helpers_extractFormattedPhoneNumberFromPossibleRfc3966NumberUri_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(text, {\n    extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n      return _extractFormattedPhoneNumber(text, extract, v2);\n    }\n  });\n  // If the phone number is not viable, then abort.\n  if (!number) {\n    return {};\n  }\n  if (!(0,_helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(number)) {\n    if ((0,_helpers_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_3__.isViablePhoneNumberStart)(number)) {\n      return {\n        error: 'TOO_SHORT'\n      };\n    }\n    return {};\n  }\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  var withExtensionStripped = (0,_helpers_extension_extractExtension_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(number);\n  if (withExtensionStripped.ext) {\n    return withExtensionStripped;\n  }\n  return {\n    number: number\n  };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n  var result = {\n    country: country,\n    phone: nationalNumber\n  };\n  if (ext) {\n    result.ext = ext;\n  }\n  return result;\n}\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 */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n  // Extract calling code from phone number.\n  var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])((0,_parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n    countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n    countryCallingCode = _extractCountryCallin.countryCallingCode,\n    number = _extractCountryCallin.number;\n\n  // The exact country of the phone number\n  var country;\n\n  // If `formattedPhoneNumber` is passed in \"international\" format,\n  // choose a country by `countryCallingCode`.\n  if (countryCallingCode) {\n    metadata.selectNumberingPlan(countryCallingCode);\n  }\n  // Else, 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    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    countryCallingCode = defaultCallingCode || (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(defaultCountry, metadata.metadata);\n  } else return {};\n  if (!number) {\n    return {\n      countryCallingCodeSource: countryCallingCodeSource,\n      countryCallingCode: countryCallingCode\n    };\n  }\n  var _extractNationalNumbe = (0,_helpers_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])((0,_parseIncompletePhoneNumber_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(number), country, metadata),\n    nationalNumber = _extractNationalNumbe.nationalNumber,\n    carrierCode = _extractNationalNumbe.carrierCode;\n\n  // 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  var exactCountry = (0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(countryCallingCode, {\n    nationalNumber: nationalNumber,\n    metadata: metadata\n  });\n  if (exactCountry) {\n    country = exactCountry;\n    /* istanbul ignore if */\n    if (exactCountry === '001') {\n      // 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.selectNumberingPlan(country);\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\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js ***!\n  \\**************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parseIncompletePhoneNumber; },\n/* harmony export */   parsePhoneNumberCharacter: function() { return /* binding */ parsePhoneNumberCharacter; }\n/* harmony export */ });\n/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/parseDigits.js */ \"./node_modules/libphonenumber-js/es6/helpers/parseDigits.js\");\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n\n\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 */\nfunction parseIncompletePhoneNumber(string) {\n  var result = '';\n  // 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  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n    var character = _step.value;\n    result += parsePhoneNumberCharacter(character, result) || '';\n  }\n  return result;\n}\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  {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nfunction parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\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      // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n      // Any 3rd-party code that used to `import` and call this function before that\n      // won't be passing any `eventListener` argument.\n      //\n      // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n      // of parsing an input string when the user inputs something like `\"2+7\"\n      // https://github.com/catamphetamine/react-phone-number-input/issues/437\n      //\n      // If the parser encounters an unexpected `+` in a string being parsed\n      // then it simply discards that out-of-place `+` and any following characters.\n      //\n      if (typeof eventListener === 'function') {\n        eventListener('end');\n      }\n      return;\n    }\n    return '+';\n  }\n  // Allow digits.\n  return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_0__.parseDigit)(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js ***!\n  \\*************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _parsePhoneNumberWithError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsePhoneNumberWithError_.js */ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js\");\n/* harmony import */ var _normalizeArguments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normalizeArguments.js */ \"./node_modules/libphonenumber-js/es6/normalizeArguments.js\");\n\n\nfunction parsePhoneNumberWithError() {\n  var _normalizeArguments = (0,_normalizeArguments_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arguments),\n    text = _normalizeArguments.text,\n    options = _normalizeArguments.options,\n    metadata = _normalizeArguments.metadata;\n  return (0,_parsePhoneNumberWithError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js ***!\n  \\**************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parse.js */ \"./node_modules/libphonenumber-js/es6/parse.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nfunction parsePhoneNumberWithError(text, options, metadata) {\n  return (0,_parse_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(text, _objectSpread(_objectSpread({}, options), {}, {\n    v2: true\n  }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/es6/tools/semver-compare.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/es6/tools/semver-compare.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }\n/* harmony export */ });\n// 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\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n  a = a.split('-');\n  b = b.split('-');\n  var pa = a[0].split('.');\n  var pb = b[0].split('.');\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  if (a[1] && b[1]) {\n    return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n  }\n  return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/metadata.mobile.json.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n// 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\n/* harmony default export */ __webpack_exports__[\"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-79]\\\\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)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\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-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|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])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[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[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|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(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|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(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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(?:[15]|28|4[14])|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]|2[23]\"],\"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|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-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[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\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|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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]|9[02])\\\\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)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|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-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\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|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\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-9]\"]],[\"(\\\\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-8]\\\\d)\\\\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-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|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|7[39])|9(?:0[25]|42))[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\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{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"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[02-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,12],[[\"(\\\\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,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"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{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\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(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[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|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|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]))|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|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|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(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|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(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"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])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[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\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[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\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[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-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-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,10,11,12],[[\"(\\\\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,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"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{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"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,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{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[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"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-3])|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(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-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\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\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,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?: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,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|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{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"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|180020\",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]|49|5[6-8])|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(?:0(?:0(?:1[09]|70)|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}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|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])|7093[0-3])\\\\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|180020\",\"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,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\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|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-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[478])|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\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\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[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|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])|70[1-59]|84[0-39]|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\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{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\",[\"6|7[245]\"],\"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-57]\"],\"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|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\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]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\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,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|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|180020\",\"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|8(?:28[235-7]|3))|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])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|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\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[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,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|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])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|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-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|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,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\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]|43\"]],[\"(\\\\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\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\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|427|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\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-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)|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])|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])|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\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"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[0459]|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[26-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]|9[29])|5(?:2|3(?:[045]|9[0-8])|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[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|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]))|(?: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]|9(?:[0-58]|6[4-9]|7[0-35689]))|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]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|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]\"],\"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\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[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-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[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]|9(?:12|9[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\",[\"[36]0|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[0-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|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|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,\"33622|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\",[\"3\"],\"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(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,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-6]|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,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\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\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\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\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[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]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",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|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-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{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"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(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\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\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\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|7090)\\\\d{5}|(?: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])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\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-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[35-8])\\\\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-478]\\\\d|6[01])|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[0-3]|[679]\\\\d|8[2-59])\\\\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\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"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,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|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|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"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[67]\\\\d\\\\d|7091[0-3])\\\\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-7]|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]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?: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]|[267][1-9]|3[1-8]|[45]\\\\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-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\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[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\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-7]))|(?:[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,[\"(?:[579]\\\\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[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[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\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"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}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\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]|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(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"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)|[589]\"],\"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\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[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|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[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[1-48])\\\\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-247]\\\\d|3[0-79]|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,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\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-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\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(?:[049]\\\\d|3[034]))\\\\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]|78)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-7])\"],\"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]|7[1-6]|8[1-7]|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[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\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\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\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,0,[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\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[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{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|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]\",\"(?:[2489]\\\\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,12],[[\"(\\\\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-9]|[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,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|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|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|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[1-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(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"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\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\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]|[6-8]\\\\d|90)\\\\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-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-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\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[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-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\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[5-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|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\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[0-29]|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,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\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|71)\\\\d{6}\",[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\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"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-8])\\\\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,[\"(?:5(?:4[0-5]|5[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]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"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,[\"561(?:011|61\\\\d)\\\\d{4}|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,[\"(?:6[1-35-9]|7[13-9])\\\\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,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|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,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\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,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|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-57-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]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|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-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"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{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|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])))|7(?:[07]\\\\d{3}|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]))|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}\"]]],\"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,12],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[246])\\\\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\\\\d|10|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\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"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[1689]|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|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\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-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\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\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"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\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\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)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|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|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\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(?:[1278]\\\\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}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"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,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[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,[\"348[57]\\\\d{7}\",[11]],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[0-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}\"]]]}});\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js\":\n/*!************************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js ***!\n  \\************************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   parsePhoneNumberWithError: function() { return /* binding */ parsePhoneNumberWithError; }\n/* harmony export */ });\n/* harmony import */ var _withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./withMetadataArgument.js */ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ \"./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js\");\n\r\n\r\n\r\nfunction parsePhoneNumberWithError() {\r\n\treturn (0,_withMetadataArgument_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_core_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], arguments)\r\n}\r\n\n\n/***/ }),\n\n/***/ \"./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js\":\n/*!*******************************************************************************!*\\\n  !*** ./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js ***!\n  \\*******************************************************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ withMetadataArgument; }\n/* harmony export */ });\n/* harmony import */ var _metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.mobile.json.js */ \"./node_modules/libphonenumber-js/metadata.mobile.json.js\");\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\n\r\n\r\nfunction withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(_metadata_mobile_json_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\r\n\treturn func.apply(this, args)\r\n}\n\n/***/ })\n\n}]);\n//# sourceMappingURL=vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js.map"
  },
  {
    "path": "umd/vendors-node_modules_webm-duration-fix_lib_index_js.dev.js",
    "content": "(self[\"webpackChunktinode_webapp\"] = self[\"webpackChunktinode_webapp\"] || []).push([[\"vendors-node_modules_webm-duration-fix_lib_index_js\"],{\n\n/***/ \"./node_modules/base64-js/index.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/base64-js/index.js ***!\n  \\*****************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\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\n/***/ }),\n\n/***/ \"./node_modules/buffer/index.js\":\n/*!**************************************!*\\\n  !*** ./node_modules/buffer/index.js ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\nconst base64 = __webpack_require__(/*! base64-js */ \"./node_modules/base64-js/index.js\")\nconst ieee754 = __webpack_require__(/*! ieee754 */ \"./node_modules/ieee754/index.js\")\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 '<Buffer ' + str + '>'\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\n\n/***/ }),\n\n/***/ \"./node_modules/ebml-block/index.js\":\n/*!******************************************!*\\\n  !*** ./node_modules/ebml-block/index.js ***!\n  \\******************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar BufferReader = __webpack_require__(/*! ./lib/buffer-reader */ \"./node_modules/ebml-block/lib/buffer-reader.js\")\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\n\n/***/ }),\n\n/***/ \"./node_modules/ebml-block/lib/buffer-reader.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/ebml-block/lib/buffer-reader.js ***!\n  \\******************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar vint = __webpack_require__(/*! ./vint */ \"./node_modules/ebml-block/lib/vint.js\")\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\n\n/***/ }),\n\n/***/ \"./node_modules/ebml-block/lib/vint.js\":\n/*!*********************************************!*\\\n  !*** ./node_modules/ebml-block/lib/vint.js ***!\n  \\*********************************************/\n/***/ (function(module) {\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/events/events.js\":\n/*!***************************************!*\\\n  !*** ./node_modules/events/events.js ***!\n  \\***************************************/\n/***/ (function(module) {\n\n\"use strict\";\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\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\n\n/***/ }),\n\n/***/ \"./node_modules/ieee754/index.js\":\n/*!***************************************!*\\\n  !*** ./node_modules/ieee754/index.js ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\n\n/***/ }),\n\n/***/ \"./node_modules/int64-buffer/int64-buffer.js\":\n/*!***************************************************!*\\\n  !*** ./node_modules/int64-buffer/int64-buffer.js ***!\n  \\***************************************************/\n/***/ (function(__unused_webpack_module, exports) {\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}( true && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/EBML.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/EBML.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar int64_buffer_1 = __webpack_require__(/*! int64-buffer */ \"./node_modules/int64-buffer/int64-buffer.js\");\nvar tools_1 = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\nvar tools = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\nvar ebmlID_1 = __webpack_require__(/*! ./ebmlID */ \"./node_modules/webm-duration-fix/lib/ebml/ebmlID.js\");\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar tools = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\nvar tools_1 = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\nvar ebmlID_1 = __webpack_require__(/*! ./ebmlID */ \"./node_modules/webm-duration-fix/lib/ebml/ebmlID.js\");\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\nvar tools = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/ebmlID.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/ebmlID.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/index.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/index.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\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(__webpack_require__(/*! ./EBML */ \"./node_modules/webm-duration-fix/lib/ebml/EBML.js\"), exports);\nvar EBMLDecoder_1 = __webpack_require__(/*! ./EBMLDecoder */ \"./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js\");\nexports.Decoder = EBMLDecoder_1.default;\nvar EBMLEncoder_1 = __webpack_require__(/*! ./EBMLEncoder */ \"./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js\");\nexports.Encoder = EBMLEncoder_1.default;\nvar EBMLReader_1 = __webpack_require__(/*! ./EBMLReader */ \"./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js\");\nexports.Reader = EBMLReader_1.default;\nvar tools = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\nexports.tools = tools;\n\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 = __webpack_require__(/*! ./tools */ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\");\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/ebml/tools.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/ebml/tools.js ***!\n  \\**********************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\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/// <reference types=\"node\"/>\nvar int64_buffer_1 = __webpack_require__(/*! int64-buffer */ \"./node_modules/int64-buffer/int64-buffer.js\");\nvar EBMLEncoder_1 = __webpack_require__(/*! ./EBMLEncoder */ \"./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js\");\nvar _Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\");\nvar tools_ebml_1 = __webpack_require__(/*! ./tools-ebml */ \"./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js\");\nvar _block = __webpack_require__(/*! ebml-block */ \"./node_modules/ebml-block/index.js\");\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 <Buffer 19>\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 <Buffer 19>\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 [<CuePoint />] to <Cues />\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 末尾に <Cues /> を追加\n        // insert <Cues />\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\n\n/***/ }),\n\n/***/ \"./node_modules/webm-duration-fix/lib/index.js\":\n/*!*****************************************************!*\\\n  !*** ./node_modules/webm-duration-fix/lib/index.js ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 = __webpack_require__(/*! ./ebml */ \"./node_modules/webm-duration-fix/lib/ebml/index.js\");\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 (false) // removed by dead control flow\n{}\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\n\n/***/ })\n\n}]);\n//# sourceMappingURL=vendors-node_modules_webm-duration-fix_lib_index_js.dev.js.map"
  },
  {
    "path": "version.js",
    "content": "// This is a generated file. Don't edit.\n\nconst PACKAGE_VERSION = \"0.25.2\";\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const TerserPlugin = require('terser-webpack-plugin');\nconst CopyPlugin = require('copy-webpack-plugin');\nconst path = require('path');\n\nmodule.exports = (env, argv) => {\n  const mode = argv.mode === 'production' ? 'prod' : 'dev';\n  const maxAssetSize = mode === 'prod' ? 360000 : 1512000;\n  return {\n    entry: {\n      index: path.resolve(__dirname, 'src/index.js'),\n    },\n    devtool: 'source-map',\n    module: {\n      rules: [\n        {\n          test: /\\.jsx?$/,\n          use: [\n            'babel-loader',\n          ],\n          exclude: /node_modules/,\n        },\n      ],\n    },\n    output: {\n      path: path.resolve(__dirname, 'umd'),\n      filename: `[name].${mode}.js`,\n      publicPath: '/umd/'\n    },\n    optimization: {\n      minimize: (mode === 'prod'),\n      minimizer: [\n        new TerserPlugin({\n          terserOptions: {\n            ecma: undefined,\n            warnings: false,\n            parse: {},\n            compress: {},\n            format: {\n              comments: false,\n            },\n            mangle: true, // Note `mangle.properties` is `false` by default.\n            module: false,\n            output: null,\n            toplevel: false,\n            nameCache: null,\n            ie8: false,\n            keep_classnames: undefined,\n            keep_fnames: false,\n            safari10: false,\n          },\n          extractComments: false,\n        })\n      ]\n    },\n    performance: {\n      maxEntrypointSize: maxAssetSize,\n      maxAssetSize: maxAssetSize,\n      assetFilter: function(assetFilename) {\n        // Exclude all sourcemaps\n        if (/\\.map$/.test(assetFilename)) {\n          return false;\n        }\n        return true;\n      },\n    },\n    plugins: [\n      new CopyPlugin({\n        patterns: [\n          { from: `node_modules/tinode-sdk/umd/tinode.${mode}.js`, to: `tinode.${mode}.js` },\n          { from: `node_modules/tinode-sdk/umd/tinode.${mode}.js.map`, to: `tinode.${mode}.js.map` },\n        ],\n      }),\n    ],\n    externals: {\n      'livekit-client': 'LivekitClient',\n      'qrcodejs': 'QRCode',\n      'react': 'React',\n      'react-dom': 'ReactDOM',\n      'react-intl': 'ReactIntl',\n      'tinode-sdk': 'tinode',\n    },\n  };\n}\n"
  }
]