From e384063af0ae61439e9d309514eb6bf5b3dc2654 Mon Sep 17 00:00:00 2001 From: "Evgeny @ SimpleX Chat" <259188159+evgeny-simplex@users.noreply.github.com> Date: Thu, 17 Sep 2026 13:05:00 +0100 Subject: [PATCH 01/28] website: update crowdfunding page (#7528) --- website/src/crowdfunding.html | 95 +++----------- website/src/css/livestream.css | 221 +-------------------------------- website/src/js/livestream.js | 91 -------------- website/src/livestream.html | 112 +---------------- 4 files changed, 31 insertions(+), 488 deletions(-) diff --git a/website/src/crowdfunding.html b/website/src/crowdfunding.html index 53d23ab6c4..1f87477b3c 100644 --- a/website/src/crowdfunding.html +++ b/website/src/crowdfunding.html @@ -218,7 +218,6 @@ templateEngineOverride: njk color: #dfeaff; } - .cf-hero .cf-live-link { display: inline-block; margin-top: calc(var(--sec-vhu) * 5); font-size: calc(var(--sec-vwu) * 2.2); position: relative; top: calc(var(--sec-vhu) * 1.5); } /* ---- close: same left-aligned layout as the hero ---- */ .cf-close .area { position: relative; display: flex; align-items: flex-end; padding: 0 calc(var(--sec-vwu) * 7.5) calc(var(--sec-vhu) * 22) 0; } @@ -261,7 +260,6 @@ templateEngineOverride: njk width: fit-content; } .cf-close .cf-hero-cta { margin-top: calc(var(--sec-vhu) * 7); } - .cf-close .cf-live-link { display: inline-block; margin-top: calc(var(--sec-vhu) * 4.5); font-size: calc(var(--sec-vwu) * 2.2); position: relative; top: 0; } .cf-phone { position: absolute; @@ -315,10 +313,9 @@ templateEngineOverride: njk background: linear-gradient(180deg, #00F0FF 0%, #00C7FF 38%, #008FFF 100%); color: #ffffff; } - .cf-hero-invest-link { + .cf-cta-link { display: flex; align-items: center; - gap: calc(var(--sec-vwu) * 0.7); font-family: "Manrope", sans-serif; font-weight: 400; font-size: calc(var(--sec-vwu) * 1.5); @@ -329,10 +326,8 @@ templateEngineOverride: njk -webkit-text-fill-color: transparent; background-clip: text; color: transparent; - --wf-capital-nav-logo-fill: #64fdff; } - .cf-hero-invest-link svg { height: calc(var(--sec-vwu) * 2.1); width: auto; display: block; transform: translateY(calc(var(--sec-vwu) * -0.25)); } - .cf-hero-invest-link:focus-visible { outline: 2px solid #ffffff; outline-offset: 4px; border-radius: 4px; } + .cf-cta-link:focus-visible { outline: 2px solid #ffffff; outline-offset: 4px; border-radius: 4px; } /* the same link twice: beside the button (desktop), in the hero's top right corner (mobile). Only one of the two is ever displayed. */ .cf-hero-corner { display: none; } @@ -370,7 +365,6 @@ templateEngineOverride: njk .cf-pill:active { transform: translateY(1px); } .cf-top { top: 30px; } - .cf-bottom { bottom: 30px; } .cf-primary { background: linear-gradient(90deg, #019bfe 0%, #2e3fa0 100%); @@ -380,39 +374,16 @@ templateEngineOverride: njk .cf-primary:hover { filter: brightness(1.07); } .cf-primary:focus-visible { outline-color: #ffffff; } - .cf-secondary { - background: #ffffff; - color: #006cd7; - border: 1px solid rgba(2, 55, 137, .15); - --wf-capital-nav-logo-fill: #006cd7; - } - .cf-secondary:hover { box-shadow: 0 0 0 1px #80b6eb; } - .cf-pill svg { height: 30px; width: auto; display: block; transform: translateY(-3.5px); } @media screen and (min-width: 960px) { .cf-pill { width: 252px; justify-content: center; } } - .cf-live-link { - font-family: "Manrope", sans-serif; - font-weight: 300; - font-size: calc(var(--sec-vwu) * 1.9); - background: linear-gradient(90deg, #019bfe 0%, #64fdff 58%, #c8feff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - color: transparent; - text-decoration: none; - } - .cf-live-link:focus-visible { outline: 2px solid #019bfe; outline-offset: 2px; } - .cf-pill, - .cf-live-link, - .cf-hero-invest-link, + .cf-cta-link, .cf .text-container a.gradient-text { transition: none; } - .cf-live-link:hover, - .cf-hero-invest-link:hover, + .cf-cta-link:hover, .cf .text-container a.gradient-text:hover { filter: brightness(1.12); } @media screen and (min-width: 960px) { @@ -599,10 +570,8 @@ templateEngineOverride: njk .cf-hero h1, .cf-hero .lead, .cf-hero .cf-stats, - .cf-hero .cf-live-link, .cf-close h1, - .cf-close .cf-close-call, - .cf-close .cf-live-link { + .cf-close .cf-close-call { padding-left: var(--cf-text-inset); padding-right: var(--cf-text-inset); } @@ -653,8 +622,7 @@ templateEngineOverride: njk .cf-close .cf-hero-text { display: contents; } .cf-hero h1, .cf-hero .lead, - .cf-hero .cf-stats, - .cf-hero .cf-live-link { position: relative; z-index: 4; } + .cf-hero .cf-stats { position: relative; z-index: 4; } .cf-hero h1 { font-size: calc(var(--sec-vwu) * 9.7); } .cf-hero .lead { font-size: calc(var(--sec-vwu) * 3.55); max-width: none; margin-top: calc(var(--sec-vhu) * 2); } .cf-close .area { padding: calc(var(--cf-top) + var(--sec-vhu) * 14) var(--cf-gutter) 0; } @@ -664,8 +632,7 @@ templateEngineOverride: njk } /* centred like the home page, the two heading lines set apart */ .cf-close h1, - .cf-close .cf-close-call, - .cf-close .cf-live-link { text-align: center; } + .cf-close .cf-close-call { text-align: center; } /* the heading rides up with the arc; nothing below it moves */ .cf-close h1 { font-size: calc(var(--sec-vwu) * 8.7); font-weight: 700; position: relative; top: -32px; } .cf-close-l1 { font-size: calc(var(--sec-vwu) * 11.745); } @@ -684,12 +651,10 @@ templateEngineOverride: njk padding: calc(var(--sec-vhu) * 2.5) calc(var(--sec-vwu) * 5); } .cf-close-offer p { font-size: calc(var(--sec-vwu) * 3.6); } - .cf-close .cf-live-link { display: block; font-size: calc(var(--sec-vwu) * 5); margin-top: calc(var(--sec-vhu) * 2.5); top: 0; } .cf-stats { top: 0; gap: calc(var(--sec-vwu) * 8); margin-top: calc(var(--sec-vhu) * 3); } .cf-stat img { width: calc(var(--sec-vwu) * 8); } .cf-stat b { font-size: calc(var(--sec-vwu) * 6.5); } .cf-stat span { font-size: calc(var(--sec-vwu) * 3.4); } - .cf-hero .cf-live-link { margin-top: calc(var(--sec-vhu) * 2); top: 0; font-size: calc(var(--sec-vwu) * 5); } /* the pill sits on the bottom edge and rides with the chrome: dvh tracks the visible bottom, svh the box the area is sized from */ .cf-hero .cf-hero-cta, @@ -702,17 +667,16 @@ templateEngineOverride: njk } /* over the phone and the gradient covering it */ .cf-hero .cf-hero-cta { z-index: 5; } - .cf-hero-cta .cf-pill { width: 100%; height: 48px; font-size: 16px; } + .cf-hero-cta .cf-pill { width: 100%; height: 48px; font-size: 16px; gap: 9px; } + .cf-hero-cta .cf-pill svg { height: 30px; transform: translateY(-3.5px); } /* one link, two placements: the top right corner of the hero, and its own button-sized target above the pill on the closing section */ - .cf-hero-invest-link { + .cf-cta-link { height: 48px; font-size: calc(var(--sec-vwu) * 4.6); - gap: calc(var(--sec-vwu) * 1.9); } - .cf-hero-invest-link svg { height: calc(var(--sec-vwu) * 6.5); transform: translateY(calc(var(--sec-vwu) * -0.7)); } - .cf-close .cf-hero-invest-link { justify-content: center; } - .cf-hero .cf-hero-cta .cf-hero-invest-link { display: none; } + .cf-close .cf-cta-link { justify-content: center; } + .cf-hero .cf-hero-cta .cf-cta-link { display: none; } /* a child of the section, so its reference is the section's top edge, which the band raises by --cf-band-shift, as with the arc. z-index clears .area, which is 11 and covers this corner. */ @@ -752,9 +716,7 @@ templateEngineOverride: njk } .cf-pill { font-size: 16px; } - .cf-bottom { top: calc(5px + var(--cf-nav-shift)); right: 16px; bottom: auto; padding: 0 18px; } .cf-top { top: auto; left: 16px; right: 16px; bottom: var(--cf-cta-bottom); height: 48px; justify-content: center; } - .cf-live-link { font-size: calc(var(--sec-vwu) * 4.2); } .cf .text-container a.gradient-text { font-weight: 400; } } @@ -794,11 +756,9 @@ templateEngineOverride: njk .cf-hero h1 { font-size: calc(var(--sec-vwu) * 9.3); } } - /* narrow phones: keep the corner link and the pill clear of the logo */ + /* narrow phones: keep the corner link clear of the logo */ @media screen and (max-width: 389px) { header#navbar > a.logo img { height: 24px; } - .cf-bottom { font-size: 12px; padding: 0 12px; height: 40px; } - .cf-bottom svg { height: 22px; transform: translateY(-2.5px); } .cf-hero-corner { height: 40px; } .cf-tag .v { font-size: 2.96cqh; line-height: 1.4; } } @@ -986,10 +946,10 @@ templateEngineOverride: njk

The first and the only messaging network without any user IDs

SimpleX Chat is building a messaging network unlike every major platform — without phone numbers, usernames, emails, or any user identifiers.

- Request our Pitch deck - + Invest on {{ wfLogo() }} + Subscribe for updates
@@ -1001,15 +961,12 @@ templateEngineOverride: njk
480KMonthly users
- Join the livestream and Q&A on Sep 15
- - Invest on {{ wfLogo() }} - + Subscribe for updates @@ -1118,12 +1075,11 @@ templateEngineOverride: njk

Get a stake
in SimpleX Chat

We are building a network that people own.
We invite you to invest and become part of it.

- Request our Pitch deck - + Invest on {{ wfLogo() }} + Subscribe for updates
- Join the livestream and Q&A on Sep 15

Invest $500+ by September 22 and get a SimpleX public name for your channel or business for 7 years, ahead of public launch.

@@ -1146,8 +1102,7 @@ templateEngineOverride: njk
- Request our Pitch deck - + Invest on {{ wfLogo() }}
@@ -1195,16 +1150,6 @@ templateEngineOverride: njk window.addEventListener('resize', update); update(); })(); - - (function cfFlip() { - if (new URLSearchParams(location.search).get('action') !== 'invest') return; - var req = document.getElementById('cf-cta-request'); - var inv = document.getElementById('cf-cta-invest'); - req.classList.remove('cf-top', 'cf-primary'); - req.classList.add('cf-bottom', 'cf-secondary'); - inv.classList.remove('cf-bottom', 'cf-secondary'); - inv.classList.add('cf-top', 'cf-primary'); - })();
@@ -1242,7 +1187,7 @@ templateEngineOverride: njk @@ -89,108 +88,7 @@ templateEngineOverride: njk {% include "footer.html" %}
-
- -
- -
- -
- -
- -
- -
- -
- - - - From 746d33ff6dd5c3fe59111cb986cd0c7e06a35758 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 17 Sep 2026 15:12:14 +0000 Subject: [PATCH 02/28] multiplatform: remove unused strings (#7529) --- .../commonMain/resources/MR/ar/strings.xml | 63 ------------------ .../commonMain/resources/MR/base/strings.xml | 62 ------------------ .../commonMain/resources/MR/bg/strings.xml | 64 ------------------- .../commonMain/resources/MR/bn/strings.xml | 1 - .../commonMain/resources/MR/ca/strings.xml | 62 ------------------ .../commonMain/resources/MR/cs/strings.xml | 63 ------------------ .../commonMain/resources/MR/da/strings.xml | 16 ----- .../commonMain/resources/MR/de/strings.xml | 64 ------------------- .../commonMain/resources/MR/el/strings.xml | 62 ------------------ .../commonMain/resources/MR/es/strings.xml | 64 ------------------- .../commonMain/resources/MR/fa/strings.xml | 63 ------------------ .../commonMain/resources/MR/fi/strings.xml | 57 ----------------- .../commonMain/resources/MR/fr/strings.xml | 62 ------------------ .../commonMain/resources/MR/hi/strings.xml | 8 --- .../commonMain/resources/MR/hr/strings.xml | 35 ---------- .../commonMain/resources/MR/hu/strings.xml | 62 ------------------ .../commonMain/resources/MR/in/strings.xml | 62 ------------------ .../commonMain/resources/MR/it/strings.xml | 64 ------------------- .../commonMain/resources/MR/iw/strings.xml | 62 ------------------ .../commonMain/resources/MR/ja/strings.xml | 64 ------------------- .../commonMain/resources/MR/ko/strings.xml | 37 ----------- .../commonMain/resources/MR/ku/strings.xml | 19 ------ .../commonMain/resources/MR/lt/strings.xml | 58 ----------------- .../commonMain/resources/MR/lv/strings.xml | 62 ------------------ .../commonMain/resources/MR/ml/strings.xml | 16 ----- .../resources/MR/nb-rNO/strings.xml | 3 - .../commonMain/resources/MR/nl/strings.xml | 63 ------------------ .../commonMain/resources/MR/pl/strings.xml | 64 ------------------- .../resources/MR/pt-rBR/strings.xml | 62 ------------------ .../commonMain/resources/MR/pt/strings.xml | 35 ---------- .../commonMain/resources/MR/ro/strings.xml | 62 ------------------ .../commonMain/resources/MR/ru/strings.xml | 64 ------------------- .../commonMain/resources/MR/sk/strings.xml | 23 ------- .../commonMain/resources/MR/th/strings.xml | 55 ---------------- .../commonMain/resources/MR/tr/strings.xml | 64 ------------------- .../commonMain/resources/MR/uk/strings.xml | 63 ------------------ .../commonMain/resources/MR/vi/strings.xml | 63 ------------------ .../resources/MR/zh-rCN/strings.xml | 63 ------------------ .../resources/MR/zh-rTW/strings.xml | 64 ------------------- 39 files changed, 2000 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index 5aa9270e4b..4a3f7870fe 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -14,20 +14,15 @@ اقبل لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف تعريفك وجهات اتصالك ورسائلك وملفاتك بشكل نهائي. هذه المجموعة لم تعد موجودة. - رمز QR هذا ليس رابطًا! - مستقبل المُراسلة لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة. لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق. ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك - منصة الرسائل والتطبيقات تحمي خصوصيتك وأمنك. يتم مشاركة ملف التعريف مع جهات اتصالك فقط. سيتم تغيير الدور إلى "%s". سيتم إبلاغ كل فرد في المجموعة. سيتم تغيير الدور إلى "%s". سيستلم العضو دعوة جديدة. خوادم الاتصالات الجديدة لملف تعريف الدردشة الحالي الخاص بك سيتم تغيير عنوان الاستلام إلى خادم مختلف. سيتم إكمال تغيير العنوان بعد اتصال المرسل بالإنترنت. - هذا الرابط ليس رابط اتصال صالح! اسمح - أضِف خوادم مُعدة مسبقًا أضِف إلى جهاز آخر ستُحذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا! الوصول إلى الخوادم عبر وسيط SOCKS على المنفذ %d؟ يجب بدء تشغيل الوسيط قبل تفعيل هذا الخيار. @@ -108,8 +103,6 @@ انتهت المكالمة غيِّر لون إضافي ثانوي - " -\nمتوفر في v5.1" مكالمات الصوت/الفيديو ممنوعة. عن طريق ملف تعريف الدردشة (افتراضي) أو عن طريق الاتصال (تجريبي). يمكن تعطيله عبر الإعدادات - سيستمر عرض الإشعارات أثناء تشغيل التطبيق.]]> @@ -167,7 +160,6 @@ خطأ في حذف جهة الاتصال جهة الاتصال مخفية: انسخ - اتصل متصل انضمام إلى المجموعة؟ اتصل عبر رابط لمرة واحدة؟ @@ -305,15 +297,11 @@ متصل سيتم حذف جهة الاتصال وجميع الرسائل - لا يمكن التراجع عن هذا! الحد الأقصى لحجم الملف المدعوم حاليًا هو %1$s. - تواصل عبر الرابط / رمز QR - أنشئ رابط دعوة لمرة واحدة تحقق من عنوان الخادم وحاول مرة أخرى. امحُ التحقُّق - أنشئ عنوانًا للسماح للأشخاص بالتواصل معك. أدخل الخادم يدويًا ملون لدى جهة الاتصال التعمية بين الطرفين - أنشئ أنشئ ملف تعريفك مكالمة جارية فعّل التدمير الذاتي @@ -387,7 +375,6 @@ حذف جهة الاتصال؟ احذف بالنسبة لي وقت مخصّص - لامركزي عبارة مرور قاعدة البيانات عبارة المرور الحالية… سيتم تحديث عبارة مرور تعمية قاعدة البيانات وتخزينها في Keystore. @@ -483,7 +470,6 @@ ساعات السجل سيتم استلام الصورة عندما يكتمل جهة اتصالك من رفعِها. - اعرض رمز QR في مكالمة الفيديو، أو شارك الرابط.]]> ثبّت SimpleX Chat لطرفية إذا أكّدت، فستتمكن خوادم المُراسلة من رؤية عنوان IP الخاص بك ومزود خدمتك - أي الخوادم التي تتصل بها. إخفاء: @@ -505,8 +491,6 @@ معلومات إخفاء شاشة التطبيق في التطبيقات الحديثة. تحسن الخصوصية والأمان - مسح رمز QR في مكالمة الفيديو، أو يمكن لجهة الاتصال مشاركة رابط الدعوة.]]> - محصن ضد الإزعاج (spam) التخفي عبر رابط لمرة واحدة أرسلت صورة صورة @@ -547,7 +531,6 @@ واجهة أستخدام يابانية وبرتغالية يمكن أن يحدث ذلك عندما تستخدم أنت أو اتصالك النُسخة الاحتياطية القديمة لقاعدة البيانات. انضم ك%s - رمز QR غير صالح الواجهة الإيطالية الرابط غير صالح! دعوة الأصدقاء @@ -647,18 +630,12 @@ %d ثانية قُطع الاتصال رسالة تختفي - لا تنشئ عنوانًا خطأ في تحديث تضبيط الشبكة خطأ في استلام الملف خطأ في تبديل ملف التعريف! حافظ على اتصالاتك - تأكد من أن عناوين خادم XFTP بالتنسيق الصحيح، وأن تكون مفصولة بأسطر وليست مكررة. عُلّم محذوف القوائم والتنبيهات - خطأ في حفظ خوادم XFTP - خطأ في تحميل خوادم SMP - خطأ في تحميل خوادم XFTP - تأكد من أن عناوين خادم SMP في التنسيق الصحيح، وأن تكون مفصولة بأسطر وليست مكررة. مساعدة ماركداون عضو ماركداون في الرسائل @@ -690,7 +667,6 @@ إصلاح التعمية بعد استعادة النُسخ الاحتياطية. اجعل رسالة واحدة تختفي خطأ في تفعيل إيصالات التسليم! - خطأ في حفظ خوادم SMP خطأ في إرسال الرسالة خطأ في الانضمام إلى المجموعة خطأ في مزامنة الاتصال @@ -777,7 +753,6 @@ ستكون مضيفات البصل مطلوبة للاتصال. \nيُرجى ملاحظة: أنك لن تتمكن من الاتصال بالخوادم بدون عنوان onion. اسم عرض جديد: عبارة مرور جديدة… - قيد الانتظار عبارة المرور مطلوبة ألصِق الرابط الذي استلمته فقط مالكي المجموعة يمكنهم تفعيل الملفات والوسائط. @@ -808,12 +783,9 @@ افتح وحدة تحكم الدردشة إدخال رمز المرور افتح SimpleX Chat لقبول المكالمة - يمكن لأي شخص استضافة الخوادم. كلمة المرور للإظهار ندّ لِندّ - أنت تقرر مَن يمكنه الاتصال. مكالمة قيد الانتظار - تقوم أجهزة العميل فقط بتخزين ملفات تعريف المستخدمين وجهات الاتصال والمجموعات والرسائل. صفّر الألوان احفظ عنوان الخادم المُعد مسبقًا @@ -836,7 +808,6 @@ قيم التطبيق منفذ احفظ إعدادات عنوان SimpleX - إعادة تعريف الخصوصية يُرجى إبلاغ المطوِّرين بذلك. الخصوصية والأمان أزل @@ -850,7 +821,6 @@ ستتم إزالة خوادم WebRTC ICE المحفوظة. امنع إرسال الملفات والوسائط. استلمت إجابة… - مستودع GitHub.]]> ارفض يحمي خادم المُرحل عنوان IP الخاص بك، ولكن يمكنه مراقبة مُدّة المكالمة. الرجاء إدخال كلمة المرور السابقة بعد استعادة نسخة احتياطية لقاعدة البيانات. لا يمكن التراجع عن هذا الإجراء. @@ -922,7 +892,6 @@ رمز QR صفّر المنفذ %d - خادم مُعد مسبقًا يُستخدم خادم المُرحل فقط إذا لزم الأمر. يمكن لطرف آخر مراقبة عنوان IP الخاص بك. حفظ وإشعار جهة الاتصال إعادة التشغيل @@ -934,7 +903,6 @@ رمز المرور للتدمير الذاتي إرسال الملفات غير مدعوم بعد أُلغيَ المرسل نقل الملف. - (امسح أو ألصق من الحافظة) ثانية حذف المُرسل طلب الاتصال. امسح رمز QR @@ -1007,7 +975,6 @@ قفل SimpleX لم يتحقق من %s قفل SimpleX - خوادم SMP مشاركة الوسائط… رسائل SimpleX Chat قفل SimpleX غير مفعّل! @@ -1024,7 +991,6 @@ إيقاف الدردشة؟ أظهر حدثت بعض الأخطاء غير الفادحة أثناء الاستيراد: - وسيط SOCKS تم تدقيق أمان SimpleX Chat بواسطة Trail of Bits. إيقاف أظهر المعاينة @@ -1077,20 +1043,15 @@ يجلب التطبيق الرسائل الجديدة بشكل دوري - يستخدم نسبة قليلة من البطارية يوميًا. لا يستخدم التطبيق إشعارات الدفع - لا يتم إرسال البيانات من جهازك إلى الخوادم. سيتم إلغاء الاتصال الذي قبلته! لن تتمكن جهة الاتصال التي شاركت هذا الرابط معها من الاتصال! - هذا النص متاح في الإعدادات - لحماية خصوصيتك، يستخدم SimpleX معرّفات منفصلة لكل جهة اتصال لديك. لحماية معلوماتك، فعّل قفل SimpleX \nسيُطلب منك إكمال المصادقة قبل تفعيل هذه الميزة. عزل النقل بفضل المستخدمين - ساهِم عبر Weblate! دعم البلوتوث وتحسينات أخرى. بفضل المستخدمين - ساهِم عبر Weblate! يتم تشغيل SimpleX في الخلفية بدلاً من استخدام إشعارات push.]]> - انقر لبدء محادثة جديدة - (للمشاركة مع جهة اتصالك) للتواصل عبر الرابط للاتصال، يمكن لجهة الاتصال مسح رمز QR أو استخدام الرابط في التطبيق. اختبر الخوادم - لا معرّفات مُستخدم دعم SimpleX Chat بدِّل العنوان الرئيسي @@ -1143,7 +1104,6 @@ ستتصل بجميع أعضاء المجموعة. ملفات تعريف دردشتك عنوان SimpleX الخاص بك - خوادم SMP الخاصة بك عندما يكون التطبيق قيد التشغيل عبر المُرحل لقد انضممت إلى هذه المجموعة @@ -1155,7 +1115,6 @@ سيتم استلام الفيديو عند اكتمال رفع جهة اتصالك. تحقق من رمز الأمان رسائل صوتية - عندما يطلب الأشخاص الاتصال، يمكنك قبوله أو رفضه. ستكون متصلاً بالمجموعة عندما يكون جهاز مضيف المجموعة متصلاً بالإنترنت، يُرجى الانتظار أو التحقق لاحقًا! ستكون متصلاً عندما يتم قبول طلب اتصالك، يُرجى الانتظار أو التحقق لاحقًا! تستخدم خوادم SimpleX Chat. @@ -1164,9 +1123,7 @@ استخدام وسيط SOCKS؟ عندما تكون متاحة ستبقى جهات اتصالك متصلة. - لا نقوم بتخزين أي من جهات اتصالك أو رسائلك (بمجرد تسليمها) على الخوادم. يمكنك استخدام تخفيض السعر لتنسيق الرسائل: - استخدم الدردشة أنت خطأ غير معروف غيّرتَ دور نفسك إلى %s @@ -1182,12 +1139,9 @@ في انتظار الملف عرض رمز الأمان لن تفقد جهات اتصالك إذا حذفت عنوانك لاحقًا. - خوادم XFTP الخاصة بك استخدم خوادم SimpleX Chat - خوادم XFTP خوادم ICE الخاصة بك هل تستخدم اتصالاً مباشرًا بالإنترنت؟ - أنت تتحكم في الدردشة! مكالماتك عبارة مرور خاطئة! تحذير: قد تفقد بعض البيانات! @@ -1211,7 +1165,6 @@ سيتم إرسال ملف تعريف الدردشة الخاص بك إلى أعضاء المجموعة مرحبًا! %1$s يريد الاتصال بك! - خوادم ICE الخاصة بك خصوصيتك حُدثت ملف تعريف المجموعة أنت: %1$s @@ -1233,7 +1186,6 @@ سيُطلب منك المصادقة عند بدء تشغيل التطبيق أو استئنافه بعد 30 ثانية في الخلفية. رسالة صوتية (%1$s) إعداداتك - تحديث وضع عزل النقل؟ يُخزن ملف التعريف وجهات الاتصال والرسائل التي سلُمت على جهازك. سيتم حذف قاعدة بيانات الدردشة الحالية واستبدالها بالقاعدة المستوردة. \nلا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي. @@ -1245,13 +1197,10 @@ ملف تعريفك الحالي عبر %1$s غير مقروءة - مرحبًا! في انتظار الصورة فيديو في انتظار الفيديو فيديو - يمكنك مشاركة عنوانك كرابط أو رمز QR - يمكن لأي شخص الاتصال بك. - يمكنك إنشاؤه لاحقًا أنت تحاول دعوة جهة اتصال شاركت ملف تعريف متخفي معها إلى المجموعة التي تستخدم فيها ملف تعريفك الرئيسي ألغِ الكتم ألغِ الكتم @@ -1259,7 +1208,6 @@ إلغاء إخفاء ملف تعريف يجب أن تكون جهة الاتصال متصلة بالإنترنت حتى يكتمل الاتصال. \nيمكنك إلغاء هذا الاتصال وإزالة جهة الاتصال (والمحاولة لاحقًا باستخدام رابط جديد). - فتح في تطبيق الجوّال.]]> استخدم للاتصالات الجديدة استخدم الخادم عنوان خادمك @@ -1281,7 +1229,6 @@ رسالة الترحيب عبر رابط عنوان الاتصال أُزيلت جهة اتصالك هذا الرابط، أو أنه كان رابطًا لمرة واحدة وقد استُخدِم بالفعل.\nللتواصل، اطلب من جهة اتصالك إنشاء رابط جديد. - سيتم إرسال ملف تعريف دردشتك\nإلى جهة اتصالك إلغاء الإخفاء ملفك التعريفي العشوائي ستستمر في استلام المكالمات والإشعارات من الملفات التعريفية المكتومة عندما تكون نشطة. @@ -1298,7 +1245,6 @@ تحتاج إلى السماح لجهة اتصالك بإرسال رسائل صوتية لتتمكن من إرسالها. أرسلت جهة اتصالك ملفًا أكبر من الحجم الأقصى المعتمد حاليًا (%1$s). الاتصال بمطوِّري SimpleX Chat لطرح أي أسئلة وتلقي التحديثات.]]> - خادمك يُخزن ملف تعريفك على جهازك ومشاركته فقط مع جهات اتصالك. لا تستطيع خوادم SimpleX رؤية ملف تعريفك. الفيديو مقفل الفيديو مُشغَّل @@ -1323,13 +1269,11 @@ مجموعات صغيرة (الحد الأقصى 20) تواصل مباشرةً؟ سيتم إرسال طلب الاتصال لعضو المجموعة هذا. - اتصال متخفي استخدم ملف التعريف الحالي عطّل الإشعارات افتح إعدادات التطبيق لا يمكن تشغيل SimpleX في الخلفية. ستستلم الإشعارات فقط عندما يكون التطبيق قيد التشغيل. سيتم مشاركة ملف تعريف عشوائي جديد. - ألصِق الرابط المُستلَم للتواصل مع جهة اتصالك… ستتم مشاركة ملفك التعريفي %1$s. قد يغلق التطبيق بعد دقيقة واحدة في الخلفية. اسمح @@ -1498,7 +1442,6 @@ خطأ في إظهار المحتوى خطأ في إظهار الرسالة انتهت المكالمة %1$s - يمكنك جعله مرئيًا لجهات اتصال SimpleX الخاصة بك عبر الإعدادات. لا يتم إرسال التاريخ إلى الأعضاء الجدد. حاول مجددًا الكاميرا غير متوفرة @@ -1845,10 +1788,6 @@ رسالة مُحوّلة لا يوجد اتصال مباشر حتى الآن، الرسالة مُحوّلة بواسطة المُدير. ألصِق رابط / امسح - خوادم SMP المهيأة - خوادم SMP أخرى - خوادم XFTP المهيأة - خوادم XFTP أخرى أظهِر النسبة المئوية مُعطَّل مستقرّ @@ -1894,7 +1833,6 @@ الملفات التي نُزّلت أخطاء التنزيل منتهية الصلاحيّة - افتح إعدادات الخادم أخرى موّكل مؤمن @@ -2178,7 +2116,6 @@ أضف أعضاء فريقك إلى المحادثات. يُمنع إرسال الرسائل المباشرة بين الأعضاء في هذه الدردشة. أجهزة Xiaomi: يُرجى تفعيل التشغيل التلقائي (Autostart) في إعدادات النظام لكي تعمل الإشعارات.]]> - مُعمَّاة بين الطرفين، مع أمان ما بعد الكم في الرسائل المباشرة.]]> تحقق من الرسائل كل 10 دقائق يُمنع إرسال الرسائل المباشرة بين الأعضاء. الدردشة diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index f5fc7f8278..f2f6555b78 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -12,8 +12,6 @@ Use incognito profile Your profile will be sent to the contact that you received this link from. You will connect to all group members. - Connect - Connect incognito Open chat Join channel %s Connect to %s @@ -128,12 +126,6 @@ Another reason - Error saving SMP servers - Error saving XFTP servers - Make sure SMP server addresses are in correct format, line separated and are not duplicated. - Make sure XFTP server addresses are in correct format, line separated and are not duplicated. - Error loading SMP servers - Error loading XFTP servers Error updating network configuration Failed to load chat Failed to load chats @@ -486,8 +478,6 @@ Welcome %1$s! - Welcome! - This text is available in settings Chats Settings connecting… @@ -497,7 +487,6 @@ Join as %s rejected connecting… - Tap to start a new chat Chat with the developers You have no chats Talk to someone @@ -741,7 +730,6 @@ Connected Disconnected Error - Pending Change receiving address? Receiving address will be changed to a different server. Address change will complete after sender comes online. Abort changing address? @@ -803,12 +791,8 @@ Start new chat - Create one-time invitation link - Connect via link / QR code Scan QR code Create secret group - (to share with your contact) - (scan or paste from clipboard) (only stored by group members) @@ -920,19 +904,12 @@ Show QR code - Invalid QR code - This QR code is not a link! Invalid link! - This link is not a valid connection link! Connection request sent! You will be connected to group when the group host\'s device is online, please wait or check later! You will be connected when your connection request is accepted, please wait or check later! You will be connected when your contact\'s device is online, please wait or check later! - show QR code in the video call, or share the link.]]> - Your chat profile will be sent\nto your contact - scan QR code in the video call, or your contact can share an invitation link.]]> Share 1-time link - Paste the link you received to connect with your contact… Learn more About SimpleX address @@ -946,7 +923,6 @@ Share address publicly Share SimpleX address on social media. - You can share your address as a link or QR code - anybody can connect to you. You won\'t lose your contacts if you later delete your address. Share 1-time link with a friend with one contact only - share in person or via any messenger.]]> @@ -954,7 +930,6 @@ Connection security SimpleX address and 1-time links are safe to share via any messenger. To protect against your link being replaced, you can compare contact security codes. - When people request to connect, you can accept or reject it. User Guide.]]> Address or 1-time link? @@ -963,7 +938,6 @@ Connect Paste This string is not a connection link! - Open in mobile app button.]]> New chat @@ -1044,11 +1018,7 @@ SimpleX Lock Chat console Message servers - SMP servers - Configured SMP servers - Other SMP servers Preset server address - Add preset servers Add server Test server Test servers @@ -1058,8 +1028,6 @@ Scan server QR code Enter server manually New server - Preset server - Your server Your server address Use server Use for new connections @@ -1070,9 +1038,6 @@ The servers for new connections of your current chat profile Save servers? Media & file servers - XFTP servers - Configured XFTP servers - Other XFTP servers Show percentage Install SimpleX Chat for terminal Reset all hints @@ -1080,8 +1045,6 @@ Contribute Rate the app Use SimpleX Chat servers? - Your SMP servers - Your XFTP servers Using SimpleX Chat servers. How to How to use your servers @@ -1131,7 +1094,6 @@ New SOCKS credentials will be used every time you start the app. New SOCKS credentials will be used for each server. for each contact and group member.\nPlease note: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.]]> - Update transport isolation mode? Use .onion hosts to No if SOCKS proxy does not support them.]]> Please note: message and file relays are connected via SOCKS proxy. Calls use direct connection.]]> Private routing @@ -1207,7 +1169,6 @@ All your contacts will remain connected. Profile update will be sent to your contacts. Share link Add address to your profile, so that your SimpleX contacts can share it with other people. Profile update will be sent to your SimpleX contacts. - Create an address to let people connect with you. Create SimpleX address Share with SimpleX contacts Share address with SimpleX contacts? @@ -1248,9 +1209,6 @@ Continue - Don\'t create address - You can create it later - You can make it visible to your SimpleX contacts via Settings. Invite @@ -1284,16 +1242,12 @@ Error saving user password - You control your chat! - The messaging and application platform protecting your privacy and security. - We don\'t store any of your contacts or messages (once delivered) on the servers. Create profile Your profile, contacts and delivered messages are stored on your device. The profile is only shared with your contacts. Display name cannot contain whitespace. Enter your name: Your bio: - Create Create profile Create Invalid name! @@ -1349,13 +1303,6 @@ Error initializing WebView. Make sure you have WebView installed and it\'s supported architecture is arm64.\nError: %s - The future of messaging - Privacy redefined - No user identifiers. - Immune to spam - You decide who can connect. - Decentralized - Anybody can host servers. Create your profile Make a private connection Migrate from another device @@ -1381,13 +1328,8 @@ The oldest human freedom — to speak to another person without being watched — built on infrastructure that cannot betray it. Because we destroyed the power to know who you are. So that your power can never be taken. Be free in your network. - To protect your privacy, SimpleX uses separate IDs for each of your contacts. - Only client devices store user profiles, contacts, groups, and messages. - end-to-end encrypted, with post-quantum security in direct messages.]]> - GitHub repository.]]> - Use chat Private notifications How it affects battery When app is running @@ -1457,7 +1399,6 @@ Accept Show Disable - Your ICE servers WebRTC ICE servers Relay server protects your IP address, but it can observe the duration of the call. Relay server is only used if necessary. Another party can observe your IP address. @@ -1616,7 +1557,6 @@ Shutdown Developer tools Experimental features - SOCKS proxy Interface LANGUAGE App icon @@ -2362,7 +2302,6 @@ SimpleX links Visible history Audio/video calls - \nAvailable in v5.1 enabled enabled for you enabled for contact @@ -3030,7 +2969,6 @@ Downloaded files Download errors Server address - Open server settings You can mention up to %1$s members per message! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index 75de2d72f1..5bf3ab7754 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -33,7 +33,6 @@ Приеми Приеми инкогнито За SimpleX Chat - Добави предварително зададени сървъри Добави към друго устройство Разширени мрежови настройки За SimpleX @@ -48,7 +47,6 @@ Приеми Допълнителен акцент Админите могат да създадат линкове за присъединяване към групи. - покажете QR кода във видеоразговора или споделете линка.]]> Отворете SimpleX Chat, за да приемете повикването Поддръжка на bluetooth и други подобрения. Relay сървърът защитава вашия IP адрес, но може да наблюдава продължителността на разговора. @@ -103,7 +101,6 @@ Лош хеш на съобщението Деактивиране повикване… - да сканирате QR код във видеоразговора или вашият контакт може да сподели линк за покана.]]> Услугата във фонов режим винаги работи – известията ще се показват веднага щом съобщенията са налични. Може да бъде деактивирано през настройките – известията ще продължат да се показват, докато приложението работи.]]> SimpleX Chat разговори @@ -189,8 +186,6 @@ Позволи на вашите контакти да изпращат изчезващи съобщения. винаги Аудио/видео разговори - " -\nДостъпно в v5.1" Фон Позволи реакции на съобщения. Позволи изпращането на лични съобщения до членовете. @@ -248,7 +243,6 @@ Задайте го вместо системната идентификация. Код за достъп за самоунищожение Още няколко неща - Свързване свързан свързване връзка %1$d @@ -385,12 +379,9 @@ Грешка при декодиране Изтрий контакт Изтрий контакт\? - Свърване чрез линк/QR код Копирано в клипборда - Създай линк за еднократна покана Създай тайна група Персонализирано време - (сканирай или постави от клипборда) Контактът все още не е свързан! Изтрий Изтрий @@ -400,18 +391,15 @@ Продължи Версия на ядрото: v%s Създай адрес - Създайте адрес, за да позволите на хората да се свързват с вас. Създай SimpleX адрес Персонализирай темата Идентификатори в базата данни и опция за изолация на транспорта. Изтрий адрес Изтрий адрес\? Цветове на интерфейса - Създай Създай профил Изтрий изображение Създай профил - Децентрализиран контактът има e2e криптиране контактът няма e2e криптиране Изтрий всички файлове @@ -438,9 +426,7 @@ Сканирай QR кода на сървъра Въведи сървъра ръчно Изтрий сървър - Не създавай адрес Име на профила: - Само потребителските устройства съхраняват потребителски профили, контакти, групи и съобщения. Деактивирай потвърждениeто\? Активиране (запазване на промените) Активирай потвърждениeто\? @@ -594,7 +580,6 @@ Грешка при изтриване на група Грешка при изтриване на чакащата контактна връзка Грешка при запазване на ICE сървърите - Чакаща връзка със сървъра Вашият контакт трябва да бъде онлайн, за да осъществите връзката. \nМожете да откажете тази връзка и да премахнете контакта (и да опитате по -късно с нов линк). Грешка при експортиране на базата данни @@ -603,9 +588,6 @@ Грешка при импортиране на базата данни Грешка при отстраняване на член Грешка при запазване на профила на групата - Грешка при зареждане на SMP сървъри - Грешка при зареждане на XFTP сървъри - Грешка при запазване на SMP сървърите Грешка при присъединяване към група Грешка при зареждане на подробности Грешка при получаване на файл @@ -613,7 +595,6 @@ Грешка при запазване на потребителска парола Грешка при стартиране на чата Грешка при спиране на чата - Грешка при запазване на XFTP сървърите Грешка при изпращане на съобщение Грешка при задаване на адрес Грешка при смяна на профил! @@ -694,7 +675,6 @@ Само вашият контакт може да изпраща изчезващи съобщения. Забрани изпращането на изчезващи съобщения. Членовете могат да изпращат изчезващи съобщения. - Невалиден QR код Невалиден линк! Неправилен код за сигурност! Невалиден адрес на сървъра! @@ -764,7 +744,6 @@ Информация Инсталирай SimpleX Chat за терминал Как работи - Защитен от спам Игнорирай Покани членове Необратимото изтриване на съобщения е забранено в този чат. @@ -801,7 +780,6 @@ Няма се използват Onion хостове. Нека да поговорим в SimpleX Chat Парола за показване - GitHub хранилище.]]> Когато приложението работи Периодично Постави получения линк @@ -842,7 +820,6 @@ Записът е актуализиран на Научете повече Постави - Предварително зададен сървър Предварително зададен адрес на сървъра Поверителени известия Изключено @@ -875,7 +852,6 @@ (съхранено само на устройствата на членовете на групата) Паролата не е намерена в KeyStore, моля, въведете я ръчно. Това може да се е случило, ако възстановите данните на приложението с помощта на инструмент за резервни копия. Ако не е така, моля, свържете се с разработчиците. Моля, свържете се с груповия администартор. - Когато хората искат да се свържат с вас, можете да ги приемете или отхвърлите. Актуализацията на профила ще бъде изпратена до вашите контакти. Забрани необратимото изтриване на съобщения. Забрани изпращането на лични съобщения до членовете. @@ -937,8 +913,6 @@ х Отваряне на база данни… НА ЖИВО - Уверете се, че адресите на SMP сървъра са в правилен формат, разделени на редове и не са дублирани. - Уверете се, че адресите на XFTP сървъра са в правилен формат, разделени на редове и не са дублирани. маркирано като изтрито модерирано модерирано от %s @@ -977,9 +951,6 @@ Разрешение е отказано! профилно изображение запазено място за профилно изображение - Всеки може да оперира сървъри. - Вие решавате кой може да се свърже с вас. - Поверителността преосмислена Добави поверителна връзка Отвори Реле сървър се използва само ако е необходимо. Друга страна може да наблюдава вашия IP адрес. @@ -1036,7 +1007,6 @@ SimpleX Адрес SimpleX Лого SimpleX Екип - SMP сървъри Сподели адреса с контактите? Сподели линк Сподели с контактите @@ -1093,7 +1063,6 @@ Сподели медия… SimpleX адрес Сигурността на SimpleX Chat беше одитирана от Trail of Bits. - SOCKS прокси Рестартиране Изключване Рестартирайте приложението, за да създадете нов чат профил. @@ -1141,7 +1110,6 @@ За свързване чрез линк Връзката, която приехте, ще бъде отказана! Контактът, с когото споделихте този линк, НЯМА да може да се свърже! - Този линк не е валиден линк за връзка! Вашите чат профили Сървърите за нови връзки на текущия ви чат профил За да покажете скрития профил, въведете пълната парола в полето за търсене на страницата "Вашите чат профили". @@ -1150,18 +1118,13 @@ Докосни за активиране на профил. Системен Заглавие - (за споделяне с вашия контакт) Тази група вече не съществува. Подкрепете SimpleX Chat Вашият контакт изпрати файл, който е по-голям от поддържания в момента максимален размер (%1$s). Тази функция все още не се поддържа. Опитайте следващата версия. - Докосни за започване на нов чат - Този текст е достъпен в настройките Твърде много изображения! - Този QR код не е линк! Тествай сървър Транспортна изолация - Платформата за съобщения и приложения, защитаваща вашата поверителност и сигурност. Смени Благодарение на потребителите – допринесете през Weblate! Видео и файлове до 1gb @@ -1179,7 +1142,6 @@ Този текст не е линк за връзка! Твърде много видеоклипове! Тази настройка се прилага за съобщения в текущия ви профил - За да се защити поверителността, SimpleX използва идентификатори за опашки от съобщения, отделни за всеки от вашите контакти. Опит за свързване със сървъра, използван за получаване на съобщения от този контакт. Опит за свързване със сървъра, използван за получаване на съобщения от този контакт (грешка: %1$s). Тестът е неуспешен на стъпка %s. @@ -1188,8 +1150,6 @@ Докосни бутона Благодарим Ви, че инсталирахте SimpleX Chat! Запази и уведоми контактите - Бъдещето на комуникацията - Няма потребителски идентификатори. Системна Неправилно ID на следващото съобщение (по-малко или еднакво с предишното). \nТова може да се случи поради някаква грешка или когато връзката е компрометирана. @@ -1203,11 +1163,9 @@ Настройки SimpleX адрес Използвай за нови връзки - Вашите XFTP сървъри Използвай сървърите на SimpleX Chat\? Използват се сървърите на SimpleX Chat. Вашите ICE сървъри - Вашите SMP сървъри Използвай SOCKS прокси Използвай SOCKS прокси\? Използване на директна интернет връзка\? @@ -1215,7 +1173,6 @@ Когато са налични Вашият профил, контакти и доставени съобщения се съхраняват на вашето устройство. Можете да използвате markdown за форматиране на съобщенията: - Използвай чата Актуализация Трябва да въвеждате парола при всяко стартиране на приложението - тя не се съхранява на устройството. Неизвестна грешка в базата данни: %s @@ -1246,17 +1203,12 @@ Гласово съобщение… Гласовите съобщения са забранени. непрочетено - Добре дошли! Добре дошли %1$s! Нямате чатове вие сте наблюдател - Вашият сървър Използвай сървър Вашият адрес на сървъра - Можете да го създадете по-късно Вашите контакти ще останат свързани. - Ние не съхраняваме вашите контакти или съобщения (веднъж доставени) на сървърите. - Вие контролирате своя чат! Грешна парола! Гласови съобщения Настройки @@ -1269,11 +1221,8 @@ премахнахте %1$s Вашият автоматично генериран профил Уведомявай - Можете да споделите адреса си като линк или QR код - всеки може да се свърже с вас. променихте адреса получаване за %s Вашият чат профил ще бъде изпратен на членовете на групата - Вашият чат профил ще бъде изпратен -\nдо вашия контакт Вашата текуща база данни ще бъде ИЗТРИТА и ЗАМЕНЕНА с импортираната. \nТова действие не може да бъде отменено - вашият профил, контакти, съобщения и файлове ще бъдат безвъзвратно загубени. Актуализирането на настройките ще свърже отново клиента към всички сървъри. актуализиран профил на групата @@ -1309,15 +1258,11 @@ Видео се свържете с разработчиците на SimpleX Chat, за да задавате въпроси и да получавате актуализации;.]]> иска да се свърже с вас! - Отваряне в мобилно приложение.]]> - XFTP сървъри - Актуализиране на режима на изолация на транспорта\? Вашият текущ профил Вашият профил се съхранява на вашето устройство и се споделя само с вашите контакти. SimpleX сървърите не могат да видят вашия профил. Видеото е изключено Видеото е включено WebRTC ICE сървъри - Вашите ICE сървъри Вашата поверителност Трябва да използвате най-новата версия на вашата чат база данни САМО на едно устройство, в противен случай може да спрете да получавате съобщения от някои контакти. вие: %1$s @@ -1327,7 +1272,6 @@ - гласови съобщения до 5 минути. \n- персонализирано време за изчезване. \n- история на редактиране. - Свързване инкогнито Отвори настройките на приложението Позволи Нов автоматично генериран профил ще бъде споделен. @@ -1335,7 +1279,6 @@ Без фонови разговори Свързване директно\? Използвай текущия профил - Поставете линка, който сте получили, за да се свържете с вашия контакт… Вашият профил %1$s ще бъде споделен. SimpleX не може да работи във фонов режим. Ще получавате известията само когато приложението работи. Приложението може да се затвори след 1 минута във фонов режим. @@ -1506,7 +1449,6 @@ Потвърди връзка Няма свързано мобилно устройство блокиран - Можете да го направите видим за вашите контакти в SimpleX чрез Настройки. Историята не се изпраща на нови членове. Опитай отново Камерата е неодстъпна @@ -1856,14 +1798,12 @@ Свържете отново сървъра, за да принудите доставката на съобщенията. Това използва допълнителен трафик. Грешка при нулиране на статистиката Сканирай / Постави линк - Конфигурирани XFTP сървъри Размер на шрифта Статус на съобщението: %s Задай тема по подразбиране Потвърди файлове от неизвестни сървъри. Изпратени съобщения Грешка при стартиране на WebView. Актуализирайте системата си до новата версия. Моля, свържете се с разработчиците.\nГрешка: %s - Други XFTP сървъри Мащабиране Всички цветови режими Светъл режим @@ -1937,8 +1877,6 @@ Получени грешки Моля, проверете дали мобилното и настолното устройство са свързани към една и съща локална мрежа и дали защитната стена на настолното устройство позволява връзката.\nМоля, споделете всички други проблеми с разработчиците. Временна файлова грешка - Конфигурирани SMP сървъри - Други SMP сървъри Подобрена доставка на съобщения опити изтекли @@ -2069,7 +2007,6 @@ Контактът е изтрит! Архивирани контакти Достъпни панели - Отвори настройките на сървъра Продължи Отвори местоположението на файла Инсталиране на актуализация @@ -2164,7 +2101,6 @@ Xiaomi устройства : моля, активирайте Autostart в системните настройки, за да работят известията.]]> Няма съобщение Или сподели лично - криптирани от край до край, с постквантова сигурност в директните съобщения.]]> Без фонова услуга Проверявай за съобщения на всеки 10 минути Приложението винаги работи във фонов режим diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml index dfcfb1685c..552df8e66e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml @@ -21,7 +21,6 @@ গ্রহণ করুন সংযোগের অনুরোধটি গ্রহণ করবেন কি\? কলটি গৃহীত হয়েছে - পূর্বনির্ধারিত সার্ভারগুলি যুক্ত করুন অ্যাডমিন আপনি একজন অ্যাডমিন স্বাগত বার্তা যুক্ত করুন diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml index d5b8fb5fa0..9763bbaf88 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml @@ -69,8 +69,6 @@ cancel·la la vista prèvia de l\'enllaç Es compartirà un nou perfil aleatori. només amb un contacte: compartiu-lo en persona o mitjançant qualsevol missatger.]]> - escanejar el codi QR a la videotrucada o el vostre contacte pot compartir un enllaç d\'invitació.]]> - mostra el codi QR a la videotrucada o comparteix l\'enllaç.]]> Contactes arxivats Guia de l\'usuari.]]> Configuració de xarxa avançada @@ -98,12 +96,9 @@ trucada en curs Càmera Càmera i micròfon - Qualsevol pot allotjar servidors. Bluetooth - xifrats d\'extrem a extrem, amb seguretat postquàntica als missatges directes.]]> El millor per a la bateria. Només rebràs notificacions quan l\'aplicació s\'està executant (Sense servei en segon pla).]]> Bo per a la bateria. L\'aplicació revisa els missatges cada 10 minuts. Podeu perdre trucades o missatges urgents.]]> - repositori GitHub.]]> %1$s vol connectar amb tu mitjançant Feu servir sempre el retransmisor App always runs in background @@ -171,7 +166,6 @@ Barres d\'eines d\'aplicació Desenfocar Trucades d\'àudio/vídeo - \nDisponible en v5.1 Permet trucades només si el vostre contacte ho permet. Permet la desaparició de missatges només si el vostre contacte ho permet. "Permet la supressió irreversible del missatge només si el teu contacte t\'ho permet. (24 hores)" @@ -237,7 +231,6 @@ s\'està connectant blocat k - Connecta error vostè EN DIRECTE @@ -291,7 +284,6 @@ Enllaç d\'un sol ús Afegiu un contacte Adreça o enllaç d\'un sol ús? - Afegiu servidors predefinits Afegeix servidor Quant a SimpleX trucada acceptada @@ -374,7 +366,6 @@ Esborrar adreça Suprimeix la imatge El nom mostrat no pot contenir espais en blanc. - Descentralitzada Desactivar Desactivar per a tothom Desactiva per a tots els grups @@ -485,7 +476,6 @@ Suprimides Errors d\'eliminació Mòbil connectat - Connectar en mode incògnit connexió %1$d Comprova si hi ha missatges cada 10 minuts durant un minut com a màxim Canvia el codi d\'accés @@ -501,7 +491,6 @@ Connecta Consola del xat Comproveu l\'adreça del servidor de i torneu a provar. - Servidors SMP configurats Configura els servidors ICE Perfil del xat Connexió @@ -547,7 +536,6 @@ Error en desar el fitxer Canviar l\'adreça de recepció? connectar amb els desenvolupadors de SimpleX Chat per fer qualsevol pregunta i rebre actualitzacions.]]> - Obre a l\'aplicació mòbil.]]> Error en desar els servidors ICE Error en desar el servidor intermediari Base de dades dels xats @@ -605,8 +593,6 @@ Introduïu la contrasenya error en mostrar el contingut error en mostrar el missatge - Error en desar els servidors SMP - Error en desar els servidors XFTP Error en enviar el missatge Errors en la configuració dels servidors. Error en canviar el perfil! @@ -658,8 +644,6 @@ Error en crear el missatge Error en crear el perfil! Error en reenviar els missatges - Error en carregar els servidors SMP - Error en carregar els servidors XFTP Error en afegir membre(s) Error en crear l\'adreça Error en unir-se al grup @@ -700,8 +684,6 @@ Crea un grup tot fent servir un perfil aleatori. Perfil actual Crea un enllaç d\'un sol ús - No crear cap adreça - Crea Crea perfil Cantonada Frase de pas actual… @@ -719,11 +701,9 @@ Crea un fitxer Codi d\'accés actual Ara per ara, la mida màxima per als fitxers és %1$s. - Crea un enllaç d\'invitació d\'un sol ús Crea un grupo secreto Temps personalitzat Crea un perfil de xat - Creeu una adreça perquè la gent pugui connectar amb vós. Crea una adreça SimpleX Crea perfil creador @@ -744,7 +724,6 @@ Missatges de xat de SimpleX enviat per llegir - Benvinguts! Envia Envia Restableix @@ -824,7 +803,6 @@ Conserva la conversa Marcar com ha llegit Enllaç no vàlid - El codi QR no és vàlid Més informació El codi QR no és vàlid Codi de seguretat incorrecte! @@ -911,11 +889,9 @@ Connectar amb %1$s? Descarregar La connexió requereix una renegociació del xifratge. - Connectar mitjançant enllaç/codi QR Habilita l\'accés a la càmera Seguretat de connexió Creant enllaç… - Servidors XFTP configurats No utilitzeu credencials amb servidor intermediari. Versió del nucli: v%s Personalitzar tema @@ -1157,7 +1133,6 @@ Canvia l\'aspecte dels teus xats! Màxim 40 segons, rebut a l\'instant. Només vos podreu suprimir els missatges de manera irreversible (el vostre contacte pot marcar-los per suprimir-los). (24 hores) - Obrir configuració del servidor altres errors - Notificació opcional als contactes suprimits.\n- Noms de perfil amb espais.\n- I més! Pendents @@ -1184,8 +1159,6 @@ Desar la configuració d\'adreça SimpleX Deixar de compartir O per compartir en privat - Podeu crear-la més tard - Podeu fer-lo visible per als vostres contactes de SimpleX mitjançant Configuració. Nom del perfil: Desa i notifica el contacte El teu perfil actual @@ -1196,7 +1169,6 @@ Contrasenya per mostrar Desa la contrasenya del perfil Per revelar el vostre perfil ocult introduïu una contrasenya completa al camp de cerca de la pàgina Els vostres perfils de xat. - Tu controles el teu xat! Pots utilitzar la sintaxi markdown per donar format als teus missatges: Com utilitzar la sintaxis markdown trucada rebutjada @@ -1206,13 +1178,6 @@ esperant confirmació… confirmació rebuda… Un navegador web predeterminat és necessari per a les trucades. Configura\'n un al sistema i comparteix més informació amb els desenvolupadors. - Privadesa redefinida - Tu decideixes qui es pot connectar. - Immune al correu brossa - Sense identificadors d\'usuari. - Per protegir la vostra privadesa SimpleX utilitza identificadors separats per a cadascun dels vostres contactes.. - Obrir SimpleX - Només els dispositius client emmagatzemen perfils d\'usuari, contactes, grups i missatges. Notificacions privades Com afecta la bateria Periòdic @@ -1262,7 +1227,6 @@ Enviar els rebus de lliurament a L\'enviament de rebuts està desactivat per a %d grups Reiniciar - Servidor intermediari SOCKS Imatges de perfil Temes Cua @@ -1579,8 +1543,6 @@ mitjançant enllaç d\'un sol ús has compartit un enllaç d\'un sol ús Nom mostrat no vàlid! - Assegureu-vos que les adreces del servidor SMP estiguin en el format correcte, que estiguin separades per línies i que no estiguin duplicades. - Assegureu-vos que les adreces del servidor XFTP estiguin en el format correcte, que estiguin separades per línies i que no estiguin duplicades. No hi ha servidors multimèdia ni de fitxers. No hi ha servidors de missatges. No hi ha servidors per a l\'encaminament de missatges privats. @@ -1681,11 +1643,9 @@ Encara no hi ha connexió directa, el missatge el reenvia l\'administrador. Revocar fitxer enviament no autoritzat - Aquest text està disponible a la configuració Benvingut %1$s! Entrar com a %s enviar per connectar - Toca per iniciar un xat nou Carregant xats… No hi ha xats filtrats Cerqueu o enganxeu l\'enllaç SimpleX @@ -1745,7 +1705,6 @@ Missatge de veu (%1$s ) Esperant el fitxer Només suprimeix la conversa - Pendente L\'adreça de recepció es canviarà per un servidor diferent. El canvi d\'adreça es completarà quan el remitent estigui en línia. Estableix el nom del contacte… Pots enviar missatges a %1$s des dels contactes arxivats. @@ -1769,7 +1728,6 @@ Envia un missatge que desapareix Envia missatge en directe Toqueu per escanejar - (per compartir amb el teu contacte) Missatges de veu prohibits! Gràcies per instal·lar SimpleX Xat! Per iniciar un xat nou @@ -1791,22 +1749,16 @@ Has convidat un contacte El vostre contacte ha d\'estar en línia perquè la connexió es completi.\nPots cancel·lar aquesta connexió i eliminar el contacte (i provar-ho més tard amb un enllaç nou). Mostrar codi QR - Aquest no és un enllaç de connexió vàlid! - Aquest codi QR no és un enllaç! Et connectaràs al grup quan el dispositiu de l\'amfitrió estigui en línia. Espereu o comproveu més tard! Et connectaràs quan s\'accepti la teva sol·licitud de connexió, si us plau, espera o consulta més tard! Si no pots trobar-te en persona, mostra el codi QR en una videotrucada o comparteix l\'enllaç. - Enganxeu l\'enllaç que heu rebut per connectar amb el vostre contacte… Compartir enllaç d\'un sol ús Compartir enllaç d\'un sol ús amb un amic Compartir adreça públicament Comparteix l\'adreça SimpleX a les xarxes socials. Per connectar-se, el vostre contacte pot escanejar el codi QR o utilitzar l\'enllaç de l\'aplicació. Per protegir-vos de la substitució del vostre enllaç, podeu comparar els codis de seguretat de contacte. - Quan algú sol·liciti la connexió, pots acceptar-la o rebutjar-la. Podeu definir el nom de la connexió per recordar amb qui s\'ha compartit l\'enllaç. - Pots compartir la teva adreça com a enllaç o codi QR; qualsevol es pot connectar amb tu. - S\'enviarà el teu perfil de xat\nal teu contacte El teu perfil %1$s es compartirà. Et connectaràs quan el dispositiu del teu contacte estigui en línia, si us plau, espera o consulta més tard! Si més tard decideixes eliminar la teva adreça els contactes no es perdran. @@ -1835,9 +1787,6 @@ Servidors de fitxers i mitjans Servidors de missatges Nou servidor - Altres servidors SMP - Altres servidors XFTP - Servidor preestablert Adreça predeterminada del servidor Preguntes i idees Contacta via email @@ -1852,7 +1801,6 @@ Utilitzar per a noves connexions Utilitzar servidor Perfils de xat - El teu servidor L\'adreça del teu servidor Configuració La teva adreça SimpleX @@ -1869,8 +1817,6 @@ Utilitzar servidors SimpleX Xat? Usant servidors SimpleX Xat. Servidors ICE - Servidors SMP - Servidors XFTP Xarxa i servidors Autenticació d\'intermediari Servidor intermediari SOCKS @@ -1887,7 +1833,6 @@ Encaminament privat Servidor Aïllament de transport - Actualitzar el mode d\'aïllament de transport? Utilitza credencials de servidors intermediari diferents per a cada connexió. Utilitza credencials de servidor intermediari diferents per a cada perfil. Utilitzar connexió a Internet directa? @@ -1916,12 +1861,9 @@ Mostrar trucades lentes d\'API Per rebre notificacions sobre les noves versions activeu la comprovació periòdica de les versions Estable o Beta. Compartir amb contactes - La plataforma de missatgeria i aplicacions que protegeix la vostra privadesa i seguretat. El perfil només es comparteix amb els teus contactes. - No emmagatzemem cap dels vostres contactes o missatges (un cop lliurats) als servidors. El vostre perfil, contactes i missatges lliurats s\'emmagatzemen al vostre dispositiu. Obrir configuració - El futur de la missatgeria Operadors de xarxa Notificacions i bateria La contrasenya aleatòria s\'emmagatzema a la configuració com a text pla.\nPodeu canviar-ho més tard. @@ -1931,7 +1873,6 @@ Obrir SimpleX Chat per acceptar la trucada El servidor de retransmissió protegeix la vostra adreça IP, però pot veure la durada de la trucada. Servidors WebRTC ICE - Servidors ICE Privacitat i seguretat Protegeix la pantalla de l\'aplicació Protegir l\'adreça IP @@ -2160,7 +2101,6 @@ Funció lenta Estat convidats(des) a un grup cerca - (escaneja o enganxa del porta-retalls) Escaneja un codi QR Comença una conversa nova Logo de SimpleX @@ -2171,8 +2111,6 @@ Codi de seguretat Voleu desar els servidors? Escaneja el codi QR del servidor - Servidors SMP - Servidors XFTP Altaveu Vós %s segon(s) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index f8a6dd83dc..1d404ef94b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -5,7 +5,6 @@ Hlasové zprávy povoleny. Správci mohou vytvářet odkazy pro připojení ke skupinám. Přijmout - Přidat přednastavené servery Pokročilá nastavení sítě Přijmout Přidat server @@ -115,7 +114,6 @@ Úplný odkaz Prostřednictvím prohlížeče Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené. - Chyba ukládání serverů SMP Chyba změny konfigurace sítě Nepodařilo se načíst chat Nepodařilo se načíst chaty @@ -145,8 +143,6 @@ Kopírovat nepřečteno Vítejte %1$s! - Vítejte! - Tento text je k dispozici v nastavení odeslání se nezdařilo Sdílet soubor… Připojit @@ -179,7 +175,6 @@ Zkopírováno Nová konverzace Vytvořit tajnou skupinu - (sdílet s kontaktem) (uloženo pouze členy skupiny) Oprávnění zamítnuto! Fotoaparát @@ -210,7 +205,6 @@ Bezpečnostní kód %s ověřen Chat konzole - SMP servery Přednastavená adresa serveru Test serveru se nezdařil! Některé servery neprošly testem: @@ -234,15 +228,12 @@ Vytvořit adresu Uložit a upozornit členy skupiny Ukončit bez uložení - Platforma pro zasílání zpráv a aplikace chránící vaše soukromí a bezpečnost. Vytvořit profil Profil je sdílen pouze s vašimi kontakty. Zobrazované jméno nesmí obsahovat bílé znaky. tučně probíhající hovor - Decentralizovaná Jak to funguje - Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy. Soukromé oznámení Pravidelné Ignorovat @@ -264,7 +255,6 @@ Zařízení Konverzace Experimentální funkce - SOCKS proxy Ikona aplikace Témata Zprávy a soubory @@ -335,15 +325,12 @@ Instalovat SimpleX Chat terminál Hvězdu na GitHubu Ohodnoťte aplikaci - Vaše servery SMP Pokud potvrdíte, budou servery zasílající zprávy vidět vaši IP adresu a váš poskytovatel - ke kterým serverům se připojujete. barevné tajné volání… připojen ukončen - Budoucnost soukromé komunikace - Rozhodněte, kdo se může připojit. špatný kontrolní součet zprávy Databáze chatu importována Nová přístupová fráze… @@ -361,7 +348,6 @@ Smazat čekající připojení\? Nastavení QR kód - videohovoru QR kód nebo sdílejte odkaz.]]> Skenovat kód Nesprávný bezpečnostní kód! Naskenujte bezpečnostní kód z aplikace vašeho kontaktu. @@ -377,7 +363,6 @@ Servery ICE (jeden na řádek) Pro připojení budou vyžadováni Onion hostitelé. \nVezměte prosím na vědomí: nebudete mít možnost připojení k serverům bez adresy .onion. - Aktualizovat režim dopravní izolace\? Sestavení aplikace: %s Sdílet odkaz Smazat adresu @@ -423,13 +408,10 @@ Hlasové zprávy jsou zakázány! Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv. Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní. - Vytvořit jednorázovou pozvánku Skenovat QR kód - ( skenovat nebo vložit ze schránky) Upravit obrázek Smazat obrázek chyba volání - Servery může provozovat kdokoli. Vytvořte si svůj profil Vytvořte si soukromé připojení Videohovor šifrovaný e2e @@ -490,7 +472,6 @@ Izolace přenosu Podle profilu chatu (výchozí) nebo podle připojení (BETA). Připojtíte se ke všem členům skupiny. - Připojení Jste připojeni k serveru, který se používá k přijímání zpráv od tohoto kontaktu. Pokoušíte se připojit k serveru používaném pro příjem zpráv od tohoto kontaktu (chyba: %1$s). označeno jako smazáno @@ -501,7 +482,6 @@ neplatný formát zprávy ŽIVĚ inkognito přes skupinový odkaz - Ujistěte se, že adresy serverů SMP jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní. Chyba vytváření profilu! Duplicitní zobrazované jméno! Chyba přepínání profilu! @@ -549,7 +529,6 @@ Jste pozváni do skupiny Připojit jako %s připojuji… - Začněte nový chat Chat s vývojáři Nemáte žádné konverzace Zrušit náhled obrázku @@ -560,13 +539,11 @@ Čekání na soubor Oznámení Smazat kontakt\? - Čeká na vyřízení Ověřit bezpečnostní kód Odeslat zprávu Pouze majitelé skupin mohou povolit zasílání hlasových zpráv. Odeslat živou zprávu Živá zpráva! - Připojit se prostřednictvím odkazu / QR kódu Děkujeme za instalaci SimpleX Chat! připojit k SimpleX Chat vývojářům, položit jim případné dotazy a získat aktualizace.]]> Připojení prostřednictvím odkazu @@ -592,24 +569,17 @@ E-mail Více Zobrazit QR kód - Neplatný QR kód - Tento QR kód není odkaz! Neplatný odkaz! - Tento odkaz není platným odkazem pro připojení! - skenovat QR kód ve videohovoru nebo může váš kontakt sdílet pozvánku.]]> Připojte se prostřednictvím odkazu Připojit Vložit Tento řetězec není odkazem na připojení! - Otevřít v mobilní aplikaci.]]> %s neověřen Návod k použití Nápověda k markdown Uložit servery Markdown ve zprávách Testovací servery - Přednastavený server - Váš server Adresa vašeho serveru Použít server Použít pro nová připojení @@ -640,11 +610,8 @@ Uložit předvolby\? Uložit a upozornit kontakt Uložit a upozornit kontakty - Kontrolujete konverzaci! - Na serverech neukládáme žádné vaše kontakty ani zprávy (po doručení). Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení. Zadejte vaše jméno: - Vytvořit Jak používat markdown K formátování zpráv můžete použít markdown: kurzíva @@ -659,12 +626,6 @@ obdržel odpověď… obdržel potvrzení… připojování… - Nové vymezení soukromí - Bez uživatelských identifikátorů - Odolná vůči spamu - K ochraně soukromí, SimpleX používá ID pro každý z vašich kontaktů. - úložišti GitHub.]]> - Použijte chat Jak ovlivňuje baterii Když aplikace běží Okamžité @@ -682,7 +643,6 @@ Spojení přes relé Zobrazit Zakázat - Vaše servery ICE WebRTC servery ICE Přenosový server chrání vaši IP adresu, ale může sledovat dobu trvání hovoru. Přenosový server se používá pouze v případě potřeby. Jiná strana může sledovat vaši IP adresu. @@ -921,7 +881,6 @@ Italské rozhraní Díky uživatelům - překládejte prostřednictvím Weblate! Budete připojeni, jakmile bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později! - Váš profil chatu bude odeslán \nvašemu kontaktu Konverzace Sdílet jednorázovou pozvánku koncově šifrované @@ -1014,17 +973,12 @@ Video bude přijato, až kontakt dokončí jeho nahrávání. Video obdržíte, až bude váš kontakt online, vyčkejte prosím nebo zkontrolujte později! Čekám na video - Chyba načítání serverů SMP - Chyba načítání serverů XFTP - Chyba ukládání XFTP serverů - Ujistěte se, že adresy XFTP serverů jsou ve správném formátu s oddělenými řádky a nejsou duplicitní. Server vyžaduje autorizaci pro nahrávání, zkontrolujte heslo. Porovnat soubor Vytvořit soubor Smazat soubor Stáhnout soubor Nahrát soubor - XFTP servery Použít SOCKS proxy Host port %d @@ -1047,7 +1001,6 @@ Zámek SimpleX můžete zapnout v Nastavení. Port Použít .onion hostitele na Ne, pokud je SOCKS proxy nepodporuje.]]> - Vaše XFTP servery Povolit zámek Zamknout po Režim zámku @@ -1077,8 +1030,6 @@ Povolte hovory, pouze pokud je váš kontakt povolí. Povolte svým kontaktům vám volat. Audio/video hovory - " -\nDostupné ve verzi 5.1" Volat můžete vy i váš kontakt. Volat můžete pouze vy. Zákaz audio/video hovorů. @@ -1165,7 +1116,6 @@ Otevírání databáze… Chyba nastavení adresy Pro připojení může váš kontakt naskenovat QR kód, nebo použít odkaz v aplikaci. - Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout. Uživatelské příručce.]]> Adresa SimpleX Barvy motivu @@ -1173,12 +1123,9 @@ Aktualizace profilu bude zaslána vašim kontaktům. Sdílet adresu s kontakty? Přestat sdílet adresu\? - Vytvořit adresu, aby se s vámi lidé mohli spojit. Uložit nastavení SimpleX adresy Přestat sdílet Automaticky přijmout - Můžete vytvořit později - Nevytvářet adresu Ahoj! \nSpojte se se mnou přes SimpleX Chat: %s Promluvme si v SimpleX Chatu @@ -1224,7 +1171,6 @@ Reakce na zprávy může přidávat pouze váš kontakt. Vaše kontakty zůstanou připojeny. Tuto adresu můžete sdílet se svými kontakty, aby se mohli připojit k %s. - Svou adresu můžete sdílet jako odkaz nebo QR kód - kdokoli se k vám může připojit. Pokud později adresu odstraníte, o kontakty nepřijdete. Přístupový kód aplikace je nahrazen sebedestrukčním přístupovým heslem. žádný text @@ -1309,7 +1255,6 @@ Druhé zaškrtnutí jsme přehlédli! ✅ Přijímací adresa bude změněna na jiný server. Změna adresy bude dokončena po připojení odesílatele. Vybrat soubor - Spojit se inkognito Povolit Vypnout upozornění Otevřít nastavení aplikace @@ -1320,7 +1265,6 @@ Nový náhodný profil bude sdílen. Povolit pro všechny skupiny Žádný vybraný chat - Vložte odkaz který jste obdrželi, pro spojení se svým kontaktem… Žádné informace o doručení Odesílání doručenky je zakázáno pro %d skupin Vypnout pro všechny skupiny @@ -1421,7 +1365,6 @@ Obnovit Nový telefon Pouze jedno zařízení může pracovat současně - Můžete ji svým SimpleX kontaktům zviditelnit v Nastavení. %1$s.]]> Propojit mobilní a stolní aplikace! 🔗 To je váš vlastní jednorázový odkaz! @@ -1847,8 +1790,6 @@ Chyba připojení k přeposílajícímu serveru %1$s. Prosím, zkuste to později. Předávacímu serveru %1$s se nepodařilo připojit k cílovému serveru %2$s. Prosím, zkuste to později. Vybrané nastavení chatu zakazuje tuto zprávu. - Jiné SMP servery - Nastavené SMP servery Probíhá Části nahrány %1$d chyba souboru:\n%2$s @@ -1918,7 +1859,6 @@ Potvrzeno duplikáty Smazán - Otevřít nastavení serveru Nový zážitek z chatu 🎉 Nové možnosti médií Nová zpráva @@ -2022,10 +1962,8 @@ Vybrány %d Střední Příjem zpráv - Nastavené XFTP servery Servery médií a souborů Servery zpráv - Jiné FXTP servery Pozvat Pošlete zprávu pro povolení volání. Přijmout podmínky @@ -2190,7 +2128,6 @@ Opravit Opravit připojení? Nový server - koncovým šifrováním, s post-quantovým zabezpečením v přímých zprávách.]]> Žádné služba na pozadí Kontrolovat zprávy každých 10 minut Chyba vytváření hlášení diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml index 8c7d92086c..9706c1b552 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml @@ -66,7 +66,6 @@ Yderligere sekundær Tilføj liste Tilføj besked - Tilføj forudindstillede servere Tilføj profil Adresse Adresseændringen bliver annulleret. Den gamle modtageradresse bliver brugt. @@ -101,8 +100,6 @@ Brug ny inkognito -profil Din profil sendes til den kontakt, du har modtaget dette link fra. Du opretter forbindelse til alle gruppemedlemmer. - Forbinde - Tilslut inkognito Alle chats og meddelelser slettes - dette kan ikke fortrydes! Alle chats fjernes fra listen %s, og listen slettes Alle farvetilstande @@ -156,7 +153,6 @@ En ny tilfældig profil deles. En anden grund Svaropkald - Alle kan være vært for servere. App App løber altid i baggrunden App Build: %s @@ -241,12 +237,6 @@ Upassende indhold Overtrædelse af retningslinjer for fællesskabet Upassende profil - Fejl under lagring af SMP-servere - Fejl ved lagring af XFTP-servere - Sørg for, at SMP-serveradresserne er i korrekt format, linjeseparerede og ikke duplikerede. - Sørg for, at XFTP-serveradresserne er i korrekt format, linjeseparerede og ikke duplikerede. - Fejl ved indlæsning af SMP-servere - Fejl ved indlæsning af XFTP-servere Fejl ved opdatering af netværkskonfigurationen Chatten kunne ikke indlæses Kunne ikke indlæse chats @@ -520,8 +510,6 @@ afsendelse mislykkedes ulæst Velkommen %1$s! - Velkomst! - Denne tekst er tilgængelig i indstillinger Chats Indstillinger forbinder… @@ -531,7 +519,6 @@ Deltag som %s afvist forbinder… - Tryk for at starte en ny chat Chat med udviklerne Du har ingen chats Indlæser chats… @@ -699,7 +686,6 @@ Forbundet Afbrudt Fejl - Indtil Ændre modtageradresse? Modtageradressen vil blive ændret til en anden server. Adresseændringen vil blive gennemført, når afsenderen er online. Genforhandle kryptering? @@ -750,7 +736,6 @@ Auto-accept Auto-accept-kontaktanmodninger Auto-accept-billeder - \nFås i v5.1 Tilbage Baggrund Dårlig skrivebordsadresse @@ -824,7 +809,6 @@ Kan ikke sende besked til gruppemedlem Katalansk, indonesisk, rumænsk og vietnamesisk - takket være vores brugere! med kun en kontakt - Del personligt eller via enhver messenger.]]> - ende-til-ende krypteret med sikkerhed efter kvantet i direkte meddelelser.]]> for hver chatprofil, du har i appen.]]> til hvert kontakt- og gruppemedlem.\n Bemærk : Hvis du har mange forbindelser, kan dit batteri og trafikforbrug være væsentligt højere, og nogle forbindelser kan mislykkes.]]> Tilføj kontakt: Sådan opretter du et nyt invitationslink eller opretter forbindelse via et link, du har modtaget.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index f8fa2dbd66..6ea5d7686d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -8,7 +8,6 @@ Der Gruppe beitreten? Ihr Profil wird an den Kontakt gesendet, von dem Sie diesen Link erhalten haben. Sie werden mit allen Gruppenmitgliedern verbunden. - Verbinden Verbunden Fehler @@ -48,8 +47,6 @@ Über den Browser Das Öffnen des Links über den Browser kann die Privatsphäre und Sicherheit der Verbindung reduzieren. SimpleX-Links, denen nicht vertraut wird, werden rot markiert. - Fehler beim Speichern der SMP-Server - Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind. Fehler bei der Aktualisierung der Netzwerkkonfiguration. Verbindungszeitüberschreitung @@ -168,14 +165,11 @@ Ungelesen Willkommen %1$s! - Willkommen! - Dieser Text ist in den Einstellungen verfügbar. Chats Verbinde… Sie sind zu der Gruppe eingeladen Beitreten als %s Verbinde… - Tippen, um einen neuen Chat zu starten Chatten Sie mit den Entwicklern Sie haben keine Chats @@ -223,7 +217,6 @@ Verbunden Getrennt Fehler - Ausstehend Empfängeradresse wechseln\? Die Empfängeradresse wird auf einen anderen Server geändert. Der Adresswechsel wird abgeschlossen, wenn der Absender wieder online ist. @@ -245,12 +238,8 @@ In die Zwischenablage kopiert Neuen Chat starten - Einmal-Einladungslink teilen - Per Link / QR-Code verbinden QR-Code scannen Geheime Gruppe erstellen - (zum Teilen mit Ihrem Kontakt) - (Scannen oder Einfügen aus der Zwischenablage) (Wird nur von Gruppenmitgliedern gespeichert) Berechtigung verweigert! @@ -319,25 +308,17 @@ QR-Code anzeigen - Ungültiger QR-Code - Dieser QR-Code beschreibt keinen Link! Ungültiger Link! - Dieser Link ist kein gültiger Verbindungslink! Verbindungsanfrage gesendet! Sie werden mit der Gruppe verbunden, sobald das Endgerät des Gruppen-Hosts online ist. Bitte warten oder schauen Sie später nochmal nach! Sie werden verbunden, sobald Ihre Verbindungsanfrage angenommen wird. Bitte warten oder schauen Sie später nochmal nach! Sie werden verbunden, sobald das Endgerät Ihres Kontakts online ist. Bitte warten oder schauen Sie später nochmal nach! - den QR-Code während eines Videoanrufs anzeigen oder einen Einladungslink über einen anderen Kanal mit Ihrem Kontakt teilen.]]> - Ihr Chat-Profil wird -\nan Ihren Kontakt gesendet - den QR-Code während eines Videoanrufs scannen oder Ihr Kontakt kann einen Einladungslink über einen anderen Kanal mit Ihnen teilen.]]> Einmal-Einladungslink teilen Über einen Link verbinden Verbinden Einfügen Diese Zeichenfolge entspricht keinem gültigen Verbindungslink! - In mobiler App öffnen“.]]> Einmal-Einladungslink @@ -352,9 +333,7 @@ Senden Sie uns eine E-Mail SimpleX-Sperre Chat-Konsole - SMP-Server Voreingestellte Serveradresse - Voreingestellte Server hinzufügen Server hinzufügen Teste Server Teste alle Server @@ -363,8 +342,6 @@ Einige Server haben den Test nicht bestanden: Scannen Sie den QR-Code des Servers Geben Sie den Server manuell ein - Voreingestellter Server - Ihr Server Ihre Serveradresse Server nutzen Für neue Verbindungen nutzen @@ -377,7 +354,6 @@ Unterstützen Sie uns Bewerten Sie die App Verwenden Sie SimpleX-Chat-Server\? - Ihre SMP-Server Verwendung von SimpleX-Chat-Servern. Anleitung Wie Sie Ihre Server nutzen @@ -423,15 +399,11 @@ Speichern und Gruppenmitglieder benachrichtigen Beenden ohne Speichern - Sie haben volle Kontrolle über Ihren Chat! - Die Messaging- und Anwendungsplattform zum Schutz Ihrer Privatsphäre und Sicherheit. - Wir speichern auf den Servern keinen Ihrer Kontakte und keine Ihrer Nachrichten (sobald einmal zugestellt). Profil erstellen Ihr Profil, Ihre Kontakte und zugestellten Nachrichten werden auf Ihrem Gerät gespeichert. Das Profil wird nur mit Ihren Kontakten geteilt. Der angezeigte Name darf keine Leerzeichen enthalten. Geben Sie Ihren Namen ein: - Erstellen Über SimpleX Wie Sie Markdowns anwenden @@ -461,20 +433,10 @@ Verbunden Beendet - Die Zukunft des Messagings - Datenschutz neu definiert - Keine Benutzerkennungen. - Immun gegen Spam - Sie entscheiden, wer sich mit Ihnen verbinden kann. - Dezentral - Jeder kann seine eigenen Server aufsetzen. Ihr Profil erstellen Stellen Sie eine private Verbindung her Wie es funktioniert - SimpleX nutzt individuelle Kennungen für jeden Ihrer Kontakte, um Ihre Privatsphäre zu schützen. - Nur die Endgeräte speichern Benutzerprofile, Kontakte, Gruppen und Nachrichten. - GitHub-Repository mehr dazu.]]> Fügen Sie den erhaltenen Link ein @@ -499,7 +461,6 @@ Akzeptieren Anzeigen Deaktivieren - Ihre ICE-Server WebRTC-ICE-Server Relais-Server schützen Ihre IP-Adresse, können aber die Anrufdauer erfassen. Relais-Server werden nur genutzt, wenn sie benötigt werden. Ihre IP-Adresse kann von Anderen erfasst werden. @@ -556,7 +517,6 @@ Chats Entwicklertools Experimentelle Funktionen - SOCKS-Proxy App-Icon Design Nachrichten und Dateien @@ -933,7 +893,6 @@ %s wurde noch nicht überprüft Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen. Private Benachrichtigungen - Chat verwenden Ihr Kontakt und Sie können beide verschwindende Nachrichten versenden. %dh Gruppen-Links @@ -974,7 +933,6 @@ Es werden alle Chats und Nachrichten gelöscht. Dies kann nicht rückgängig gemacht werden! Chat-Profil löschen für PING-Zähler - Transport-Isolations-Modus aktualisieren\? Nachrichten-Server für neue Verbindungen über Ihr aktuelles Chat-Profil Dateien und Medien Transport-Isolation @@ -1098,10 +1056,7 @@ Auf das Video warten Auf das Video warten Das Video wird heruntergeladen, wenn Ihr Kontakt online ist. Bitte warten oder überprüfen Sie es später! - Ihre XFTP-Server Host - Fehler beim Speichern der XFTP-Server - Fehler beim Laden der SMP-Server Der Server erfordert zum Hochladen eine Autorisierung. Bitte überprüfen Sie das Passwort. Datei herunterladen Datei vergleichen @@ -1119,7 +1074,6 @@ Sperrmodus ändern Zugangscode wurde nicht geändert! Entschlüsselungsfehler - Fehler beim Laden der XFTP-Server Eingabe des Zugangscodes Zugangscode eingeben Kein App-Zugangscode @@ -1138,7 +1092,6 @@ Ungültiger Nachrichten-Hash Authentifizierung fehlgeschlagen Falsche Nachrichten-ID - Stellen Sie sicher, dass die XFTP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind. SOCKS-Proxy nutzen SimpleX-Sperrmodus SimpleX-Sperre ist nicht aktiviert! @@ -1146,7 +1099,6 @@ Bestätigen System Sie können nicht überprüft werden – bitte versuchen Sie es nochmal. - XFTP-Server Die ID der nächsten Nachricht ist falsch (kleiner oder gleich der vorherigen). \nDies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompromittiert wurde. %1$d Nachrichten konnten nicht entschlüsselt werden. @@ -1159,8 +1111,6 @@ Erlauben Sie Anrufe nur dann, wenn es Ihr Kontakt ebenfalls erlaubt. Erlaubt es Ihren Kontakten Sie anzurufen. Audio-/Video-Anrufe - " -\nVerfügbar in v5.1" Sowohl Sie als auch Ihr Kontakt können Anrufe tätigen. Nur Sie können Anrufe tätigen. Audio-/Video-Anrufe nicht erlauben. @@ -1192,13 +1142,11 @@ Mehr erfahren Um eine Verbindung herzustellen, kann Ihr Kontakt den QR-Code scannen oder den Link in der App verwenden. SimpleX-Adresse - Wenn Personen eine Verbindung anfordern, können Sie diese annehmen oder ablehnen. Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen. Design anpassen Interface-Farben Fügen Sie die Adresse Ihrem Profil hinzu, damit Ihre SimpleX-Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre SimpleX-Kontakte gesendet. Alle Ihre Kontakte bleiben verbunden. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet. - Erstellen Sie eine Adresse, damit sich Personen mit Ihnen verbinden können. SimpleX-Adresse erstellen Mit SimpleX-Kontakten teilen Ihre Kontakte bleiben weiterhin verbunden. @@ -1212,10 +1160,8 @@ Die Adresse mit SimpleX-Kontakten teilen? Teilen beenden Das Teilen der Adresse beenden\? - Keine Adresse erstellt Hallo! \nVerbinden Sie sich per SimpleX Chat mit mir: %s - Sie können dies später erstellen Geben Sie eine Begrüßungsmeldung ein … Vorschau Sie können diese Adresse mit Ihren Kontakten teilen, um sie mit %s verbinden zu lassen. @@ -1236,7 +1182,6 @@ Benutzeranleitung.]]> Stellen Sie sicher, dass die Datei die korrekte YAML-Syntax hat. Exportieren Sie das Design, um ein Beispiel für die Dateistruktur des Designs zu erhalten. Chat-Profile wechseln - Sie können Ihre Adresse als Link oder QR-Code teilen – jede Person kann sich mit Ihnen verbinden. Werden die App-Daten komplett gelöscht. Es wurde ein leeres Chat-Profil mit dem eingegebenen Namen erstellt und die App öffnet wie gewohnt. Wenn Sie Ihren Selbstzerstörungs-Zugangscode während des Öffnens der App eingeben: @@ -1412,11 +1357,9 @@ Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %1$d Mitglieder hat. An dieses Gruppenmitglied wird eine Verbindungsanfrage gesendet. Direkt verbinden\? - Inkognito verbinden Aktuelles Chat-Profil nutzen Neues Inkognito-Profil nutzen App-Akkuverbrauch / Unbeschränkt , um Anrufe im Hintergrund zu führen.]]> - Fügen Sie den erhaltenen Link ein, um sich mit Ihrem Kontakt zu verbinden… Es wird ein neues Zufallsprofil geteilt. Ihr Profil %1$s wird geteilt. Erlauben @@ -1586,7 +1529,6 @@ Ansicht abgestürzt Fehler beim Anzeigen des Inhalts Fehler beim Anzeigen der Nachricht - Sie können sie über Einstellungen für Ihre SimpleX-Kontakte sichtbar machen. Der Nachrichtenverlauf wird nicht an neue Gruppenmitglieder gesendet. Wiederholen Kamera nicht verfügbar @@ -1933,10 +1875,6 @@ Fehler beim privaten Routing Die Nachricht kann später zugestellt werden, wenn das Mitglied aktiv wird. Bisher keine direkte Verbindung. Nachricht wird von einem Admin weitergeleitet. - Konfigurierte SMP-Server - Konfigurierte XFTP-Server - Andere SMP-Server - Andere XFTP-Server Abgeschlossen Inaktiv Verbunden @@ -1969,7 +1907,6 @@ Fehler beim Herunterladen Duplikate Abgelaufen - Server-Einstellungen öffnen Andere Fehler Proxy-vermittelt Fehler beim Empfang @@ -2269,7 +2206,6 @@ Der Text der aktuellen Nutzungsbedingungen konnte nicht geladen werden. Sie können die Nutzungsbedingungen unter diesem Link einsehen: Oder importieren Sie eine Archiv-Datei Hinweis für Geräte von Xiaomi: Bitte aktivieren Sie in den System-Einstellungen die Option "Autostart", damit Benachrichtigungen funktionieren.]]> - Ende-zu-Ende-verschlüsselt versendet. In Direktnachrichten sogar mit Post-Quantum-Security.]]> Team-Mitglieder aufnehmen Freunde aufnehmen Einladung angenommen diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml index 66cd9cf03b..30b5dad519 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml @@ -17,7 +17,6 @@ Επέτρεψε Αποδοχή Αποδοχή ανώνυμης περιήγησης - Προσθήκη προκαθορισμένου διακομιστή Προσθήκη σε άλλη συσκευή Όλες οι επαφές σου θα παραμείνουν ενεργές. Αποδοχή @@ -61,11 +60,9 @@ Αντίγραφο δεδομένων εφαρμογής 5 λεπτά Θα συνδεθείς όταν η συσκευή της επαφής σου είναι συνδεδεμένη, παρακαλώ περίμενε ή έλεγξε αργότερα! - Ο ICE διακομιστής σου Έκδοση εφαρμογής Έστειλες πρόσκληση ομάδας 1 λεπτό - Ο διακομιστής σου Διεύθυνση Ακύρωση Πίσω @@ -73,10 +70,8 @@ Θα συνδεθείς με όλα τα μέλη της ομάδας. %1$s θέλει να συνδεθεί μαζί σου μέσω Επέτρεψε τις αντιδράσεις σε μηνύματα. - Ο διακομιστής XFTP σου Η διεύθυνση του διακομιστή σου Το προφίλ, επαφές και παραδομένα μηνύματα σου είναι αποθηκευμένα στην συσκευή σου. - Ο διακομιστής SMP σου Επιτρέπεται να σταλούν αρχεία και μέσα. Το τυχαίο προφίλ σου %1$s ΜΕΛΗ @@ -103,7 +98,6 @@ Αλλαγή διεύθυνσης λήψης Πιστοποίηση μη διαθέσιμη Άλλαξε - \nΔιαθέσιμο στην έκδοση 5.1 Τέλος κλήσης Κλήσεις Αυτόματη αποδοχή @@ -146,7 +140,6 @@ Οι επαφές μπορούν να επισημάνουν μηνύματα προς διαγραφή, τα οποία θα μπορείς να τα δεις. Σύνδεση μέσω μιας εφάπαξ σύνδεσης; Δημιουργία σύνδεσμου - Σύνδεση μέσω σύνδεσμο/κωδικό γρήγορης ανταπόκρισης Σφάλμα σύνδεσης (πιστοποίηση) συνδέεται συνδέεται… @@ -169,7 +162,6 @@ Σύνδεση με %1$s? Δημιουργία του προφίλ σου συνδέεται… - Δημιουργία Προτιμήσεις επαφής Συνδεδεμένο κινητό Σύνδεση @@ -177,7 +169,6 @@ συνδέεται… Σύνδεση τερματίστηκε Συνδε - Σύνδεση ανώνυμης περιήγησης σύνδεση επετεύχθη η επαφή δεν έχει κρυπτογράφηση από άκρη-σε-άκρη Η επαφή επιτρέπει @@ -196,13 +187,11 @@ αιτούμενη σύνδεση Η ιδιωτικότητά σου Η επαφή σου έστειλε ένα αρχείο το οποίο είναι μεγαλύτερο από το παρόν υποστηριζόμενο μέγεθος (%1$s). - Το προφίλ της συνομιλίας σου θα σταλεί\nστην επαφή σου Χρήση νέου ανώνυμου προφίλ Ήδη συνδέεται Απέρριψες την πρόσκληση της ομάδας Σύνδεση μέσω διεύθυνση επαφής Χρήση του τρέχοντος προφίλ - Συνδέσου Το τρέχον προφίλ σου αφαίρεσες %1$s Συμμετοχή ομάδας; @@ -276,7 +265,6 @@ Πάντα Η ενημέρωση της εφαρμογής κατέβηκε Έλεγχος για ενημερώσεις - Οποιοσδήποτε μπορεί να φιλοξενήσει διακομιστές. κλήση ήχου (χωρίς κρυπτογράφηση e2e) Κλήσεις στην οθόνη κλειδώματος: Κλήση ήχου @@ -461,7 +449,6 @@ δεν μπορείς να στείλεις μηνύματα Καταλανικά, Ινδονησιακά, Ρουμανικά και Βιετναμέζικα – ευχαριστούμε τους χρήστες μας! με μία μόνο επαφή - προσωπικό διαμοιρασμό ή μέσω οποιασδήποτε εφαρμογής μηνυμάτων.]]> - με κρυπτογράφηση από άκρη-σε-άκρη και με μετα-κβαντική ασφάλεια σε άμεσα μηνύματα.]]> Επέτρεψε το στο επόμενο παράθυρο διαλόγου για να λαμβάνεις ειδοποιήσεις άμεσα.]]> Συσκευές Xiaomi: ενεργοποίησε το Αυτόματο Ξεκίνημα στις ρυθμίσεις συστήματος για να λειτουργούν οι ειδοποιήσεις.]]> %s.]]> @@ -471,8 +458,6 @@ %s βρίσκεται σε κακή κατάσταση]]> Σάρωση QR κωδικού.]]> %s με τον λόγο: %s]]> - σαρώσεις τον QR κωδικό στη βιντεοκλήση, ή η επαφή σου να διαμοιραστεί ένα σύνδεσμο πρόσκλησης.]]> - δείξε τον QR κωδικό στη βιντεοκλήση, ή μοιράσου το σύνδεσμο.]]> (νέο)]]> (αυτή η συσκευή v%s)]]> κρυπτογράφηση από άκρη-σε-άκρη.]]> @@ -487,7 +472,6 @@ Άνοιγμα στην εφαρμογή κινητού, μετά πάτα Σύνδεση μέσα στην εφαρμογή.]]> Χρήση από τον υπολογιστή στην εφαρμογή του κινητού και σκάναρε τον QR κωδικό.]]> Οδηγό Χρήσης.]]> - αποθετήριό μας στο GitHub.]]> Χρήση .onion hosts σε Όχι, αν ο διακομιστής μεσολάβησης SOCKS δεν τα υποστηρίζει.]]> %s.]]> %s.]]> @@ -504,7 +488,6 @@ %1$s.]]> %1$s.]]> πρέπει να χρησιμοποιείς την ίδια βάση δεδομένων σε δύο συσκευές.]]> - Άνοιγμα στην εφαρμογή κινητού κουμπί.]]> συνδεθείς με τους δημιουργούς του SimpleX Chat για να κάνεις ερωτήσεις και να λαμβάνεις ενημερώσεις.]]> μόνο αφού γίνει αποδεκτό το αίτημά σου.]]> Να αλλάξεις την αυτόματη διαγραφή μηνυμάτων; @@ -545,8 +528,6 @@ Όροι χρήσης Οι όροι θα γίνουν αποδεκτοί στις: %s. Οι όροι θα γίνουν αυτόματα αποδεκτοί για τους ενεργούς χειριστές στις: %s. - Διαμορφωμένοι SMP διακομιστές - Διαμορφωμένοι XFTP διακομιστές Διαμορφωμένοι ICE διακομιστές Επιβεβαίωσε Επιβεβαίωση διαγραφής επαφής; @@ -615,13 +596,11 @@ Γωνία Δημιουργία Δημιουργία συνδέσμου 1-χρήσης - Δημιούργησε μια διεύθυνση για να μπορούν οι άλλοι να συνδεθούν μαζί σου. Δημιουργήθηκε Δημιουργήθηκε στις Δημιουργήθηκε στις: %s Δημιουργία λίστας Δημιουργία νέου προφίλ στην εφαρμογή υπολογιστή. 💻 - Δημιουργία συνδέσμου 1-χρήσης Δημιουργία ουράς Δημιούργησε τη διεύθυνσή σου Δημιουργία συνδέσμου αρχειοθέτησης @@ -673,7 +652,6 @@ %d ημέρα %d ημέρες Αποστολή για αποσφαλμάτωση - Αποκεντρωμένο Σφάλμα αποκωδικοποίησης Σφάλμα αποκρυπτογράφησης σφάλματα αποκρυπτογράφησης @@ -817,7 +795,6 @@ ΜΗΝ στέλνεις μηνύματα απευθείας, ακόμα κι αν ο δικός σου διακομιστής ή ο διακομιστής προορισμού δεν υποστηρίζει ιδιωτική δρομολόγηση. Μην χρησιμοποιείς διαπιστευτήρια με το διακομιστή μεσολάβησης (proxy). ΜΗΝ χρησιμοποιείς ιδιωτική δρομολόγηση. - Μην δημιουργήσεις διεύθυνση Μην ενεργοποιήσεις Μην χάσεις σημαντικά μηνύματα. Να μην εμφανιστεί ξανά @@ -1023,7 +1000,6 @@ Η εικόνα θα ληφθεί όταν η επαφή σου ολοκληρώσει τη μεταφόρτωσή της. Η εικόνα θα ληφθεί όταν η επαφή σου είναι συνδεδεμένη, περίμενε ή έλεγξε αργότερα! Άμεσα - Ανοσοποιημένο στο spam Εισαγωγή Εισαγωγή βάσης δεδομένων συνομιλίας; Εισαγωγή βάσης δεδομένων @@ -1078,7 +1054,6 @@ μη έγκυρη διαμόρφωση μηνύματος Μη έγκυρη επιβεβαίωση μετεγκατάστασης Μη έγκυρο όνομα! - Μη έγκυρος QR κωδικός Μη έγκυρος QR κωδικός Μη έγκυρη διεύθυνση διακομιστή! Η πρόσκληση έληξε! @@ -1158,10 +1133,8 @@ Εξαφάνισε ένα μήνυμα Κάνε το προφίλ ιδιωτικό! Βεβαιώσου ότι έχεις σωστή διαμόρφωση του διακομιστή μεσολάβησης. - Βεβαιώσου ότι οι διευθύνσεις του διακομιστή SMP έχουν σωστή μορφή, διαχωρίζονται με νέα γραμμή και δεν είναι διπλότυπες. Βεβαιώσου ότι το αρχείο έχει σωστή σύνταξη YAML. Κάνε εξαγωγή ενός θέματος για να έχεις παράδειγμα της δομής αρχείου των θεμάτων. "Βεβαιώσου ότι οι διευθύνσεις των διακομιστών WebRTC ICE έχουν σωστή μορφή, διαχωρίζονται με νέα γραμμή και δεν είναι διπλότυπες." - Βεβαιώσου ότι οι διευθύνσεις των διακομιστών XFTP έχουν σωστή μορφή, διαχωρίζονται με νέα γραμμή και δεν είναι διπλότυπες. Κάνε τις συνομιλίες σου να ξεχωρίζουν! Βοήθεια στη Markdown σύνταξη Σύνταξη Markdown στα μηνύματα @@ -1291,7 +1264,6 @@ Πάτα για ανώνυμη συμμετοχή Πάτα για επικόλληση συνδέσμου Πάτα για σάρωση - Πάτα για να ξεκινήσεις μία νέα συνομιλία Σύνδεση TCP Χρόνος λήξης σύνδεσης TCP στο παρασκήνιο Χρόνος λήξης σύνδεσης TCP @@ -1320,7 +1292,6 @@ Για τις κλήσεις απαιτείται ο προεπιλεγμένος περιηγητής. Ρύθμισε τον προεπιλεγμένο περιηγητή στο σύστημα σου και μοιράσου περισσότερες πληροφορίες με τους προγραμματιστές. Το όνομα της συσκευής θα κοινοποιηθεί στην εφαρμογή του συνδεδεμένου κινητού. Η κρυπτογράφηση λειτουργεί και η νέα κρυπτογράφηση δεν είναι απαραίτητη. Μπορεί να προκαλέσει σφάλματα σύνδεσης! - Το μέλλον στην ανταλλαγή μηνυμάτων Ο κωδικός ελέγχου του προηγούμενου μηνύματος είναι διαφορετικός. Ο αναγνωριστικός κωδικός του επόμενου μηνύματος είναι λανθασμένος (μικρότερος ή ίσος με τον προηγούμενο).\nΑυτό μπορεί να συμβεί λόγω κάποιου σφάλματος ή όταν η σύνδεση έχει παραβιαστεί. Η εικόνα δεν μπορεί να αποκωδικοποιηθεί. Δοκίμασε μια άλλη εικόνα ή επικοινώνησε με τους προγραμματιστές. @@ -1331,7 +1302,6 @@ Τα μηνύματα θα επισημαίνονται ως ελεγχόμενα για όλα τα μέλη. Το μήνυμα θα διαγραφεί για όλα τα μέλη. Το μήνυμα θα επισημανθεί ως υπό έλεγχο για όλα τα μέλη. - Η πλατφόρμα μηνυμάτων και εφαρμογών που προστατεύει το απόρρητο και την ασφάλειά σου. Η φράση πρόσβασης αποθηκεύεται στις ρυθμίσεις ως απλό κείμενο. Η φράση πρόσβασης θα αποθηκευτεί στις ρυθμίσεις ως απλό κείμενο μετά την αλλαγή της ή την επανεκκίνηση της εφαρμογής. Το προφίλ κοινοποιείται μόνο στις επαφές σου. @@ -1362,14 +1332,11 @@ Αυτή η ομάδα δεν υπάρχει πλέον. Αυτός είναι ο δικός σου σύνδεσμος 1-χρήσης! Αυτή είναι η διεύθυνση σου SimpeX! - Αυτός ο σύνδεσμος δεν είναι έγκυρος! Αυτός ο σύνδεσμος απαιτεί νεότερη έκδοση της εφαρμογής. Αναβάθμισε την εφαρμογή ή ζήτησε από την επαφή σου να σου στείλει ένα συμβατό σύνδεσμο. Αυτός ο σύνδεσμος χρησιμοποιήθηκε με άλλη κινητή συσκευή. Δημιούργησε ένα νέο σύνδεσμο στον υπολογιστή σου. Αυτό το μήνυμα διαγράφηκε ή δεν έχει ληφθεί ακόμα. - Αυτός ο κωδικός QR δεν είναι σύνδεσμος! Αυτή η ρύθμιση ισχύει για τα μηνύματα στο τρέχον προφίλ συνομιλίας σου. Αυτό το κείμενο δεν είναι σύνδεσμος! - Αυτό το κείμενο είναι διαθέσιμο στις ρυθμίσεις Εξαντλήθηκε ο χρόνος αναμονής κατά τη σύνδεση με τον υπολογιστή Ο χρόνος εξαφάνισης ορίζεται μόνο για τις νέες επαφές. Τίτλος @@ -1386,13 +1353,11 @@ Για την προστασία της ζώνης ώρας, τα αρχεία εικόνας/φωνής χρησιμοποιούν UTC ώρα. Για να προστατεύσεις τις πληροφορίες σου, ενεργοποίησε το SimpleX Lock.\nΘα σου ζητηθεί να ολοκληρώσεις την επαλήθευση ταυτότητας πριν ενεργοποιηθεί αυτή η λειτουργία. Για την προστασία της IP διεύθυνσής σου, η ιδιωτική δρομολόγηση χρησιμοποιεί τους διακομιστές SMP για την παράδοση μηνυμάτων. - Για την προστασία της ιδιωτικότητάς σου, το SimpleX χρησιμοποιεί ξεχωριστά αναγνωριστικά για κάθε μία από τις επαφές σου. Για λήψη Για να λαμβάνεις ειδοποιήσεις, παρακαλώ εισήγαγε τη φράση πρόσβασης της βάσης δεδομένων. Για να αποκαλύψεις το κρυφό προφίλ σου, εισήγαγε έναν πλήρη κωδικό στο πεδίο αναζήτησης στη σελίδα Τα προφίλ συνομιλίας σου. Για αποστολή Για αποστολή εντολών, θα πρέπει να είσαι συνδεδεμένος. - (για διαμοιρασμό με την επαφή σου) Για να ξεκινήσεις μία νέα συνομιλία Συνολικά Για να χρησιμοποιήσεις άλλο προφίλ μετά την προσπάθεια σύνδεσης, διέγραψε τη συνομιλία και χρησιμοποίησε ξανά τον σύνδεσμο. @@ -1440,7 +1405,6 @@ Η λήψη της ενημέρωσης ακυρώθηκε ενημερωμένο προφίλ Ενημέρωση ρυθμίσεων δικτύου; - Ενημέρωση της λειτουργίας απομόνωσης μεταφοράς; Ενημέρωσε τη διεύθυνσή σου Η ενημέρωση των ρυθμίσεων θα επανασυνδέσει την εφαρμογή με όλους τους διακομιστές. Αναβάθμιση @@ -1457,7 +1421,6 @@ Ανέβασμα αρχείου Ανεβαίνει το αρχείο αρχειοθέτησης Τα τελευταία 100 μηνύματα αποστέλλονται στα νέα μέλη. - Χρήση συνομιλίας Χρησιμοποίησε διαφορετικά διαπιστευτήρια διακομιστή μεσολάβησης για κάθε σύνδεση. Χρησιμοποίησε διαφορετικά διαπιστευτήρια διακομιστή μεσολάβησης για κάθε προφίλ. Χρήση απευθείας σύνδεσης στο Διαδίκτυο; @@ -1522,8 +1485,6 @@ Σφάλμα κατά τη συμμετοχή στην ομάδα Σφάλμα κατά τη φόρτωση των λιστών συνομιλιών Σφάλμα κατά τη φόρτωση των λεπτομερειών - Σφάλμα κατά τη φόρτωση των διακομιστών SMP - Σφάλμα κατά τη φόρτωση των διακομιστών XFTP Σφάλμα επισήμανσης ως αναγνωσμένου Σφάλμα κατά το άνοιγμα του προγράμματος περιήγησης Σφάλμα κατά το άνοιγμα της συνομιλίας @@ -1545,9 +1506,7 @@ Σφάλμα κατά την αποθήκευση διακομιστών Σφάλμα κατά την αποθήκευση των ρυθμίσεων Σφάλμα κατά την αποθήκευση των ρυθμίσεων - Σφάλμα κατά την αποθήκευση των διακομιστών SMP Σφάλμα κατά την αποθήκευση του κωδικού πρόσβασης χρήστη - Σφάλμα κατά την αποθήκευση διακομιστών XFTP Σφάλμα κατά την αποστολή της πρόσκλησης Σφάλμα κατά την αποστολή του μηνύματος Σφάλμα κατά τη ρύθμιση της διεύθυνσης @@ -1685,7 +1644,6 @@ Οι ειδοποιήσεις θα σταματήσουν να λειτουργούν μέχρι να επανεκκινήσεις την εφαρμογή. μη συγχρονισμένο Δεν υπάρχουν μη αναγνωσμένες συνομιλίες - Χωρίς αναγνωριστικά χρήστη. Τώρα οι διαχειριστές μπορούν:\n- να διαγράφουν τα μηνύματα των μελών.\n- να απενεργοποιούν μέλη (ρόλος παρατηρητή) παρατηρητής κλειστό` @@ -1706,7 +1664,6 @@ Μπορούν να σταλούν μόνο 10 εικόνες ταυτόχρονα Μπορούν να σταλούν μόνο 10 βίντεο ταυτόχρονα Μόνο οι ιδιοκτήτες του chat μπορούν να αλλάξουν τις προτιμήσεις. - Μόνο οι συσκευές αποθηκεύουν προφίλ χρηστών, επαφές, ομάδες και μηνύματα. Διαγραφή μόνο της συνομιλίας Μόνο οι ιδιοκτήτες ομάδων μπορούν να αλλάξουν τις προτιμήσεις της ομάδας. Μόνο οι ιδιοκτήτες ομάδων μπορούν να ενεργοποιήσουν αρχεία και πολυμέσα. @@ -1749,7 +1706,6 @@ Άνοιξε νέα ομάδα Άνοιγμα θύρας στο τείχος προστασίας Άνοιξε τις Ρυθμίσεις Safari / Ιστοσελίδες / Μικρόφωνο και στη συνέχεια επέλεξε Να επιτρέπεται για το localhost. - Άνοιγμα ρυθμίσεων διακομιστή Άνοιγμα ρυθμίσεων Άνοιξε το SimpleX Chat για να αποδεχθείς την κλήση Άνοιξε για να αποδεχθείς @@ -1771,8 +1727,6 @@ άλλο Άλλο άλλα σφάλματα - Άλλοι διακομιστές SMP - Άλλοι διακομιστές XFTP ιδιοκτήτης ιδιοκτήτες Κωδικός πρόσβασης @@ -1792,10 +1746,8 @@ Επικόλληση συνδέσμου Επικόλλησε το σύνδεσμο για να συνδεθείς! Επικόλλησε το σύνδεσμο που έλαβες - Επικόλλησε το σύνδεσμο που έλαβες για να συνδεθείς με την επαφή σου… από άκρη-σε-άκρη εκκρεμής - Εκκρεμής Εκκρεμής σε αναμονή έγκρισης Εκκρεμής κλήση @@ -1838,7 +1790,6 @@ Προετοιμασία λήψης Προετοιμασία μεταφόρτωσης Διατήρηση του τελευταίου πρόχειρου μηνύματος, με τα συνημμένα. - Προκαθορισμένος διακομιστής Διεύθυνση προκαθορισμένου διακομιστή Προκαθορισμένοι διακομιστές Προκαθορισμένοι διακομιστές @@ -1846,7 +1797,6 @@ Προηγούμενοι συνδεδεμένοι διακομιστές Προστασία της ιδιωτικότητας των πελατών σου. Πολιτική απορρήτου και όροι χρήσης. - Επαναπροσδιορισμός της ιδιωτικότητας Απόρρητο & ασφάλεια Οι ιδιωτικές συνομιλίες, οι ομάδες και οι επαφές σου δεν είναι προσβάσιμες στους χειριστές του διακομιστή. Ιδιωτικά ονόματα αρχείων @@ -2057,7 +2007,6 @@ Κλιμάκωση στην οθόνη Σάρωση κωδικού Σάρωση από κινητό - (σάρωσε ή επικόλλησε από το πρόχειρο) Σάρωση / Επικόλληση συνδέσμου Σάρωσε τον κωδικό QR από τον υπολογιστή %s συνδέθηκε @@ -2242,9 +2191,7 @@ Αργή λειτουργία Μικρές ομάδες (μέγιστο 20 άτομα) Διακομιστής SMP - Διακομιστές SMP Διακομιστής μεσολάβησης SOCKS - Διακομιστής μεσολάβησης SOCKS Ρυθμίσεις διακομιστή μεσολάβησης SOCKS Απαλό Κάποιο/α αρχείο/α δεν εξήχθησαν @@ -2361,9 +2308,7 @@ Προειδοποίηση: η έναρξη συνομιλίας σε πολλαπλές συσκευές δεν υποστηρίζεται και θα προκαλέσει σφάλματα στην παράδοση των μηνυμάτων. Προειδοποίηση: ενδέχεται να χάσεις ορισμένα δεδομένα! Διακομιστές WebRTC ICE - Δεν αποθηκεύουμε καμία από τις επαφές ή τα μηνύματά σου (αφού παραδοθούν) στους διακομιστές. εβδομάδες - Καλωσόρισες! Καλωσόρισες %1$s! Μήνυμα καλωσορίσματος Μήνυμα καλωσορίσματος @@ -2376,7 +2321,6 @@ Κατά τη σύνδεση κλήσεων ήχου και βίντεο. Όταν η IP είναι κρυφή Όταν είναι ενεργοποιημένοι περισσότεροι από ένας χειριστές, κανένας από αυτούς δεν διαθέτει μεταδεδομένα για να μάθει ποιος επικοινωνεί με ποιον. - Όταν κάποιος ζητήσει να συνδεθεί, μπορείς να αποδεχτείς ή να απορρίψεις το αίτημα. Όταν μοιράζεσε ένα ανώνυμο προφίλ με κάποιον, αυτό το προφίλ θα χρησιμοποιείται για τις ομάδες στις οποίες σε προσκαλούν. WiFi Θα ενεργοποιηθεί στις άμεσες συνομιλίες! @@ -2392,7 +2336,6 @@ Λανθασμένο κλειδί ή άγνωστη διεύθυνση τμήματος αρχείου - πιθανότατα το αρχείο έχει διαγραφεί. Λανθασμένη φράση πρόσβασης! Διακομιστής XFTP - Διακομιστές XFTP ναι Ναι Ναι @@ -2422,19 +2365,16 @@ Μπορείς να το αλλάξεις στις ρυθμίσεις Εμφάνισης. Μπορείς να διαμορφώσεις τους διακομιστές μέσω των ρυθμίσεων. Μπορείς να αντιγράψεις και να μειώσεις το μέγεθος του μηνύματος για να το στείλεις. - Μπορείς να το δημιουργήσεις αργότερα Μπορείς να το ενεργοποιήσεις αργότερα μέσω των Ρυθμίσεων. Μπορείς να τις ενεργοποιήσεις αργότερα μέσω των ρυθμίσεων απορρήτου και ασφάλειας της εφαρμογής. Μπορείς να δοκιμάσεις ξανά. Μπορείς να δοκιμάσεις ξανά. Μπορείς να αποκρύψεις ή να σιγάσεις ένα προφίλ χρήστη - κράτησέ το πατημένο για να εμφανιστεί το μενού. - Μπορείς να το κάνεις ορατό στις επαφές σου στο SimpleX μέσω των Ρυθμίσεων. Μπορείς να αναφέρεις εώς και %1$s μέλη ανά μήνυμα! Μπορείς να στείλεις μηνύματα στην επαφή %1$s από τις αρχειοθετημένες επαφές. Μπορείς να ορίσεις το όνομα της σύνδεσης για να θυμάσε με ποιον μοιράστηκες το σύνδεσμο. Μπορείς να μοιραστείς ένα σύνδεσμο ή έναν κωδικό QR - οποιοσδήποτε θα μπορεί να συμμετάσχει στην ομάδα. Δεν θα χάσεις μέλη της ομάδας αν τον διαγράψεις αργότερα. Μπορείς να μοιραστείς αυτήν τη διεύθυνση με τις επαφές σου για να τους επιτρέψεις να συνδεθούν με την επαφή %s. - Μπορείς να διαμοιραστείς τη διεύθυνσή σου ως σύνδεσμο ή κωδικό QR - οποιοσδήποτε θα μπορεί να συνδεθεί μαζί σου. Μπορείς να ξεκινήσεις τη συνομιλία μέσω της εφαρμογής Ρυθμίσεις / Βάση δεδομένων ή επανεκκινώντας την εφαρμογή. Μπορείς ακόμα να δεις τη συνομιλία με την επαφή %1$s, στη λίστα των συνομιλιών. Δεν μπορείς να στείλεις μηνύματα! @@ -2446,9 +2386,7 @@ άλλαξες διεύθυνση για %s άλλαξες ρόλο για τον εαυτό σου σε %s άλλαξες το ρόλο του μέλους %s σε %s - Έχεις τον έλεγχο της συνομιλίας σου! Δεν ήταν δυνατή η επαλήθευση. Παρακαλώ, δοκίμασε ξανά. - Εσύ αποφασίζεις ποιος μπορεί να συνδεθεί. Έχεις ήδη ζητήσει σύνδεση μέσω αυτής της διεύθυνσης! Δεν έχεις συνομιλίες Πρέπει να εισάγεις τη φράση πρόσβασης κάθε φορά που ξεκινά η εφαρμογή - δεν αποθηκεύεται στη συσκευή. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 5ba89e4df5..59b99534cd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -12,7 +12,6 @@ 1 semana Se permiten los mensajes temporales pero sólo si tu contacto también los permite. Añadir servidores mediante el escaneo de códigos QR. - Añadir servidores predefinidos Todos los miembros del grupo permanecerán conectados. Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también lo permite. (24 horas) Android Keystore se usará para almacenar la frase de contraseña de forma segura después de cambiarla o reiniciar la aplicación - permitirá recibir notificaciones. @@ -77,7 +76,6 @@ ¡Consume más energía! La aplicación está siempre en segundo plano y las notificaciones se muestran de inmediato.]]> Tanto tú como tu contacto podéis eliminar los mensajes enviados de forma irreversible. (24 horas) Tanto tú como tu contacto podéis enviar mensajes temporales. - Crear Crea grupo secreto La contraseña de cifrado de la base de datos será actualizada. ID base de datos @@ -135,7 +133,6 @@ conectando (aceptado) conectando (anunciado) conexión %1$d - Conecta vía enlace / Código QR El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse! Contacto verificado el contacto dispone de cifrado de extremo a extremo @@ -157,7 +154,6 @@ Desconectado Conectado Copiado en portapapeles - Crea enlace de invitación de un uso. Escanear código QR ]]> Eliminar Eliminar @@ -188,7 +184,6 @@ ¿Eliminar la dirección\? Nombre del perfil: conectando… - Descentralizada La base de datos será cifrada. Crear enlace de grupo Eliminar enlace @@ -225,7 +220,6 @@ ¿Conectar mediante dirección de contacto? ¿Te unes al grupo? ¿Conectar mediante enlace de invitación? - Conectar conectado conectando conectando… @@ -315,14 +309,12 @@ Cómo usar la sintaxis markdown en modo incógnito mediante enlace de un solo uso Dirección de contacto SimpleX - Error al guardar servidores SMP Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces de SimpleX que no son de confianza aparecerán en rojo. Error al actualizar la configuración de red Error al crear dirección Error al eliminar perfil Activar Bloqueo SimpleX Enlace de invitación de un solo uso - Servidores SMP Características experimentales Error al importar base de datos Error al cambiar configuración @@ -348,8 +340,6 @@ Si has recibido un enlace de invitación a SimpleX Chat puedes abrirlo en tu navegador: Si seleccionas rechazar, el remitente NO será notificado. ¡Enlace no válido! - escanear el código QR por videollamada, o tu contacto puede compartir un enlace de invitación.]]> - muestra el código QR por videollamada, o comparte el enlace.]]> Cómo Ignorar Error al eliminar base de datos @@ -380,7 +370,6 @@ Error al guardar servidores ICE Servidores ICE (uno por línea) Nombre completo: - Tu decides quién se conecta. Colgar Archivos y multimedia ¡Grupo no encontrado! @@ -436,10 +425,8 @@ Invitar al grupo Para verificar el cifrado de extremo a extremo con tu contacto, compara (o escanea) el código en ambos dispositivos. La base de datos no está cifrada. Escribe una contraseña para protegerla. - Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no están duplicadas. Notificaciones instantáneas Configuración avanzada - Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes. Cómo afecta a la batería Instantánea Unirme @@ -469,7 +456,6 @@ Abrir en aplicación móvil, después pulsa Conectar en la aplicación.]]> Marcar como leído Marcar como no leído - Código QR no válido ¡Código de seguridad incorrecto! Sintaxis Markdown No @@ -501,7 +487,6 @@ Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas. Se requieren hosts .onion para la conexión \nRecuerda: no podrás conectarte a servidores que no tengan dirección .onion. - Inmune al spam Videollamada entrante has salido has cambiado de servidor @@ -595,7 +580,6 @@ secreto Abrir SimpleX Chat para aceptar llamada Reiniciar a valores predetarminados - Pendiente Notificaciones periódicas Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes. Reinicia la aplicación para crear un perfil nuevo. @@ -604,7 +588,6 @@ imagen del perfil No se permiten mensajes de voz. Proteger pantalla de la aplicación - repositorio GitHub .]]> Grabar mensaje de voz ha expulsado a %1$s Enviar previsualizacion de enlaces @@ -622,7 +605,6 @@ Rechazar Obligatorio Guardar y notificar contactos - Cualquiera puede alojar servidores. Rol Intervalo PING Contador PING @@ -635,7 +617,6 @@ Mensaje en vivo Escanear código QR Enviar - (escanear o pegar desde el portapapeles) Espacio reservado para la imagen del perfil Código QR Consultas y sugerencias @@ -646,7 +627,6 @@ respuesta recibida… confirmación recibida… Periódico - Privacidad redefinida Rechazar Abrir Llamada pendiente @@ -688,7 +668,6 @@ Escanea el código de seguridad desde la aplicación de tu contacto. Guardar servidores Escanear código QR - Servidor predefinido Guardar y notificar contacto ¿Guardar preferencias\? Guardar y notificar grupo @@ -696,14 +675,11 @@ La aplicación recoge nuevos mensajes periódicamente lo que consume un pequeño porcentaje de batería al día. La aplicación no usa notificaciones push por tanto los datos de tu dispositivo no se envían a los servidores push. Bloqueo SimpleX Desbloquear - Este texto está disponible en Configuración La dirección de recepción pasará a otro servidor. El cambio se completará cuando el remitente esté en línea. Bloqueo SimpleX Usando servidores SimpleX Chat. Aislamiento de transporte tachado - Abrir SimpleX - Proxy SOCKS Temas Parar Esta acción es irreversible. Tu perfil, contactos, mensajes y archivos se perderán. @@ -724,15 +700,11 @@ Cámara ¡El contacto con el que has compartido este enlace NO podrá conectarse! Mostrar código QR - ¡El enlace no es un enlace de conexión válido! - ¡El código QR no es un enlace! Compartir enlace de un uso - ¿Actualizar el modo de aislamiento de transporte\? Altavoz activado ¡La conexión que has aceptado se cancelará! La base de datos no funciona correctamente. Pulsa para conocer más El mensaje será marcado como moderado para todos los miembros. - El futuro de la mensajería Esta acción es irreversible. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán. Esta acción es irreversible. Los mensajes enviados y recibidos anteriores a la selección serán eliminados. Podría tardar varios minutos. Esta configuración se aplica a los mensajes del perfil actual @@ -743,7 +715,6 @@ Inciar chat nuevo Para exportar, importar o eliminar la base de datos debes parar SimpleX. Mientra tanto no podrás enviar ni recibir mensajes. ¡Gracias por instalar SimpleX Chat! - Para proteger tu privacidad, SimpleX usa identificadores distintos para cada uno de tus contactos. Para proteger tu información, activa el Bloqueo SimpleX. \nSe te pedirá que completes la autenticación antes de activar esta función. Para actualizar la configuración el cliente se reconectará a todos los servidores. @@ -766,15 +737,12 @@ ¿Usa proxy SOCKS\? Usar hosts .onion simplexmq: v%s (%2s) - La plataforma de mensajería y aplicaciones que protege tu privacidad y seguridad. - Sin identificadores de usuario. Este grupo ya no existe. Establecer 1 día ¡Agradecimiento a los colaboradores! Puedes contribuir a través de Weblate. ¡Agradecimiento a los colaboradores! Puedes contribuir a través de Weblate. Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC. Aislamiento de transporte - (para compartir con tu contacto) Activar sonido %s está verificado %s no está verificado @@ -807,7 +775,6 @@ formato de mensaje desconocido Error al conectar con el servidor usado para recibir mensajes de esta conexión: (error: %1$s). Prueba no superada en el paso %s. - Pulsa para iniciar chat nuevo Compartir mensaje… Compartir medios… Mostrar @@ -839,9 +806,6 @@ Mensajes de voz no permitidos. Comprobar la seguridad de la conexión ¡Ya estás conectado con %1$s. - ¡Bienvenido! - Tu perfil será enviado -\na tu contacto Servidores ICE Has rechazado la invitación del grupo. has cambiado el rol de %s a %s @@ -852,7 +816,6 @@ Servidores WebRTC ICE %1$s quiere conectarse contigo mediante Ya tienes un perfil con este nombre mostrado. Por favor, selecciona otro nombre. - Abrir en aplicación móvil.]]> ponerte en contacto con los desarrolladores de SimpleX Chat para consultas y para recibir actualizaciones.]]> eres observador Puedes usar la sintaxis markdown para dar formato a tus mensajes: @@ -875,7 +838,6 @@ Esperando imagen Mensaje de voz (%1$s ) Si disponibles - No almacenamos ninguno de tus contactos o mensajes (una vez entregados) en los servidores. Has sido invitado a un grupo. Únete para conectar con sus miembros. has expulsado a %1$s Tú: %1$s @@ -889,15 +851,12 @@ Has invitado a tu contacto Te conectarás al grupo cuando el dispositivo anfitrión esté en línea, por favor espera o revisa más tarde. Configuración - Servidores SMP - ¡Tú controlas tu chat! Tu perfil, contactos y mensajes se almacenan en tu dispositivo. esperando respuesta… esperando confirmación… Cuando la aplicación se está ejecutando Videollamada Llamadas - Servidores ICE Privacidad Mis datos Base de datos @@ -933,7 +892,6 @@ Equipo SimpleX Mis perfiles Mi dirección SimpleX - Tu servidor Dirección de tu servidor Tu perfil actual Tu perfil se almacena en tu dispositivo y se comparte sólo con tus contactos. Los servidores SimpleX no pueden ver tu perfil. @@ -1011,17 +969,11 @@ El vídeo se recibirá cuando el contacto termine de subirlo. Sólo se pueden enviar 10 vídeos de forma simultánea Esperando el vídeo - Error al guardar servidores SMP - Error al cargar servidores XFTP - Error al cargar servidores SMP - Asegúrate de que las direcciones del servidor XFTP tienen el formato correcto, están separadas por líneas y no están duplicadas. El servidor requiere autorización para subir, comprueba la contraseña. Comparar archivo Crear archivo Eliminar archivo Subir archivo - Servidores XFTP - Servidores XFTP Puerto puerto %d Usar hosts .onion debe estar a No si el proxy SOCKS no los admite.]]> @@ -1083,8 +1035,6 @@ Permites que tus contactos te llamen. Llamadas y videollamadas Las llamadas y videollamadas no están permitidas. - " -\nDisponible en v5.1" Tanto tú como tu contacto podéis realizar llamadas. Sólo tú puedes realizar llamadas. Sólo tu contacto puede realizar llamadas. @@ -1107,7 +1057,6 @@ Guía de Usuario.]]> Enlace de un solo uso Dirección SimpleX - Cuando alguien solicite conectarse podrás aceptar o rechazar su solicitud. Compartir dirección… Deja un mensaje de bienvenida… SimpleX @@ -1124,8 +1073,6 @@ Tema oscuro Personalizar tema Deja un mensaje de bienvenida… (opcional) - Crea una dirección para que otras personas puedan conectar contigo. - No crear dirección SimpleX ¡Hola! \nConecta conmigo a través de SimpleX Chat: %s Importar tema @@ -1136,14 +1083,12 @@ La actualización del perfil se enviará a tus contactos SimpleX. Mensaje recibido Guardar configuración de dirección SimpleX - Puedes compartir tu dirección como enlace o código QR para que cualquiera pueda conectarse contigo. ¿Guardar configuración\? Secundario Mensaje enviado Dejar de compartir ¿Dejar de compartir la dirección\? Colores de la interfaz - Puedes crearla más tarde ¿Compartir la dirección con los contactos SimpleX? Compartir con contactos SimpleX Título @@ -1329,11 +1274,9 @@ Este grupo tiene más de %1$d miembros, no se enviarán confirmaciones de entrega. ¿Conectar directamente\? La solicitud se enviará a este miembro del grupo. - Conectar en incógnito Permitir Abrir configuración Compartirás un perfil nuevo aleatorio. - Pega el enlace recibido para conectar con tu contacto… El perfil %1$s será compartido. Desactivar notificaciones Sin llamadas en segundo plano. @@ -1507,7 +1450,6 @@ Error aplicación error al mostrar el contenido error al mostrar mensaje - Puedes hacerlo visible para tus contactos de SimpleX en Configuración. El historial no se envía a miembros nuevos. Reintentar Cámara no disponible @@ -1858,8 +1800,6 @@ Suscripciones ignoradas Para ser notificado sobre versiones nuevas, activa el chequeo periódico para las versiones Estable o Beta. Beta - Servidores SMP configurados - Servidores XFTP configurados Servidores conectados Conectando Perfil actual @@ -1903,8 +1843,6 @@ Descargado Servidor SMP Aún no hay conexión directa, los mensajes son reenviados por el administrador. - Otros servidores SMP - Otros servidores XFTP Pegar enlace / Escanear Mostrar porcentaje Desactivar @@ -1946,7 +1884,6 @@ Errores de descarga duplicados caducados - Abrir configuración del servidor otros otros errores Como proxy @@ -2226,7 +2163,6 @@ ¡El chat ya existe! Acerca de los operadores La aplicación siempre funciona en segundo plano - cifrados de extremo a extremo y con seguridad postcuántica en mensajes directos.]]> ¡Mensaje demasiado largo! Simplex Chat y Flux han acordado incluir en la aplicación servidores operados por Flux. Activar registros diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml index 0051298873..65f1769787 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -16,7 +16,6 @@ استفاده از پروفایل ناشناس جدید در حال باز کردن پایگاه داده… پروفایل شما به مخاطبی که این لینک را از او دریافت کردید، فرستاده خواهد شد. - اتصال ناشناس شما یک مسیر نامعتبر فایل به اشتراک گذاشتید. موضوع را به توسعه‌دهندگان برنامه گزارش دهید. هنوز از دریافت فایل پشتیبانی نمی‌شود قالب پیام نامعتبر @@ -32,7 +31,6 @@ به گروه می‌پیوندید؟ استفاده از پروفایل کنونی به تمام اعضای گروه متصل خواهید شد. - متصل شدن مسیر نامعتبر فایل برنامه از کار افتاد در حال تلاش برای اتصال به سرور مورد استفاده برای دریافت پیام‌ها از این مخاطب (خطا: %1$s). @@ -66,8 +64,6 @@ توصیف لینک کامل لینک‌های SimpleX - خطا در ذخیره کردن سرورهای SMP - خطا در ذخیره کردن سرورهای XFTP خطای تجدید مذاکره رمزنگاری اتصال %1$d اتصال برقرار شد @@ -82,7 +78,6 @@ دعوت یک بار مصرف SimpleX در حال اتصال… باز کردن لینک در مرورگر ممکن است حریم خصوصی و امنیت اتصال را کاهش دهد. لینک‌های SimpleX غیر قابل اعتماد به رنگ قرمز خواهند بود. - خطا در بارگیری سرورهای XFTP خطا در ایجاد پروفایل! خطا در تعویض پروفایل! توقف اتصال @@ -94,7 +89,6 @@ فرستنده انتقال فایل را لغو کرد. شما از قبل به %1$s متصل هستید. خطا در اتصال (تصدیق) - خطا در بارگیری سرورهای SMP عدم موفقیت در بارگیری چت‌ها لطفا برنامه را به‌روزرسانی کنید و با توسعه‌دهندگان تماس بگیرید. نام نمایشی همسان! @@ -106,13 +100,11 @@ مخاطب از قبل وجود دارد لینک اتصال نامعتبر لطفا بررسی کنید که از لینک صحیح استفاده کردید یا از مخاطبتان بخواهید لینک دیگری برایتان بفرستد. - مطمئن شوید قالب نشانی‌های سرور SMP صحیح است، در خط‌های جدا نوشته شده و تکرار نشده‌اند. خطا در به‌روزرسانی پیکربندی شبکه عدم موفقیت در بارگیری چت نام نمایشی نامعتبر! شما یک پروفایل چت با نام نمایشی یکسان دارید، لطفا نام دیگری انتخاب کنید. خطا در ایجاد نشانی - مطمئن شوید قالب نشانی‌های سرور XFTP صحیح است، در خط‌های جدا نوشته شده و تکرار نشده‌اند. خطا در پذیرش درخواست مخاطب فرستنده ممکن است درخواست اتصال را حذف کرده باشد. خطا در حذف یادداشت‌های خصوصی @@ -227,7 +219,6 @@ پیام برای تمام اعضا به عنوان حذف شده علامت‌گذاری خواهد شد. توقف دریافت فایل متوقف خواهد شد. - خوش آمدید! خطا در کدبرداری ارسال پیام مستقیم برای اتصال لطفا تا زمانی که فایل در حال بارگیری از موبایل متصل است، منتظر باشید. @@ -237,7 +228,6 @@ ارسال پیام ناپدید شونده لینک دعوت یک‌بارمصرف ایجاد گروه محرمانه - (برای اشتراک‌گذاری با مخاطبتان) اگر لینک دعوت SimpleX Chat دریافت کردید، می‌توانید آن را در مرورگر خود باز کنید: ورود کد عبور %d ثانیه @@ -297,7 +287,6 @@ ارسال غیرمجاز خوانده نشده خوش آمدید، %1$s! - این متن در تنظیمات دردسترس است چت با توسعه‌دهندگان چت فیلتر شده‌ای نیست به %1$s متصل شوید؟ @@ -370,13 +359,11 @@ شما به گروه دعوت شده‌اید پیوستن به عنوان %s جستجو یا الصاق لینک SimpleX - برای شروع چت جدید ضربه بزنید اشتراک‌گذاری پیام… در انتظار تصویر پیام صوتی… تعیین نام مخاطب… قطع شد - در حال انتظار نشانی‌ دریافت تغییر کند؟ تغییر نشانی‌ لغو خواهد شد. نشانی‌ دریافت پیشین استفاده خواهد شد. مذاکره مجدد @@ -384,7 +371,6 @@ تایید بازنشاندن اسکن کد QR - (اسکن یا الصاق از کلیپ بورد) (تنها ذخیره شده توسط اعضای گروه) فعال کردن دسترسی دوربین اجازه داده نشد! @@ -403,10 +389,8 @@ ضبط پیام صوتی ارسال پیام بدون جزئیات - اتصال به وسیله لینک / کد QR دوربین موجود نیست تصویر - ایجاد لینک دعوت یک‌بارمصرف برای پرسش هر سوال و دریافت اطلاعات به توسعه‌دهندگان SimpleX Chat متصل شوید.]]> افزودن مخاطب: برای ایجاد لینک دعوت جدید، یا اتصال از طریق لینکی که دریافت کردید.]]> اتصال از طریق لینک @@ -477,13 +461,11 @@ یا کد QR را اسکن کنید تلاش مجدد عبارت عبور و اکسپورت پایگاه داده - افزودن سرورهای از پیش تنظیم شده افزودن به دستگاه دیگر حذف سرور چگونه از سرورهای خود استفاده کنید تصویر پیش‌نمایش لینک پروفایل‌های چت شما - سرورهای SMP SimpleX Chat را برای ترمینال نصب کنید در GitHub ستاره بدهید همکاری کنید @@ -505,23 +487,17 @@ کمک لوگوی SimpleX ایمیل - این لینک، یک لینک اتصال معتبر نیست! درخواست اتصال ارسال شد! وقتی دستگاه میزبان گروه آنلاین شد، به گروه متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید! - لینکی که دریافت کردید را الصاق کنید تا به مخاطبتان متصل شوید… پروفایل شما %1$s به اشتراک گذاشته خواهد شد. برای اتصال، مخاطبتان می‌تواند کد QR را اسکن یا از لینک در برنامه استفاده کند. اگر نمی‌توانید ملاقات حضوری داشته باشید، کد QR را در یک تماس تصویری نمایش دهید، یا لینک را به اشتراک بگذارید. - می‌توانید نشانی خود را به صورت لینک یا کد QR به اشتراک بگذارید - هر کسی می‌تواند به شما متصل شود. - وقتی اشخاص درخواست اتصال کنند، شما می‌توانید آن را بپذیرید یا رد کنید. یا این کد را نشان دهید می‌توانید دوباره لینک دعوت را در جزئیات اتصال مشاهده کنید. نگه‌داشتن در حال ایجاد لینک… لینکی که دریافت کردید را الصاق کنید متن الصاقی شما یک لینک SimpleX نیست. - سرور شما - سرور از پیش تنظیم شده نشانی‌ سرور نامعتبر! به‌کارگیری برای اتصال‌های جدید کد QR نامعتبر @@ -530,13 +506,11 @@ علامت‌گذاری به عنوان تایید شده %s تایید نشده است برای تایید رمزنگاری انتها به انتها، روی دستگاه‌های خود، کد را با مخاطبتان مقایسه(یا اسکن) کنید. - سرورهای XFTP شما روش استفاده در حال استفاده از سرورهای SimpleX Chat. تنظیم سرورهای ICE می‌خواهد به شما متصل شود! وقتی دستگاه مخاطبتان آنلاین شد، متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید! - کد QR را در تماس تصویری اسکن کنید، یا مخاطبتان می‌تواند یک لینک دعوت به اشتراک بگذارد.]]> دعوت استعمال نشده نگه داشته شود؟ نشانی‌ SimpleX شما مارکداون در پیام‌ها @@ -549,14 +523,11 @@ عدم موفقیت آزمایش سرور! برخی از سرورها در تست ناموفق بودند: اسکن کد QR سرور - سرورهای SMP شما - سرورهای XFTP از سرورهای SimpleX Chat استفاده شود؟ سرورهای WebRTC ICE ذخیره شده حذف خواهند شد. سرورهای ICE شما اتصال الصاق - باز کردن در برنامه موبایل کلیک کنید.]]> افزودن مخاطب نشانی‌ SimpleX پاک‌سازی تایید @@ -571,7 +542,6 @@ لازم است مخاطبتان آنلاین باشد تا اتصال کامل شود. \nمی‌توانید این اتصال را لغو و مخاطب را حذف کنید (و بعدا با یک لینک جدید امتحان کنید). نشانی‌ SimpleX - این کد QR یک لینک نیست! راهنمای کاربر.]]> این رشته متن، یک لینک اتصال نیست! کدی که اسکن کردید یک کد QR لینک SimpleX نیست. @@ -579,10 +549,7 @@ تصویر پروفایل بیشتر نمایش کد QR - کد QR نامعتبر وقتی درخواست اتصال شما پذیرفته شد، متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید! - کد QR را در تماس تصویری نمایش دهید، یا لینک را به اشتراک بگذارید.]]> - پروفایل چت شما ارسال خواهد شد \nبه مخاطبتان اطلاعات بیشتر اگر بعدا نشانی‌ خود را حذف کنید، مخاطبان خود را از دست نخواهید داد. این لینک دعوت یک‌بارمصرف را به اشتراک بگذارید @@ -640,7 +607,6 @@ اگر تایید کنید، سرورهای پیام‌رسانی خواهند توانست نشانی‌ IP، و فراهم‌کننده شما را ببینند - و این که به چه سرورهایی متصل می‌شوید. مطمئن شوید قالب نشانی‌های سرور WebRTC ICE صحیح است، در خط‌های جدا نوشته شده و تکرار نشده‌اند. برای هر مخاطب و عضو گروه استفاده خواهد شد. \nلطفا توجه داشته باشید: اگر اتصال‌های زیادی داشته باشید، مصرف باتری و ترافیک شما می‌تواند به شکل قابل توجه بالاتر باشد و بعضی اتصال‌ها ممکن است با موفقیت انجام نشوند.]]> - حالت انزوای ترابری به روز شود؟ ویرایش تصویر ایجاد نشانی‌ SimpleX اشتراک‌گذاری با مخاطبان @@ -652,7 +618,6 @@ حذف نشانی سلام! \nبه وسیله SimpleX Chat به من متصل شوید: %s - نشانی ایجاد نشود ادامه پروفایل فعلی شما نام کامل: @@ -664,8 +629,6 @@ ذخیره کلمه عبور پروفایل اشتراک‌گذاری نشانی متوقف شود؟ توقف اشتراک‌گذاری - می‌توانید بعدا آن را ایجاد کنید - می‌توانید آن را از طریق تنظیمات برای مخاطبان SimpleX خود قابل رویت کنید. نام پروفایل: حذف تصویر ذخیره کردن و اطلاع به اعضای گروه @@ -677,7 +640,6 @@ کلمه عبور پروفایل پنهان به پروفایل خود نشانی اضافه کنید، تا مخاطبانتان بتوانند آن را با اشخاص دیگر به اشتراک بگذارند. به‌روزرسانی پروفایل به مخاطبانتان ارسال خواهد شد. نشانی با مخاطبان به اشتراک گذاشته شود؟ - یک نشانی ایجاد کنید تا اشخاص بتوانند به شما متصل شوند. پروفایل شما روی دستگاهتان ذخیره شده و فقط با مخاطبانتان به اشتراک گذاشته می‌شود. سرورهای SimpleX قادر به دیدن پروفایل شما نیستند. خطا در ذخیره کردن کلمه عبور کاربر تماس‌های صوتی و تصویری @@ -727,15 +689,11 @@ اکسپورت پایگاه داده پروفایل چت حذف شود؟ نام خود را وارد کنید: - ایجاد روش استفاده از مارکداون می‌توانید از مارکداون برای آرایش پیام‌ها استفاده کنید: تماس رد شده تماس پذیرفته - نامتمرکز پروفایل خود را ایجاد کنید - مخزن GitHub ما.]]> - استفاده از چت بهترین گزینه برای باتری. شما اعلان‌ها را فقط وقتی دریافت می‌کنید که برنامه در حال اجراست (بدون سرویس پس‌زمینه).]]> تماس‌ها روی صفحه قفل: پذیرفتن @@ -771,11 +729,9 @@ حذف پایگاه داده پایگاه داده چت ایمپورت شد %d فایل با اندازه کل %s - فقط دستگاه‌های کلاینت پروفایل‌های کاربری، مخاطبان، گروه‌ها و پیام‌ها را ذخیره می‌کنند. نادیده گرفتن بلوتوث وارد کردن پایگاه داده - شما تصمیم می‌گیرید که چه کسی می‌تواند متصل شود. تماس از پیش پایان یافته! هش پیام ناصحیح پذیرفتن خودکار تصاویر @@ -786,18 +742,15 @@ ارسال رسید برای %d گروه فعال است ارسال رسید برای %d گروه غیرفعال است حمایت از SimpleX Chat - پروکسی SOCKS استفاده از کامپیوتر آرشیو پایگاه داده جدید آرشیو پایگاه داده قدیمی خطا در شروع چت - مصونیت در برابر هرزنامه چگونه کار می‌کند تماس تصویری گوشی بلندگو هدفون‌ها - آینده پیام‌رسانی پایان یافت خطا در باز کردن مرورگر عبارت عبور برای اکسپورت را تعیین کنید @@ -808,7 +761,6 @@ چت متوقف شده است خطا در حذف پایگاه داده چت خطا در ایمپورت کردن پایگاه داده چت - شما چت خود را کنترل می‌کنید! پروفایل، مخاطبان و پیام‌های تحویل داده شده شما روی دستگاهتان ذخیره می‌شوند. پروفایل فقط با مخاطبانتان به اشتراک گذاشته می‌شود. نام نمایشی نمی‌تواند شامل نویسه‌های فاصله باشد. @@ -823,7 +775,6 @@ تعیین عبارت عبور پایگاه داده استفاده از عبارت عبور تصادفی تماس صوتی - سرورهای ICE شما تماس در جریان است شناسه پیام ناصحیح حریم خصوصی و امنیت @@ -839,7 +790,6 @@ آن‌ها در تنظیمات مخاطب و گروه قابل جایگزینی هستند. گروه‌های کوچک (حداکثر ۲۰) تنظیمات - هیچ شناسه کاربری وجود ندارد اعلان‌های خصوصی عبارت عبور تصادفی در تنظیمات به صورت متن آشکار ذخیره می‌شود. \nمی‌توانید بعدا آن را تغییر دهید. @@ -858,7 +808,6 @@ کد عبور تغییر نکرد! ایجاد پروفایل مورب - ما هیچکدام از مخاطبان و پیام‌های(وقتی تحویل داده شدند) شما را روی سرورها ذخیره نمی‌کنیم. رنگی محرمانه در حال تماس… @@ -882,7 +831,6 @@ اتصال شبکه آیکون برنامه پایگاه داده چت - بن‌سازه پیام‌رسانی و کاربردی که از حریم خصوصی و امنیت شما محافظت می‌کند. گزینه خوب برای باتری. سرویس پس‌زمینه هر ۱۰ دقیقه پیام‌ها را بررسی می‌کند. ممکن است تماس‌ها یا پیام‌های ضروری را از دست دهید.]]> پیام‌های نادیده گرفته شده مرورگر وب پیش‌فرض برای تماس‌ها لازم است. لطفا مرورگر پیش‌فرض را در سیستم تنظیم کنید، و اطلاعات بیشتر را با توسعه‌دهندگان به اشتراک بگذارید. @@ -919,7 +867,6 @@ اعطای اجازه‌ها در تنظیمات این مجوز را در تنظیمات اندروید پیدا و به صورت دستی آن را اعطا کنید. باز کردن تنظیمات - هر کسی می‌تواند سرویس‌دهنده میزبانی کند. رسیدها غیرفعال شوند؟ فعال کردن (نگه‌داشتن مقدارهای جایگزین شده) اعطای اجازه‌ها @@ -927,8 +874,6 @@ دوربین دوربین و میکروفون اعطای اجازه‌ها برای برقراری تماس‌ها - تعریف مجدد حریم خصوصی - برای حفظ حریم خصوصی شما، SimpleX از شناسه‌های جداگانه برای هر یک از مخاطبان شما استفاده می‌کند. از باتری بیشتر استفاده می‌کند! سرویس پس‌زمینه همیشه در حال اجراست - اعلان‌ها به محض موجود شدن، نمایش داده می‌شوند.]]> وقتی می‌تواند اتفاق بیفتد که: \n۱. پیام‌ها در کلاینت فرستنده بعد از ۲ روز یا روی سرور بعد از ۳۰ روز منقضی شده باشند. @@ -1339,8 +1284,6 @@ تنظیمات گفت‌و‌گو فایل‌ها و رسانه تماس‌های صوتی/تصویری - " -\nموجود در نسخه 5.1" به مخاطبان خود اجازه ارسال پیام‌های صوتی می‌دهید. فقط زمانی اجازه حذف پیام‌ها به صورت غیرقابل برگشت را می‌دهید که مخاطب شما این اجازه را به شما بدهد. (۲۴ ساعت) پیام‌های ناپدید شونده ممنوع است. @@ -1982,7 +1925,6 @@ باز کردن چت جدید باز کردن گروه جدید به منوی تنظیمات سافاری / وب‌سایت‌ها / و سپس میکروفن رفته و گزینه \"اجازه دادن برای localhost\" را انتخاب کنید. - باز کردن تنظیمات سرور باز کردن لینک باز کردن لینک‌ها از لیست چت‌ها باز کردن برای پذیرش @@ -1997,8 +1939,6 @@ یا به‌طور خصوصی به اشتراک بگذارید سایر سایر خطاها - سایر سرورهای SMP - سایر سرورهای XFTP عبارت عبور در کی‌استور قابل خواندن نیست، لطفاً آن را به‌صورت دستی وارد کنید. این ممکن است پس از یک به‌روزرسانی سیستم که با برنامه سازگار نیست، اتفاق افتاده باشد. اگر این مورد نیست، لطفاً با توسعه‌دهندگان تماس بگیرید. عبارت عبور در مخزن کلید قابل خواندن نیست. این ممکن است پس از به‌روزرسانی سیستم که با برنامه سازگار نیست، اتفاق افتاده باشد. اگر این طور نیست، لطفا با توسعه دهندگان تماس بگیرید. کلمه عبور @@ -2152,7 +2092,6 @@ با استفاده از SimpleX Chat شما موافقت می‌کنید که:\n- فقط محتوای قانونی را در گروه‌های عمومی ارسال کنید.\n- به سایر کاربران احترام بگذارید - از ارسال هرزنامه خودداری کنید. تماس با یک مخاطب استفاده شود - آن را به صورت حضوری یا از طریق هر پیام‌رسانی به اشتراک بگذارید.]]> - به صورت رمزنگاری انتها به انتهاو با امنیت پساکوانتومی در پیام‌های مستقیم ارسال می‌شوند.]]> %s.]]> %s.]]> رمزنگاری انتها به انتها محافظت می‌شوند.]]> @@ -2175,8 +2114,6 @@ شرایط استفاده شرایط در: %s پذیرفته خواهد شد. شرایط به‌طور خودکار برای اپراتورهای فعال در: %s پذیرفته خواهد شد. - سرورهای SMP پیکربندی‌شده - سرورهای XFTP پیکربندی‌شده سرورهای متصل شده اتصال نیاز به تجدید مذاکره رمزنگاری دارد. اتصالات diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index e5e7c525a5..5036d874d7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -50,7 +50,6 @@ Yhteyden aikakatkaisu Kontaktin asetukset Jatka - Luo osoite, jolla ihmiset voivat ottaa sinuun yhteyttä. Tietokannan salauksen tunnuslause päivitetään ja tallennetaan Keystoreen. Poista keskusteluprofiili käyttäjälle poistettu @@ -96,7 +95,6 @@ Yhdistetäänkö kontaktilinkin kautta\? Liitytäänkö ryhmään? Yhdistetäänkö kutsulinkin kautta\? - Yhdistä yhdistää Kuvaus Yhdistä @@ -106,7 +104,6 @@ Dekoodauksen virhe peruuta linkin esikatselu Tietoja SimpleX:stä - Hajautettu Ääni pois päältä Vaihda rooli Poista kaikilta @@ -166,7 +163,6 @@ Poista ryhmä\? Tumma Tunnistautuminen epäonnistui - Lisää esiasetettuja palvelimia poistettu ryhmä yhdistää yhdistäminen (hyväksytty) @@ -215,8 +211,6 @@ Chat on pysähtynyt Vahvista uusi tunnuslause… Poista keskusteluprofiili\? - " -\nSaatavilla v5.1:ssä" Yksityisviestit Yhdistetty Vahvista @@ -235,7 +229,6 @@ oletus (%s) Katoavat viestit Kopioitu leikepöydälle - Luo kertaluonteinen kutsulinkki tietokantaversio on uudempi kuin sovellus, mutta ei alaspäin siirtymistä: %s erilainen siirto sovelluksessa/tietokannassa: %s / %s Hyväksy yhteydenottopyynnöt automaattisesti @@ -263,7 +256,6 @@ Kontakti ja kaikki viestit poistetaan - tätä ei voi perua! Katkaistu Takaisin - Yhdistä linkillä / QR-koodilla Tyhjennä Skannaa QR-koodi.]]> Poistetaanko odottava yhteys\? @@ -272,7 +264,6 @@ Tietoja SimpleX Chatistä Tietokannan tunnuslause ja vienti Luo profiili - Luo Poista käytöstä Ääni päällä Vastaa puheluun @@ -346,11 +337,8 @@ Poista jälkeen %d tunti päivää - Virhe XFTP-palvelimien tallentamisessa Päällekkäinen näyttönimi! Virhe profiilin luomisessa! - Virhe SMP-palvelimia ladattaessa - Virhe XFTP-palvelimia ladattaessa Virhe profiilin vaihdossa! Virhe ryhmään liittymisessä Virhe käyttäjäprofiilin poistamisessa @@ -370,14 +358,12 @@ Ryhmälinkki Otetaanko automaattinen viestien poisto käyttöön\? Tiedosto vastaanotetaan, kun kontakti on online-tilassa, odota tai tarkista myöhemmin! - skannata QR-koodin videopuhelussa , tai kontaktisi voi jakaa kutsulinkin.]]> Jos päätät hylätä, lähettäjälle EI ilmoiteta. Jos syötät tämän pääsykoodin sovellusta avatessasi, kaikki sovelluksen tiedot poistetaan peruuttamattomasti! Ryhmäprofiili tallennetaan jäsenten laitteille, ei palvelimille. Tuo teema t virhe - Virhe SMP-palvelimien tallentamisessa Koko linkki Virhe verkkoasetuksia päivitettäessä Keskustelun lataaminen epäonnistui @@ -494,7 +480,6 @@ Kutsu ystäviä Hei! \nOta minuun yhteyttä SimpleX Chatin kautta: %s - Älä luo osoitetta Muokkaa kuvaa Poistu tallentamatta Virhe käyttäjän salasanan tallentamisessa @@ -548,8 +533,6 @@ Kuva Galleriasta Virheellinen linkki! - Virheellinen QR-koodi - näytä QR-koodi videopuhelussa tai jaa linkki.]]> Virheellinen palvelimen osoite! Kirjoita nimesi: Käännä kamera @@ -573,7 +556,6 @@ Kuva Sähköposti Näyttönimi ei saa sisältää välilyöntejä. - Immuuni roskapostille ja väärinkäytöksille Virhe vietäessä keskustelujen tietokantaa Piilota Konsoliin @@ -629,7 +611,6 @@ Aseta pääsykoodi SimpleX-linkit Linkin avaaminen selaimessa voi heikentää yhteyden yksityisyyttä ja turvallisuutta. Epäluotetut SimpleX-linkit näkyvät punaisina. - Varmista, että SMP-palvelinosoitteet ovat oikeassa muodossa, rivieroteltuina ja että ne eivät ole päällekkäisiä. Lähettäjä peruutti tiedoston siirron. Säännölliset ilmoitukset Viestejä vastaanotetaan… @@ -697,11 +678,9 @@ Paljasta Lähetetty viesti Vain ryhmän omistajat voivat ottaa ääniviestit käyttöön. - Vireillä Tallenna ääniviesti Lähetä katoava viesti Lähetä live-viesti - Aloita uusi keskustelu napauttamalla Lähetä Verkkoasetukset profiilikuvan paikka @@ -715,7 +694,6 @@ Itsetuho Itsetuhoutuva pääsykoodi vaihdettu! Itsetuhoutuva pääsykoodi käytössä! - SOCKS välityspalvelin Uusi tietokanta-arkisto Ei vastaanotettuja tai lähetettyjä tiedostoja Poistetaanko tunnuslause Keystoresta\? @@ -776,7 +754,6 @@ Skannaa QR-koodi Lue lisää %s on vahvistettu - SMP-palvelimet Esikatselu Tallenna sek @@ -817,7 +794,6 @@ Tallenna palvelimet Palvelintesti epäonnistui! Jotkut palvelimet epäonnistuivat testissä: - Esiasetettu palvelin Arvioi sovellus Skannaa palvelimen QR-koodi Profiilipäivitys lähetetään kontakteillesi. @@ -828,9 +804,7 @@ Tallenna asetukset\? Jutellaan SimpleX Chatissa vahvistus saatu… - GitHub-arkistostamme.]]> Säännölliset - 2-kerroksisella päästä päähän -salauksella.]]> Liitä vastaanotettu linkki Välityspalvelin suojaa IP-osoitteesi, mutta se voi tarkkailla puhelun kestoa. Avaa SimpleX Chat hyväksyäksesi puhelun @@ -845,7 +819,6 @@ Kiitos käyttäjille – osallistu Weblaten kautta! Lähetä Lupa evätty! - (skannaa tai liitä leikepöydältä) Napauta -painike Näytä QR-koodi Kertakutsulinkki @@ -888,7 +861,6 @@ Edellisen viestin tarkiste on erilainen. Live-viestit Suojaa keskusteluprofiilisi salasanalla! - Varmista, että XFTP-palvelinosoitteet ovat oikeassa muodossa, rivieroteltuina ja että ne eivät ole päällekkäisiä. SimpleX Chat -viestit SimpleX Chat -puhelut Näytä kontakti ja viesti @@ -946,10 +918,6 @@ QR-koodi Skannaa koodi alkaa… - Yksityisyys uudelleen määritettynä - Ensimmäinen alusta ilman käyttäjätunnisteita – suunniteltu yksityiseksi. - Avoimen lähdekoodin protokolla ja koodi - kuka tahansa voi käyttää palvelimia. - Ihmiset voivat ottaa sinuun yhteyttä vain jakamiesi linkkien kautta. Luo yksityinen yhteys Ilmoita siitä kehittäjille. Suojaa sovellusnäyttö @@ -1017,8 +985,6 @@ Ääniviestit kielletty! Palvelimet nykyisen keskusteluprofiilisi uusille yhteyksille Käytä palvelinta - XFTP-palvelimet - Palvelimesi Palvelimesi osoite Tätä toimintoa ei voi kumota - valittua aikaisemmin lähetetyt ja vastaanotetut viestit poistetaan. Tämä voi kestää useita minuutteja. Uusimmat @@ -1057,7 +1023,6 @@ Video vastaanotetaan, kun kontaktisi on ladannut sen. Keskustelusi Käytä SOCKS-välityspalvelinta\? - Hallitset keskustelujasi! Nykyinen profiilisi Profiilisi tallennetaan laitteeseesi ja jaetaan vain kontaktiesi kanssa. SimpleX -palvelimet eivät näe profiiliasi. Teemat @@ -1089,10 +1054,8 @@ Näytä turvakoodi Ääniviesti (%1$s) Video - Voit jakaa osoitteesi linkkinä tai QR-koodina - kuka tahansa voi muodostaa yhteyden sinuun. Voit tarkistaa päästä päähän -salauksen kontaktisi kanssa vertaamalla (tai skannaamalla) laitteidenne koodia. Kontaktisi pysyvät yhdistettyinä. - Viestintä- ja sovellusalusta, joka suojaa yksityisyyttäsi ja tietoturvaasi. videopuhelu %1$s JÄSENET Rooli muuttuu muotoon "%s". Kaikille ryhmän jäsenille ilmoitetaan asiasta. @@ -1110,17 +1073,10 @@ Kontaktin tulee olla online-tilassa, jotta yhteys voidaan muodostaa. \nVoit peruuttaa tämän yhteyden ja poistaa kontaktin (ja yrittää myöhemmin uudella linkillä). Kontaktisi voi muodostaa yhteyden skannaamalla QR-koodin tai käyttämällä sovelluksessa olevaa linkkiä. - Kun ihmiset pyytävät yhteyden muodostamista, voit hyväksyä tai hylätä sen. Asetuksesi - SMP-palvelimesi - XFTP-palvelimesi Käytä SimpleX Chat palvelimia\? Käyttöliittymän värit - Päivitä kuljetuksen eristystila\? - Voit luoda sen myöhemmin Voit paljastaa piilotetun profiilisi kirjoittamalla koko salasanan Keskusteluprofiilit-sivun hakukenttään. - Emme tallenna mitään kontaktejasi tai viestejäsi (kun ne on toimitettu) palvelimille. - Yksityisyyden suojaamiseksi kaikkien muiden alustojen käyttämien käyttäjätunnusten sijaan SimpleX käyttää viestijonojen tunnisteita, jotka ovat kaikille kontakteille erillisiä. %1$s haluaa olla yhteydessä sinuun kautta WebRTC ICE -palvelimet Keskustelut-tietokantasi @@ -1134,9 +1090,6 @@ Valinnaisella tervetuloviestillä. Sinulla ei ole keskusteluja Liikaa kuvia! - (jaa kontaktisi kanssa) - Keskusteluprofiilisi lähetetään -\nkontakteillesi ICE-palvelimesi Kun saatavilla Käytä .onion-isäntiä @@ -1158,12 +1111,9 @@ \n- muokattava kesto katoaville. \n- muokkaushistoria. Voit ottaa SimpleX Lockin käyttöön Asetusten kautta. - Tämä teksti on saatavilla asetuksista - Tervetuloa! lukematon SimpleX Logo SimpleX Tiimi - Tämä linkki ei ole kelvollinen yhteyslinkki! Keskusteluprofiilisi Lataa tiedosto SimpleX-taustapalvelu – se kuluttaa muutaman prosentin akusta päivässä.]]> @@ -1179,19 +1129,15 @@ Vastaanotto-osoite vaihdetaan toiseen palvelimeen. Osoitteenmuutos tehdään sen jälkeen, kun lähettäjä tulee verkkoon. Sinun on sallittava kontaktiesi lähettää ääniviestejä, jotta voit lähettää niitä. olla yhteydessä SimpleX Chatin -kehittäjiin kysyäksesi kysymyksiä ja saadaksesi päivityksiä.]]> - Tämä QR-koodi ei ole linkki! Sinut yhdistetään ryhmään, kun ryhmän isännän laite on online-tilassa, odota tai tarkista myöhemmin! Sinut yhdistetään, kun yhteyspyyntösi on hyväksytty, odota tai tarkista myöhemmin! Sinut yhdistetään, kun kontaktisi laite on online-tilassa, odota tai tarkista myöhemmin! - Avaa mobiilisovelluksessa -painiketta.]]> SimpleX-osoitteesi Käytä uusiin yhteyksiin Käytä SOCKS-välityspalvelinta Kuljetuksen eristäminen Profiilisi, kontaktisi ja toimitetut viestit tallennetaan laitteellesi. Profiili jaetaan vain kontaktiesi kanssa. - Käytä chattia - ICE-palvelimesi Video pois päältä Video päällä Et enää saa viestejä tästä ryhmästä. Keskusteluhistoria säilytetään. @@ -1209,7 +1155,6 @@ Varoitus: saatat menettää joitain tietoja! SimpleX Osoite odottaa vastaamista… - Seuraavan sukupolven yksityisviestit odottaa vahvistusta… %1$d viestit ohitettu. Seuraavan viestin tunnus on väärä (pienempi tai yhtä suuri kuin edellisen). @@ -1247,7 +1192,6 @@ Protokollan aikakatkaisu per KB Tiedostot ja media ovat tässä ryhmässä kiellettyjä. Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa. - Yhdistä Incognito Käytä nykyistä profiilia Käytä uutta incognito-profiilia Salli @@ -1263,7 +1207,6 @@ Suosikki Epäsuosikki Uusi satunnainen profiili jaetaan. - Liitä linkki, jonka sait yhteydenottoon kontaktisi kanssa… Profiilisi %1$s jaetaan. Kuittaukset pois käytöstä ryhmiltä\? Tulossa pian! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 572b10c988..51cfa90ff1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -5,7 +5,6 @@ SimpleX Votre profil va être envoyé au contact qui vous a envoyé ce lien. Vous vous connecterez à tous les membres du groupe. - Se connecter Rejoindre le groupe ? Se connecter via un lien unique ? erreur @@ -45,7 +44,6 @@ vous avez partagé un lien unique via un lien unique mode incognito via un lien unique - Assurez-vous que les adresses des serveurs SMP sont au bon format, séparées par des lignes et ne sont pas dupliquées. Erreur lors de la mise à jour de la configuration réseau Erreur lors de la création de l\'adresse Contact déjà existant @@ -55,7 +53,6 @@ Tentative de connexion au serveur utilisé pour recevoir les messages de ce contact (erreur : %1$s). format de message invalide Lien entier - Erreur lors de la sauvegarde des serveurs SMP Impossible de recevoir le fichier Lien de connection invalide Délai de connexion @@ -137,11 +134,9 @@ Échec d’initialisation de la base de données Pour recevoir des notifications, veuillez entrer la phrase secrète de la base de données service SimpleX Chat - Ce texte est disponible dans les paramètres Rejoindre en tant que %s Vous êtes invité·e au groupe Discuter avec les développeurs - Appuyez ici pour démarrer une nouvelle conversation Vous n\'avez aucune conversation Trop d’images ! Partager le fichier… @@ -150,7 +145,6 @@ Annuler l’aperçu du fichier échec d’envoi non lu - Bienvenue ! connexion… connexion… Partager le message… @@ -192,11 +186,8 @@ aucun détail Lien d\'invitation unique Copié dans le presse-papiers - Créer un lien d\'invitation unique Commencer une nouvelle conversation - Se connecter via un lien / code QR Scanner un QR code - (à partager avec votre contact) Créer un groupe secret Depuis la Phototèque Fichier @@ -233,19 +224,14 @@ Équipe SimpleX Plus Afficher le code QR - Code QR invalide - Ce code QR n\'est pas un lien ! Vous serez connecté·e lorsque votre demande de connexion sera acceptée, veuillez attendre ou vérifier plus tard ! Vous serez connecté·e lorsque l\'appareil de votre contact sera en ligne, veuillez attendre ou vérifier plus tard ! - Votre profil de messagerie sera envoyé\nà votre contact Partager un lien unique Coller Cette chaîne n\'est pas un lien de connexion ! - Ouvrir dans l\'app mobile.]]> Définir le nom du contact… Déconnecté Erreur - En attente Accepter la demande de connexion \? Effacer Effacer la conversation @@ -261,7 +247,6 @@ Confirmer Réinitialisation OK - (scanner ou coller depuis le presse-papiers) (uniquement stocké par les membres du groupe) Votre contact a besoin d\'être en ligne pour completer la connexion. \nVous pouvez annuler la connexion et supprimer le contact (et réessayer plus tard avec un autre lien). @@ -297,7 +282,6 @@ Réactiver le son Le contact avec lequel vous avez partagé ce lien NE pourra PAS se connecter ! Lien invalide ! - Ce lien n\'est pas un lien de connexion valide ! Demande de connexion envoyée ! Le fichier sera reçu lorsque votre contact sera en ligne, veuillez patienter ou vérifier plus tard ! Message vocal… @@ -306,13 +290,10 @@ Notifications L\'adresse de réception sera changée pour un autre serveur. Le changement d\'adresse sera terminé lorsque l\'expéditeur sera en ligne. Vous serez connecté·e au groupe lorsque l\'appareil de l\'hôte sera en ligne, veuillez attendre ou vérifier plus tard ! - montrez le code QR lors d\'un appel vidéo, ou partagez le lien.]]> Scannez le code de sécurité depuis l\'application de votre contact. Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils. - scanner un QR code lors d\'un appel vidéo, ou votre contact peut partager un lien d\'invitation.]]> Ajouter un serveur Markdown dans les messages - Ajouter des serveurs prédéfinis Utiliser les serveurs SimpleX Chat \? Supprimer le serveur Assurez-vous que les adresses des serveurs WebRTC ICE sont au bon format et ne sont pas dupliquées, un par ligne. @@ -321,7 +302,6 @@ Vos paramètres Verrouillage SimpleX Console de la messagerie - Serveurs SMP Tester les serveurs Enregistrer les serveurs Scanner un QR code de serveur @@ -332,7 +312,6 @@ Star sur GitHub Contribuer Évaluer l\'app - Vos serveurs SMP Comment utiliser vos serveurs Les serveurs WebRTC ICE sauvegardés seront supprimés. Vos serveurs ICE @@ -354,7 +333,6 @@ Votre profil, vos contacts et les messages reçus sont stockés sur votre appareil. Le profil n\'est partagé qu\'avec vos contacts. Le nom d\'affichage ne peut pas contenir d\'espace. - Créer À propos de SimpleX Vous pouvez utiliser le format markdown pour mettre en forme les messages : gras @@ -366,10 +344,7 @@ réponse reçu… confimation reçu… connexion… - N\'importe qui peut heberger un serveur. - Pour protéger votre vie privée, SimpleX utilise des identifiants distincts pour chacun de vos contacts. Collez le lien que vous avez reçu - Utiliser la messagerie Notifications privées Comment il affecte la batterie Quand l\'application fonctionne @@ -398,8 +373,6 @@ Échec du test du serveur ! Certains serveurs n\'ont pas réussi le test : Entrer un serveur manuellement - Serveur prédéfini - Votre serveur Votre adresse de serveur Adresse de serveur invalide ! Vérifiez l\'adresse du serveur et réessayez. @@ -420,9 +393,6 @@ Votre profil est stocké sur votre appareil et partagé uniquement avec vos contacts. Les serveurs SimpleX ne peuvent pas voir votre profil. Supprimer l\'image Enregistrer les préférences ? - Vous contrôlez votre messagerie ! - La plateforme de messagerie et d\'applications qui protège votre vie privée et votre sécurité. - Nous ne stockons aucun de vos contacts ou messages (une fois délivrés) sur les serveurs. Créer le profil Saisissez votre nom : Comment utiliser markdown @@ -435,17 +405,9 @@ en attente de confirmation… connecté terminé - L\'avenir de la messagerie - La vie privée redéfinie - Aucun identifiant d\'utilisateur. - Protégé du spam - Vous choisissez qui peut se connecter. - Décentralisé Créez votre profil Établir une connexion privée Comment ça fonctionne - Seuls les appareils clients stockent les profils des utilisateurs, les contacts, les groupes et les messages. - GitHub repository.]]> Batterie peu utilisée. L\'app vérifie les messages toutes les 10 minutes. Vous risquez de manquer des appels ou des messages urgents.]]> Consomme davantage de batterie ! L’application fonctionne toujours en arrière-plan — les notifications sont affichées instantanément.]]> %1$d message(s) manqué(s) @@ -516,7 +478,6 @@ Appels audio et vidéo chiffré de bout en bout Fonctionnalités expérimentales - SOCKS proxy Thèmes Messages et fichiers Appels @@ -570,7 +531,6 @@ Appels sur l\'écran de verrouillage : Afficher Désactiver - Vos serveurs ICE Serveurs WebRTC ICE Le serveur relais protège votre adresse IP, mais il peut observer la durée de l\'appel. Le serveur relais n\'est utilisé que si nécessaire. Un tiers peut observer votre adresse IP. @@ -896,7 +856,6 @@ Effacer les fichiers de tous les profils de messagerie Profil et connexions au serveur Transport isolé - Mettre à jour le mode d\'isolement du transport \? pour chaque contact et membre de groupe. \nVeuillez noter : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.]]> Profil de messagerie Ajouter un profil @@ -1014,16 +973,10 @@ Seulement 10 vidéos peuvent être envoyées en même temps Créer un fichier Supprimer le fichier - Erreur lors de la sauvegarde des serveurs XFTP - Assurez-vous que les adresses des serveurs XFTP sont au bon format, séparées par des lignes et qu\'elles ne sont pas dupliquées. Le serveur requiert une autorisation pour téléverser, vérifiez le mot de passe. Téléverser le fichier - Serveurs XFTP - Vos serveurs XFTP Comparer le fichier Télécharger le fichier - Erreur lors du chargement des serveurs SMP - Erreur lors du chargement des serveurs XFTP Héberger Port port %d @@ -1064,7 +1017,6 @@ Autoriser les appels que si votre contact les autorise. Autorise vos contacts à vous appeler. Appels audio/vidéo - \nDisponible dans la v5.1 Interdire les appels audio/vidéo. Le fichier sera supprimé des serveurs. Révoquer @@ -1098,10 +1050,8 @@ Ouverture de la base de données… À propos de l\'adresse SimpleX En savoir plus - Vous pouvez partager votre adresse sous la forme d\'un lien ou d\'un code QR - tout le monde peut l\'utiliser pour vous contacter. Vous ne perdrez pas vos contacts si vous supprimez votre adresse ultérieurement. Adresse SimpleX - Vous pouvez accepter ou refuser les demandes de contacts. Couleurs de l\'interface Vos contacts resteront connectés. Partager l\'adresse avec les contacts SimpleX ? @@ -1112,7 +1062,6 @@ Inviter des amis Discutons sur SimpleX Chat Enregistrer les paramètres ? - Ne pas créer d\'adresse Adresse Partager l\'adresse… Vous pouvez partager cette adresse avec vos contacts pour leur permettre de se connecter avec %s. @@ -1136,9 +1085,7 @@ Personnaliser le thème Continuer Erreur lors du réglage de l\'adresse - Vous pouvez créer une adresse pour permettre aux autres utilisateurs de vous contacter. Entrez un message de bienvenue… - Vous pouvez la créer plus tard Salut !\nConnectez-vous avec moi via SimpleX Chat : %s Si vous ne pouvez pas vous rencontrer en personne, montrez le code QR lors d\'un appel vidéo ou partagez le lien. Modifier les profils de messagerie @@ -1333,10 +1280,8 @@ Désactiver les notifications Utilisation de la batterie de l\'app / Sans restriction dans les paramètres de l\'app.]]> Votre profil %1$s sera partagé. - Se connecter incognito Pas d\'appels en arrière-plan Ouvrir les paramètres de l\'app - Collez le lien que vous avez reçu pour vous connecter à votre contact… SimpleX ne peut pas fonctionner en arrière-plan. Vous ne recevrez les notifications que lorsque l\'application sera en cours d\'exécution. L\'application peut se fermer après 1 minute en arrière-plan. Utilisation de la batterie de l\'app / Sans restriction dans les paramètres de l\'app.]]> @@ -1504,7 +1449,6 @@ Ouvrir le port de votre pare-feu erreur d\'affichage de contenu erreur d\'affichage de message - Vous pouvez le rendre visible à vos contacts SimpleX via les Paramètres. L\'historique n\'est pas envoyé aux nouveaux membres. Réessayer Caméra non disponible @@ -1897,14 +1841,10 @@ Bêta Vérifier les mises à jour Vérifier les mises à jour - Serveurs SMP configurés - Serveurs XFTP configurés Désactivé Installé avec succès Installer la mise à jour Ouvrir l\'emplacement du fichier - Autres serveurs SMP - Autres serveurs XFTP Veuillez redémarrer l\'application. Rappeler plus tard Afficher le pourcentage @@ -1954,7 +1894,6 @@ Erreurs de suppression doublons expiré - Ouvrir les paramètres du serveur autre autres erreurs Sécurisées @@ -2134,7 +2073,6 @@ %s.]]> Les conditions seront acceptées le : %s. %s, acceptez les conditions d\'utilisation.]]> - chiffrés de bout en bout, avec une sécurité post-quantique dans les messages directs.]]> Réception des messages toutes les 10 minutes %s.]]> %s.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml index 3f17a6d8a7..ed301675fd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml @@ -34,7 +34,6 @@ संबंध अनुरोध स्वीकार करें\? स्वीकृत कॉल गुप्त स्वीकार करें - पूर्वनिर्धारित सर्वर जोड़ें प्रोफ़ाइल जोड़ें सर्वर जोड़े हमेशा बने रहें @@ -51,7 +50,6 @@ रंगीन जुड़े हुए जुडिये - जुडिये जुड़े हुए स्वामी जुड़े हुए @@ -63,7 +61,6 @@ आप चले गए अज्ञात त्रुटि आप आज्ञा दें - स्वागत! चालू करो अज्ञात संदेश प्रारूप स्वागत %1$s! @@ -166,7 +163,6 @@ संपर्क नाम सेट करें ईमेल जवाब मिला… - चैट का प्रयोग करें गलती: %s संदेशों को बाद में हटाएं छवि @@ -212,7 +208,6 @@ विवरण ऐप केवल तभी सूचनाएं प्राप्त कर सकता है जब वह चल रहा हो, कोई पृष्ठभूमि सेवा प्रारंभ नहीं की जाएगी संपादन करना - विकेन्द्रीकृत कॉल समाप्त कॉल चल रहा है छवियों को स्वत: स्वीकार करें @@ -227,7 +222,6 @@ चैट कंसोल आपके सभी संपर्क जुड़े रहेंगे। चैट प्रोफ़ाइल - बनाएं कॉल त्रुटि कॉल चल रहा है हमेशा रिले का प्रयोग करें @@ -278,7 +272,6 @@ चालू प्रणाली प्रमाणीकरण प्रणाली - आपका एसएमपी सर्वर संदेशों सदस्य को समूह से निकाल दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता! सदस्य @@ -296,7 +289,6 @@ गुप्त प्रोफ़ाइल का उपयोग करें आपकी प्रोफ़ाइल उस संपर्क को भेजी जाएगी जिससे आपको यह लिंक प्राप्त हुआ है। आप सभी ग्रुप मेंबर्स से कनेक्ट होंगे। - इनकॉग्निटो कनेक्ट करें चैट खोलें नया ग्रुप खोलें यह लिंक मान्य नहीं है diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml index 7be983c71a..2f010d8aa9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml @@ -125,7 +125,6 @@ Razumeo Odstranjeno odstranjeno - Napraviti Poruke i datoteke Poruka Serveri @@ -170,7 +169,6 @@ Pristup na servere pomoću SOCKS proxy na portu %d? Proxy mora da bude uključen pre omogućavanja ove opcije. Prihvaćeni uslovi Dodaj server - Dodaj unapred postavljene servere Odstraniti adresu? odstranjena grupa Dodaj nalog @@ -222,9 +220,7 @@ blokirano administratorom Vi nepoznat status - Poveži se anonimno greška u pozivu - Poveži nepoznat format poruke Povezano %ds @@ -442,8 +438,6 @@ Video poziv Koristi server Adresa vašeg servera - Vaši SMP serveri - Vaši XFTP serveri Obaveštenja i baterija Prikazati e2e šifrovano @@ -460,7 +454,6 @@ Započeti novi razgovor Očistiti Očistiti razgovor - Tvoj server šifrovanje prihvaćeno za %s Glasovne poruke su zabranjene. veza %1$d @@ -654,8 +647,6 @@ Sistem Poslati direktnu poruku za povezivanje Slika - Na čekanju - SMP serveri Upišite Vaše ime: Otvoriti razgovor pozvan %1$s @@ -683,7 +674,6 @@ Otvoriti pomoću %s Ukloniti arhivu? Izabrano %d - Dobrodošli! Previše video snimaka! Poslati Obnoviti @@ -691,7 +681,6 @@ Izabrati profil razgovora Skenirati QR kod servera Napredna mrežna podešavanja - SOCKS proxy Anonimni režim broj PING Obnoviti statistiku? @@ -759,7 +748,6 @@ vlasnik Kopirati Predati - Ostali XFTP serveri Napraviti SimpleX adresu Šifrovati Kreirano u @@ -781,7 +769,6 @@ Dovršiti migraciju Ništa nije izabrano Konverzacija odstranjena! - Ostali SMP serveri Verzija jezgra: v%s Šifrovati bazu podataka Odstraniti vezu? @@ -794,7 +781,6 @@ Za primanje drugo Napraviti profil - Vi odlučujete ko se može povezati. Odstraniti grupu? Obnoviti Prebaciti @@ -904,7 +890,6 @@ Glasovna poruka (%1$s) Naučiti više Označiti da je verifikovano - Koristiti razgovor Označiti da nije pročitano Verifikovati vezu zahtev za povezivanje @@ -944,7 +929,6 @@ Odstraniti server blokirali ste %s Kvantno otporno šifrovanje - Ne praviti adresu Omogućiti svim grupama Ne prikazivati ponovo minuti @@ -1011,7 +995,6 @@ Operator servera blokira vezu:\n%1$s. Promeniti ulogu Ime ovog uređaja - Dodirnuti za početak novog razgovora pozvani ste u grupu Slika sačuvana u Galeriji vaša uloga je promenjena u %s @@ -1047,7 +1030,6 @@ Pozvani ste u grupu promenili ste vašu ulogu na %s Potvrda je onemogućena - Imunitet na spam duplikat poruke Da Greška u bazi podataka @@ -1078,7 +1060,6 @@ Proslediti poruku… Adresa ili jednokratna veza? Omogućiti pristup kameri - Nevažeći QR kod Jednokratna pozivnica Uneti poruku dobrodošlice… Čuvanje %1$s poruka @@ -1207,9 +1188,7 @@ Koristiti za poruke Greška pri kreiranju profila! Greška pri učitavanju detalja - Greška pri čuvanju XFTP servera Otpremljene datoteke - Otvoriti podešavanja servera Greška pri odstranjivanju privatnih beleški Greška pri prosleđivanju poruka Poruke su odstranjene nakon što ste ih odabrali. @@ -1224,7 +1203,6 @@ Onemogućiti potvrde? povezivanje (uvedeno) Uneti šifru u pretragu - Greška pri učitavanju XFTP servera Greška pri odstranjivanju grupe Nije moguće poslati poruku Poslati poruku koja nestaje @@ -1294,8 +1272,6 @@ Poslano putem proxy pozvan za povezivanje pomoću %1$s - Greška pri učitavanju SMP servera - Greška pri čuvanju SMP servera Greška pri promeni adrese Pristupnu frazu je potrebna Spomenuti članove 👋 @@ -1308,7 +1284,6 @@ Bez Informacija, pokušajte ponovo da učitate Komadi su odstranjeni SimpleX Chat pozivi - XFTP serveri Mreža i serveri Podesite ICE servere Koristiti direktnu internet vezu? @@ -1325,7 +1300,6 @@ Vremensko ograničenje protokola Greška pri slanju poruke Greška pri odstranjivanju kontakta - Napraviti jednokratnu pozivnicu Markdown pomoć Dozvoliti slanje datoteka i medijskog sadržaji. Pin kod promenjen! @@ -1380,7 +1354,6 @@ Zapis ažuriran u: %s Član će biti uklonjen iz grupe – ovo se ne može poništiti! Pozivi zabranjeni! - \nDostupno u v5.1 SimpleX veze Odstraniti za sve Dozvoliti slanje poruka koje nestaju. @@ -1396,13 +1369,11 @@ Dozvoliti vašim kontaktima da vas zovu. Prijem poruke Greška pri izvoženju baze podataka razgovora - Možete učiniti vidljivim vašim SimpleX kontaktima putem Podešavanja. Greška pri slanju pozivnice Preskočiti pozivanje članova Za privatno usmeravanje Dodatni sekundarni Pokretanje iz %s. - Vaši ICE serveri Koristiti nasumičnu pristupnu frazu Onemogućiti SimpleX Zaključavanje Ponovo povezati server? @@ -1415,15 +1386,12 @@ Neispravan hash poruke Ponovo povezati server kako biste prisilili dostavu poruke. To koristi dodatni saobraćaj. neispravan ID poruke - Konfigurisani XFTP serveri Upozorenje pri isporuci poruke - Povezati se pomoću linka / QR koda Već imate chat profil sa istim prikaznim imenom. Molimo vas da odaberete drugo ime. Greška u autentifikaciji Unapređena konfiguracija servera %1$d ostale greška datoteke(a). Autentifikacija nije dostupna - Konfigurisani SMP serveri Automatsko prihvatanje Sačuvati preference? Za pozive je potreban podrazumevani veb pretraživač. Molimo vas da konfigurišete podrazumevani pretraživač u sistemu i podelite više informacija sa programerima. @@ -1445,7 +1413,6 @@ Otvoriti fasciklu baze podataka Sačuvati i ažurirati grupni profil Uz smanjenu potrošnju baterije. - (skenirati ili nalepiti iz memorije) Greška u vezi Ažurirajte aplikaciju i kontaktirajte programere. Tokom uvoza došlo je do nekih nefatalnih grešaka: @@ -1458,11 +1425,9 @@ Uz smanjenu potrošnju baterije. Greška pri preuzimanju arhive Svi razgovori biće uklonjeni sa liste %s, a lista odstranjena - Ovaj QR kod nije link! Već se povezujete! Migriraj na drugi uređaj Otvoriti promene - Decentralizovano Nema informacija o prijem Povezati se pomoću linka Zadržati Vaše konekcije diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index 82518712da..8bc886865d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -36,7 +36,6 @@ Hitelesítés Egy üres csevegési profil lesz létrehozva a megadott névvel, és az alkalmazás a szokásos módon megnyílik. %s visszavonva - Előre beállított kiszolgálók hozzáadása A hívások kezdeményezése le van tiltva. Az összes partneréhez és csoporttaghoz külön TCP-kapcsolat (és SOCKS-hitelesítési adat) lesz használva.\nMegjegyzés: ha sok kapcsolata van, akkor az akkumulátor-használat és az adatforgalom jelentősen megnövekedhet, és néhány kapcsolódási kísérlet sikertelen lehet.]]> hivatkozáselőnézet visszavonása @@ -66,7 +65,6 @@ Alkalmazás verziója Üdvözlőüzenet hozzáadása titkosítás elfogadása %s számára… - \nElérhető az v5.1-es kiadásban Mindkét fél véglegesen törölheti az elküldött üzeneteket. (24 óra) Továbbfejlesztett csoportok Az összes üzenet törölve lesz – ez a művelet nem vonható vissza! Az üzenetek CSAK az Ön számára törlődnek. @@ -179,7 +177,6 @@ Zárolási mód módosítása Kapcsolódott kapcsolódott - Kapcsolódás kapcsolódott Társított hordozható eszköz kapcsolódott @@ -200,7 +197,6 @@ A partner és az összes üzenet törölve lesz – ez a művelet nem vonható vissza! A partnerei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat. Kapcsolódik az egyszer használható meghívón keresztül? - Kapcsolódás egy hivatkozáson vagy QR-kódon keresztül A kapcsolódási hivatkozás el lett távolítva Csak név Kapcsolódik a kapcsolattartási címen keresztül? @@ -219,7 +215,6 @@ Helyesbíti a nevet a következőre: %s? Időtúllépés kapcsolódáskor Kapcsolódik vele: %1$s? - Létrehozás Partnerbeállítások Kapcsolat Kapcsolat megszakítva @@ -240,7 +235,6 @@ törölt partner Törli a tag üzenetét? A csevegés fut - Egyszer használható meghívó létrehozása Törlés Új üzenetek ellenőrzése 10 percenként, legfeljebb 1 percen keresztül Adatbázis törlése @@ -312,7 +306,6 @@ Törli a hivatkozást? kapcsolódás Egyéni időköz - Kapcsolódás inkognitóban Csevegések Új profil létrehozása a számítógépes alkalmazásban. 💻 kapcsolódás (bejelentve) @@ -334,7 +327,6 @@ Elvetés Törli a partnert? Ürítés - Cím létrehozása, hogy az emberek kapcsolatba léphessenek Önnel. Biztonsági kódok összehasonlítása a partnerekével. Fájl-összehasonlítás Csevegések @@ -389,7 +381,6 @@ Csoportok felfedezése és csatlakozás %2$s %1$d üzenetet moderált Eltűnő üzenet - Ne hozzon létre címet Ne jelenjen meg újra SimpleX-zár kikapcsolása végpontok között titkosított @@ -437,7 +428,6 @@ Csoportprofil szerkesztése végpontok között titkosított hanghívás %d mp - Decentralizált Dekódolási hiba Kép szerkesztése Értesítések letiltása @@ -469,8 +459,6 @@ Hiba történt az ICE-kiszolgálók mentésekor Hiba Hiba - Hiba történt az XFTP-kiszolgálók betöltésekor - Hiba történt az SMP-kiszolgálók betöltésekor Hiba történt a hálózat konfigurációjának frissítésekor TCP életben tartása Kamera váltás @@ -497,7 +485,6 @@ Hiba történt a felhasználói adatvédelem frissítésekor Titkosítás Csoport nem található! - Hiba történt az SMP-kiszolgálók mentésekor Visszafejlesztés és a csevegés megnyitása A csoport inaktív Gyors és nem kell várni, amíg az üzenetküldő online lesz! @@ -563,7 +550,6 @@ Hiba történt a függőben lévő kapcsolat törlésekor Hiba történt a csevegési adatbázis importálásakor Hiba történt a kézbesítési jelentések engedélyezésekor! - Hiba történt az XFTP-kiszolgálók mentésekor A tagok küldhetnek egymásnak közvetlen üzeneteket. Hiba történt a tag eltávolításakor hívás vége @@ -660,10 +646,8 @@ Elrejtve: Hiba történt a partnerrel történő kapcsolat létrehozásában ICE-kiszolgálók (soronként egy) - beolvashatja a QR-kódot a videohívásban, vagy a partnere megoszthat egy meghívási hivatkozást.]]> Ha az alkalmazás megnyitásakor megadja ezt a jelkódot, az összes alkalmazásadat véglegesen el lesz távolítva! Ha nem tud személyesen találkozni, mutassa meg a QR-kódot egy videohívás közben, vagy ossza meg a hivatkozást. - mutassa meg a QR-kódot a videohívásban, vagy ossza meg a hivatkozást.]]> Megerősítés esetén az üzenetváltó-kiszolgálók látni fogják az IP-címét és a szolgáltatóját – azt, hogy mely kiszolgálókhoz kapcsolódik. A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését. QR-kód beolvasásával.]]> @@ -673,7 +657,6 @@ Számítógépek A markdown használata Csevegési profil létrehozása - Védett a kéretlen tartalmakkal szemben Hordozható eszközök leválasztása Különböző nevek, profilképek és átvitelelkülönítés. Elutasítás esetén a kérés küldője NEM kap értesítést. @@ -693,7 +676,6 @@ Nincsenek kézbesítési adatok moderált A tag el lesz távolítva a csoportból – ez a művelet nem vonható vissza! - Győződjön meg arról, hogy a megadott XFTP-kiszolgálók címei megfelelő formátumúak, soronként elkülönítettek, és nincsenek duplikálva. Nincs partner kiválasztva Nincsenek fogadott vagy küldött fájlok Megnyitás hordozható eszköz-alkalmazásban, majd koppintson a Kapcsolódás gombra az alkalmazásban.]]> @@ -732,7 +714,6 @@ k soha (új)]]> - Győződjön meg arról, hogy a megadott SMP-kiszolgálók címei megfelelő formátumúak, soronként elkülönítettek, és nincsenek duplikálva. Az onion kiszolgálók nem lesznek használva. perc Tudjon meg többet @@ -791,11 +772,9 @@ Hordozható eszköz társítása Értesítési szolgáltatás Csak a csoport tulajdonosai engedélyezhetik a hangüzenetek küldését. - A felhasználói profilok, partnerek, csoportok és üzenetek csak az eszközön vannak tárolva a kliensen belül. Érvénytelen átköltöztetési visszaigazolás Csak a csoport tulajdonosai módosíthatják a csoportbeállításokat. Nincsenek előzmények - Érvénytelen QR-kód Megjelölés olvasottként ÉLŐ Megjelölés olvasatlanként @@ -875,9 +854,7 @@ Szerepkör SimpleX kapcsolattartási cím Megállítás - Előre beállított kiszolgáló Új csevegés indítása - Bárki üzemeltethet kiszolgálókat. Megnyitás Protokoll időtúllépése titok @@ -892,7 +869,6 @@ Adatvédelem Profil SimpleX-címe Jelentse a fejlesztőknek. - Ön dönti el, hogy kivel beszélget. Az eltűnő üzenetek küldése le van tiltva. Csak Ön küldhet hangüzeneteket. Frissítés @@ -912,7 +888,6 @@ Csökkentett akkumulátor-használat Mentés és a partnerek értesítése Előnézet - SimpleX Chat használata Megosztás Fogadott üzenet Üdvözlőüzenet @@ -920,9 +895,7 @@ Csak a partnere kezdeményezhet hívásokat. Témák Túl sok videó! - Üdvözöljük! Önmegsemmisítő jelkód - (beolvasás vagy beillesztés a vágólapról) Várakozás a videóra Válasz Ez a saját egyszer használható meghívója! @@ -959,7 +932,6 @@ Kérje meg a partnerét, hogy engedélyezze a hangüzenetek küldését. Ön egy egyszer használható meghívót osztott meg A hivatkozás megnyitása a böngészőben gyengítheti az adatvédelmet és a biztonságot. A megbízhatatlan SimpleX-hivatkozások pirossal vannak kiemelve. - Saját ICE-kiszolgálók Ön elfogadta a kapcsolatot Elutasítás Partner nevének és az üzenet tartalmának megjelenítése @@ -976,7 +948,6 @@ Amikor elérhető Hangüzenet (%1$s) %s (jelenlegi) - Saját SMP-kiszolgáló Véletlen Megosztás a SimpleX partnerekkel Ön @@ -1075,15 +1046,12 @@ Kezelőfelület színei Adja meg a korábbi jelszót az adatbázis biztonsági mentésének visszaállítása után. Ez a művelet nem vonható vissza. Másodlagos szín - SOCKS proxy Mentés Újraindítás - SMP-kiszolgálók Videó SimpleX-címbeállítások mentése Újraegyeztetés Várakozás a videóra - Saját XFTP-kiszolgálók Videó kikapcsolva Privát fájlnevek Menti a beállításokat? @@ -1097,7 +1065,6 @@ Feloldja a tag letiltását? A kérés küldője törölte a kapcsolódási kérést. Érvénytelen adatbázis-jelmondat - Saját SMP-kiszolgálók A kézbesítési jelentések le vannak tiltva Adatbázismappa megnyitása egy egyszer használható meghívón keresztül @@ -1145,7 +1112,6 @@ Időszakos értesítések letiltva! A jelkód módosult! Akkor fut, amikor az alkalmazás meg van nyitva - Ez a QR-kód nem egy hivatkozás! Várakozás a fájlra simplexmq: v%s (%2s) Leválasztás @@ -1154,7 +1120,6 @@ A reakciók hozzáadása az üzenetekhez le van tiltva. Rendszer olvasatlan - Függőben Üdvözöljük %1$s! Eltávolítja a jelmondatot a Keystrore-ból? Feloldás @@ -1173,7 +1138,6 @@ Színek visszaállítása Mentés Váltás - A kapott hivatkozás beillesztése a partnerhez való kapcsolódáshoz… Beolvasás Port nyitása a tűzfalban hívás indítása… @@ -1181,7 +1145,6 @@ elküldve SOCKS proxy használata Élő üzenet küldése - Újraértelmezett adatvédelem Hangüzenet… Alkalmazás képernyőjének védelme QR-kód megjelenítése @@ -1200,7 +1163,6 @@ Felfedés Zárolási mód Fájl visszavonása - XFTP-kiszolgálók A fájlok és a médiatartalmak küldése le van tiltva. Fájl megosztása… Mentés @@ -1209,7 +1171,6 @@ Ön eltávolította őt: %1$s Jelmondat mentése és a csevegés megnyitása Menti a beállításokat? - Nincsenek felhasználói azonosítók. A közvetlen üzenetek küldése a tagok között le van tiltva. SOCKS proxy használata? Hangszóró kikapcsolva @@ -1274,9 +1235,7 @@ A jelenlegi csevegési adatbázis TÖRÖLVE és CSERÉLVE lesz az importáltra!\nEz a művelet nem vonható vissza – profiljai, partnerei, csevegési üzenetei és fájljai véglegesen törölve lesznek. Ötletek és javaslatok Figyelmeztetés: néhány adat elveszhet! - Koppintson ide az új csevegés indításához Várakozás a számítógép-alkalmazásra… - Az üzenetváltás jövője Módosítja a hálózati beállításokat? Várakozás a hordozható eszköz társítására: Biztonságos kapcsolat ellenőrzése @@ -1306,7 +1265,6 @@ Az alkalmazás elindításához vagy 30 másodpercnyi háttérben töltött idő után, az alkalmazáshoz való visszatéréshez hitelesítésre lesz szükség. Az üzenet az összes tag számára törölve lesz. A videó nem dekódolható. Próbálja ki egy másik videóval, vagy lépjen kapcsolatba a fejlesztőkkel. - Ez a szöveg a beállításokban érhető el A profilja el lesz küldve a partnere számára, akitől ezt a hivatkozást kapta. Az alkalmazás 1 perc után bezárható a háttérben. Ön meghívást kapott a csoportba @@ -1334,7 +1292,6 @@ különböző átköltöztetés az alkalmazásban/adatbázisban: %s / %s %1$s.]]> Profil felfedése - Ez nem egy érvényes kapcsolattartási hivatkozás! A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) a partnere eszközén lévő kóddal. A csevegési adatbázis legfrissebb verzióját CSAK egy eszközön kell használnia, ellenkező esetben előfordulhat, hogy az üzeneteket nem fogja megkapni valamennyi partnerétől. Ez a beállítás csak az Ön jelenlegi csevegési profiljában lévő üzenetekre vonatkozik @@ -1343,10 +1300,7 @@ A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül. Ön meghívást kapott a csoportba A partnere a jelenleg támogatott legnagyobb (%1$s) fájlméretnél nagyobbat küldött. - A partnerei és az üzenetek (kézbesítés után) nem a SimpleX kiszolgálókon vannak tárolva. Üzenetek formázása a szövegbe szúrt speciális karakterekkel: - Megnyitás az alkalmazásban gombra.]]> - A csevegési profilja el lesz küldve\na partnere számára Egy olyan partnerét próbálja meghívni, akivel inkognitóprofilt osztott meg abban a csoportban, amelyben a fő profilja van használatban %1$s nevű csoporthoz.]]> Amikor az alkalmazás fut @@ -1362,15 +1316,10 @@ Akkor lesz kapcsolódva, amikor a partnerének az eszköze online lesz, várjon, vagy ellenőrizze később! Kéretlen üzenetek elrejtése. Onion kiszolgálók használata beállítást „Nemre”, ha a SOCKS proxy nem támogatja őket.]]> - Megoszthatja a címét egy hivatkozásként vagy egy QR-kódként – így bárki kapcsolódhat Önhöz. - Létrehozás később A profilja az eszközén van tárolva és csak a partnereivel van megosztva. A SimpleX kiszolgálók nem láthatják a profilját. Ön a következőre módosította %s szerepkörét: „%s” Csoportmeghívó elutasítva - Adatainak védelme érdekében a SimpleX külön azonosítókat használ minden egyes kapcsolatához. - (a megosztáshoz a partnerével) Csoportmeghívó elküldve - Frissíti az átvitelelkülönítési módot? Átvitelelkülönítés Nem fog több üzenetet kapni ebből a csoportból, de a csevegés előzményei megmaradnak. A csevegési adatbázis nem titkosított – állítson be egy jelmondatot annak védelméhez. @@ -1407,14 +1356,12 @@ Ön csatlakozott ehhez a csoporthoz %1$s nevű csoporthoz!]]> A hangüzenetek küldése le van tiltva ebben a csevegésben. - Ön irányítja csevegését! Kód ellenőrzése a számítógépen Az időzóna védelmének érdekében a kép-/hangfájlok UTC-t használnak. A csatlakozási kérése el lesz küldve ennek a csoporttagnak. Ha egy inkognitóprofilt oszt meg valamelyik partnerével, a rendszer ezt az inkognitóprofilt fogja használni azokban a csoportokban, ahová az adott partnere meghívja Önt. Már kért egy kapcsolódási kérést ezen a címen keresztül! Megoszthatja ezt a SimpleX-címet a partnereivel, hogy kapcsolatba léphessenek vele: %s. - Amikor az emberek kapcsolatot kérnek, Ön elfogadhatja vagy elutasíthatja azokat. Megjelenítendő üzenet beállítása az új tagok számára! Köszönet a felhasználóknak a Weblate-en való közreműködésért! A kézbesítési jelentések küldése az összes partnere számára engedélyezve lesz. @@ -1456,7 +1403,6 @@ A kézbesítési jelentések engedélyezve vannak %d csoportban A tag szerepköre a következőre fog módosulni: „%s”. A csoport összes tagja értesítést fog kapni. Profil és kiszolgálókapcsolatok - Egy üzenetváltó- és alkalmazásplatform, amely védi az adatait és biztonságát. Koppintson ide a profil aktiválásához. A kézbesítési jelentések le vannak tiltva %d partner számára Munkamenet kódja @@ -1484,10 +1430,8 @@ Az előző üzenet kivonata különbözik. Ezek a beállítások csak a jelenlegi csevegési profiljára vonatkoznak Várjon, amíg a fájl betöltődik a társított hordozható eszközről - GitHub-tárolónkban talál.]]> Hiba történt a tartalom megjelenítésekor Hiba történt az üzenet megjelenítésekor - Láthatóvá teheti a SimpleXbeli partnerei számára a beállításokban. Legfeljebb az utolsó 100 üzenet lesz elküldve az új tagok számára. A beolvasott QR-kód nem egy SimpleX-hivatkozás. A beillesztett szöveg nem egy SimpleX-hivatkozás. @@ -1827,9 +1771,6 @@ Az üzenet később is kézbesíthető, ha a tag aktívvá válik. Még nincs közvetlen kapcsolat, az üzenetet az adminisztrátor továbbítja. Hivatkozás megadása vagy QR-kód beolvasása - Konfigurált SMP-kiszolgálók - Egyéb SMP-kiszolgálók - Egyéb XFTP-kiszolgálók letiltva inaktív Nagyítás @@ -1875,7 +1816,6 @@ Feltöltött fájlok Letöltött töredékek Letöltött fájlok - Kiszolgáló-beállítások megnyitása Kiszolgáló címe Feltöltési hibák Visszaigazolva @@ -1886,7 +1826,6 @@ Feltöltött töredékek Elkészült Kapcsolódott kiszolgálók - Konfigurált XFTP-kiszolgálók Kapcsolódott Jelenlegi profil További részletek @@ -2163,7 +2102,6 @@ Másolhatja és csökkentheti az üzenet méretét a küldéshez. Adja hozzá a munkatársait a beszélgetésekhez. Üzleti cím - végpontok közötti titkosítással, a közvetlen üzenetek továbbá kvantumbiztos titkosítással is rendelkeznek.]]> Hogyan segíti az adatvédelmet Nincs háttérszolgáltatás Értesítések és akkumulátor diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index ea18b5e428..392c935575 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -75,8 +75,6 @@ Gunakan profil penyamaran baru Profil Anda akan dikirim ke kontak yang menerima tautan ini. Anda akan terhubung ke semua anggota grup. - Hubungkan - Hubungkan penyamaran Membuka basis data… k Hubungkan melalui alamat kontak? @@ -137,7 +135,6 @@ Izinkan panggilan? Pesan baru Hanya kamu yang dapat mengirim pesan menghilang. - Tidak ada pengidentifikasi pengguna. Hanya pemilik grup yang dapat mengubah preferensi grup. dan %d peristiwa lainnya Peran baru anggota @@ -216,7 +213,6 @@ TIdak pernah Mati Hanya 10 video dapat dikirim pada saat bersamaan - Hanya perangkat klien yang menyimpan profil pengguna, kontak, grup, dan pesan. Hanya pemilik grup yang dapat mengaktifkan pesan suara. Seluruh pesan akan dihapus - ini tidak bisa dibatalkan! Izinkan turun versi @@ -322,7 +318,6 @@ Unduh diedit Obrolan - Selamat Datang! Chat dengan pengembang Setel nama kontak… Pengaturan @@ -373,15 +368,11 @@ Bersihkan verifikasi Konsol obrolan Server pesan - Server SMP Beri nilai aplikasi Bintang di GitHub Gunakan server SimpleX Chat? - Server SMP Anda - Server XFTP Kredensial Anda mungkin dikirim tidak terenkripsi. Username - Server XFTP Anda Gunakan server SimpleX Chat. Gunakan kredensial proxy yang berbeda untuk setiap koneksi. Kata sandi @@ -404,7 +395,6 @@ Tampilkan status pesan Terima otomatis Undang teman - Buat Nama tidak valid! Buat profil Masukkan nama Anda: @@ -417,8 +407,6 @@ berakhir Headphone Kesalahan saat menginisialisasi WebView. Perbarui sistem Anda ke versi baru. Mohon hubungi pengembang.\nKesalahan: %s - Anda pilih siapa yang dapat terhubung. - Kebal terhadap spam Buat profil Anda Buat koneksi pribadi Lewati @@ -534,9 +522,6 @@ Via peramban Gagal mengganti profil Buka tautan di peramban mengurangi privasi dan keamanan koneksi. Tautan SimpleX tidak tepercaya akan berwarna merah. - Gagal simpan server SMP - Pastikan alamat server SMP dalam format yang benar, pisahkan baris dan tidak terduplikasi. - Pastikan alamat server XFTP dalam format yang benar, pisahkan baris dan tidak terduplikasi. gagal terkirim belum dibaca Pesan dapat disampaikan kemudian jika anggota menjadi aktif. @@ -613,10 +598,7 @@ Statistik server akan direset - ini tidak dapat dibatalkan! Perbesar ukuran font. Sumber pesan tetap pribadi. - Siapa pun dapat menjadi pemegang server. - Terdesentralisasi Kesalahan saat menginisialisasi WebView. Pastikan Anda telah menginstal WebView dan arsitektur yang didukung adalah arm64.\nKesalahan: %s - Gunakan obrolan Bagaimana caranya Berkala Panggilan suara masuk @@ -658,7 +640,6 @@ Preferensi kontak diaktifkan diaktifkan untuk anda - \nTersedia di v5.1 Kirim pesan suara tidak diizinkan. Hingga 100 pesan terakhir dikirim ke anggota baru. Pesan suara @@ -696,7 +677,6 @@ Kunci SimpleX Bantuan Markdown Server media & berkas - Server Anda Alamat server ditetapkan Gunakan di koneksi baru Simpan server? @@ -712,7 +692,6 @@ Simpan kata sandi profil Kata sandi profil tersembunyi Mikrofon - Privasi didefinisikan ulang Hal yang mempengaruhi baterai Saat aplikasi sedang berjalan Notifikasi pribadi @@ -780,7 +759,6 @@ Tautan SimpleX Undangan 1-kali SimpleX via %1$s - Gagal simpan server XFTP Nama tampilan tidak valid! Gagal membuat profil! Kesalahan koneksi @@ -788,8 +766,6 @@ Gagal membuat pesan Waktu koneksi habis pengiriman tidak sah - Teks ini tersedia di pengaturan - Ketuk untuk memulai obrolan baru Anda diundang ke grup Gabung sebagai %s menghubungkan… @@ -820,12 +796,10 @@ Markdown dalam pesan Simpan server Tambah server - Tambah server prasetel Uji server gagal! Server uji Server uji Masukkan server manual - Server Prasetel Pindai kode QR server Beberapa server gagal dalam pengujian: Alamat server Anda @@ -870,7 +844,6 @@ Diaktifkan untuk %dh Alamat server tidak valid! - Server XFTP lainnya Gunakan kredensial proksi yang berbeda untuk setiap profil. Server penerusan %1$s gagal terhubung ke server tujuan %2$s. Coba lagi nanti. Cari atau tempel tautan SimpleX @@ -896,10 +869,7 @@ Pengaturan Anda Alamat SimpleX Anda Profil obrolan Anda - Server SMP dikonfigurasi - Server SMP lainnya Gunakan server - Server XFTP dikonfigurasi Periksa alamat server dan coba lagi. Tampilkan persentase Kontribusi @@ -979,7 +949,6 @@ Buat alamat ID Basis Data dan Opsi Isolasi Transport. panggilan tak terjawab - Anda dapat membuatnya terlihat oleh kontak SimpleX Anda melalui Pengaturan. Undang Hai!\nHubungi saya melalui SimpleX Chat: %s Konfirmasi kata sandi @@ -993,11 +962,9 @@ Panggilan pada layar terkunci: Speaker Izin dalam pengaturan - Perpesanan masa depan Temukan izin ini di pengaturan Android dan ubah secara manual. Earpiece Matikan - Server ICE Anda Server ICE WebRTC Jika Anda memasukkan kode sandi hapus otomatis saat membuka aplikasi: Ikon aplikasi @@ -1185,7 +1152,6 @@ Matikan (tetap ditimpa) Gagal memuat obrolan Gagal hapus kontak - Gagal memuat server SMP Gagal memuat obrolan Nama tampilan ini tidak valid. Silakan pilih nama lain. Pengirim mungkin telah hapus permintaan koneksi. @@ -1206,7 +1172,6 @@ Pengaturan ini untuk profil Anda saat ini Kirim tanda terima diaktifkan untuk %d kontak Kirim tanda terima dimatikan untuk %d kontak - Gagal memuat server XFTP Gagal memperbarui konfigurasi jaringan Mohon perbarui aplikasi dan hubungi pengembang. Anda sudah memiliki nama tampilan profil obrolan yang sama. Silakan pilih nama lain. @@ -1476,7 +1441,6 @@ Gagal hapus Perangkat Xiaomi: harap aktifkan Autostart di pengaturan sistem agar notifikasi berfungsi.]]> Hapus obrolan - Hubungkan via tautan / kode QR Profil acak baru akan dibagikan. Permintaan koneksi terkirim! Keamanan koneksi @@ -1540,7 +1504,6 @@ batal pratinjau tautan Tombol tutup Email - pindai kode QR dalam panggilan video, atau kontak Anda dapat bagikan tautan undangan.]]> Panduan Pengguna.]]> Aktifkan Ketika lebih dari satu operator diaktifkan, tidak satupun dari mereka memiliki metadata untuk mengetahui siapa yang berkomunikasi. @@ -1556,8 +1519,6 @@ Frasa sandi enkripsi basis data akan diperbarui dan disimpan di pengaturan. Frasa sandi enkripsi basis data akan diperbarui dan disimpan di Keystore. migrasi berbeda di aplikasi/basis data: %s / %s - tunjukkan kode QR dalam panggilan video, atau bagikan tautan.]]> - Jangan buat alamat Rincian Koneksi Terhubung ke ponsel @@ -1570,13 +1531,10 @@ Kapasitas terlampaui - penerima tidak menerima pesan yang dikirim sebelumnya. hanya dengan satu kontak - bagikan secara langsung atau melalui messenger apa pun.]]> Disalin ke papan klip - Buat tautan undangan satu-kali Saat ini maksimal ukuran berkas adalah %1$s. - Buka di ponsel.]]> Pengaturan alamat Tambahkan anggota tim Anda ke percakapan. Alamat bisnis - dengan enkripsi end-to-end, dengan keamanan post-quantum dalam pesan pribadi.]]> Buat tautan 1-kali Notifikasi dan baterai Tiada layanan latar belakang @@ -1586,14 +1544,12 @@ Bagaimana ini membantu privasi Lanjutkan Anda dapat konfigurasi server di pengaturan. - repositori GitHub kami.]]> Rincian tautan unduhan untuk setiap profil obrolan yang Anda miliki di aplikasi.]]> untuk setiap kontak dan anggota grup.\nHarap diperhatikan: jika Anda memiliki banyak koneksi, konsumsi baterai dan lalu lintas dapat jauh lebih tinggi dan beberapa koneksi mungkin gagal.]]> Mengunduh pembaruan aplikasi, jangan tutup aplikasi Mati Buat alamat SimpleX - Buat alamat agar orang dapat terhubung dengan Anda. Lanjutkan Hapus gambar Edit gambar @@ -1732,7 +1688,6 @@ Gagal memulai obrolan Mode samaran Gagal hapus basis data - Kode QR tidak valid Gagal enkripsi basis data Galat Impor @@ -1883,17 +1838,14 @@ Silakan hubungi admin grup. Memuat berkas Harap tunggu sementara berkas sedang dimuat dari ponsel yang terhubung - Tertunda Negosiasi ulang enkripsi? Negosiasi ulang Kirim pesan sementara Kirim Pindai kode QR - (pindai atau tempel dari papan klip) Izin Ditolak! Tandai dibaca tautan pratinjau gambar - Anda dapat bagikan alamat sebagai tautan atau kode QR - siapa pun dapat terhubung dengan Anda. Simpan Jadikan profil pribadi! Jalankan obrolan @@ -1905,14 +1857,12 @@ Hapus frasa sandi dari pengaturan? Simpan frasa sandi di pengaturan Diproxy - Tempel tautan yang Anda terima untuk terhubung dengan kontak… lainnya Kirim pesan langsung Pesan langsung! Kode QR Memindah Alamat server - Buka pengaturan server alamat kontak dihapus Putar dari daftar obrolan. Ponsel terhubung @@ -1939,7 +1889,6 @@ Mari bicara di SimpleX Chat Simpan dan beritahu kontak Simpan preferensi? - Anda dapat buat nanti Gabung ke grup? Bergabung dengan grup Minta kontak Anda untuk aktifkan panggilan. @@ -2008,18 +1957,12 @@ Untuk memulai obrolan baru Video Koneksi yang Anda terima akan dibatalkan! - Kode QR ini bukan tautan! Bunyikan Isolasi transport - Perbarui mode isolasi transport? Untuk melindungi alamat IP, routing pribadi menggunakan server SMP untuk mengirim pesan. Perlihat kesalahan internal Lihat panggilan API lambat - Kami tidak menyimpan kontak atau pesan Anda (setelah terkirim) di server. Profil, kontak, dan pesan terkirim Anda disimpan di perangkat Anda. - Platform perpesanan dan aplikasi yang melindungi privasi dan keamanan Anda. - Untuk melindungi privasi Anda, SimpleX gunakan ID terpisah untuk setiap kontak. - Proxy SOCKS Tingkatkan dan buka obrolan Ketuk untuk gabung ke samaran Anda memblokir %s @@ -2140,7 +2083,6 @@ Pesan suara (%1$s) Lihat kode keamanan Anda perlu mengizinkan kontak mengirim pesan suara agar dapat mengirimkannya. - (untuk dibagikan dengan kontak Anda) Ketuk untuk pindai Terima kasih telah memasang SimpleX Chat! Setel nama kontak @@ -2150,7 +2092,6 @@ Anda akan terhubung saat perangkat kontak Anda online, harap tunggu atau periksa nanti! Anda akan terhubung saat permintaan koneksi Anda diterima. Harap tunggu atau periksa nanti! Bagikan tautan 1-kali - Saat orang meminta untuk terhubung, Anda dapat terima atau menolaknya. Anda tidak akan kehilangan kontak jika menghapus alamat Anda nanti. Matikan? Hentikan obrolan? @@ -2165,7 +2106,6 @@ Perlihat profil Anda harus masukkan frasa sandi setiap aplikasi dibuka - frasa sandi tidak disimpan di perangkat. Server SMP - Profil obrolan Anda akan dikirim\nke kontak Anda Bagikan alamat Peran akan diubah menjadi %s. Anggota akan menerima undangan baru. Perbarui pengaturan jaringan? @@ -2192,14 +2132,12 @@ Profil Anda saat ini Anda menggunakan profil samaran untuk grup ini - untuk mencegah berbagi profil utama Anda, undang kontak tidak diizinkan Anda mengirim undangan grup - Tautan ini bukan tautan koneksi yang valid! Anda akan berhenti menerima pesan dari grup ini. Riwayat obrolan akan disimpan. Anda bergabung ke grup ini. Menghubungkan untuk undang anggota grup. Anda buka blokir %s Menunggu desktop… Ganti profil obrolan untuk undangan 1-kali. Untuk perlihat profil tersembunyi Anda, masukkan kata sandi lengkap di kolom pencarian di halaman Profil obrolan Anda. - Anda mengendalikan obrolan Anda! Untuk terima Perlihat Perbarui pengaturan akan menghubungkan ulang klien ke semua server. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 2f19777c2b..afaac45347 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -14,7 +14,6 @@ Connettere via link una tantum? Entrare nel gruppo? Il tuo profilo verrà inviato al contatto da cui hai ricevuto questo link. - Connetti connesso errore in connessione @@ -46,8 +45,6 @@ Link gruppo SimpleX Link completo Via browser - Errore di salvataggio server SMP - Assicurati che gli indirizzi dei server SMP siano nel formato giusto, uno per riga e non doppi. Errore di aggiornamento della configurazione di rete Caricamento conversazione fallito Caricamento delle chat fallito @@ -143,13 +140,10 @@ invio fallito non letto Benvenuto/a %1$s! - Benvenuto/a! - Questo testo è disponibile nelle impostazioni Сhat Sei stato/a invitato/a in un gruppo Entra come %s in connessione… - Tocca per iniziare una conversazione Scrivi agli sviluppatori Non hai chat Condividi multimediale… @@ -182,7 +176,6 @@ Connesso Disconnesso Errore - In attesa Cambiare l\'indirizzo di ricezione\? Vedi codice di sicurezza Verifica codice di sicurezza @@ -247,7 +240,6 @@ Accettare la richiesta di connessione\? Accetta in incognito Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te. - Aggiungi server preimpostati Aggiungi server Impostazioni di rete avanzate Riguardo SimpleX @@ -263,7 +255,6 @@ 1 mese Errore nell\'importazione del database della chat Nome completo del gruppo: - scansionare il codice QR nella videochiamata, oppure il tuo contatto può condividere un link di invito.]]> Backup dei dati dell\'app L\'archivio chiavi di Android è usato per memorizzare in modo sicuro la password; permette il funzionamento del servizio di notifica. Permetti ai tuoi contatti di inviare messaggi vocali. @@ -294,9 +285,7 @@ Svuota chat Svuotare la chat\? Svuota - Connetti via link / codice QR Copiato negli appunti - Crea link di invito una tantum Crea gruppo segreto Scansiona un codice QR.]]> Dalla Galleria @@ -310,7 +299,6 @@ Eliminare la connessione in attesa\? Email aiuto - mostra il codice QR nella videochiamata, oppure condividi il link.]]> Console della chat Annulla la verifica Connetti @@ -338,7 +326,6 @@ connesso connessione… connessione chiamata… - Crea Crea profilo Elimina immagine Nome del profilo: @@ -352,7 +339,6 @@ Buono per la batteria. L\'app cerca messaggi ogni 10 minuti. Potresti perdere chiamate o messaggi urgenti.]]> Chiamata già terminata! Crea il tuo profilo - Decentralizzato Chiamata crittografata e2e Videochiamata crittografata e2e terminata @@ -522,18 +508,15 @@ (memorizzato solo dai membri del gruppo) Autorizzazione negata! Rifiuta - (scansiona o incolla dagli appunti) Scansiona un codice QR Inizia una nuova conversazione Tocca il pulsante Grazie per aver installato SimpleX Chat! Per connettersi via link - (da condividere con il tuo contatto) Per iniziare una nuova chat Fotocamera connetterti con gli sviluppatori di SimpleX Chat per porre domande e ricevere aggiornamenti.]]> Link non valido! - Codice QR non valido immagine di anteprima link Segna come già letto Segna come non letta @@ -547,8 +530,6 @@ Mostra codice QR La connessione che hai accettato verrà annullata! Il contatto con cui hai condiviso questo link NON sarà in grado di connettersi! - Questo non è un link di connessione valido! - Questo codice QR non è un link! Riattiva notifiche vuole connettersi con te! Logo di SimpleX @@ -556,8 +537,6 @@ Squadra di SimpleX Hai accettato la connessione Hai invitato il contatto - Il tuo profilo di chat verrà inviato -\nal tuo contatto Il tuo contatto deve essere in linea per completare la connessione. \nPuoi annullare questa connessione e rimuovere il contatto (e riprovare più tardi con un link nuovo). Verrai connesso/a quando la tua richiesta di connessione verrà accettata, attendi o controlla più tardi! @@ -569,7 +548,6 @@ Segna come verificato/a Link di invito una tantum Incolla - Server preimpostato Indirizzo server preimpostato Salva i server Scansiona codice @@ -583,7 +561,6 @@ SimpleX Lock %s non è verificato/a %s è verificato/a - Server SMP Alcuni server hanno fallito il test: Prova server Prova i server @@ -591,8 +568,6 @@ Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi. Usa per connessioni nuove Usa il server - Apri nell\'app mobile.]]> - Il tuo server L\'indirizzo del tuo server Il tuo indirizzo SimpleX Se confermi, i server di messaggistica saranno in grado di vedere il tuo indirizzo IP e il tuo fornitore, a quali server ti stai connettendo. @@ -618,7 +593,6 @@ Stai usando i server di SimpleX Chat. Quando disponibili I tuoi server ICE - I tuoi server SMP corsivo chiamata persa risposta ricevuta… @@ -631,36 +605,23 @@ segreto avvio… barrato - La piattaforma di messaggistica che protegge la tua privacy e sicurezza. Il profilo è condiviso solo con i tuoi contatti. in attesa di risposta… in attesa di conferma… - Non memorizziamo nessuno dei tuoi contatti o messaggi (una volta recapitati) sui server. Puoi usare il markdown per formattare i messaggi: - Sei tu a controllare la tua chat! Il tuo profilo attuale Il tuo profilo, i contatti e i messaggi recapitati sono memorizzati sul tuo dispositivo. Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti. I server di SimpleX non possono vedere il tuo profilo. Ignora - Immune allo spam Chiamata in arrivo Videochiamata in arrivo Istantaneo Come influisce sulla batteria Crea una connessione privata - Solo i dispositivi client memorizzano i profili utente, i contatti, i gruppi e i messaggi. - Chiunque può installare i server. Incolla il link che hai ricevuto - Sei tu a decidere chi può connettersi. Periodico - Privacy ridefinita Notifiche private - repository GitHub.]]> Rifiuta - Nessun identificatore utente. - Il futuro dei messaggi - Per proteggere la tua privacy, SimpleX usa ID separati per ciascuno dei tuoi contatti. - Usa la chat videochiamata videochiamata (non crittografata e2e) Quando l\'app è in esecuzione @@ -690,7 +651,6 @@ Il server relay viene usato solo se necessario. Un altro utente può osservare il tuo indirizzo IP. %1$d messaggio/i saltato/i Le tue chiamate - I tuoi server ICE La tua privacy Importa Importare il database della chat\? @@ -705,7 +665,6 @@ Invia le anteprime dei link Imposta la password per esportare Impostazioni - Proxy SOCKS Ferma Fermare la chat\? Ferma la chat per esportare, importare o eliminare il database della chat. Non potrai ricevere e inviare messaggi mentre la chat è ferma. @@ -897,7 +856,6 @@ Solo dati del profilo locale Messaggi File e multimediali - Aggiornare la modalità di isolamento del trasporto\? Tutte le chat e i messaggi verranno eliminati. Non è reversibile! Profilo di chat per ogni contatto e membro del gruppo .\n Nota: : se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.]]> @@ -1018,15 +976,11 @@ Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi! In attesa del video In attesa del video - Errore nel caricamento dei server XFTP - Errore nel salvataggio dei server XFTP Il server richiede l\'autorizzazione per l\'invio, controlla la password. Confronta file Crea file Scarica file Invia file - Server XFTP - I tuoi server XFTP Impostazioni proxy SOCKS Usa proxy SOCKS Host @@ -1034,8 +988,6 @@ porta %d Usa gli host .onion su No se il proxy SOCKS non li supporta.]]> Elimina file - Errore nel caricamento dei server SMP - Assicurati che gli indirizzi del server XFTP siano nel formato corretto, uno per riga e non doppi. Autenticazione fallita Inserimento del codice di accesso Modalità di SimpleX Lock @@ -1093,8 +1045,6 @@ Solo il tuo contatto può effettuare chiamate. Proibisci le chiamate audio/video. Chiamate audio/video - " -\nDisponibile nella v5.1" Consenti ai tuoi contatti di chiamarti. Codice di accesso dell\'app Veloce e senza aspettare che il mittente sia in linea! @@ -1106,12 +1056,10 @@ Cambia i profili di chat Maggiori informazioni Per connettervi, il tuo contatto può scansionare il codice QR o usare il link nell\'app. - Quando le persone chiedono di connettersi, puoi accettare o rifiutare. Indirizzo SimpleX Colori dell\'interfaccia I tuoi contatti resteranno connessi. Aggiungi l\'indirizzo al tuo profilo, in modo che i tuoi contatti di SimpleX possano condividerlo con altre persone. L\'aggiornamento del profilo verrà inviato ai tuoi contatti di SimpleX. - Crea un indirizzo per consentire alle persone di connettersi con te. Crea indirizzo SimpleX Condividi con i contatti di SimpleX Condividere l\'indirizzo con i contatti di SimpleX? @@ -1121,7 +1069,6 @@ \nConnettiti a me tramite SimpleX Chat: %s Invita amici Salva le impostazioni dell\'indirizzo SimpleX - Puoi crearlo più tardi Condividi indirizzo… Inserisci il messaggio di benvenuto… Anteprima @@ -1144,7 +1091,6 @@ Sfondo Continua Errore di impostazione dell\'indirizzo - Non creare un indirizzo Personalizza il tema Tema scuro Se non potete incontrarvi di persona, mostra il codice QR in una videochiamata o condividi il link. @@ -1155,7 +1101,6 @@ Smettere di condividere l\'indirizzo\? Salvare le impostazioni\? Non perderai i contatti se in seguito elimini il tuo indirizzo. - Puoi condividere il tuo indirizzo come link o codice QR: chiunque può connettersi a te. Apertura del database… Cambia modalità di autodistruzione Attiva il codice di autodistruzione @@ -1336,13 +1281,11 @@ Questo gruppo ha più di %1$d membri, le ricevute di consegna non vengono inviate. Connettersi direttamente\? La richiesta di connessione verrà inviata a questo membro del gruppo. - Connetti in incognito Usa il profilo attuale Usa nuovo profilo in incognito Consenti Apri impostazioni app L\'app potrebbe venire chiusa dopo 1 minuto in secondo piano. - Incolla il link che hai ricevuto per connetterti con il contatto… Verrà condiviso il tuo profilo %1$s. Verrà condiviso un nuovo profilo casuale. Disattiva le notifiche @@ -1514,7 +1457,6 @@ Apri porta nel firewall errore di visualizzazione del contenuto errore di visualizzazione del messaggio - Puoi renderlo visibile ai tuoi contatti SimpleX nelle impostazioni. La cronologia non viene inviata ai nuovi membri. Riprova Fotocamera non disponibile @@ -1903,7 +1845,6 @@ Eliminato Errori di eliminazione File scaricati - Apri impostazioni server Protetto Indirizzo server Dimensione @@ -1916,8 +1857,6 @@ La versione del server non è compatibile con la tua app: %1$s. Membro inattivo Il messaggio può essere consegnato più tardi se il membro diventa attivo. - Server SMP configurati - Altri server SMP Mostra percentuale inattivo Zoom @@ -1935,7 +1874,6 @@ Sessioni di trasporto Tutti i profili tentativi - Server XFTP configurati Completato Server connessi disattivato @@ -1952,7 +1890,6 @@ Partendo da %s. \nTutti i dati sono privati, nel tuo dispositivo. Ancora nessuna connessione diretta, il messaggio viene inoltrato dall\'amministratore. Non sei connesso/a a questi server. L\'instradamento privato è usato per consegnare loro i messaggi. - Altri server XFTP Server precedentemente connessi Riprova più tardi. Beta @@ -2203,7 +2140,6 @@ Dispositivi Xiaomi: attiva l\'avvio automatico nelle impostazioni di sistema per fare funzionare le notifiche.]]> Aggiungi i membri del tuo team alle conversazioni. Indirizzo di lavoro - cifrati end-to-end, con sicurezza quantistica nei messaggi diretti.]]> Controlla i messaggi ogni 10 minuti Come aiuta la privacy Invita in chat diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index a2113482d9..e42232f93a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -17,7 +17,6 @@ אפשר כל ההודעות יימחקו – לא ניתן לבטל זאת! ההודעות יימחקו רק עבורך. אשר זהות נסתרת - הוסף שרתים מוגדרים מראש הוסף שרת לגשת לשרתים דרך פרוקסי SOCKS בפורט %d\? הפרוקסי חייב לפעול לפני הפעלת אפשרות זו. הגדרות רשת מתקדמות @@ -85,8 +84,6 @@ מזהה הודעה שגוי קבל אוטומטית תמונות שימו לב: לא ניתן יהיה לשחזר או לשנות את הסיסמה אם תאבדו אותה.]]> - " -\nזמין מ־v5.1" גם אתם וגם איש הקשר יכולים לשלוח הודעות קוליות. גם אתם וגם איש הקשר יכולים לבצע שיחות. אשר אוטומטית בקשות ליצירת קשר. @@ -117,7 +114,6 @@ השיחה הסתיימה %1$s בטל תצוגה מקדימה של קבצים להתחבר באמצעות קישור ליצירת קשר? - התחבר להצטרף לקבוצה? מחובר מתחבר @@ -197,7 +193,6 @@ להתחבר דרך קישור חד-פעמי? איש הקשר כבר קיים איש הקשר וכל ההודעות יימחקו – לא ניתן לבטל זאת! - התחברות באמצעות קישור / קוד QR התחברות באמצעות קישור איש הקשר מאפשר איש קשר מוסתר: @@ -211,12 +206,10 @@ העתק סמל מידע נוסף הועתק ללוח - צור קישור הזמנה חד־פעמי צור קבוצה סודית תרומה גרסת ליבה: v%s צור כתובת - צור צור פרופיל יצירת הפרופיל שלך צור קישור קבוצה @@ -246,8 +239,6 @@ מחק מחק מחק שרת - צרו כתובת כדי לאפשר לאנשים להתחבר אליכם. - מבוזר מסד הנתונים מוצפן באמצעות סיסמה אקראית. אנא שנו אותה לפני הייצוא. מחק פרופיל צ׳אט ברירת מחדל (%s) @@ -317,7 +308,6 @@ נעילת המכשיר אינה מופעלת. ניתן להפעיל את נעילת SimpleX, לאחר שתפעילו את נעילת המכשיר. %d קבצים בגודל כולל של %s שגיאה - שגיאה בטעינת שרתי SMP שגיאה ביצירת פרופיל! שם תצוגה כבר קיים! שגיאה ביצירת כתובת @@ -353,7 +343,6 @@ שגיאה בשינוי כתובת שגיאה במחיקת פרופיל משתמש השבתת נעילת SimpleX - לא ליצור כתובת מושבת הודעה כפולה שגיאה במחיקת מסד הנתונים של הצ׳אט @@ -399,7 +388,6 @@ הזינו הודעת פתיחה… שגיאה במחיקת איש קשר שגיאה במחיקת חיבור איש קשר ממתין - שגיאה בטעינת שרתי XFTP שגיאה בשליחת הודעה שגיאה בקבלת קובץ שגיאה בשמירת שרתי ICE @@ -410,8 +398,6 @@ שגיאה בשמירת קובץ יציאה ללא שמירה שגיאה בעצירת צ׳אט - שגיאה בשמירת שרתי SMP - שגיאה בשמירת שרתי XFTP שגיאה בהחלפת פרופיל! שגיאה בעדכון תצורת הרשת טעינת הצ׳אט נכשלה @@ -453,7 +439,6 @@ הקובץ יימחק מהשרתים. הפוך מצלמה עזרה - הציגו את קוד ה־QR בשיחת וידאו, או שתפו את הקישור.]]> איך איך להשתמש בשרתים שלך שרתי ICE (אחד בכל שורה) @@ -473,7 +458,6 @@ מוסתר הסתר איש קשר והודעה הסתר - לסרוק את קוד ה־QR בשיחת וידאו, או שאיש הקשר שלך ישתף קישור הזמנה.]]> אם לא ניתן להיפגש פנים אל פנים, הציגו את קוד ה־QR בשיחת וידאו, או שתפו את הקישור. איך להשתמש בזה היי! @@ -504,7 +488,6 @@ התעלם מיד ייבא מסד נתונים - חסין מפני ספאם לייבא מסד נתונים של צ׳אט\? תמונה נשלחה התמונה תתקבל כאשר איש הקשר יסיים להעלות אותה. @@ -541,7 +524,6 @@ התראות מיידיות התראות מיידיות! קישור לא תקין! - קוד QR לא תקין קוד אבטחה שגוי! מיידית שיחת שמע נכנסת @@ -576,8 +558,6 @@ עזוב הפוך את הפרופיל לפרטי! הודעה חיה - ודאו שכתובות שרתי ה־SMP הן בפורמט הנכון, מופרדות בשורה ולא משוכפלות. - ודאו שכתובות שרתי ה־XFTP הן בפורמט הנכון, מופרדות בשורה ולא משוכפלות. התחבר באמצעות האישור שלך למדו עוד עזרה במרקדאון @@ -662,7 +642,6 @@ \nשימו לב: לא תוכלו להתחבר לשרתים ללא כתובת .onion. לא ייעשה שימוש במארחי Onion. שיחה שלא נענתה - הצפנה מקצה־לקצה דו־שכבתית.]]> ללא הצפנה מקצה־לקצה שיחה שלא נענתה קוד גישה חדש @@ -730,10 +709,6 @@ אנא צרו קשר עם מנהל הקבוצה. אנא בקשו מאיש הקשר שלכם לאפשר שליחת הודעות קוליות. שומר מקום לתמונת פרופיל - שרת מוגדר מראש - פרטיות מוגדרת מחדש - אנשים יכולים להתחבר אליכם רק דרך הקישורים שאתם משתפים. - כל אחד יכול לארח שרתים. תקופתי נא להזין את הסיסמה הקודמת לאחר שחזור גיבוי מסד הנתונים, לא ניתן לבטל פעולה זו. לאסור מחיקה בלתי הפיכה של הודעות. @@ -743,7 +718,6 @@ ייתכן שטביעת האצבע של התעודה בכתובת השרת שגויה פתיחת מסוף צ׳אט שנה פרופילי צ׳אט - ממתין כתובת שרת מוגדר מראש סיסמה להצגה התראות פרטיות @@ -786,7 +760,6 @@ דחיה מדריך למשתמש.]]> דרגו את האפליקציה - GitHub repository שלנו.]]> יבוצע שימוש בשרת ממסר רק במידת הצורך. גורם אחר יכול לצפות בכתובת ה־IP שלך. שרת ממסר מגן על כתובת ה־IP שלך, אך הוא יכול לראות את משך השיחה. שיחה נדחתה @@ -853,7 +826,6 @@ הצג בטל קובץ שליחה נכשלה - (סירקו או הדביקו מהלוח) שלח סירקו קוד אבטחה מהאפליקציה של איש הקשר שלך. השמדה עצמית @@ -900,7 +872,6 @@ נשלח שלחו שאלות ורעיונות בדיקת השרתים נכשלה! - פרוקסי SOCKS נשלח ב: %s הגדרת שם איש קשר… שלח הודעה @@ -967,7 +938,6 @@ לעצור קבלת קובץ\? לשנות כתובת קבלה\? כתובת SimpleX - שרתי SMP שתף עם אנשי קשר הצג רמקול כבוי @@ -989,7 +959,6 @@ בזכות המשתמשים – תרמו באמצעות Weblate! בזכות המשתמשים – תרמו באמצעות Weblate! בזכות המשתמשים – תרמו באמצעות Weblate! - הקישו כדי להתחיל צ׳אט חדש בדוק שרת בדוק שרתים הקישו על הכפתור @@ -1003,20 +972,15 @@ האפליקציה בודקת הודעות חדשות מעת לעת - היא משתמשת בכמה אחוזים מהסוללה ביום. האפליקציה לא משתמשת בהתראות דחיפה - נתונים מהמכשיר שלך לא נשלחים לשרתים. התפקיד ישתנה ל־"%s". כל חברי הקבוצה יקבלו הודעה על כך. כדי להתחבר באמצעות קישור - פלטפורמת ההודעות והיישומים המגנה על הפרטיות והאבטחה שלך. המזהה של ההודעה הבאה שגוי (קטן או שווה להודעה הקודמת). \nזה יכול לקרות בגלל באג כלשהו או כאשר החיבור נפגע. ערכת נושא מסד הנתונים אינו פועל כראוי. הקישו למידע נוסף - טקסט זה זמין בהגדרות יותר מדי תמונות! תודה שהתקנתם את SimpleX Chat! - קישור זה אינו קישור חיבור תקין! צבעי ממשק התפקיד ישתנה ל־"%s". החבר יקבל הזמנה חדשה. השרתים לחיבורים חדשים של פרופיל הצ׳אט הנוכחי שלך - הפלטפורמה הראשונה ללא כל מזהי משתמש - פרטית בעיצובה. - הדור הבא של תקשורת פרטית הגיבוב של ההודעה הקודמת שונה. לא ניתן לבטל פעולה זו - ההודעות שנשלחו והתקבלו לפני הזמן שנבחר יימחקו. זה עשוי להימשך מספר דקות. הקבוצה הזו כבר לא קיימת. @@ -1025,7 +989,6 @@ כתובת הקבלה תשתנה לשרת אחר. שינוי הכתובת יושלם לאחר שהשולח יתחבר לאינטרנט. החיבור שאישרת יבוטל! איש הקשר שאיתו שיתפת את הקישור הזה לא יוכל להתחבר! - קוד QR זה אינו קישור! כדי להתחבר, איש הקשר שלך יכול לסרוק קוד QR או להשתמש בקישור באפליקציה. מחרוזת טקסט זו אינה קישור חיבור! הפרופיל משותף רק עם אנשי הקשר שלך. @@ -1036,7 +999,6 @@ הניסיון לשנות את סיסמת מסד הנתונים לא הושלם. כותרת הקבוצה מבוזרת לחלוטין - היא גלויה רק לחברי הקבוצה. - כדי לשמור על הפרטיות, במקום מזהי משתמש הקיימים בכל הפלטפורמות האחרות, ל־SimpleX יש מזהים לתורי הודעות, נפרדים עבור כל אחד מאנשי הקשר שלך. משתמש בשרתי SimpleX Chatז מנסה להתחבר לשרת המשמש לקבלת הודעות מאיש קשר זה. אלא אם איש הקשר שלכם מחק את החיבור או שהקישור הזה כבר היה בשימוש, זה עשוי להיות באג - אנא דווחו על כך. \nכדי להתחבר, אנא בקשו מאיש הקשר שלכם ליצור קישור חיבור נוסף ובידקו שיש לכם חיבור יציב לרשת. @@ -1055,12 +1017,10 @@ שליחה לא מורשית לא נקרא אימות קוד אבטחה - (כדי לשתף עם איש הקשר שלך) כדי להתחיל צ׳אט חדש השתמש עבור חיבורים חדשים כדי לאמת הצפנה מקצה־לקצה עם איש הקשר שלכם, יש להשוות (או לסרוק) את הקוד במכשירים שלכם. פרופילי צ׳אט - לעדכן מצב בידוד תעבורה\? מנסה להתחבר לשרת המשמש לקבלת הודעות מאיש קשר זה (שגיאה: %1$s). פורמט הודעה לא ידוע דרך הדפדפן @@ -1069,7 +1029,6 @@ להשתמש בשרתי SimpleX Chat\? להשתמש בחיבור ישיר לאינטרנט\? כדי לחשוף את הפרופיל המוסתר שלכם, הזינו סיסמה מלאה בשדה חיפוש בדף פרופילי צ׳אט. - שימוש בצ׳אט עדכן שגיאת מסד נתונים לא ידועה: %s עידכן את פרופיל הקבוצה @@ -1083,7 +1042,6 @@ בטל השתקה ממתין לאישור… ממתין למענה… - איננו מאחסנים את אנשי הקשר או ההודעות שלך (לאחר המסירה) בשרתים. SimpleX אתם באמצעות קישור לכתובת איש קשר @@ -1110,7 +1068,6 @@ אתם כבר מחוברים ל־%1$s. שירות SimpleX Chat לא ניתן היה לאמת אתכם; אנא נסו שוב. - ברוכים הבאים! ברוכ/ה הבא/ה %1$s! הוזמנת לקבוצה ממתין לתמונה @@ -1137,7 +1094,6 @@ הודעה קולית אישרת את החיבור סמל SimpleX - שרתי XFTP דילג על %1$d הודעות. סיסמת מסד נתונים שגויה הוזמנת לקבוצה @@ -1153,12 +1109,7 @@ ממתין לקובץ הודעות קוליות אסורות! הזמנת את איש הקשר שלך - באפשרותכם לשתף את הכתובת שלכם כקישור או כקוד QR – כל אחד יכול להתחבר אליכם. - כאשר אנשים מבקשים להתחבר, באפשרותך לקבל או לדחות זאת. - פתח באפליקציה.]]> כשזמין - תוכלו ליצור אותה מאוחר יותר - אתם שולטים בצ׳אט שלכם! באפשרותך להשתמש במרקדאון כדי לעצב הודעות: כאשר האפליקציה פועלת %1$s רוצה שתתחברו דרך @@ -1189,15 +1140,12 @@ הצ׳אטים איש הקשר שלך שלח קובץ גדול יותר מהגודל המרבי הנתמך כעת (%1$s). איש הקשר שלך צריך להיות מקוון כדי שהחיבור יושלם.\nניתן לבטל חיבור זה ולהסיר את איש הקשר (ולנסות מאוחר יותר עם קישור חדש). - פרופיל הצ׳אט שלך יישלח -\nלאיש הקשר שלך מסד הנתונים שלך דחית את ההזמנה לקבוצה מסד הנתונים הנוכחי שלך יימחק ויוחלף במסד הנתונים המיובא. \nלא ניתן לבטל פעולה זו – הפרופיל, אנשי הקשר, ההודעות והקבצים שלך ייאבדו באופן בלתי הפיך. הפרופיל הנוכחי שלך אנשי הקשר שלך יישארו מחוברים. - שרתי ה־ICE שלך אתם תהיו מחוברים כאשר בקשת החיבור תאושר, אנא חכו או בידקו מאוחר יותר! הפרופיל שלך יישלח לאיש הקשר ממנו קיבלת קישור זה. תתחבר לכל חברי הקבוצה. @@ -1210,16 +1158,13 @@ הפרטיות שלך תידרשו לבצע אימות כאשר תפעילו או תחזרו לאפליקציה לאחר 30 שניות ברקע. ההגדרות שלך - השרת שלך כתובת השרת שלך - שרתי XFTP שלך שלחת הזמנה לקבוצה שיתפת קישור חד־פעמי אתם תהיו מחוברים לקבוצה כאשר המכשיר של מארח הקבוצה יהיה מקוון, אנא חכו או בידקו מאוחר יותר! אתם תהיו מחוברים כאשר המכשיר של איש הקשר שלך יהיה מקוון, אנא חכו או בידקו מאוחר יותר! לא תאבדו את אנשי הקשר שלכם אם תמחקו מאוחר יותר את הכתובת שלכם. כתובת SimpleX שלך - שרתי SMP שלך הפרופיל שלך מאוחסן במכשירך ומשותף רק עם אנשי הקשר שלך.\nשרתי SimpleX אינם יכולים לראות את הפרופיל שלך. הפרופיל, אנשי הקשר וההודעות שנמסרו מאוחסנים במכשיר שלך. אתם תפסיקו לקבל הודעות מקבוצה זו. היסטוריית הצ׳אט תישמר. @@ -1309,14 +1254,12 @@ גם אם הוא מושבת בשיחה. שימרו על הקשרים שלכם בחר קובץ - התחבר בזהות נסתרת השתמש בפרופיל הנוכחי השתמש בפרופיל זהות נסתרת חדש השבת התראות פתח את הגדרות האפליקציה ללא שיחות ברקע ישותף פרופיל אקראי חדש. - הדבק את הקישור שקיבלת כדי להתחבר לאיש הקשר שלך… הפרופיל שלך %1$s ישותף. קבלות מושבתות %s :%s @@ -1396,7 +1339,6 @@ פתח מסך העברה הרחב הקוד שסרקת אינו קוד QR של קישור SimpleX. - תוכל להפוך אותו לגלוי לאנשי הקשר שלך ב-SimpleX דרך ההגדרות. שם לא חוקי! הגדר סיסמא לא ידוע @@ -1822,7 +1764,6 @@ שגיאה בהתחברות לשרת %1$s, אנא נסה מאוחר יותר אין עדיין חיבור ישיר, ההודעה תעובר ע"י מנהל. חבר לא פעיל - שרתי XFTP אחרים הצג אחוזים מושבת יציבה @@ -1872,7 +1813,6 @@ נשלח דרך פרוקסי קבצים שהורדו שגיאות בהורדה - פתח הגדרות שרת כתובת שרת חריגה מהקיבולת - הנמען לא קיבל הודעות שנשלחו בעבר. בדוק עבור עדכונים @@ -1889,7 +1829,6 @@ קישורי SimpleX לא מאופשרים בקבוצה הזו. סרוק/ הדבק קישור אנא נסה מאוחר יותר - שרתי SMP אחרים אפס הועלה סטטיסטיקה מפורטת @@ -1957,7 +1896,6 @@ %s.]]> מכשירי שיואמי: אנא תאפשר הפעלה אוטומטית בהגדרות הטלפון שלך כדי שההתראות על הודעות חדשות יפעלו.]]> %1$s ההודעות לא הועברו. - מוצפנים מקצה לקצה, עם אבטחה פוסט-קוונטית בהודעות ישירות.]]> טישטוש עסקי %s, קבל את תנאי השימוש.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index c28136d201..e5c425e7d7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -3,7 +3,6 @@ 1日 1週間 受けた通話 - 既存サーバを追加 管理者 管理者はグループの参加リンクを発行できます。 ネットワーク詳細設定 @@ -98,7 +97,6 @@ %d分 グループのリンク k - 接続 接続中 エラー 接続待ち @@ -121,7 +119,6 @@ 削除する ファイルを保存しました 連絡先を削除しますか? - リンク・QRコード経由で繋がる 検証済みにマーク 使い方 必須 @@ -137,7 +134,6 @@ グループリンク発行にエラー発生 役割変更にエラー発生 チャットデータベースの書き出しでエラー発生 - SMPサーバ保存でエラー発生 ICEサーバ保存でエラー発生 ネットワーク設定の更新にエラー発生 ファイル @@ -151,14 +147,12 @@ グループのプロフィールが更新されました。 連絡先とメッセージ内容をプライベートにする。 通知の常時受信 - SMPサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。 WebRTC ICEサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。 通話中 電池消費がより高い!非アクティブ時でもバックグラウンドのサービスが常に稼働します(着信してすぐに通知が出ます)。]]> 発信中 通話終了 %1$s 通話が終了しました。 - ビデオ通話中にQRコードを見せてもらうか、招待リンクを送ってもらえば相手に繋がります。]]> メンバーをグループから除名する (※元に戻せません※)! 通話をロック画面に表示 リンクのプレビューを中止 @@ -167,7 +161,6 @@ ファイル受信ができません。 連絡先を招待できません! 変更 - ビデオ通話にてQRコードを見せるか、招待リンクを送って、相手に繋がります。]]> あなたのアドレスを変えました。 アドレスを変更しています… チャットのデータベース @@ -217,7 +210,6 @@ オニオンのホストが利用可能時に使われます。 オニオンのホストが使われません。 画像を1回で最大10枚を送信できます。 - 2層エンドツーエンド暗号化で送信されたプロフィール、連絡先、グループ、メッセージは、クライント端末にしか保存されません。]]> グループ設定を変えられるのはグループのオーナーだけです。 音声メッセージを利用可能に設定できるのはグループのオーナーだけです。 プロフィールを作成する @@ -256,13 +248,11 @@ TCPキープアライブを有効にする メール 設定メニューでロック画面からの通話を有効にできます。 - あなたと繋がることができるのは、あなたからリンクを頂いた方のみです。 仮のプロフィール画像 QRコード リンクが正しいかどうかご確認ください。または、連絡相手にもう一度リンクをお求めください。 %1$s との接続を確認し、もう一度お試しください。 現在の正しいパスフレーズを入力してください。 - プレセットサーバ プレセットサーバのアドレス 接続待ち… 連絡先リンク経由でシークレットモード @@ -290,7 +280,6 @@ 全員用 ファイル保存でエラー発生 接続中 - 確認待ち キャンセル 使い捨ての招待リンク 音声メッセージを録音 @@ -298,7 +287,6 @@ 削除 ヘルプ 無効なリンク! - 無効なQRコード つづき 誤ったセキュリティコード! 貼り付け @@ -319,12 +307,9 @@ 接続中 発信中… 終了 - 誰でもサーバーをホストできます。 - プライバシーを再定義 技術の説明 プライベートな接続をする プライベートな通知 - GitHubリポジトリで詳細をご確認ください。]]> エンドツーエンド暗号化済みビデオ通話 無効にする エンドツーエンド暗号化がありません @@ -497,7 +482,6 @@ 詳細がありません 戻す クリップボードにコピー完了 - 使い捨てリンクを発行する シークレットグループを作成する (グループのメンバーのみに保存されてます) 「QRコードを読み取る」経由でアプリに表示されるQRコードを読み取る]]> @@ -522,12 +506,9 @@ アドレスを削除? プロフィール名: フルネーム: - 作成 あなたの名前を入力: 色付き 応答 - 分散型 - スパム耐性 常時受信 定期的に受信 通話は既に終了してます! @@ -651,9 +632,7 @@ リンク経由で接続 セキュリティコード %s は認証済み - SMPサーバ 保存 - トランスポート隔離モードを更新しますか? この設定でよろしいですか? ビデオオフ リレー経由 @@ -678,9 +657,7 @@ 起動時、または非アクティブ状態で30秒が経った後に戻ると、認証する必要となります。 共有する 非認証の送信 - このテキストは設定にあります。 画像数の上限を超えてます! - ようこそ! グループ招待が届きました チャット 連絡先を設定… @@ -688,8 +665,6 @@ 受信アドレスを変えますか? 送信する ライブメッセージを送信 (入力しながら宛先の画面で更新される) - (連絡先に共有) - (クリップボードから読み込むか、貼り付ける) SimpleX Chatをご利用いただきありがとうございます! カメラ 接続を承認しました @@ -698,12 +673,8 @@ あなたからリンクを受けた連絡先が接続できなくなります! SimpleXアドレス QRコードを表示 - このリンクは有効な接続リンクではありません! - このQRコードはリンクではありません! グループのホスト端末がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。 連絡先がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。 - あなたのチャットプロフィールが -\n連絡先に公開されます。 ワンタイムリンクを送る コードを読み込む 連絡相手のアプリからセキュリティコードを読み込む @@ -714,7 +685,6 @@ サーバを保存 サーバテスト失敗! サーバを使う - あなたのサーバ あなたのサーバアドレス 現在のチャットプロフィールの新しい接続のサーバ 新しい接続に使う @@ -728,20 +698,15 @@ 保存して連絡先に公開 現在のプロフィール 保存して連絡先に公開 - あなたのプライバシーとセキュリティを守るメッセージとアプリのプラットフォーム - 連絡先情報と届けたメッセージをサーバに保存することは一切ありません。 - あなたのチャットはあなたが決めます! あなたのプロフィール、連絡先、送信したメッセージがご自分の端末に保存されます。 プロフィールは連絡先にしか共有されません。 メッセージの書式をマークダウンで編集できます。 シークレット 取り消し線 接続中… - 次世代のプライベートメッセンジャー ビデオ通話 アプリがアクティブ時のみ WebRTC ICEサーバ - あなたのICEサーバ 設定 飛ばしたメッセージ あなた @@ -834,7 +799,6 @@ ロック解除 保存 開示する - タップして新しいチャットを始める 画像が解読できません。別のイメージで試すか、開発者に伝えてください。 画像を待機中 画像を待機中 @@ -847,7 +811,6 @@ ミュート解除 連絡先を設定 あなたと接続を希望しています! - Open in mobile app (アプリで開く)ボタンをクリックしてください。]]> チャットプロフィール サーバのQRコードを読み込む テストに失敗したサーバがあります: @@ -857,8 +820,6 @@ simplexmq: バージョン%s (%2s) 応答を待機中… 確認を待機中… - 世界初のユーザーIDのないプラットフォーム - プライバシーに配慮した設計 - チャット %1$sは次の方法であなたと繋がりたいです: ビデオ通話 (非エンドツーエンド暗号化) 表示 @@ -883,7 +844,6 @@ SimpleX Chatを支援 テストサーバ 受信アドレスは別のサーバーに変更されます。アドレス変更は送信者がオンラインになった後に完了します。 - あなたのプライバシーを守るために、他のアプリと違って、ユーザーIDの変わりに SimpleX メッセージ束毎にIDを配布し、各連絡先が別々と扱います。 あなたのチャットプロフィールが他のグループメンバーに公開されます。 エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。 このコンタクトから受信するメッセージのサーバに接続しようとしてます。(エラー: %1$s)。 @@ -899,13 +859,11 @@ シークレットモードのプロフィールでこのグループに参加しています。メインのプロフィールを守るために、招待することができません。 使い捨てリンクを送りました リンクを送ってくれた連絡先にあなたのプロフィールを送ります。 - あなたのSMPサーバ あなたのSimpleXアドレス 連絡先が繋がりリクエストを承認したら、接続されます。後でチェックするか、しばらくお待ちください。 受信アドレスを変える あなたのランダム・プロフィール 音声メッセージ - SOCKSプロキシ データベースのエクスポート、読み込み、削除するにはチャット機能を停止する必要があります。チャット機能を停止すると送受信ができなくなります。 あなたのプロフィール、連絡先、メッセージ、ファイルが完全削除されます (※元に戻せません※)。 データベースパスフレーズを更新 @@ -915,7 +873,6 @@ 連絡先を選択 今はメンバーを招待しません %1$sメンバー - XFTPサーバ ウェルカムメッセージを保存しますか? 次から表示しない パスコードを変更 @@ -963,7 +920,6 @@ 音声/ビデオ通話 音声/ビデオ通話は禁止されています。 受信拒絶 - XFTPサーバーのアドレスが正しい形式で、行で区切られており、重複していないことを確認してください。 ファイルの削除 ビデオ待機中 ビデオを待機中 @@ -975,7 +931,6 @@ ビデオ ← から: SOCKSプロキシー設定 - あなたのXFTPサーバ プロフィールにアドレスを追加し、連絡先があなたのアドレスを他の人と共有できるようにします。プロフィールの更新は連絡先に送信されます。 自動承認 ロックモード @@ -1006,12 +961,9 @@ 音声/ビデオ通話を禁止する 。 連絡先からの通話を許可する。 連絡先が通話を許可している場合のみ通話を許可する。 - " -\nv5.1 で利用可能" 連絡先からのみ通話ができます。 あなたからも連絡先からも通話ができます。 システム - XFTP サーバーの保存中にエラーが発生しました ファイルを作成 メッセージはすべてのメンバーに対して削除されます。 確認できませんでした。 もう一度お試しください。 @@ -1025,7 +977,6 @@ インターフェースカラー 共有を停止 友人を招待する - 後からでも作成できます ここにパスワードを入力してください。 認証がキャンセルされました アドレスを共有する @@ -1047,9 +998,7 @@ 1GBまでのビデオとファイル %1$d メッセージの復号化に失敗しました。 %1$d メッセージをスキップしました - SMPサーバーのロード中にエラーが発生しました ユーザーパスワードの保存中にエラー発生 - XFTPサーバーのロード中にエラーが発生しました テーマのエクスポート ファイルはサーバーから削除されます。 直接会えない場合は、ビデオ通話で QR コードを表示するか、リンクを共有してください。 @@ -1078,7 +1027,6 @@ 次のメッセージの ID が正しくありません (前のメッセージより小さいか等しい)。 \n何らかのバグが原因で、または接続に問題があった場合に発生する可能性があります。 ユーザーに感謝します – Weblate 経由で貢献してください! - 接続が要求されたら、それを受け入れるか拒否するかを選択できます。 ビデオが送信されました 管理者は次のことができます。 \n- メンバーのメッセージを削除します。 @@ -1139,16 +1087,13 @@ 表示にする 非表示プロフィールのパスワード 表示する: - 人々があなたとつながるためのアドレスを作成します。 アドレス設定エラー - アドレスをリンクまたは QR コードとして共有すると、誰でもあなたに接続できます。 後でアドレスを削除しても、連絡先が失われることはありません。 連絡先との接続は維持されます。 連絡先との接続は維持されます。 プロフィールの更新が連絡先に共有されます。 SimpleX のアドレスを作成 連絡先に公開する プロフィールの更新は連絡先に送信されます。 - アドレスを作成しない SimpleXチャットで会話しよう 自動受け入れ設定を保存する プロフィールのパスワードを保存する @@ -1300,7 +1245,6 @@ ファイルやメディアを有効にできるのは、グループオーナーだけです。 再接続 再起動 - シークレットモードで接続 許可 直接接続しますか\? 新しいランダムなプロファイルが共有されます。 @@ -1321,7 +1265,6 @@ 配信通知の送信が%d件のグループで無効になっています 無効 バックグラウンド通話なし - 受信したリンクを貼り付け、連絡先に接続する。 %s と %s は接続中 SimpleXはバックグラウンドでは動作できません。アプリが起動している時のみ通知を受け取ることができます。 送信情報なし @@ -1454,7 +1397,6 @@ %sと%s 新規モバイルデバイス 同時に動作するのはひとつのデバイスだけです。 - 設定でSimpleXの連絡先に表示させることができます。 %1$sに参加しています。]]> これはあなた自身のワンタイムリンクです! チャットが停止しています。このデータベースを他のデバイスで既に使用している場合は、チャットを開始する前に転送し直してください。 @@ -1826,9 +1768,7 @@ アップデートを確認 アップデートを確認 完了 - SMPサーバーの構成 接続中 - XFTPサーバーの構成 連絡先 メッセージサーバ メディア&ファイルサーバ @@ -2290,9 +2230,7 @@ あなたのプロフィール プロフィールを変更できません 接続試行後に別のプロフィールを使用するには、チャットを削除してリンクをもう一度使用してください。 - その他のSMPサーバ 新しいサーバ - その他のXFTPサーバ プロキシ認証 ランダムな認証情報を使用 プロフィールごとに異なるプロキシ認証情報を使用します。 @@ -2368,7 +2306,6 @@ 監視されることなく他者と話すという、人類最古の自由を — それを裏切ることのできないインフラの上に築く。 私たちは、あなたが誰であるかを知る力を破壊したからだ。あなたの力が決して奪われないように。 あなたのネットワークで自由に。 - エンドツーエンドで暗号化されて送信され、ダイレクトメッセージではポスト量子暗号で保護されます。]]> 通知とバッテリー ネットワーク運営者 アプリは会話ごとに異なる運営者を使用することで、あなたのプライバシーを保護します。 @@ -2677,7 +2614,6 @@ サイズ アップロードエラー サーバアドレス - サーバ設定を開く 1つのメッセージにつき最大 %1$s 人のメンバーをメンションできます! 購読者 オーナーと貢献者 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index a4fd13d137..880d328df6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -31,7 +31,6 @@ 라이브 메시지 취소 파일 확인 - 링크 / QR 코드로 연결 클립보드로 복사됨 비밀 그룹 생성 수락 @@ -42,7 +41,6 @@ 채팅을 지우겠습니까\? 연결 요청이 전송되었습니다! 링크로 연결 - 프리셋 서버 추가 서버 추가 채팅 콘솔 서버 주소를 확인 후 다시 시도해 주세요. @@ -62,7 +60,6 @@ 색깔 암호 확인 전화 연결 중… - 생성 프로필 생성 통화 오류 연결됨 @@ -128,7 +125,6 @@ 중국어 및 스페인어 인터페이스 SimpleX에 대하여 수락 - 일회용 초대 링크 생성 주소 생성 1일 SimpleX Chat에 대하여 @@ -184,7 +180,6 @@ 채팅이 멈춤 채팅 설정 개발자와 채팅 - 연결 연결 중… 닫기 버튼 연결 @@ -221,7 +216,6 @@ 주소 삭제 주소를 삭제할까요\? 이미지 삭제 - 탈중앙화 개발자 도구 기기 데이터베이스 암호 @@ -357,7 +351,6 @@ 부재 중 전화 사용 안 함 질문이나 아이디어 보내기 - (스캔하거나 클립보드에서 붙여넣기) 대화 상대가 현재 지원되는 최대 크기(%1$s)보다 큰 파일을 보냈습니다. 초대를 받았어요. 프로필 생성 오류! @@ -369,8 +362,6 @@ 상대의 연락처 링크로 익명 연결 상대의 연락처 링크로 연결 일회용 링크로 익명 연결 - SMP 서버 주소가 올바른 형식이고 줄로 구분되어 있고 중복이 없는지 확인해 주세요. - SMP 서버 저장 오류 네트워크 설정 업데이트 오류 프로필 변경 오류! 동일한 표시 이름을 가진 채팅 프로필이 있어요. 다른 이름을 선택해 주세요. @@ -516,7 +507,6 @@ 보내기 실패 비인증 전송 도움말 - 개인을 식별할 수 있는 어떠한 정보(임의의 숫자 포함)도 없는 첫 번째 플랫폼. 단순히 약속이 아니라 프로그램 설계상 완전한 익명성을 제공해요. 거절된 전화 대기 중인 전화 부재중 전화 @@ -526,7 +516,6 @@ 오류 사용법 이메일 - 대기 중 설정 이미지 기다리는 중 이미지를 디코딩할 수 없어요. 다른 이미지를 시도하거나 개발자에게 문의해 주세요. @@ -535,7 +524,6 @@ 동시에 최대 10개까지만 이미지를 보낼 수 있어요. 이미지 수가 너무 많아요! 거절해도 상대에게 알림이 전송되지 않아요. - 영상 통화에서 QR 코드를 보여주거나 링크를 공유해 주세요.]]> 영상 통화 영상 끄기 스피커 켜기 @@ -547,13 +535,11 @@ 대화 상대가 업로드를 완료하면 이미지가 수신될 거예요. 프로필 이미지 하나의 프로필로 여러 사람과 연락할 필요 없이 무수히 많은 익명 프로필로 연락할 수 있어요. - 스팸 방지 무시하기 SimpleX Chat 초대 링크를 받으면 브라우저에서 참여할 수 있어요 : 링크 미리보기 이미지 QR 코드 SimpleX 팀 - 영상 통화에서 QR 코드를 스캔하거나 상대에게 초대 링크를 공유할 수 있어요.]]> 동영상 보내짐 동영상 수신 요청됨 동영상 기다리는 중 @@ -588,7 +574,6 @@ 영상 통화 옴 잘못된 이전 확인 익명 모드로 참여 - 잘못된 QR 코드 잘못된 보안 코드! 잘못된 링크! 삭제됨으로 표시됨 @@ -657,7 +642,6 @@ 사용 가능한 경우 Onion 호스트가 사용될 거예요. Onion 호스트가 사용되지 않을 거예요. 전송 격리 - 차세대 사생활 보호 메시징 새 암호… TCP 연결 유지 활성화 %s의 새로운 기능 @@ -683,7 +667,6 @@ OK 거절 비밀번호 표시 - 2계층 종단 간 암호화 로 전송된 사용자 프로필, 연락처, 그룹 및 메시지를 저장되어요.]]> 개인 정보 보호 및 보안 알림은 앱이 중지되기 전까지만 전달될 거예요! 당신만 사라지는 메시지를 보낼 수 있습니다. @@ -708,10 +691,7 @@ 일회성 초대 링크 붙여넣기 프로필은 대화 상대들하고만 공유됩니다. - 프라이버시의 재정의 - 누구나 서버를 호스팅할 수 있습니다. 앱이 실행 중일 때 - GitHub 에서 확인해 주세요.]]> 릴레이 서버는 IP 주소를 숨겨주지만, 통화 시간을 관찰 할 수 있어요. 그룹 링크로 초대 설정을 통해 나중에 변경할 수 있어요. @@ -728,7 +708,6 @@ 받은 링크 붙여넣기 릴레이 서버는 필요한 경우에만 사용되어요. 릴레이 서버가 사용되지 않으면 제3자가 내 IP 주소를 관찰할 수 있어요. 채팅 열기 - 공유한 링크를 통해서만 나에게 연결할 수 있어요. 그룹 프로필 업데이트됨 프로필 비밀번호 보이기 @@ -824,7 +803,6 @@ 도움말 설정 링크 미리보기 보내기 - SOCKS 프록시 SimpleX Chat 도와주기 나 실험적 기능 @@ -832,7 +810,6 @@ 연락처 이름 설정 개발자에게 이메일 보내기 서버를 수동으로 입력 - 미리 설정된 서버 서버 저장하기 서버 테스트하기 현재 채팅 프로필의 새로운 연결을 위한 서버 @@ -843,9 +820,7 @@ 익명 모드 실험적 내보낼 암호 설정 - SMP 서버 미리 설정된 서버 주소 - 내 서버 내 서버 주소 %1$s을(를) 강퇴했어요. 채팅 데이터베이스를 내보내기, 가져오기 또는 삭제 하려면 채팅 기능을 중지해 주세요. 채팅 기능이 중지된 동안에는 메시지를 주고받을 수 없어요. @@ -862,8 +837,6 @@ 제공된 이름을 가진 빈 채팅 프로필이 생성되고, 앱이 정상적으로 열립니다. 데이터베이스 ID: %d 음성/영상 통화 - " -\nv5.1에서 사용 가능" 대화 상대가 허용하는 경우에만 통화를 허용합니다. 입력하면 모든 데이터가 삭제됩니다. 더 나은 메시지 @@ -881,7 +854,6 @@ 사용자 설정 기간 사라지는 메시지 사라지는 메시지 전송 - 다른 사용자와 연결할 수 있도록 주소를 만듭니다. 커스텀 테마 자동 수락 자체 소멸 모드 변경 @@ -1012,7 +984,6 @@ - 디렉터리 서비스(베타)에 연결하세요!\n- 전송 알림(최대 20명).\n- 더 빠르고 안정적입니다. 이전 취소 이전하려는 데이터베이스의 암호를 기억하고 있는지 확인합니다. - 익명 모드로 연결 베타 앱 패스코드 계속 @@ -1050,12 +1021,10 @@ 그룹 생성: 새로운 그룹을 생성합니다.]]> 연락처 추가 : 새 초대 링크를 만들거나 받은 링크를 통해 연결합니다.]]> 개인 메모를 지우시겠습니까? - XFTP 서버 구성 나중에 채팅할 수 있도록 연락처를 보관합니다. 연결된 데스크톱 일괄 업로드됨 보관된 연락처 - SMP 서버 구성 채팅 프로필 생성 그룹 멤버에 전화를 걸 수 없음 자동 연결 @@ -1085,7 +1054,6 @@ 암호화 OK 데스크톱 기능 처리 시간이: %1$d 초 이상: %2$s - 주소를 만들지 않음 기기 파일 및 미디어 금지됨! 링크 생성 중… @@ -1191,7 +1159,6 @@ 상대가 온라인 상태가 될 때까지 기다릴 필요가 없습니다! 그룹 멤버 차단 현재 프로필 - SMP 서버를 로드하는 중 오류 개인 메모를 삭제하는 동안 오류 데이터베이스를 삭제하는 동안 오류 다음과 같은 이유로 끊어졌습니다: %s @@ -1199,7 +1166,6 @@ 알림을 표시하는 동안 오류가 발생하였으니, 개발자에게 문의하십시오. %d 분 %d 개의 메시지가 삭제됨 - XFTP 서버를 저장하는 중 오류 알림 비활성화 패스코드 입력 주소를 설정하는 중 오류 @@ -1227,7 +1193,6 @@ 자체 소멸 환영 메시지 입력…(선택사항) WebView를 초기화하는 중 오류가 발생했습니다. WebView가 설치되어 있고 지원되는 아키텍처가 arm64인지 확인합니다.\n오류: %s - XFTP 서버를 로드하는 중 오류가 발생했습니다. 세부 정보를 로드하는 중 오류 통계를 재설정하는 중 오류 대화에서 비활성화 된 경우에도 마찬가지입니다. @@ -1423,7 +1388,6 @@ %1$s!]]> 사용해서는 안 됩니다.]]> 사용자 가이드에서 확인하세요.]]> - 모바일 앱에서 열기 버튼을 클릭합니다.]]> 운영자 %s.]]> 약관 수락 날짜: %s. @@ -1466,7 +1430,6 @@ 현재 약관 텍스트를 로드할 수 없습니다, 다음 링크를 통해 약관을 검토할 수 있습니다: 사용 약관 Flux 활성화 - 종단 간 암호화로 전송됩니다.]]> 앱이 항상 백그라운드에서 실행 팀 멤버 추가하기 친구 추가 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml index c429a8341a..f942077e4c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml @@ -50,8 +50,6 @@ şandin bi ser neket nexwendî Bi xêr hatî %1$s! - Bi xêr hatî! - Ev nivîs di eyaran de heye Eyar Bi navê %s bikeviyê redkirî @@ -318,7 +316,6 @@ Funksiyona hêdî Komên piçûk (herî zêde 20) Servera SMPyê - Serverên SMPyê Nerm Bêdeng Spam @@ -437,8 +434,6 @@ Şert di %s de hatin qebûlkirin. Şertên şuxulandinê Şert wê di %s de bên qebûlkirin. - Serverên SMPyê ên eyarkirî - Serverên XFTPyê ên eyarkirî Serverên ICEyê eyar bike Dosyayên ji serverên nenas qebûl bike. Eyarên torê tesdîq bike. @@ -446,7 +441,6 @@ Bi xwe re bikeve danûstandinê? Bi riya lînkê bikeve danûstandinê Bi riya lînkê bikeve danûstandinê? - Bi riya lînkê / koda QRyê bikeve danûstandinê Bi riya lînka yek carê bikeve danûstandinê? Bi %1$s re bikeve danûstandinê? Muhtewa ne li gora şertên şuxulandinê ye @@ -455,10 +449,8 @@ Beşdar bibe Tora xwe kontrol bike Xeletiyê kopî bike - Çêke Çêke Adres çêke - Adresekê çêke ji bo ko xelk karibin bi te re bikevin danûstandinê. Hat çêkirin Wextê çêkirinê Wextê çêkirinê: %s @@ -466,7 +458,6 @@ Kom çêke Lînka komê çêke Lînk çêke - Lînkeke dewetiyê ya yek carî çêke Profîl çêke Profîl çêke Dor çêke @@ -526,7 +517,6 @@ %d heyv %d heyv %d heyv - Adres çêneke Dîsa nîşan nede Daxe Daxistî @@ -564,21 +554,16 @@ Xeletî di guhertina profîlê de Xeletî di guhertina rolê de Xeletî di çêkirina adresê de - Serverên te yên XFTPyê Te dewetîke komê şand - Serverên te yên SMPyê Serverên te Adresa servera te - Servera te Profîla te yî %1$s wê bê parvekirin. Tercihên te - Serverên te yên ICEyê Serverên te yên ICEyê Koma te te %1$s derxist Te dewetiya komê red kir Profîla te yî niha - Tu karî dûvre wê çêkî Tu dikarî wê di Eyarên xuyakirinê de biguherî. te %s blok kir Tu hatiye dewetkirinî komê @@ -590,7 +575,6 @@ tu Erê erê - Serverên XFTPyê Servera XFTPyê Şîfra xelet! Şîfra xelet ya databasê @@ -634,7 +618,6 @@ Aplîkasyon Dosya Ji nû ve veke - Proksiya SOCKSê Sûretên profîlan Girêdana torê Ji kompîterê bişuxulîne @@ -780,8 +763,6 @@ Profîla siḧbetê çêke Ber serverên SimpleX Chatê werin şuxulandin? Profîla siḧbetê - Tu siḧbeta xwe qontrol dikî! - Siḧbetê bişuxulîne Siḧbet Rengên siḧbetê Siḧbet sekinandî ye diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml index aa1da521bb..87144b710d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml @@ -45,7 +45,6 @@ Turėkite omenyje: jeigu prarasite slaptafrazę, NEBEGALĖSITE jos atkurti ar pakeisti.]]> Atsisakyti jungiamasi… - Prisijungti prisijungta jungiamasi ryšys užmegztas @@ -86,7 +85,6 @@ Grupių nuorodos klaida Aprašas - Klaida įrašant SMP serverius Klaida atnaujinant tinklo konfigūraciją Klaida kuriant profilį! Nepavyko įkelti pokalbio @@ -155,7 +153,6 @@ Sukurti adresą Ištrinti adresą Klaida įrašant naudotojo slaptažodį - Sukurti Kaip tai veikia Gaunamas garso skambutis Gaunamas vaizdo skambutis @@ -227,7 +224,6 @@ Patobulinta serverio konfigūracija Ištrinti pokalbio profilį Ištrinti profilį - Sukurti vienkartinio pakvietimo nuorodą Ištrinti Įrašyti ir pranešti kontaktui Įjungti automatinį žinučių ištrynimą\? @@ -237,7 +233,6 @@ Importuoti Įrašyti ir pranešti kontaktams pradedama… - Naudoti pokalbį Išjungti garsiakalbį Įjungti garsiakalbį Praleistos žinutės @@ -251,12 +246,10 @@ Rodyti peržiūrą Atrakinti Bendrinti - Bakstelėkite, norėdami pradėti naują pokalbį Bendrinti failą… Nustatymai Rodyti QR kodą Bendrinti pakvietimo nuorodą - SMP serveriai Naudoti SimpleX Chat serverius\? Naudoti tiesioginį interneto ryšį\? Atnaujinti @@ -306,16 +299,13 @@ Balso žinutė… Rodyti saugumo kodą SimpleX adresas - Jūsų SMP serveriai Jūsų ICE serveriai Pridėti profilį Visi pokalbiai ir žinutės bus ištrinti – to neįmanoma bus atšaukti! - Sveiki! Pridėti Jūs negalite siųsti žinučių! SimpleX logotipas Jūsų nustatymai - Jūsų serveris Jūsų serverio adresas Pridėti į kitą įrenginį Naudojami SimpleX Chat serveriai. @@ -325,7 +315,6 @@ vaizdo skambutis Jūsų skambučiai WebRTC ICE serveriai - Jūsų ICE serveriai išėjote administratorius Jūsų atsitiktinis profilis @@ -372,9 +361,6 @@ Didelis failas! Balso žinutės uždraustos! Siųsti - Klaida įkeliant SMP serverius - Klaida įrašant XFTP serverius - Klaida įkeliant XFTP serverius Nepavyksta gauti failo Sukurti eilę Gali būti, kad liudijimo kontrolinis kodas serverio adrese yra neteisingas @@ -382,8 +368,6 @@ Dekodavimo klaida Išvalyti pokalbį Įjungti pranešimus - Neteisingas QR kodas - Šis QR kodas nėra nuoroda! Prisijungti per nuorodą Saugumo kodas Žymėti kaip patvirtintą @@ -419,8 +403,6 @@ Neteisingas serverio adresas! Pokalbio profilis Profilis yra bendrinamas tik su jūsų kontaktais. - „GitHub“ saugykloje.]]> - SOCKS įgaliotasis serveris Įrašyti slaptafrazę ir atverti pokalbį Atkurti atsarginę duomenų bazės kopiją Atkurti atsarginę duomenų bazės kopiją\? @@ -463,7 +445,6 @@ Išvalyti Nebeslėpti profilio Per daug vaizdo įrašų! - Prisijungti per nuorodą / QR kodą Įrašyti profilio slaptažodį Iššifravimo klaida inkognito per grupės nuorodą @@ -494,7 +475,6 @@ Stabdyti failą Stabdyti failo gavimą\? Stabdyti failo siuntimą\? - Šis tekstas yra prieinamas nustatymuose Garso/vaizdo skambučiai yra uždrausti. Tiek jūs, tiek ir jūsų kontaktas gali skambinti. Žinutės juodraštis @@ -508,8 +488,6 @@ Profilis ir ryšiai su serveriu Tiesioginės žinutės tarp narių šioje grupėje yra uždraustos. Garso/vaizdo skambučiai - " -\nPrieinama versijoje v5.1" Vaizdo įrašas Vaizdo įrašai ir failai iki 1GB Ieškoti @@ -533,7 +511,6 @@ Programėlė galės gauti sistemos pranešimus tik tada, kai veiks. Jokia foninė tarnyba nebus paleidžiama Priimti Priimti inkognito režimu - Pridėti iš anksto parinktus serverius Administratoriai gali kurti prisijungimo prie grupių nuorodas. Foninė tarnyba visada veikia – pranešimai bus rodomi iš karto, kai tik bus prieinamos žinutės. Patvirtinti tapatybę @@ -765,7 +742,6 @@ Atkreipkite dėmesį: žinučių ir failų perdavimas yra prijungtas per SOCKS tarpinį serverį. Skambučiams ir nuorodų peržiūrų siuntimui naudojamas tiesioginis ryšys.]]> Netinkamas vardas! Sukurti savo profilį - Asmenys gali prisijungti prie jūsų tik per nuorodas kuriomis dalinatės. Tai gali būti pakeista vėliau nustatymuose. Tai gali įvykti kai: \n1. Žinutės galiojimo laikas baigėsi siuntėjo programoje po 2 dienų arba serveryje po 30 dienų. @@ -816,12 +792,10 @@ Prisijungti prie savęs? Kontaktas dar nėra susijungęs! Pataisyti pavadinimą į %s? - Laukiama Duomenų bazės šifravimo slaptafrazė bus atnaujinta ir saugoma raktų saugykloje. %s yra blogos būsenos]]> užblokuota administratoriaus Pilna nuoroda - Atsparu šlamštui ir piktnaudžiavimui Prašome pranešti tai kūrėjams. Prašome saugoti slaptafrazę saugiai, jūs NEGALĖSITE pasiekti pokalbių, jei ją prarasite. Duomenų bazės slaptafrazė yra reikalinga pokalbių atidarymui. @@ -852,7 +826,6 @@ Įrenginio autentifikacija išjungta. Išjungiamas SimpleX užraktas. %d failas (-ai), kurių bendras dydis yra %s %d valandos - Prisijungti inkognito režimu Reikalinga slaptafrazė Uždrausti siųsti balso žinutes. Eksperimentinis @@ -865,14 +838,12 @@ Paprašyta gauti vaizdo įrašą Labas! \nPrisijunk prie manęs per SimpleX Chat: %s - Privatumas apibrėžtas iš naujo Sukurta: %s jungiamasi (supažindinimo pakvietimas) Kaip naudoti markdown Savaiminio susinaikinimo prieigos kodas pakeistas! Pasilikti nepanaudotą pakvietimą? Pasilikti - Atviro kodo protokolas ir kodas - bet kas gali paleisti savo serverius. - pasirinktinai praneškite ištrintiems kontaktams. \n- profilių vardai su tarpais. \n- ir daugiau! @@ -890,7 +861,6 @@ Nuotrauka Įvertinti programėlę jungiamas skambutis… - Sukurkite adresą, kad leistumėte žmonėms prisijungti prie jūsų. Duomenų bazės ID ir transporto izoliacijos parinktis. kursyvinis Atsitiktinė slaptafrazė yra saugoma nustatymuose kaip paprastas tekstas. @@ -930,8 +900,6 @@ Nuotrauka išsaugota į galeriją Failas bus gautas kai jūsų kontaktas yra prisijungęs, palaukite arba patikrinkite vėliau! Iš anksto nustatyto serverio adresas - Iš anksto nustatytas serveris - Decentralizuota Pateikti Prisijungti inkognito režimu Pradinė rolė @@ -948,7 +916,6 @@ Nuotrauka išsiųsta Nuotrauka bus gauta kai jūsų kontaktas užbaigs jos įkėlimą. Pakeisti gavimo adresą? - nuskanuoti QR kodą vaizdo skambutyje, arba jūsų kontaktas gali pasidalinti pakvietimo nuoroda.]]> Arba parodykite šį kodą ICE serveriai (vienas per liniją) Įdiegti SimpleX Chat terminalui @@ -986,10 +953,8 @@ Momentiniai pranešimai! Momentiniai pranešimai yra išjungti! profilio nuotraukos vietos ženklas - parodykite QR kodą vaizdo skambutyje, arba pasidalinkite nuoroda.]]> naudotojo vadove.]]> Jei negalite susitikti asmeniškai, parodykite QR kodą vaizdo skambutyje, arba pasidalinkite nuoroda. - Įklijuokite nuorodą, kurią gavote prisijungimui prie savo kontakto… gautas atsakas… Jungiamas skambutis Tai gali įvykti kai jūs ar jūsų prisijungimas naudojo seną duomenų bazės atsarginę kopiją. @@ -1109,8 +1074,6 @@ Temos spalvos Rodyti lėtus API iškvietimus Nustoti bendrinti adresą? - Žinučių siuntimo ir programų platforma, apsauganti jūsų privatumą ir saugumą. - Pirma platforma neturinti jokių naudotojų identifikatorių - privati pagal sumanymą. Nustatyti duomenų bazės slaptafrazę Sistema Nustatyti slaptafrazę eksportui @@ -1128,7 +1091,6 @@ SimpleX Chat tarnyba Nustoti bendrinti Bendrinti su kontaktais - Naujos kartos privatus susirašinėjimas %s sekundė(s) Kodas kurį nuskanavote, nėra SimpleX nuorodos QR kodas. Kontaktas su kurio pasidalinote šia nuoroda NEGALĖS prisijungti! @@ -1197,7 +1159,6 @@ Ši galimybė dar nėra palaikoma. Išbandykite sekantį leidimą. %1$s!]]> Kad prisijungti su nuoroda - Ši nuoroda nėra tinkama prisijungimo nuoroda! Šie nustatymai yra jūsų dabartiniam profiliui Slaptafrazė saugoma nustatymuose kaip paprastas tekstas. Bakstelėkite, kad prisijungti kaip inkognito @@ -1233,8 +1194,6 @@ Sustabdomi pokalbiai %s įkeltas Jūsų pokalbių profiliai - Jūsų pokalbių profilis bus nusiųstas -\njūsų kontaktui Jūsų duomenų bazė Jūsų duomenų bazė nėra užšifruota - nustatykite slaptafrazę, kad ją apsaugoti. Jūsų pokalbių profilis bus nusiųstas grupės nariams @@ -1266,7 +1225,6 @@ Jūsų profilis, kontaktai ir gautos žinutės yra saugomi jūsų įrenginyje. Išnyks Rodomas vardas negali turėti tarpų. - Nekurti adreso Atsiuntimas nepavyko Atsiunčiamas archyvas visapusiškai užšifruotas balso skambutis @@ -1359,13 +1317,10 @@ neteisėtas siuntimas Ieškoti ar įklijuoti SimpleX nuorodą Jūs turite leisti savo kontaktui siųsti balso žinutes, kad galėtumėte siųsti jas. - (nuskanuokite ar įklijuokite iš iškarpinės) Priėmėte prisijungimą Jūs pakvietėte kontaktą Onion serveriai bus naudojami, kai tik bus. Išeiti neišsaugant - Jūs kontroliuojate savo pokalbį! - Mes nesaugome jokių jūsų kontaktu ar žinučių (po pristatymo) serveriuose. Nėra gautų ar išsiųstų failų Išsaugoti slaptafrazę raktų saugykloje Atnaujinti duomenų bazės slaptafrazę @@ -1428,8 +1383,6 @@ Nuskanuoti QR kodą iš darbastalio %s buvo atjungtas]]> %1$s.]]> - Galite bendrinti savo adresą kaip nuorodą ar QR kodą - bet kas galės prisijungti prie jūsų. - Atnaujinti transporto izoliacijos režimą? Išsaugoti automatinio priėmimo nustatymus Antrinis Žinučių reakcijos yra draudžiamos šiame pokalbyje. @@ -1439,7 +1392,6 @@ siuntimas nepavyko Per daug nuotraukų! Siųsti išnykstančią žinutę - (kad bendrinti su savo kontaktu) Kad pradėti naują pokalbį Pakartoti Naudoti .onion serverius @@ -1451,8 +1403,6 @@ Gavimo adresas bus pakeistas į kitą serverį. Adreso pakeitimas bus užbaigtas kai siuntėjas prisijungs. Įvyko klaida įkeliant archyvą Prisijunkite su savo kredencialais - Įsitikinkite, kad SMP serverių adresai yra tinkamu formatu, atskirose eilutėse ir nesikartojantys. - Įsitikinkite, kad XFTP serverių adresai yra tinkamu formatu, atskirose eilutėse ir nesikartojantys. Markdown pagalba Maks. 40 sekundžių, gaunama iš karto. Žinučių reakcijos @@ -1464,7 +1414,6 @@ Jūsų kontaktas turi būti prisijungęs, kad užbaigti prisijungimą. \nJūs galite atšaukti šį prisijungimą ir pašalinti kontaktą (ir vėliau bandyti su nauja nuoroda). Jūsų kontaktai išliks prisijungę. - Jūsų XFTP serveriai Prisijungsite kai jūsų prisijungimo užklausa bus patvirtinta, palaukite arba patikrinkite vėliau! %s yra užsiėmęs]]> %s yra neaktyvus]]> @@ -1484,7 +1433,6 @@ Su sumažintu akumuliatoriaus naudojimu. Esate kviečiami į grupę prisijungti prie SimpleX Chat kūrėjų, kad klausti klausimus ir gauti atnaujinimus.]]> - Galite padaryti tai matomą savo SimpleX kontaktams per nustatymus. Susieto darbastalio parinktys %1$s.]]> Pašalinti nutildymą @@ -1511,7 +1459,6 @@ Prisijungsite kai jūsų konktakto įrenginys bus prisijungęs, palaukite arba patikrinkite vėliau! Atidaryti mobilioje programėlėje, tada bakstelėkite Prisijungti programėlėje.]]> Naudoti naujiems prisijungimams - Atidaryti mobilioje programėlėje mygtuko.]]> Įvyko klaida atveriant naršyklę paslaptis Pranešimai nustos veikti iki tol kol paleisite programėlę iš naujo @@ -1581,11 +1528,9 @@ Laukiama nuotraukos Siųsti tiesioginę žinutę, kad prisijungti Laukiama nuotraukos - Kai asmenys išsiunčia užklausą prisijungti, galite ją priimti arba atmesti. Galite peržiūrėti pakvietimo nuorodą vėl, prisijungimo detalėse. Markdown žinutėse Norėdami patvirtinti visapusį šifravimą su savo kontaktu, palyginkite (ar nuskanuokite) kodą ant savo įrenginių. - XFTP serveriai Onion serveriai bus reikalingi ryšiui. \nAtkreipkite dėmesį: negalėsite prisijungti prie serverių be .onion adreso. Išsaugoti nustatymus? @@ -1598,8 +1543,6 @@ pakeitėte adresą %s Išplėsti rolių pasirinkimą %1$s.]]> - dviejų sluoksnių visapusiu šifravimu.]]> - Kad apsaugoti privatumą, vietoj naudotojų ID naudojamų visose kitose platformose, SimpleX turi identifikatorius žinučių eilėms, skirtingus kiekvienam jūsų kontaktui. Žinutės juodraštis Paleisti iš naujo narys @@ -1641,7 +1584,6 @@ %s ir %s Atnaujinti Įsitikinkite, kad WebRTC ICE serverių adresai yra tinkamu formatu, atskirose eilutėse ir nesikartojantys. - Galite sukurti tai vėliau Nėra pasirinkto pokalbio nežinoma būsena pašalintas diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml index e09aef2162..b045044925 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml @@ -10,7 +10,6 @@ Izmantot inkognito profilu Jūsu profils tiks nosūtīts kontaktpersonai, no kuras saņēmāt šo saiti. Jūs pievienosities visiem grupas dalībniekiem. - Pievienoties Atvērt tērzēšanu Atvērt jaunu tērzēšanu Atvērt grupu @@ -71,7 +70,6 @@ Saites atvēršana pārlūkprogrammā var samazināt savienojuma privātumu un drošību. Neuzticamas SimpleX saites būs sarkanas. uzaicināts pievienoties Savienoties, izmantojot kontaktpersonas saiti - Savienoties, izmantojot saiti inkognito režīmā Ziņot par vienuma redzamību moderatoriem Ziņot par vienuma arhivēšanu Ziņot par vienuma arhivēšanu, ko veica @@ -105,12 +103,6 @@ Ziņošanas iemesls: Kopienas noteikumu pārkāpums Ziņošanas iemesls: Profils Ziņošanas iemesls: Cits - Kļūda, saglabājot Smp serverus - Kļūda, saglabājot Xftp serverus - Pārliecinieties, vai Smp serveru adreses ir pareizā formātā un unikālas - Pārliecinieties, vai Xftp serveru adreses ir pareizā formātā un unikālas - Kļūda ielādējot Smp serverus - Kļūda ielādējot Xftp serverus Kļūda iestatot tīkla konfigurāciju Neizdevās parsēt čata nosaukumu Neizdevās parsēt čatu nosaukumus @@ -351,11 +343,7 @@ Čata slēdzene Čata konsole Ziņojumu serveri - Smp serveri - Konfigurēti Smp serveri - Citi Smp serveri Smp serveru iepriekš iestatīta adrese - Pievienot iepriekš iestatītu Smp serveri Pievienot Smp serveri Smp serveru testa serveris Smp serveru testēšana @@ -365,8 +353,6 @@ Smp serveru QR koda skenēšana Smp serveru ievadīšana manuāli Smp serveru jauns serveris - Smp serveru iepriekš iestatīts serveris - Smp serveru jūsu serveris Smp serveru jūsu servera adrese Smp serveru izmantot serveri Smp serveru izmantot serveri jaunam savienojumam @@ -377,9 +363,6 @@ Smp Serveri katram lietotājam Vai saglabāt Smp Serverus? Multivides un failu serveri - Xftp Serveri - Konfigurēti Xftp Serveri - Citi Xftp Serveri Abonēšanas Procentuālais Daudzums Instalēt SimpleX Chat Terminālim Atiestatīt Visus Padomus @@ -387,8 +370,6 @@ Ziedot Novērtēt Aplikāciju Izmantot SimpleX Chat Serverus? - Jūsu SMP Serveri - Jūsu XFTP Serveri Izmantojot SimpleX Chat Serverus Kā to darīt Kā lietot savus serverus @@ -451,7 +432,6 @@ Pieņemt zvanu bloķēšanas ekrānā Rādīt zvanu bloķēšanas ekrānā Zvans nav atļauts bloķēšanas ekrānā - Jūsu Ice Serveri Webrtc Ice Serveri Relay Serveris Aizsargā Ip Relay Serveris Ja Nepieciešams @@ -733,7 +713,6 @@ SimpleX Saites Nesenā Vēsture Audio Video Zvani - \nPieejams V51 versijā Funkcija Ieslēgta Funkcija Ieslēgta Jums Funkcija Ieslēgta Kontaktam @@ -1105,8 +1084,6 @@ Ziņas nosūtīšana neizdevās Saņemtā ziņa nav izlasīta Laipni lūdzam - Laipni lūdzam - Šis teksts ir pieejams iestatījumos Jūsu sarunas Rīkjoslas iestatījumi Kontakta savienojums gaida apstiprinājumu @@ -1116,7 +1093,6 @@ Grupas priekšskatījums, pievienojieties kā Grupas priekšskatījums noraidīts Grupas savienojums gaida apstiprinājumu - Noklikšķiniet, lai uzsāktu jaunu sarunu Sarunājieties ar izstrādātājiem Jums nav nevienas sarunas Ielādēju sarunas… @@ -1186,7 +1162,6 @@ Serveris ir savienots Serveris nav savienots Servera kļūda - Serveris gaida Vai vēlaties mainīt saņemšanas adresi? Mainīt saņemšanas adresi Pārtraukt saņemšanas adreses maiņu @@ -1224,12 +1199,8 @@ Pievienot kontaktu Kopēts Pievienot kontaktu vai izveidot grupu - Kopīgot vienreizēju saiti - Savienot, izmantojot saiti vai QR Nolasīt QR kodu Izveidot grupu - Lai kopīgotu ar savu kontaktu - Savienot, izmantojot saiti vai QR no starpliktuves vai klātienē Tikai saglabāts dalībnieku ierīcēs Iespējot kameras piekļuvi Noklikšķiniet, lai nolasītu @@ -1301,19 +1272,12 @@ E-pasts Vairāk Rādīt QR kodu - Nederīgs QR kods - Šis QR kods nav saite Nederīga kontaktu saite - Šī saite nav derīga savienojuma saite Savienojuma pieprasījums nosūtīts Jūs tiksiet savienots, kad grupas saimnieka ierīce būs tiešsaistē Jūs tiksiet savienots, kad jūsu savienojuma pieprasījums tiks pieņemts Jūs tiksiet savienots, kad jūsu kontaktu ierīce būs tiešsaistē - - Jūsu čata profils tiks nosūtīts jūsu kontaktam - Kopīgot ielūguma saiti - Ielīmējiet saiti, ko saņēmāt, lai savienotos ar savu kontaktu Uzzināt vairāk Uzzināt vairāk par adresi Savienojiet, tiks kopīgots jauns nejaušs profils @@ -1322,7 +1286,6 @@ Ja jūs nevarat tikties klātienē Kopīgot adresi publiski Kopīgot simplex adresi sociālajos tīklos - Jūs varat kopīgot savu adresi Jūs nezaudēsiet savus kontaktus, ja izdzēsīsiet adresi Kopīgot vienreizēju saiti ar draugu @@ -1330,14 +1293,12 @@ Savienojuma drošība Simplex adrese un vienreizējās saites ir drošas kopīgošanai Lai pasargātu no jūsu saites aizvietošanas, salīdziniet kodus - Jūs varat pieņemt vai noraidīt savienojumu Adrese vai vienreizēja saite Savienoties caur saiti Savienoties Ielīmēt Šī virkne nav savienojuma saite - Jauna saruna Jauns Pievienot kontaktu cilni @@ -1372,7 +1333,6 @@ Tīkla sesijas režīms sesija. Tīkla sesijas režīms serveris. - Atjaunināt tīkla sesijas režīmu? Tīkla smp proxy režīms privātā maršrutēšana @@ -1445,7 +1405,6 @@ Visi jūsu kontakti paliks savienoti, atjauninājums nosūtīts. Kopīgot saiti Pievienot adresi savai profilam - Izveidot adresi un ļaut cilvēkiem savienoties Izveidot simplex adresi Kopīgot ar kontaktiem Kopīgot adresi ar kontaktiem? @@ -1478,9 +1437,6 @@ Dalīties ar veco adresi Dalīties ar veco saiti Turpināt uz nākamo soli - Nekādā gadījumā neveidot adresi - Jūs varat to izveidot vēlāk - Jūs varat padarīt adresi redzamu caur iestatījumiem Aicināt draugus (īsi) Rādāmais vārds Pilns vārds @@ -1503,16 +1459,12 @@ Apstiprināt paroli Lai atklātu profilu, ievadiet paroli Kļūda, saglabājot lietotāja paroli - Jūs kontrolējat savu sarunu - Ziņojumu un lietotņu platforma, kas aizsargā jūsu privātumu un drošību - Mēs nesaglabājam kontaktus vai ziņas serveros Izveidot profilu Jūsu profils tiek saglabāts jūsu ierīcē Profils tiek koplietots tikai ar jūsu kontaktiem Parādāmā vārda laukā nedrīkst būt atstarpes Parādāmais vārds Īss - Izveidot profilu Izveidot citu profilu Izveidot adresi Nederīgs vārds @@ -1547,22 +1499,10 @@ Audio ierīce - Bluetooth Kļūda, inicializējot tīmekļa skatu WebView nav atbalstīts šajā ierīces arhitektūrā. - Nākamā paaudze privātajai ziņošanai - Privātums pārdefinēts - Pirmā platforma bez lietotāju ID - Imūna pret surogātpastu un ļaunprātīgu izmantošanu - Cilvēki var savienoties tikai caur saites, ko jūs kopīgojat - Decentralizēts - Atvērtā koda protokols un kods, ko ikviens var palaist serveros Izveidot savu profilu Izveidot privātu savienojumu Migrēt no citas ierīces Kā tas darbojas - Lai aizsargātu privātumu, SimpleX izmanto ID rindām - Tikai klientu ierīces glabā kontaktu grupas un e2e šifrētas ziņas - - - Izmantot čatu Ievada paziņojumu režīms Ievada paziņojumu režīma apakšvirsraksts Ievada paziņojumu režīms izslēgts @@ -1642,7 +1582,6 @@ Iestatījumi izslēgt Iestatījumi izstrādātāja rīki Iestatījumi eksperimentālās funkcijas - Iestatījumi zeķes Iestatījumi Tēmas Profila attēli @@ -2478,6 +2417,5 @@ Lejupielādētie faili Lejupielādes kļūdas Servera adrese - Atvērt servera iestatījumus Sasniegts maksimālais grupas pieminējumu skaits ziņā. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml index 008ad2bb81..02e93696b3 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml @@ -59,14 +59,11 @@ ഉപയോക്താക്കൾക്ക് നന്ദി - Weblate വഴി സംഭാവന ചെയ്യുക! സ്വകാര്യതയും സുരക്ഷയും ബന്ധിപ്പിച്ചിരിക്കുന്നു - സ്വകാര്യത പുനർ നിർവചിച്ചു ബന്ധിപ്പിക്കുന്നു (പ്രഖ്യാപിച്ചു) വിലാസം സൃഷ്ടിക്കുക അജ്ഞാത പിശക് - നിങ്ങളുമായി ബന്ധപ്പെടാൻ ആളുകളെ അനുവദിക്കുന്നതിന് ഒരു വിലാസം സൃഷ്‌ടിക്കുക. ബന്ധിപ്പിക്കുന്നു പുനഃസ്ഥാപിക്കുക - ബന്ധിപ്പിക്കുക ബന്ധിപ്പിക്കുക ബന്ധിപ്പിച്ചിരിക്കുന്നു ബന്ധിപ്പിക്കുക @@ -130,8 +127,6 @@ പശ്ചാത്തലം ഇല്ല നേരിട്ടുള്ള സന്ദേശങ്ങൾ - " -\nപ5.1-ൽ ലഭ്യമാണ്" എപ്പോഴും നിങ്ങൾക്ക് മാത്രമേ ശബ്ദ സന്ദേശങ്ങൾ അയയ്ക്കാൻ കഴിയൂ. അയച്ച സന്ദേശങ്ങൾ മാറ്റാനാവാത്തവിധം ഇല്ലാതാക്കാൻ അനുവദിക്കുക. @@ -154,7 +149,6 @@ സന്ദേശം പങ്കിടുക… മറയ്ക്കുക: കാണിക്കുക: - വികേന്ദ്രീകൃതം ശബ്ദ സന്ദേശം ശബ്ദ സന്ദേശങ്ങൾ ശബ്ദ സന്ദേശം… @@ -214,12 +208,10 @@ കൂടുതലറിയുക ഉപയോക്തൃ മാര്‍ഗ്ഗദര്‍ശിയിൽ കൂടുതൽ വായിക്കുക.]]> സെർവർ വിലാസം പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക. - നിങ്ങളുടെ SMP സെർവറുകൾ ബന്ധം വിലാസം പങ്കിടുന്നത് നിർത്തണോ\? തുടരുക SimpleX വിലാസം സൃഷ്ടിക്കുക - സൃഷ്ടിക്കുക നിറമുള്ള അവസാനിച്ചു നിങ്ങളുടെ വിളികൾ @@ -261,18 +253,15 @@ %1$s നീക്കം ചെയ്തു അപ്രത്യക്ഷമാകുന്ന സന്ദേശം അയയ്ക്കുക ഓരോ 10 നിമിഷവും ഒരു നിമിഷം വരെ പുതിയ സന്ദേശങ്ങൾ പരിശോധിക്കുന്നു - നിങ്ങൾക്ക് ഇത് പിന്നീട് സൃഷ്ടിക്കാൻ കഴിയും നിങ്ങൾ സ്വയം %s എന്ന കര്‍ത്തവ്യം മാറ്റി വീഡിയോ സ്വീകരിക്കാൻ ആവശ്യപ്പെട്ടു തത്സമയ സന്ദേശം റദ്ദാക്കുക വിളിക്കുന്നു… തത്സമയ സന്ദേശം! ഞങ്ങൾക്ക് ഇമെയിൽ അയയ്ക്കുക - നിങ്ങളുടെ സെർവർ അയച്ചു നിങ്ങളുടെ സെർവർ വിലാസം എന്ന വിലാസത്തിൽ അയച്ചു - നിങ്ങളുടെ XFTP സെർവറുകൾ കുറിച്ച് SimpleX Chat എല്ലാ സംഭാഷണങ്ങളും സന്ദേശങ്ങളും ഇല്ലാതാക്കപ്പെടും - ഇത് പഴയപടിയാക്കാനാകില്ല! സംഘത്തിലെ എല്ലാ അംഗങ്ങളുടെ ബന്ധം നിലനിർത്തും. @@ -292,13 +281,10 @@ എല്ലാ അംഗങ്ങൾക്കും സന്ദേശം ഇല്ലാതാക്കപ്പെടും. വെളിപ്പെടുത്തുക നിർത്തുക - സ്വാഗതം! - ഈ വാചകം ക്രമീകരണങ്ങളിൽ ലഭ്യമാണ് നിങ്ങൾ നിരീക്ഷകനാണ് നിങ്ങൾ നിരീക്ഷകനാണ് നിങ്ങൾ അംഗമാണ് നിങ്ങൾ ഉടമയാണ് - തീർപ്പാക്കാത്തത് സന്ദേശം അയയ്ക്കുക തത്സമയ സന്ദേശം അയയ്ക്കുക %s സ്ഥിരീകരിച്ചിട്ടില്ല @@ -311,7 +297,6 @@ മുൻഗണനകൾ സംരക്ഷിക്കണോ\? ആരംഭിക്കുന്നു ഉത്തരം ലഭിച്ചു… - സ്വകാര്യ സന്ദേശമയയ്ക്കലിന്റെ അടുത്ത തലമുറ ഒഴിവാക്കിയ സന്ദേശങ്ങൾ സംവിധാനം സ്വയം നശിപ്പിക്കുക @@ -380,7 +365,6 @@ %d മണിക്കൂർ %d മാസങ്ങള്‍ മണിക്കൂറുകൾ - വിലാസം സൃഷ്ടിക്കരുത് ചിത്രം തിരുത്തുക പരീക്ഷണാത്മക സവിശേഷതകൾ വിലാസം മാറ്റുന്നത് നിർത്തുക diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml index eeddfd1b38..65614f25aa 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml @@ -47,7 +47,6 @@ Legg til venner Legg til en liste Legg til en melding - Legg til forhåndsvalgte servere Legg til en profil Adresse Adresseendringen vil bli avbrutt. Den gamle mottakeradressen vil bli brukt. @@ -124,7 +123,6 @@ En ny tilfeldig profil vil bli delt. En annen grunn Svar anrop - Hvem som helst kan være vert for servere. App Appen kjører alltid i bakgrunnen App build: %s @@ -179,7 +177,6 @@ Godta automatisk Godta kontaktforespørsler automatisk Godta bilder automatisk - \nTilgjengelig i v5.1 Tilbake Bakgrunn Bakgrunnstjenesten kjører alltid - varsler vises så snart meldingene er tilgjengelige. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index c2cc76fa50..988d0e73cc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -36,7 +36,6 @@ Verbindingsverzoek accepteren\? geaccepteerde oproep Accepteer incognito - Vooraf ingestelde servers toevoegen Profiel toevoegen Server toevoegen Toevoegen aan een ander apparaat @@ -135,7 +134,6 @@ verbinding gemaakt Verbindingsverzoek verzonden! Timeout verbinding - Maak een eenmalige uitnodiging link Adres aanmaken Groep link maken Maak een geheime groep aan @@ -147,7 +145,6 @@ %dd Verwijderen Verwijderen na - Verbind verbonden Verbinden Verbinden via contact link? @@ -160,7 +157,6 @@ Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! Verbonden Bevestigen - Maak verbinding via link / QR-code Gekopieerd naar het klembord Bijdragen ICE servers configureren @@ -168,7 +164,6 @@ Core versie: v%s verbonden Verbinden… - Gedecentraliseerd Maak je profiel aan %d dag %d dagen @@ -200,7 +195,6 @@ Maak verbinding via link gekleurd Oproep verbinden… - Maak Maak een profiel aan Adres verwijderen Altijd relay gebruiken @@ -383,7 +377,6 @@ Fout bij aanmaken van adres help Draai camera - Fout bij opslaan van SMP servers Fout bij updaten van netwerk configuratie Kan het gesprek niet laden Kan de chats niet laden @@ -410,9 +403,6 @@ Markeer gelezen Markeer als ongelezen Dempen - de QR-code scannen in het video gesprek , of uw contact kan een uitnodiging link delen.]]> - toon je de QR-code in het video gesprek of deel je de link.]]> - Ongeldige QR-code Meer Onjuiste beveiligingscode! Markeer geverifieerd @@ -505,7 +495,6 @@ Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. Als u bevestigt, kunnen de berichten servers en uw provider uw IP-adres zien en met welke servers u verbinding maakt. Nee - Immuun voor spam Maak een privéverbinding Het definitief verwijderen van berichten is niet toegestaan in dit gesprek. Nieuw in %s @@ -523,11 +512,9 @@ ongeldig berichtformaat uitgenodigd om te verbinden LIVE - Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. gemarkeerd als verwijderd Controleer of u de juiste link heeft gebruikt of vraag uw contact om u een andere te sturen. profielfoto - Privacy opnieuw gedefinieerd Privacy en beveiliging Controleer uw netwerkverbinding met %1$s en probeer het opnieuw. Mogelijk is de certificaat vingerafdruk in het server adres onjuist @@ -566,17 +553,13 @@ Eenmalige uitnodiging link Alleen groep eigenaren kunnen groep voorkeuren wijzigen. (alleen opgeslagen door groepsleden) - Vooraf ingestelde server Periodieke meldingen zijn uitgeschakeld! - In behandeling Alleen groep eigenaren kunnen spraak berichten inschakelen. Vraag uw contact om het verzenden van spraak berichten in te schakelen. OK Onion hosts zijn vereist voor verbinding. Onion hosts worden gebruikt indien beschikbaar. Onion hosts worden niet gebruikt. - Iedereen kan servers hosten. - Jij bepaalt wie er verbinding mag maken. Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering). (24 uur) Alleen jij kunt spraak berichten verzenden. Alleen uw contact kan spraak berichten verzenden. @@ -589,7 +572,6 @@ Oproep in behandeling Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven. Werk de app bij en neem contact op met de ontwikkelaars. - Alleen clientapparaten slaan gebruikersprofielen, contacten, groepen en berichten op. De afzender heeft mogelijk het verbindingsverzoek verwijderd. Schakel SimpleX Vergrendelen in om uw informatie te beschermen. \nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld. @@ -600,13 +582,10 @@ Om een nieuw gesprek te starten Dempen opheffen SimpleX-Team - Deze QR-code is geen link! - Deze link is geen geldige link! Eenmalige link delen Code scannen Uw instellingen Deel link - Jij beheert je gesprek! Uw profiel, contacten en afgeleverde berichten worden op uw apparaat opgeslagen. beginnen… Video aan @@ -636,9 +615,6 @@ verstuurd ongeoorloofd verzenden Ongelezen - Tik hier om een nieuw gesprek te starten - Deze tekst is beschikbaar in instellingen - Welkom! je bent uitgenodigd voor de groep Je hebt geen chats Chats @@ -654,7 +630,6 @@ Controleer de beveiligingscode Beveiligingscode bekijken U moet uw contact toestemming geven om spraak berichten te verzenden om ze te kunnen verzenden. - (scannen of plakken vanaf klembord) Om verbinding te maken via een link Afwijzen Naam contact instellen @@ -670,7 +645,6 @@ SimpleX Adres Toon QR-code SimpleX-Logo - Je chatprofiel wordt verzonden naar uw contact Je wordt verbonden met de groep wanneer het apparaat van de groep host online is, even geduld a.u.b. of controleer het later! U wordt verbonden wanneer uw verbindingsverzoek wordt geaccepteerd, even geduld a.u.b. of controleer later! Je wordt verbonden wanneer het apparaat van je contact online is, even geduld a.u.b. of controleer het later! @@ -679,13 +653,11 @@ %s is niet geverifieerd %s is geverifieerd Vergelijk (of scan) de code op uw apparaten om end-to-end codering met uw contact te verifiëren. - Openen in mobiele app .]]> Uw chat profielen Uw SimpleX adres Stuur vragen en ideeën Stuur ons een e-mail SimpleX Vergrendelen - SMP servers Servers opslaan Servertest mislukt! Sommige servers hebben de test niet doorstaan: @@ -695,7 +667,6 @@ Gebruik server Gebruik SimpleX Chat servers. Uw server adres - Uw server Transport isolation Voorkeuren opslaan\? Opslaan en Contact melden @@ -703,16 +674,11 @@ Opslaan en Contacten melden Opslaan en groepsleden melden staking - Het berichten- en applicatieplatform dat uw privacy en veiligheid beschermt. Het profiel wordt alleen gedeeld met uw contacten. - We slaan geen van uw contacten of berichten (eenmaal afgeleverd) op de servers op. U kunt markdown gebruiken voor opmaak in berichten: geweigerde oproep geheim - De toekomst van berichtenuitwisseling wachten op antwoord… - Om uw privacy te beschermen, gebruikt SimpleX voor elk van uw contacten afzonderlijke ID\'s. - Gebruik chat Wanneer de app actief is video gesprek (niet e2e versleuteld) %1$s wil met je in contact komen via @@ -723,7 +689,6 @@ WebRTC ICE servers Relay server beschermt uw IP-adres, maar kan de duur van het gesprek observeren. Relay server wordt alleen gebruikt als dat nodig is. Een andere partij kan uw IP-adres zien. - Uw ICE servers Overgeslagen berichten via relay Video uit @@ -825,13 +790,11 @@ Resetten Verstuur Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt - (om te delen met uw contact) Bedankt voor het installeren van SimpleX Chat! Camera Gebruik voor nieuwe verbindingen Star on GitHub De servers voor nieuwe verbindingen van je huidige chatprofiel - Uw SMP servers Opgeslagen WebRTC ICE servers worden verwijderd. Uw ICE servers Opslaan @@ -841,10 +804,8 @@ Wanneer beschikbaar Vereist simplexmq: v%s (%2s) - Transportisolatiemodus updaten\? bevestiging ontvangen… Wachten op bevestiging… - Geen gebruikers-ID\'s. Verbied het sturen van directe berichten naar leden. Verbieden het verzenden van spraak berichten. De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits. @@ -874,7 +835,6 @@ Bericht delen… SimpleX Vergrendelen Sla het wachtwoord op in Keychain - SOCKS proxy Dank aan de gebruikers – draag bij via Weblate! De app haalt regelmatig nieuwe berichten op - het gebruikt een paar procent van de batterij per dag. De app maakt geen gebruik van push meldingen, gegevens van uw apparaat worden niet naar de servers verzonden. De afbeelding kan niet worden gedecodeerd. Probeer een andere afbeelding of neem contact op met de ontwikkelaars. @@ -922,7 +882,6 @@ je hebt een eenmalige link gedeeld je hebt een eenmalige link incognito gedeeld Tik op de knop - GitHub repository.]]> %1$d bericht(en) overgeslagen gemodereerd gemodereerd door %s @@ -1013,23 +972,17 @@ Wachten op video Video De video wordt gedownload wanneer uw contact het uploaden heeft voltooid. - Fout bij opslaan van XFTP-servers - Fout bij het laden van XFTP servers Server vereist autorisatie om te uploaden, wachtwoord controleren Bestand vergelijken Bestand verwijderen Bestand downloaden Upload bestand - XFTP servers - Uw XFTP servers Host Poort SOCKS proxy instellingen Gebruik SOCKS proxy Use .onion hosts in op Nee als de SOCKS-proxy deze niet ondersteunt.]]> Bestand maken - Fout bij het laden van SMP servers - Zorg ervoor dat XFTP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. poort %d Vergrendelen na Verificatie mislukt @@ -1087,8 +1040,6 @@ Sta oproepen alleen toe als uw contact dit toestaat. Sta toe dat uw contacten u bellen. Audio/video oproepen - " -\nBeschikbaar in v5.1" Audio/video gesprekken verbieden. Audio/video gesprekken zijn niet toegestaan. Snel en niet wachten tot de afzender online is! @@ -1106,10 +1057,8 @@ U kunt dit adres delen met uw contacten om ze verbinding te laten maken met %s. Exporteer thema Titel - Wanneer mensen vragen om verbinding te maken, kunt u dit accepteren of weigeren. U raakt uw contacten niet kwijt als u later uw adres verwijdert. SimpleX adres - Maak een adres aan zodat mensen contact met je kunnen opnemen. Maak een SimpleX adres aan Delen met contacten Uw contacten blijven verbonden. @@ -1122,10 +1071,8 @@ Sla instellingen voor automatisch accepteren op Instellingen opslaan\? Voer welkom bericht in... (optioneel) - Maak geen adres aan Hoi! \nMaak verbinding met mij via SimpleX Chat: %s - U kan het later maken Adres delen Welkom bericht invoeren… Thema importeren @@ -1151,7 +1098,6 @@ Database openen… Gebruikershandleiding.]]> Interface kleuren - U kunt uw adres delen als een link of QR-code - iedereen kan verbinding met u maken. Alle app-gegevens worden verwijderd. Er wordt een leeg chatprofiel met de opgegeven naam gemaakt en de app wordt zoals gewoonlijk geopend. Zelfvernietigings wachtwoord inschakelen @@ -1331,7 +1277,6 @@ Ontvangstbevestigingen zijn uitgeschakeld Verbind direct\? Toestaan - Verbind incognito Meldingen uitzetten Open app instellingen Een nieuw willekeurig profiel zal gedeeld worden. @@ -1342,7 +1287,6 @@ app -batterijgebruik / onbeperkt in de app -instellingen om met gesloten app te bellen.]]> Uw profiel %1$s wordt gedeeld. Verzoek voor het verbinden wordt naar dit groepslid verzonden. - Plak de link die je hebt ontvangen om verbinding te maken met je contact… App-batterijgebruik / Onbeperkt in de app-instellingen.]]> Gebruik een nieuw incognito profiel Concept bericht @@ -1509,7 +1453,6 @@ Open poort in firewall Fout bij het tonen van inhoud fout bij weergeven bericht - Je kunt het via Instellingen zichtbaar maken voor je SimpleX contacten. Geschiedenis wordt niet naar nieuwe leden gestuurd. Opnieuw proberen Camera niet beschikbaar @@ -1858,7 +1801,6 @@ Serverversie is niet compatibel met uw app: %1$s. Bericht doorgestuurd Nog geen directe verbinding, bericht wordt doorgestuurd door beheerder. - Overige XFTP servers Link scannen/plakken Zoom Huidig profiel @@ -1919,7 +1861,6 @@ Geüploade bestanden Upload fouten Downloadfouten - Server instellingen openen Server adres Alle profielen pogingen @@ -1938,15 +1879,12 @@ Het bericht kan later worden bezorgd als het lid actief wordt. Berichten verzonden Geen info, probeer opnieuw te laden - Overige SMP servers Totaal ontvangen Probeer het later. Maak opnieuw verbinding met alle verbonden servers om de bezorging van berichten te forceren. Er wordt gebruik gemaakt van extra data. Het serveradres is niet compatibel met de netwerkinstellingen: %1$s. Serverstatistieken worden gereset - dit kan niet ongedaan worden gemaakt! Beginnend vanaf %s. - Geconfigureerde SMP-servers - Geconfigureerde XFTP-servers Percentage weergeven Uitgeschakeld App update downloaden. Sluit de app niet @@ -2201,7 +2139,6 @@ U kunt het bericht kopiëren en verkleinen om het te verzenden. Voeg uw teamleden toe aan de gesprekken. Zakelijk adres - end-to-end-versleuteld verzonden, met post-kwantumbeveiliging in directe berichten.]]> App draait altijd op de achtergrond Controleer berichten elke 10 minuten Meldingen en batterij diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index 6b6c3ab3eb..b725bfab32 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -3,7 +3,6 @@ Uwierzytelnianie urządzenia jest wyłączone. Wyłączanie blokady SimpleX. Uwierzytelnianie urządzenia nie jest włączone. Możesz włączyć blokadę SimpleX w Ustawieniach po włączeniu uwierzytelniania urządzenia. Bezpośrednie wiadomości - Połącz połączony łączenie łączenie… @@ -146,13 +145,10 @@ wyślij Udostępnij plik… Udostępnij media… - Dotknij, aby rozpocząć nowy czat Wiadomość zostanie usunięta dla wszystkich członków. - Ten tekst jest dostępny w ustawieniach Zbyt wiele obrazów! nieautoryzowane wysyłanie oznacz jako nieprzeczytane - Witaj! Witaj %1$s! Jesteś zaproszony do grupy Nie masz czatów @@ -198,7 +194,6 @@ Plik zostanie odebrany, gdy Twój kontakt będzie online, proszę czekać lub sprawdzić później! Duży plik! Powiadomienia - Oczekujące Nagraj wiadomość głosową Wyślij wiadomość Ustaw nazwę kontaktu… @@ -221,13 +216,11 @@ Wysyłaj wiadomości na żywo - będą one aktualizowane dla odbiorcy(ów) w trakcie ich wpisywania Wyślij wiadomość na żywo Skopiowano do schowka - Utwórz jednorazowy link do zaproszenia brak szczegółów Jednorazowy link zaproszenia (przechowywane tylko przez członków grupy) Zeskanuj kod QR Rozpocznij nowy czat - (aby udostępnić Twojemu kontaktowi) Plik Odmowa Uprawnienia! Aparatu @@ -269,10 +262,8 @@ Połącz się przez link Email pomoc - pokaż kod QR w rozmowie wideo, lub udostępnij link.]]> Nieprawidłowy kod bezpieczeństwa! Nieprawidłowy link! - Nieprawidłowy kod QR Oznacz jako zweryfikowane Więcej Jednorazowy link zaproszenia @@ -285,16 +276,11 @@ Udostępnij link jednorazowy Pokaż kod QR %s jest zweryfikowany - Ten kod QR nie jest linkiem! Ten ciąg nie jest linkiem połączenia! Adres SimpleX Logo SimpleX - Otwórz w aplikacji mobilnej.]]> - Twój profil czatu zostanie wysłany -\ndo Twojego kontaktu Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później! Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później! - Dodaj gotowe serwery Dodaj serwer Dodaj do innego urządzenia Konsola czatu @@ -308,7 +294,6 @@ Nieprawidłowy adres serwera! Pomoc markdown Markdown w wiadomościach - Predefiniowany serwer Adres predefiniowanego serwera Oceń aplikację Zapisane serwery WebRTC ICE zostaną usunięte. @@ -320,7 +305,6 @@ Test serwera nie powiódł się! Blokada SimpleX %s nie jest zweryfikowany - Serwery SMP Daj gwiazdkę na GitHub Przetestuj serwer Przetestuj serwery @@ -329,7 +313,6 @@ Używanie serwerów SimpleX Chat. Twoje profile czatu Twoje serwery ICE - Twój serwer Twój adres serwera Twój adres SimpleX Przyczyń się @@ -357,7 +340,6 @@ Wymagane Zapisz Izolacja transportu - Zaktualizować tryb izolacji transportu\? Użyć bezpośredniego połączenia z Internetem\? Użyj hostów .onion Użyć proxy SOCKS\? @@ -390,11 +372,8 @@ Hasło ukrytego profilu Hasło do wyświetlenia Zapisz hasło profilu - Platforma komunikacyjna i aplikacyjna chroniąca Twoją prywatność i bezpieczeństwo. Profil jest udostępniany tylko Twoim kontaktom. Aby ujawnić Twój ukryty profil, wprowadź pełne hasło w pole wyszukiwania na stronie Twoich profili czatu. - Nie przechowujemy na serwerach żadnych Twoich kontaktów ani wiadomości (po ich dostarczeniu). - Ty kontrolujesz swój czat! Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu. a + b O SimpleX @@ -408,24 +387,16 @@ połączony łączenie… łączenie połączenia… - Utwórz - Zdecentralizowane zakończona Jak korzystać z markdown - Odporność na spam kursywa nieodebrane połączenie - Każdy może hostować serwery. - Ty decydujesz, kto może się połączyć. - Redefinicja prywatności otrzymano odpowiedź… otrzymano potwierdzenie… odrzucone połączenie sekret uruchamianie… przekreślenie - Brak identyfikatorów użytkownika. - Następna generacja \nprywatnych wiadomości oczekiwanie na odpowiedź… oczekiwanie na potwierdzenie… Możesz używać markdown do formatowania wiadomości: @@ -434,11 +405,8 @@ Natychmiastowy Jak wpływa na baterię Nawiąż prywatne połączenie - Tylko urządzenia klienckie przechowują profile użytkowników, kontakty, grupy i wiadomości. Okresowo Prywatne powiadomienia - repozytorium GitHub.]]> - Użyj czatu Gdy aplikacja jest uruchomiona Zużywa więcej baterii! Aplikacja zawsze działa w tle - powiadomienia są wyświetlane natychmiastowo.]]> Przychodzące połączenie audio @@ -462,7 +430,6 @@ Serwer przekaźnikowy chroni Twój adres IP, ale może obserwować czas trwania połączenia Pokaż Serwery WebRTC ICE - Twoje serwery ICE Odbierz połączenie Dźwięk wyłączony Dźwięk włączony @@ -525,7 +492,6 @@ Uruchom czat Wyślij podgląd linku Ustawienia - Proxy SOCKS Zatrzymać czat\? Wspieraj SimpleX Chat Motywy @@ -918,7 +884,6 @@ łączenie… Kontakt i wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Błąd połączenia (UWIERZYTELNIANIE) - Połącz się przez link / kod QR Utwórz tajną grupę Utwórz tajną grupę Baza danych jest zaszyfrowana przy użyciu losowego hasła. Proszę zmienić je przed eksportem. @@ -928,7 +893,6 @@ Znikające wiadomości są zabronione. Błąd usuwania prośby o kontakt Nie znaleziono pliku - Błąd zapisu serwerów SMP Błąd aktualizacji linku grupy Błąd importu bazy danych czatu Błąd dołączenia do grupy @@ -948,7 +912,6 @@ Członkowie mogą wysyłać wiadomości głosowe. Grupa zostanie usunięta dla wszystkich członków - nie można tego cofnąć! Jak korzystać z Twoich serwerów - zeskanować kod QR w rozmowie wideo, lub Twój rozmówca może udostępnić link z zaproszeniem.]]> Jeśli odrzucisz nadawca NIE zostanie powiadomiony. incognito poprzez link adresu kontaktowego Jeśli otrzymałeś link do zaproszenia SimpleX Chat, możesz go otworzyć w swojej przeglądarce: @@ -961,7 +924,6 @@ zaproszenie do grupy %1$s Nieodwracalne usuwanie wiadomości Upewnij się, że adresy serwerów WebRTC ICE są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. - Upewnij się, że adresy serwerów SMP są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. Poproś Twój kontakt o włączenie wysyłania wiadomości głosowych. Sprawdź, czy użyłeś prawidłowego linku lub poproś Twój kontakt o przesłanie innego. Wiadomość zostanie usunięta - nie można tego cofnąć! @@ -976,7 +938,6 @@ Odbiorcy widzą aktualizacje podczas ich wpisywania. Uruchom ponownie aplikację, aby użyć zaimportowanej bazy danych czatu. Zapisz profil grupy - (zeskanuj lub wklej ze schowka) Ustaw preferencje grupy Udostępnij wiadomość… Bezpieczeństwo SimpleX Chat zostało zaudytowane przez Trail of Bits. @@ -988,9 +949,7 @@ Rola zostanie zmieniona na "%s". Wszyscy w grupie zostaną powiadomieni. Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną. Adres odbiorczy zostanie zmieniony na inny serwer. Zmiana adresu zostanie zakończona gdy nadawca będzie online. - Ten link nie jest prawidłowym linkiem połączenia! SimpleX działa w tle zamiast korzystać z powiadomień push.]]> - Aby chronić Twoją prywatność, SimpleX używa oddzielnych identyfikatorów dla każdego z Twoich kontaktów. Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach. Użyj dla nowych połączeń O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go. \nAby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połączenia i sprawdź, czy masz stabilne połączenie z siecią. @@ -1014,26 +973,19 @@ Twój profil jest przechowywany na Twoim urządzeniu i udostępniany tylko Twoim kontaktom. Serwery SimpleX nie widzą Twojego profilu. udostępniłeś jednorazowy link incognito Zostaniesz połączony ze wszystkimi członkami grupy. - Twoje serwery SMP Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później! - Błąd ładowania serwerów SMP - Błąd ładowania serwerów XFTP - Błąd zapisu serwerów XFTP Utwórz plik Pobierz plik Serwer wymaga autoryzacji do przesłania, sprawdź hasło Prześlij plik Porównaj plik Usuń plik - Serwery XFTP - Twoje serwery XFTP Host Port port %d Użyj hostów .onion na Nie jeśli proxy SOCKS ich nie obsługuje.]]> Ustawienia PROXY SOCKS Użyj proxy SOCKS - Upewnij się, że adresy serwerów XFTP są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. Uwierzytelnianie nie powiodło się Wpis pinu Tryb blokady SimpleX @@ -1081,8 +1033,6 @@ Zezwalaj na połączenia tylko wtedy, gdy Twój kontakt na to pozwala. Zezwól swoim kontaktom na połączenia do Ciebie. Połączenia audio/wideo - " -\nDostępny w v5.1" Zarówno Ty, jak i Twój kontakt możecie nawiązywać połączenia. Zabroń połączeń audio/wideo. Tylko Twój kontakt może wykonywać połączenia. @@ -1124,7 +1074,6 @@ Zapisać ustawienia\? Przestań udostępniać Kontynuuj - Nie twórz adresu Cześć! \nPołącz się ze mną za pomocą SimpleX Chat: %s Zaproś znajomych @@ -1137,17 +1086,14 @@ link jednorazowy Podręczniku Użytkownika.]]> Adres SimpleX - Kiedy ludzie proszą o połączenie, możesz je zaakceptować lub odrzucić. Nie stracisz kontaktów, jeśli później usuniesz swój adres. Dostosuj motyw Kolory interfejsu Twoje kontakty pozostaną połączone. Dodaj adres do swojego profilu, aby Twoje kontakty mogły go udostępnić innym osobom. Aktualizacja profilu zostanie wysłana do Twoich kontaktów. - Utwórz adres, aby ludzie mogli się z Tobą połączyć. Utwórz adres SimpleX Zapisz ustawienia adresów SimpleX Udostępnij kontaktom - Możesz go utworzyć później Adres SimpleX Drugorzędny @@ -1166,7 +1112,6 @@ Wszystkie Twoje kontakty pozostaną połączone. Aktualizacja profilu zostanie wysłana do Twoich kontaktów. Wpisz wiadomość powitalną… Jeśli nie możesz spotkać się osobiście, pokaż kod QR w rozmowie wideo lub udostępnij link. - Możesz udostępnić swój adres jako link lub kod QR - każdy może się z Tobą połączyć. Pin samozniszczenia Pin samozniszczenia włączony! Aby się połączyć, Twój kontakt może zeskanować kod QR lub skorzystać z linku w aplikacji. @@ -1341,9 +1286,7 @@ Brak rozmów w tle SimpleX nie może działać w tle. Otrzymasz powiadomienia gdy aplikacja jest uruchomiona. Nowy losowy profil zostanie udostępniony. - Wklej otrzymany link w pole poniżej, aby połączyć się z kontaktem… Twój profil %1$s zostanie udostępniony. - Połącz incognito Aplikacja może zostać zamknięta po 1 minucie w tle. Optymalizacja baterii / Nieograniczony w ustawieniach aplikacji.]]> Optymalizacja baterii / Nieograniczony w ustawieniach aplikacji.]]> @@ -1501,7 +1444,6 @@ Proszę poczekać na załadowanie pliku z połączonego telefonu Zweryfikuj połączenie Odśwież - Możesz ustawić go jako widoczny dla swoich kontaktów SimpleX w Ustawieniach. Losowy błąd wyświetlania zawartości błąd wyświetlania wiadomości @@ -1888,13 +1830,11 @@ Fragmenty pobrane Fragmenty przesłane Pobrane pliki - Skonfigurowane serwery SMP Potwierdzono Błędy potwierdzenia Usunięto Aktywne połączenia Wszystkie profile - Skonfigurowane serwery XFTP błąd odszyfrowywania Szczegółowe statystyki Szczegóły @@ -1912,8 +1852,6 @@ wygasły Fragmenty usunięte Brak bezpośredniego połączenia, wiadomość została przekazana przez administratora. - Inne serwery SMP - Inne serwery XFTP Pokaż procent Stabilny Aktualizacja dostępna: %s @@ -1946,7 +1884,6 @@ Zabezpieczone Zasubskrybowano Przesłane pliki - Otwórz ustawienia serwera Adres serwera Wysłane wiadomości Ponownie połącz ze wszystkimi połączonymi serwerami w celu wymuszenia dostarczenia wiadomości. Wykorzystuje to dodatkowy ruch. @@ -2138,7 +2075,6 @@ Dodaj listę Dodaj do listy "Wszystkie konwersacje zostaną usunięte z list %s, oraz listy." - zaszyfrowanej, z post-kwantowym bezpieczeństwem w bezpośrednich wiadomościach.]]> Dodaj znajomych Dodane serwery plików i mediów Paski narzędziowe aplikacji diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 5b54d0c452..01239d6049 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -104,9 +104,7 @@ Permitir Permitir enviar mensagens temporárias. Permitir o envio de mensagens diretas para os membros. - Conectar via link/QR Code Todas as mensagens serão apagadas. Isso não pode ser desfeito! As mensagens serão apagadas APENAS para você. - Adicionar servidores predefinidos Adicionar servidor Crie seu perfil Ícone de contexto @@ -146,7 +144,6 @@ Contato verificado Contato ainda não está conectado! Contribuir - Criar Acessar os servidores por meio do proxy SOCKS na porta %d? O proxy deve ser iniciado antes de ativar esta opção. Permitir que seus contatos apaguem permanentemente as mensagens enviadas em até 24h. Adicionar a outro dispositivo @@ -156,7 +153,6 @@ Conexão Excluir perfil de chat\? Apagar para todos - Conectar conectado conectando apagado @@ -171,7 +167,6 @@ Apagar contato Configurar servidores ICE Excluir endereço\? - Descentralizado Excluir banco de dados O banco de dados é criptografado usando uma senha aleatória. Altere-a antes de exportar. Confirmar nova senha… @@ -281,7 +276,6 @@ Editar Ativar exclusão automática de mensagens\? %d seg - Erro ao salvar servidores SMP Erro ao aceitar solicitação de contato Erro ao excluir solicitação de contato Erro ao trocar de perfil! @@ -382,8 +376,6 @@ Ocultar contato e mensagem Como usar Como usar markdown - exiba o QR Code na videochamada ou compartilhe o link.]]> - escanear o QR Code em uma videochamada, ou pedir que o contato compartilhe um link de convite.]]> Se você confirmar, os servidores de mensagens poderão ver seu endereço IP e seu provedor - e quais servidores você está se conectando. Imagem Se você recebeu o link de convite SimpleX Chat, você pode abri-lo em seu navegador: @@ -391,13 +383,11 @@ anonimamente pelo link do grupo Chamada de vídeo recebida Permita na próxima caixa de diálogo para receber notificações instantaneamente.]]> - Gerar link de uso único Arquivo não encontrado Se você optar por rejeitar o remetente NÃO será notificado. Código de segurança incorreto! Instale o SimpleX para terminal Como funciona - Imune a spam Vire a câmera Desligar Modo anônimo @@ -439,7 +429,6 @@ Atualize o aplicativo e entre em contato com os desenvolvedores. O servidor exige autorização para criar filas. Verifique a senha. Revelar - Pendente Proibir o envio de mensagens diretas para os membros. Escanear QR Code Recusar @@ -449,7 +438,6 @@ Novo em %s Envie-nos um email Escanear QR Code do servidor - Seus servidores SMP nunca Restaurar backup do banco de dados? moderado @@ -459,7 +447,6 @@ Arquivo grande! Marcar como lida Você convidou seu contato - QR Code inválido Mais Você será conectado ao grupo quando o dispositivo que hospeda o grupo estiver online. Aguarde ou verifique mais tarde. Essa string não é um link de conexão! @@ -480,7 +467,6 @@ Notificações periódicas Câmera Seus servidores ICE - Seus servidores ICE Privacidade Entrar no grupo? Sair @@ -546,7 +532,6 @@ conversa inválida Abrir o link no navegador pode reduzir a privacidade e a segurança da conexão. Links SimpleX não confiáveis ficarão vermelhos. Link de conexão inválido - Certifique-se de que os endereços do servidor SMP estejam no formato correto, separados por linhas e não estejam duplicados. O remetente excluiu a solicitação de conexão. Notificações periódicas estão desativadas! As notificações instantâneas estão desativadas! @@ -582,7 +567,6 @@ observador Por favor, entre em contato com o administrador do grupo. Markdown em mensagens - Servidores SMP Endereço do servidor predefinido Rejeitar %1$d mensagem(ens) ignorada(s) @@ -621,22 +605,17 @@ Redefinir Mensagem ao vivo! Envie uma mensagem ao vivo: ela será atualizada para os destinatários enquanto você digita - (para compartilhar com seu contato) - (escanear ou colar da área de transferência) Você aceitou a conexão Marcar como não lida Silenciar Definir nome do contato Link inválido! - Esse QR Code não é um link! - Seu perfil de chat será enviado\nao seu contato Você será conectado quando o dispositivo do seu contato estiver online. Aguarde ou verifique mais tarde. Como Teste do servidor falhou! Os hosts .onion não serão usados. Os hosts .onion serão obrigatórios para a conexão.\nAtenção: você não conseguirá se conectar aos servidores sem um endereço .onion. Versão principal: v%s - repositório do GitHub.]]> Como isso afeta a bateria %1$s quer se conectar com você via sem criptografia de ponta a ponta @@ -745,14 +724,11 @@ Novidades Chamadas de áudio e vídeo Proteja seus perfis de chat com uma senha! - Este texto está disponível nas configurações Escanear código Os hosts .onion serão usados quando estiverem disponíveis. Seu perfil atual - Privacidade redefinida Notificações privadas Fazer uma conexão privada - Você decide quem pode se conectar. Isso pode acontecer quando:\n1. As mensagens expiraram no remetente após 2 dias ou no servidor após 30 dias.\n2. A descriptografia da mensagem falhou porque você ou seu contato usou um backup antigo do banco de dados.\n3. A conexão foi comprometida. Você deverá inserir a senha sempre que o aplicativo for iniciado – ela não fica armazenada no dispositivo. Salvar mensagem de boas-vindas\? @@ -781,7 +757,6 @@ Usar servidor Você precisa permitir que seu contato envie mensagens de voz para poder enviá-las também. Seus perfis de chat - Servidor predefinido Escaneie o código de segurança do aplicativo do seu contato. Enviar mensagem Requerido @@ -833,17 +808,12 @@ O banco de dados não está funcionando corretamente. Toque para saber mais Aguardando a imagem Mostrar QR Code - Abrir no aplicativo móvel.]]> Testar servidores - Atualizar o modo de isolamento de transporte\? Vídeo ativado Aguardando o arquivo Toque no botão Para começar uma nova conversa Ligar - Bem-vindo(a)! - O futuro da transmissão de mensagens - Proxy SOCKS Não foi possível concluir a alteração da senha do banco de dados. Pare o chat para exportar, importar ou excluir o banco de dados. Não será possível enviar ou receber mensagens enquanto o chat estiver parado. %s segundo(s) @@ -865,7 +835,6 @@ O teste falhou na etapa %s. Iniciar periodicamente envio não autorizado - Toque para iniciar uma nova conversa Você não tem conversas aguardando resposta… Seu banco de dados atual será EXCLUÍDO e SUBSTITUÍDO pelo importado.\nEsta ação não pode ser desfeita - seu perfil, contatos, mensagens e arquivos serão completamente destruídos. @@ -883,7 +852,6 @@ Você é um colaborador Mensagem de voz (%1$s) Compartilhar link - Para proteger sua privacidade, o SimpleX usa IDs separados para cada um dos seus contatos. chamada de vídeo Mostrar Servidores ICE WebRTC @@ -909,12 +877,9 @@ Alterar endereço de recebimento\? Ativar som Logo SimpleX - Esse link não é válido! Servidor de teste simplexmq: v%s (%2s) Isolar transporte - Você controla seu chat! - Sem identificadores de usuário. Alto-falante ligado Vídeo desativado Alto-falante desligado @@ -948,7 +913,6 @@ Compartilhar mensagem… Bem-vindo(a) %1$s! Você está convidado para o grupo - Usar chat Mensagens de voz são proibidas neste chat. Vídeo Vídeo enviado @@ -964,7 +928,6 @@ Mostrar: iniciando… aguardando confirmação… - Não armazenamos nenhum dos seus contatos nem suas mensagens (uma vez entregues) nos servidores. Mensagens ignoradas Toque para ativar o perfil. Mostrar perfil de chat @@ -972,7 +935,6 @@ Não foi possível conectar ao servidor que recebe mensagens desta conexão: %1$s. Tentando se conectar ao servidor utilizado para receber mensagens desta conexão. Você está conectado ao servidor usado para receber mensagens desta conexão. - Seu servidor Bloqueio SimpleX A impressão digital do endereço do servidor não corresponde à do certificado. Você enviou um convite de grupo @@ -983,7 +945,6 @@ imagem de pré-visualização do link Para proteger suas informações, ative o bloqueio SimpleX. \nVocê será solicitado a completar a autenticação antes que este recurso seja ativado. - Qualquer um pode hospedar os servidores. Claro O contato permite ativado @@ -1004,23 +965,16 @@ Apoie SimpleX Chat Esta ação não pode ser desfeita - as mensagens enviadas e recebidas antes do período selecionado serão excluídas. Isso pode levar vários minutos. Confirme as atualizações do banco de dados - Somente os dispositivos do usuário armazenam perfis, contatos, grupos e mensagens. Obrigado por instalar o SimpleX Chat! - A plataforma de mensagens que protege sua privacidade e segurança. Você está tentando convidar um contato com quem compartilhou um perfil anônimo para o grupo no qual está usando seu perfil principal. Fila segura imagem de perfil temporária - Erro ao carregar servidores SMP - Erro ao carregar servidores XFTP - Erro ao salvar servidores XFTP - Certifique-se de que os endereços dos servidores XFTP estejam no formato correto, separados por linha e não estão duplicados. Criar arquivo Baixar arquivo O servidor requer autorização para fazer upload, verifique a senha. Enviar arquivo Comparar arquivo Excluir arquivo - Seus servidores XFTP Autenticação falhou Mudar senha Senha atual @@ -1036,7 +990,6 @@ Você não pôde ser verificado; por favor, tente novamente. Autenticar Bloqueio SimpleX não ativado! - Servidores XFTP porta %d Configurações do proxy SOCKS Usar proxy SOCKS @@ -1077,7 +1030,6 @@ %1$d mensagens ignoradas. Chamadas de áudio/vídeo Chamadas de áudio/vídeo são proibidas. - \nDisponível em v5.1 Você e seu contato podem fazer chamadas. Somente você pode fazer chamadas. Somente seu contato pode fazer chamadas. @@ -1098,10 +1050,8 @@ Destaque adicional link de uso único Adicione o endereço ao seu perfil para que seus contatos possam compartilhá-lo com outras pessoas. A atualização do perfil será enviada aos seus contatos. - Crie um endereço para permitir que as pessoas se conectem com você. Criar endereço SimpleX Continuar - Não criar endereço Endereço Tema escuro Fundo @@ -1121,10 +1071,8 @@ Título Se não puderem se encontrar pessoalmente, exiba o QR Code na videochamada ou compartilhe o link. Para se conectar, seu contato pode ler o QR Code ou usar o link no aplicativo. - Você pode compartilhar seu endereço como link ou QR Code para que qualquer pessoa possa se conectar com você. Você não perderá seus contatos se, posteriormente, excluir seu endereço. Endereço SimpleX - Quando alguém solicitar conexão, você pode aceitar ou recusar. Cores da interface Compartilhar com contatos do SimpleX A atualização do perfil será enviada aos seus contatos. @@ -1135,7 +1083,6 @@ \nConecte-se comigo via SimpleX Chat: %s Convide amigos Vamos conversar no SimpleX - Você pode criá-lo mais tarde Compartilhar endereço… Você pode compartilhar este endereço com seus contatos para que eles se conectem com %s. Prévia @@ -1299,13 +1246,11 @@ As confirmações de entrega serão ativadas para todos os contatos. Ocorreu um erro ao ativar as confirmações de entrega! Escolher arquivo - Conexão anônima Permitir Desativar notificações Sem chamadas de fundo Abrir configurações do aplicativo Um novo perfil aleatório será compartilhado. - Cole o link que você recebeu para se conectar com seu contato… Desativar confirmações para grupos? Ativar confirmações para grupos? O envio de confirmações está desativado para %d grupos @@ -1401,7 +1346,6 @@ Você pode visualizar o código de convite novamente nos detalhes de conexão. Opções de desenvolvedor Mostrar chamadas de API lentas - Você pode torná-lo visível para seus contatos nas Configurações. Criptografar arquivos locais %s conectou Erro ao bloquear membro para todos @@ -1633,8 +1577,6 @@ Configurações avançadas Verificar atualizações Completas - Servidores SMP configurados - Servidores XFTP configurados Verifique sua conexão de internet e tente novamente Verificar atualizações Modo de cor @@ -1725,7 +1667,6 @@ \nErro: %2$s Destinatário(s) não podem ver de onde essa mensagem veio. A mensagem poderá ser entregue mais tarde se o membro se tornar ativo. - Outros servidores SMP Para proteger seu endereço IP, o roteamento privado usa seus servidores SMP para entregar mensagens. Pular essa versão Baixar %s (%s) @@ -1911,7 +1852,6 @@ Configurações Manter conversa Apenas apagar conversa - Outros servidores XFTP Use roteamento privado em servidores desconhecidos quando o endereço de IP não está protegido. Sim Instalar atualização @@ -2001,7 +1941,6 @@ Endereço do servidor Tamanho Erros de envio - Abrir configurações de servidor Selecione As mensagens serão apagadas para todos os membros. As mensagens serão marcadas como moderadas para todos os membros. @@ -2123,7 +2062,6 @@ %s.]]> Mensagens diretas entre membros são proibidas neste chat. Melhor desempenho de grupos - com criptografia de ponta a ponta, com segurança pós-quântica em mensagens diretas.]]> A conversa será apagada para você. Isso não pode ser desfeito! Condições aceitas em: %s. Mensagens diretas entre membros são proibidas. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml index 6ab12f76f6..8b43d5295d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml @@ -43,8 +43,6 @@ não Definir preferências de grupo Mensagens de voz - " -\nDisponível na v5.1" Aceitar Permitir que seus contatos enviem mensagens que desaparecem. Definir 1 dia @@ -71,10 +69,8 @@ As mensagens enviadas serão eliminadas após o tempo definido. Mensagem de rascunho Defina-o em vez de autenticação do sistema. - Conectar Você está conectado ao servidor usado para receber mensagens deste contacto. você - Certifique-se de que os endereços do servidor XFTP estão no formato correto, separados por linhas e não estão duplicados. Desconectar Possivelmente, a impressão digital do certificado no endereço do servidor está incorreta A senha é necessária @@ -128,7 +124,6 @@ Aceitar Aceitar pedido de ligação\? Aceitar modo anónimo - Adicionar servidores pré-definidos Aceder aos servidores via proxy SOCKS no porto %d\? O proxy tem de iniciar antes de ativar esta opção. Adicionar a outro dispositivo administrador @@ -157,14 +152,12 @@ Nome para Exibição: Mostrar código QR Mensagens temporárias são proibidas neste grupo. - Conectar via link / código QR Mensagens temporárias são proibidas nesta conversa. Enviar AO VIVO Enviar uma mensagem ao vivo - ela será atualizada para o(s) destinatário(s) à medida que você a digita Nome local Modo de bloqueio - Certifique-se de que os endereços do servidor SMP estão no formato correto, separados por linhas e não estão duplicados. Fazer uma conexão privada Tornar o perfil privado! Certifique-se de que os endereços do servidor WebRTC ICE estão no formato correto, separados por linhas e não estão duplicados. @@ -204,7 +197,6 @@ Você e o seu contato podem eliminar irreversivelmente as mensagens enviadas. Você já tem um perfil de chat com o mesmo nome para exibição. Por favor, escolha outro nome. Você está convidado para o grupo - Abrir na aplicação móvel.]]> Você está convidado para o grupo. Junte-se para se conectar com os membros do grupo. Grupo Áudio ligado @@ -325,7 +317,6 @@ Definir senha para exportar Pedido de conexão enviado! Criar endereço - Criar colorido conectando… Conectando chamada @@ -374,7 +365,6 @@ Se você recebeu convite de ligação do SimpleX Chat, você pode abri-lo no seu navegador: Toque para entrar no modo anônimo Salvar senha na Keystore - mostre o código QR na chamada de vídeo ou partilhe a ligação.]]> Salvar definições de aceitação automática Aceitar automaticamente Salvar e atualizar o perfil do grupo @@ -400,7 +390,6 @@ Ligação inválida! Guia de Utilizador.]]> Conexão - Crie um endereço para permitir que as pessoas se conectem consigo. Salvar e notificar contato Salvar e notificar contatos Salvar e notificar membros do grupo @@ -411,7 +400,6 @@ Todos os seus contatos permanecerão conectados. A atualização do perfil será enviada aos seus contatos. Adicione endereço ao seu perfil, para que os seus contatos possam partilhá-lo com outras pessoas. A atualização do perfil será enviada aos seus contatos. Os contactos podem marcar mensagens para eliminar; você será capaz de as ver. - Criar convite de ligação de utilização única anónimo via ligação de utilização única anónimo via ligação de grupo via ligação de utilização única @@ -419,15 +407,11 @@ Ligação para 1 utilização Criar ligação Apagar ligação\? - ler o código QR na chamada de vídeo , ou o seu contato pode partilhar um convite de ligação.]]> Se não se poderem encontrar pessoalmente, mostre o código QR numa chamada de vídeo ou partilhe a ligação. - As pessoas podem se conectar a si apenas por meio das ligações que você partilhe. Verifique se você usou a ligação correta ou peça ao seu contato para enviar outra. Partilhar ligação Enviar pré-visualizações de ligações - (ler ou colar da área de transferência) Partilhar ligação de utilização única - GitHub.]]> Criar perfil Criar o seu perfil %d contacto(s) selecionado(s) @@ -467,7 +451,6 @@ Eliminar servidor Personalizar tema Eliminar imagem - Não criar endereço Desativar Palavra-passe da base de dados Criar endereço SimpleX @@ -476,7 +459,6 @@ Eliminar contacto? Dispositivo Mensagens diretas - Descentralizado mensagem duplicada Ficheiro: %s você: %1$s @@ -498,7 +480,6 @@ Você não irá perder os seus contatos se eliminar o seu endereço mais tarde. Você pode esconder ou silenciar um perfil de utilizador - pressione-o para o menu. Vídeo ligado - Servidores XFTP %1$s quer conectar-se consigo via Junte-se Sair @@ -535,8 +516,6 @@ Endereço SimpleX Equipa SimpleX Saiba mais - Quando as pessoas solicitam conexão, você pode aceitá-la ou rejeitá-la. - Você pode criá-lo mais tarde Vamos conversar no SimpleX Chat Vídeo desligado %1$d mensagem(s) ignoradas @@ -573,7 +552,6 @@ Mais melhorias chegam brevemente! Pré-visualização de notificação Muito provavelmente este contato eliminou a conexão consigo. - Este texto está disponível nas definições Pode ser alterado mais tarde através das definições. Ajuda Suporte SimpleX Chat @@ -637,7 +615,6 @@ Para verificar a encriptação de ponta a ponta com o seu contato, compare (ou leia) o código nos seus dispositivos. Ler o código de segurança a partir da aplicação do seu contacto. Ler o código QR do servidor - Apenas dispositivos pessoais armazenam perfis de utilizador, contatos, grupos e mensagens. o contacto tem encriptação ponta a ponta sem encriptação ponta a ponta criador @@ -725,7 +702,6 @@ Pesquisar Desativado O teste falhou na etapa %s. - Servidor SMP Servidor de teste %s segundo(s) Parar conversa? @@ -741,7 +717,6 @@ %s, %s e %d outros membros conectados Iniciar conversa? Começa periodicamente - Toque para iniciar uma nova conversa Sistema de autenticação Parar de receber o arquivo? Servidores de teste @@ -798,9 +773,6 @@ A transferir detalhes de ligação A criar ligação de arquivo duplicados(as) - Abrir definições do servidor - O seu perfil de conversa será enviado -\npara o seu contacto Conectar com %1$s? Auricular Dispositivos @@ -818,7 +790,6 @@ Ativar Computador O seu contacto enviou um ficheiro que é maior que o tamanho máximo suportado atualmente (%1$s). - O seu servidor O endereço do seu servidor As tuas chamadas Não enviar histórico a novos membros. @@ -836,7 +807,6 @@ Os seus contactos podem permitir eliminação total de mensagens. Desconectado com a razão: %s Você já solicitou ligação através deste endereço! - Código e protocolo open-source - qualquer indivíduo pode ser anfitrião dos servidores. %d mensagens bloqueadas %d mensagens marcadas como eliminadas Você não pode ser verificado; por favor tente novamente. @@ -885,7 +855,6 @@ Transferir %s (%s) Os seus servidores ICE O seu perfil, contactos e mensagens entregues são armazenados no seu dispositivo. - Os seus servidores ICE Desativar (manter as sobreposições de grupo) Desativar (manter sobreposições) Desativar recibos? @@ -926,10 +895,7 @@ Você será conectado quando o dispositivo do seu contacto estiver online, por favor aguarde ou volte mais tarde! Desconectar Desativado - Os seus servidores XFTP - Você controla a conversa! Você poderá ver a conversa com %1$s na lista de conversas. - Os seus servidores SMP Você pode usar markdown para formatar mensagens: Você poderá enviar mensagens para %1$s através das conversas Eliminadas. O seu contacto precisa de estar online para a ligação ser completada. @@ -943,7 +909,6 @@ A tua base de dados de conversas Detalhes Você pode partilhar o seu endereço com os seus contactos para permitir que se conectem com %s. - Você pode partilhar o seu endereço como uma ligação ou código QR - qualquer pessoa pode conectar-se a si. Permitir Todas as novas mensagens de %s serão ocultadas! Somente você pode fazer ligações. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml index 3af5fbee19..8c7651fecd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml @@ -33,7 +33,6 @@ Accepți cererea de conectare? Adaugă contact apel acceptat - Adaugă servere presetate Adaugă profil Adresă Adaugă servere prin scanarea codurilor QR. @@ -104,7 +103,6 @@ Arhivează și încarcă Bază de date de arhivare Se creează un link de arhivare - Creează link de invitație de unică folosință Acceptă automat imagini Apel audio apel audio @@ -128,7 +126,6 @@ Autentificare anulată Cod de acces aplicație este înlocuit cu cod de acces de autodistrugere. Apeluri audio/video - \nDisponibil în v5.1 Cod de acces aplicație Migrare date aplicație Eroare critică @@ -285,7 +282,6 @@ Setează numele contactului… Trimite mesaj Trimiteți un mesaj care dispare - (scanează sau lipește din clipboard) Afișează codul QR Testul serverului a eșuat! Afișează: @@ -341,7 +337,6 @@ Pătrat, cerc, sau orice între. %s nu este verificat %s este verificat - Servere SMP %s, %s și %d alți membri s-au conectat %s, %s și %d membri Difuzor @@ -386,7 +381,6 @@ Migrează de pe alt dispozitiv pe noul dispozitiv și scanați codul QR.]]> Te conectezi prin adresa de contact? Vrei să te conectezi printr-un link unic? - Conectare incognito Contactul deja există Schimbă codul de acces Puteți activa SimpleX Lock din Setări. @@ -423,7 +417,6 @@ Profilurile tale de conversație Creează un profil de conversație apel încheiat %1$s - Creează Bluetooth Camera Apeluri pe ecranul blocat: @@ -457,13 +450,11 @@ Nu ați putut fi verificat; vă rugăm să încercați din nou. Copiază Anulează mesajul live - Conectare prin link / cod QR Contactele tale vor rămâne conectate. Parola pentru criptarea bazei de date va fi actualizată. Contactele tale pot permite ștergerea totală a mesajelor. Trebuie să îi permiți contactului tău să trimită mesaje vocale pentru a le putea trimite. Versiunea de bază: v%s - Creează o adresă pentru a permite oamenilor să se conecteze cu tine. %s blocat ați schimbat adresa ați schimbat adresa pentru %s @@ -478,7 +469,6 @@ Copiat Camera Ați invitat un contact - Profilul tău de conversație va fi trimis contactului tău. Contribuie Profil conversație aldin @@ -511,7 +501,6 @@ Contactul tău a trimis un fișier care este mai mare decât dimensiunea maximă acceptată în prezent (%1$s). anulează previzualizarea linkului Verifică adresa serverului și încearcă din nou. - Tu îți controlezi chatul! Apelul s-a încheiat deja! Apel încheiat Blochează pentru toți @@ -530,7 +519,6 @@ Confirmați fișiere de la servere necunoscute. am schimbat adresa pentru tine Confirmă noua parolă… - Conectare conexiune %1$d conexiune stabilită Eroare de conexiune @@ -617,7 +605,6 @@ Ștergeți mesajul membrului? Șterge grupul Șterge și notifică contactele - Descentralizat grup șters %d contact(e) selectat(e) Șters la: %s @@ -661,7 +648,6 @@ Șterge baza de date de pe acest dispozitiv Șterge profilul de conversație Șterge fișierele pentru toate profilurile de conversație - Oricine poate găzdui servere. Contacte arhivate Beta Apeluri interzise! @@ -673,7 +659,6 @@ Controlează-ți rețeaua Parola pentru criptarea bazei de date va fi actualizată și stocată în Keystore. Parola bazei de date - Servere XFTP configurate Baza de date este criptată folosind o parolă aleatorie. Trebuie schimbată înainte de exportare. apel Contact șters! @@ -702,7 +687,6 @@ Profil actual Confirmi ștergerea contactului? Contactul va fi șters - acest lucru nu poate fi anulat! - Servere SMP configurate Conectat Corectează numele la %s? Continuă @@ -747,9 +731,6 @@ Încălcarea liniilor directoare ale comunității Profil inadecvat Alt motiv - Eroare la salvarea serverelor SMP - Asigurați-vă că adresele serverelor XFTP sunt în format corect, separate pe linii și nu sunt duplicate. - Eroare la încărcarea serverlor XFTP Eroare la actualizarea configurației de rețea Nu s-au putut încărca conversațiile Vă rugăm să actualizați aplicația și contactați dezvoltatorii. @@ -771,12 +752,9 @@ incognito printr-un link de unică folosință a + b prin %1$s - Eroare la încărcarea serverlor SMP %1$d fișier(e) au fost șterse. raport arhivat de %s Invitație acceptată - Asigurați-vă că adresele serverelor SMP sunt în format corect, separate pe linii și nu sunt duplicate. - Eroare la salvarea serverelor XFTP %1$d fișier(e) sunt încă în curs de descărcare. %1$d fișier(e) nu au putut fi descărcate. %1$d fișier(e) nu au fost descărcate. @@ -850,7 +828,6 @@ Sau scanați codul QR Gazdă Cum se folosește marcarea - Imun la spam Baza de date va fi criptată. Grup inactiv Bună dimineaţa! @@ -984,7 +961,6 @@ Nume nevalid! Eroare la deschiderea browserului Cum funcționează - Doar dispozitivele client stochează profiluri de utilizator, contacte, grupuri și mesaje. Instalat cu succes Dezactivează Opțiuni dezvoltator @@ -1016,7 +992,6 @@ Erori la ștergere Dezactivați ștergerea mesajelor Păstrează conversația - Cod QR nevalid Cod de securitate incorect! Dispare la: %s Conectează-te cu datele tale de autentificare @@ -1302,7 +1277,6 @@ Încă nu există conexiune directă, mesajul a fost redirecționat de administrator. - Deschide conversația la primul mesaj necitit.\n- Mergi la mesajele citate. Oprit - Deschide setările serverului criptare ok pentru %s profilul grupului a fost actualizat proprietar @@ -1373,7 +1347,6 @@ Eroare la schimbarea profilului Nicio persoană de contact filtrată Servere media și fișiere - Alte servere XFTP NU utilizați rutare privată. Activează apelurile de pe ecranul de blocare prin Setări. Dezactivează (păstrează suprascrierile) @@ -1411,7 +1384,6 @@ expirat Descărcați %s (%s) Instalează actualizarea - Nu crea adresă De exemplu, dacă un contact al tău primește mesaje printr-un server SimpleX Chat, aplicația ta le va trimite printr-un server Flux. Deschide Setările Safari / Site-uri web / Microfon, apoi selectează Permite pentru localhost. Apel ratat @@ -1488,7 +1460,6 @@ Conversație nouă Link de invitație unic Servere mesaje - Alte servere SMP Introduceți serverul manual Servere ICE (unul pe linie) Rețea și servere @@ -1499,7 +1470,6 @@ Ieșire fără salvare Parolă profil ascuns italic - Fără identificatori de utilizator. Acest lucru se poate întâmpla atunci când:\n1. Mesajele au expirat în aplicația de trimitere după 2 zile sau pe server după 30 de zile.\n2. Decriptarea mesajului a eșuat, deoarece tu sau contactul tău ați folosit un backup vechi al bazei de date.\n3. Conexiunea a fost compromisă. Eroare la exportarea bazei de date a conversației Eroare la oprirea conversației @@ -1593,7 +1563,6 @@ Lipește Vă rugăm să rugați persoana de contact să activeze apelurile. Rutare privată - Confidențialitatea redefinită Vă rugăm să verificați conexiunea la rețea cu %1$s și să încercați din nou. Rutare mesaje private 🚀 Bara de instrumente pentru conversație, accesibilă @@ -1605,14 +1574,12 @@ Se pregătește încărcarea Acces refuzat! Vă rugăm să reduceți dimensiunea mesajului și să îl trimiteți din nou. - În așteptare peer-to-peer Vă rugăm să reporniți aplicația. Mesaje primite Lipește linkul pentru conectare! Interziceți reacțiile la mesaje. Interzicerea trimiterii de linkuri SimpleX - Lipește linkul primit pentru a te conecta cu contactul tău… Te rugăm să-i ceri persoanei tale de contact să activeze trimiterea de mesaje vocale. Cod QR portul %d @@ -1698,7 +1665,6 @@ substituent pentru imaginea de profil Lipește linkul Adresa prestabilită a serverului - Server presetat Evaluează aplicația Port Conversațiile private, grupurile și contactele tale nu sunt accesibile operatorilor serverului. @@ -1888,10 +1854,8 @@ Opriți fișierul trimitere neautorizată Bun venit, %1$s! - Atinge pentru a începe o conversație nouă Folosește acreditări proxy diferite pentru fiecare conexiune. Adresă SimpleX sau link de unică folosință? - Pentru a-ți proteja confidențialitatea, SimpleX folosește ID-uri separate pentru fiecare persoană de contact. Ai fost invitat în grup Pentru a primi Utilizare pentru fișiere @@ -1929,7 +1893,6 @@ Mod Blocare SimpleX Mesajele vor fi marcate ca moderate pentru toți membrii. necitit - Bun venit! Atingeți pentru conectare Mesajele vocale sunt interzise! Ați acceptat conexiunea @@ -1963,7 +1926,6 @@ Sistem Acestea pot fi ignorate în setările de contact și de grup. Suport SimpleX Chat - Proxy SOCKS Teme În timpul importului au apărut câteva erori non-fatale: Atingeți pentru a vă alătura @@ -1984,7 +1946,6 @@ Actualizează parola bazei de date Opriți trimiterea fișierului? tăiere - Viitorul mesageriei Pentru a efectua apeluri, permiteți utilizarea microfonului. Încheiați apelul și încercați să sunați din nou. Când sunt activați mai mulți operatori, niciunul dintre ei nu are metadate pentru a afla cine comunică cu cine. Video pornit @@ -2072,7 +2033,6 @@ Când partajezi un profil incognito cu cineva, acest profil va fi folosit pentru grupurile la care te invită. Mesaj vocal La conectarea apelurilor audio și video. - Când oamenii solicită conectarea, poți accepta sau respinge solicitarea. Acest grup are peste %1$d membri, confirmările de livrare nu sunt trimise. Comutați între audio și video în timpul apelului. Deconectați desktopul? @@ -2081,19 +2041,13 @@ Încarcă fișier Atinge butonul Atingeți pentru a scana - (pentru a partaja cu persoana de contact) Pentru a începe o nouă conversație Video Partajează link de unică folosință - Acest link nu este un link de conectare valid! - Acest cod QR nu este un link! Link scurt - Server XFTP - Actualizați modul de izolare a transportului? Folosește rutare privată cu servere necunoscute. Folosește rutare privată cu servere necunoscute atunci când adresa IP nu este protejată. Folosiți portul TCP %1$s atunci când nu este specificat niciun port. - Nu stocăm niciunul dintre contactele sau mesajele tale (odată livrate) pe servere. prin releu Soft Puternic @@ -2116,9 +2070,6 @@ Încărcat Folosiți portul TCP 443 doar pentru serverele presetate. Omiteți această versiune - O poți crea mai târziu - O poți face vizibilă contactelor tale SimpleX din Setări. - Platforma de mesagerie și aplicații care vă protejează confidențialitatea și securitatea. Profilul este partajat doar cu contactele tale. Pentru a-ți dezvălui profilul ascuns, introdu parola completă în câmpul de căutare de pe pagina Profilurile tale de conversație. Puteți configura serverele prin intermediul setărilor. @@ -2143,7 +2094,6 @@ Blocarea SimpleX nu este activă! Autentificare sistem Baza de date nu funcționează corect. Atingeți pentru a afla mai multe. - Acest text este disponibil în setări Ești invitat în grup Se așteaptă imaginea Se așteaptă imaginea @@ -2162,7 +2112,6 @@ Servere de testare Folosește credențiale aleatorii Actualizare disponibilă: %s - Folosește chatul Hash-ul mesajului anterior este diferit. Această acțiune nu poate fi anulată - mesajele trimise și primite anterior celei selectate vor fi șterse. Poate dura câteva minute. Parolă greșită! @@ -2231,13 +2180,11 @@ %1$d erori de fișier:\n%2$s Conexiune blocată Conexiunea este blocată de operatorul serverului:\n%1$s. - criptate end-to-end, cu securitate post-cuantică în mesajele directe.]]> Bările de instrumente ale aplicației Securitate îmbunătățită ✅ Toate conversațiile vor fi eliminate din lista %s, iar lista va fi ștearsă Conexiunea ta a fost mutată la %s, dar a apărut o eroare la schimbarea profilului. Puteți migra baza de date exportată. - Serverele tale XFTP Utilizați gazdele .onion la Nu dacă proxy-ul SOCKS nu le acceptă.]]> Profilul tău de chat va fi trimis membrilor chatului Vei primi în continuare apeluri și notificări de la profilurile dezactivate atunci când acestea sunt active. @@ -2305,7 +2252,6 @@ Adaugă prieteni Adaugă membri echipei Conversația există deja! - Deschide în aplicația mobilă.]]> Continuă %s a fost deconectat]]> Despre operatori @@ -2317,11 +2263,9 @@ contact dezactivat contactul nu este gata Profilul, contactele și mesajele livrate sunt stocate pe dispozitiv. - Serverele tale ICE Adaugă la listă Modificați lista invitație acceptată - Îți poți partaja adresa sub formă de link sau cod QR - oricine se poate conecta cu tine. Acceptă Confidențialitatea ta Acceptă condițiile @@ -2338,11 +2282,9 @@ Poți vizualiza rapoartele tale în conversația cu administratorii. Schimbă ordinea Te vei conecta atunci când dispozitivul contactului tău va fi online, te rugăm să aștepți sau să verifici mai târziu! - scana codul QR în timpul apelului video sau contactul tău poate partaja un link de invitație.]]> Profilul tău %1$s va fi distribuit. Nu îți vei pierde contactele dacă ulterior îți ștergi adresa. Securitatea conexiunii - Serverele tale SMP Toate serverele Profilul tău este stocat pe dispozitiv și este partajat doar cu contactele tale. Serverele SimpleX nu pot vedea profilul tău. Baza ta de date actuală de chat va fi ȘTERSĂ și ÎNLOCUITĂ cu cea importată.\nAceastă acțiune nu poate fi anulată - profilul, contactele, mesajele și fișierele tale vor fi pierdute iremediabil. @@ -2354,18 +2296,15 @@ %s cu motivul: %s]]> %s a fost deconectat]]> (nou)]]> - Serverul tău Trebuie să îi permiți contactului tău să te sune pentru a-l putea suna. Adresa serverului tău Serverele tale Vei fi conectat la grup atunci când dispozitivul gazdei grupului va fi online, te rugăm să aștepți sau să verifici mai târziu! - Tu decizi cine se poate conecta. Vei fi conectat când cererea ta de conectare va fi acceptată, te rugăm să aștepți sau să verifici mai târziu! Acceptați ca observator Experiență de utilizare îmbunătățită 1 chat cu un membru Toate rapoartele vor fi arhivate pentru tine. - depozitul nostru GitHub.]]> Permiteți în următoarea fereastră de dialog să primească notificări instantaneu.]]> Setări adresă Arhivare rapoarte @@ -2375,7 +2314,6 @@ Prin utilizarea SimpleX Chat ești de acord să:\n- trimiți doar conținut legal în grupurile publice.\n- respecți ceilalți utilizatori – fără spam. doar cu un singur contact - partajează-l personal sau prin orice aplicație de mesagerie.]]> Nu trebuie să utilizați aceeași bază de date pe două dispozitive. - arătați codul QR în apelul video sau distribuiți linkul.]]> Utilizare de pe desktop în aplicația mobilă și scanează codul QR.]]> SimpleX rulează în fundal în loc să utilizeze notificări push.]]> Utilizarea bateriei aplicației / Nerestricționat în setările aplicației.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index 9a4e550dbe..ba571e4d0a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -8,7 +8,6 @@ Вступить в группу? Ваш профиль будет отправлен контакту, от которого Вы получили эту ссылку. Вы соединитесь со всеми членами группы. - Соединиться соединен(а) ошибка @@ -48,8 +47,6 @@ В браузере Использование ссылки в браузере может уменьшить конфиденциальность и безопасность соединения. Ссылки на неизвестные сайты будут красными. - Ошибка при сохранении SMP-серверов - Пожалуйста, проверьте, что адреса SMP-серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется. Ошибка при сохранении настроек сети Превышено время соединения @@ -169,14 +166,11 @@ не прочитано Здравствуйте %1$s! - Здравствуйте! - Этот текст можно найти в Настройках Чаты соединяется… Вы приглашены в группу Вступить как %s соединяется… - Нажмите, чтобы начать чат Соединиться с разработчиками У Вас нет чатов @@ -224,7 +218,6 @@ Соединено Соединение с сервером не установлено Ошибка - Ожидает Поменять адрес получения? Адрес получения сообщений будет перемещён на другой сервер. Изменение адреса завершится после того как отправитель будет онлайн. @@ -246,12 +239,8 @@ Скопировано в буфер обмена Начать новый разговор - Создать ссылку-приглашение - Соединиться через ссылку или QR-код Сканировать QR-код Создать секретную группу - (чтобы отправить Вашему контакту) - (сканировать или вставить из буфера) (хранится только у членов группы) Разрешение не получено! @@ -320,18 +309,11 @@ Показать QR-код - Ошибка QR-кода - Этот QR-код не является ссылкой! Неверная ссылка! - Эта ссылка не является ссылкой-приглашением! Запрос на соединение отправлен! Соединение с группой будет установлено, когда хост группы будет онлайн. Пожалуйста, подождите или проверьте позже! Соединение будет установлено, когда Ваш запрос будет принят. Пожалуйста, подождите или проверьте позже! Соединение будет установлено, когда Ваш контакт будет онлайн. Пожалуйста, подождите или проверьте позже! - показать QR-код во время видеозвонка или поделиться ссылкой.]]> - Ваш профиль будет отправлен -\nВашему контакту - сосканировать QR-код во время видеозвонка, или Ваш контакт может отправить Вам ссылку.]]> Поделиться одноразовой ссылкой Соединиться @@ -350,9 +332,7 @@ Написать нам письмо Блокировка SimpleX Консоль - SMP-серверы Адрес сервера по умолчанию - Добавить серверы по умолчанию Добавить сервер Тестировать сервер Тестировать серверы @@ -361,8 +341,6 @@ Серверы не прошли тест: Сканировать QR-код сервера Ввести сервер вручную - Сервер по умолчанию - Ваш сервер Адрес Вашего сервера Использовать сервер Использовать для новых соединений @@ -375,7 +353,6 @@ Внести свой вклад Оценить приложение Использовать серверы, предоставленные SimpleX Chat? - Ваши SMP-серверы Используются серверы, предоставленные SimpleX Chat. Инфо Как использовать серверы @@ -421,15 +398,11 @@ Сохранить и уведомить членов группы Выйти без сохранения - Вы контролируете Ваш чат! - Платформа для сообщений и приложений, которая защищает Вашу личную информацию и безопасность. - Мы не храним Ваши контакты и сообщения (после доставки) на серверах. Создать профиль Ваш профиль, контакты и доставленные сообщения хранятся на Вашем устройстве. Профиль отправляется только Вашим контактам. Имя профиля не может содержать пробелы. Имя: - Создать О SimpleX Как форматировать @@ -442,7 +415,6 @@ секрет Соединиться через ссылку Эта строка не является ссылкой-приглашением! - Открыть в приложении.]]> входящий звонок… пропущенный звонок @@ -462,22 +434,11 @@ соединен(а) завершён - Будущее коммуникаций - Более конфиденциальный - Без идентификаторов пользователей. - Защищён от спама - Вы определяете, кто может соединиться. - Децентрализованный - Кто угодно может запустить сервер. Создать профиль Добавьте контакт Как это работает - Чтобы защитить Вашу конфиденциальность, SimpleX использует разные ID для каждого Вашего контакта. - Только пользовательские устройства хранят контакты, группы и сообщения. - GitHub репозитория.]]> - Использовать чат Вставьте полученную ссылку @@ -502,7 +463,6 @@ Принять Показывать Выключить - Ваши ICE-серверы WebRTC ICE-серверы Релей-сервер защищает Ваш IP-адрес, но может отслеживать продолжительность звонка. Релей-сервер используется только при необходимости. Другая сторона может видеть Ваш IP-адрес. @@ -556,7 +516,6 @@ Чаты Инструменты разработчика Экспериментальные функции - SOCKS-прокси Значок Темы Сообщения и файлы @@ -988,7 +947,6 @@ Удалить профиль чата для Эта настройка применяется к сообщениям в Вашем текущем профиле чата Отдельные транспортные сессии - Обновить режим отдельных сессий\? Имя профиля уже используется! Ошибка создания профиля! У Вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя. @@ -1089,17 +1047,11 @@ Раскрыть профиль Видео будет получено, когда Ваш контакт будет онлайн, пожалуйста, подождите или проверьте позже! Раскрыть профиль чата - Ошибка при загрузке SMP-серверов - Ошибка при загрузке XFTP-серверов - Ошибка при сохранении XFTP-серверов - Проверьте, что адреса XFTP-серверов указаны в правильном формате и не дублируются. Сервер требует авторизации для загрузки, проверьте пароль. Сравнение файла Удалить файл Загрузка файла Загрузка файла - XFTP-серверы - Ваши XFTP-серверы Использовать .onion хосты в Нет если SOCKS-прокси их не поддерживает.]]> Ошибка аутентификации Нет кода доступа @@ -1154,8 +1106,6 @@ Разрешить Вашим контактам звонить Вам. Аудио/видео звонки Аудио/видео звонки запрещены. - " -\nДоступно в v5.1" Вы и Ваш контакт можете совершать звонки. Только Вы можете совершать звонки. Только Ваш контакт может совершать звонки. @@ -1177,7 +1127,6 @@ И Вы, и Ваш контакт можете добавлять реакции на сообщения. Одноразовая ссылка Адрес SimpleX - Когда Вы получите запрос на соединение, Вы можете принять или отклонить его. Включить код самоуничтожения Все данные приложения будут удалены. Если Вы введёте код самоуничтожения при открытии приложения: @@ -1234,11 +1183,9 @@ Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой. Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении. Вы не потеряете контакты, если позже удалите Ваш адрес. - Вы можете поделиться своим адресом в виде ссылки или QR-кода - любой может соединиться с Вами. Руководстве пользователя.]]> Ваши контакты сохранятся. Настроить тему - Создайте адрес, чтобы можно было соединиться с Вами. Все Ваши контакты сохранятся. Обновлённый профиль будет отправлен Вашим контактам. Добавьте адрес в свой профиль, чтобы Ваши SimpleX контакты могли поделиться им. Профиль будет отправлен Вашим SimpleX контактам. Создать адрес SimpleX @@ -1249,9 +1196,6 @@ Сохранить настройки\? Прекратить делиться Продолжить - Не создавать адрес - Вы можете создать его позже - Вы можете сделать его видимым для ваших контактов в SimpleX через Настройки. Адрес Введите приветственное сообщение… Просмотр @@ -1388,7 +1332,6 @@ Пересогласовать Пересогласовать шифрование\? Запретить отправлять файлы и медиа. - Соединиться Инкогнито Разрешить Открыть настройки приложения Выключить уведомления @@ -1396,7 +1339,6 @@ Звонки в фоне невозможны Приложение может быть выключено после 1 минуты в фоне. Нет информации от доставке - Вставьте полученную ссылку, чтобы соединиться с Вашим контактом… Будет отправлен новый случайный профиль. Ваш профиль %1$s будет отправлен. Выключить отчёты о доставке для групп\? @@ -1939,8 +1881,6 @@ Выбранные настройки чата запрещают это сообщение. Ошибка файла Вставить ссылку / Сканировать - Другие XFTP-серверы - Настроенные XFTP-серверы Загрузка %s (%s) Доступно обновление: %s Выключить @@ -2001,7 +1941,6 @@ Нет отфильтрованных контактов Ваши контакты Архивированные контакты - Настроенные SMP-серверы Показать процент Слабое Среднее @@ -2044,7 +1983,6 @@ Выбрано %d Настройки Вы по-прежнему можете просмотреть разговор с %1$s в списке чатов. - Другие SMP-серверы Выключено Установлено успешно Установить обновление @@ -2088,7 +2026,6 @@ Соединяйтесь с друзьями быстрее. Управляйте своей сетью Защищает ваш IP-адрес и соединения. - Открыть настройки серверов Полученные сообщения Ошибки приёма Архивируйте контакты чтобы продолжить переписку. @@ -2237,7 +2174,6 @@ Настройки адреса Добавьте сотрудников в разговор. Бизнес-адрес - сквозным шифрованием, с пост-квантовой безопасностью в прямых разговорах.]]> Приложение всегда выполняется в фоне Проверять сообщения каждые 10 минут Без фонового сервиса diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml index dd8155f512..61b75fcf90 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml @@ -9,8 +9,6 @@ Použiť inkognito profil Váš profil bude odoslaný kontaktu, od ktorého ste obdržali tento odkaz. Pripojíte sa ku všetkým členom skupiny. - Pripojiť sa - Spojiť sa inkognito Otvoriť chat Pripojiť sa na kanál %s Otvoriť nový chat @@ -92,7 +90,6 @@ Ďalšie sekundárne Pridať zoznam Pridať správu - Pridať prednastavené servery Pridať profil Pridať relé Pridať relé @@ -128,7 +125,6 @@ Všetky farebné režimy Všetky dáta sa pri zadaní vymažú. Všetky správy - end-to-end šifrovaním, s post-quantovým zabezpečením v priamych správach.]]> Všetky nové správy od %s budú skryté! Všetky nové správy od týchto členov budú skryté! Povoliť @@ -185,7 +181,6 @@ Verzia aplikácie: v%s Archivovať Archivované kontakty - \nDostupné vo verzii v5.1 Späť Pozadie Služba na pozadí je vždy spustená - notifikácie budú zobrazené hneď ako budú správy k dispozícii. @@ -220,7 +215,6 @@ Zrušiť náhľad súboru zrušené %s Zrušiť migráciu - Vytvoriť Vytvoriť Vytvoriť jednorazový odkaz Vytvoriť adresu @@ -230,7 +224,6 @@ Vytvoriť odkaz na skupinu Vytvoriť odkaz Vytvoriť zoznam - Vytvoriť jednorazovú pozvánku Vytvoriť profil Vytvoriť profil Vytvoriť tajnú skupinu @@ -256,7 +249,6 @@ %dd %d deň %d dní - Decentralizovaná Vymazať Vymazať Prijať @@ -296,7 +288,6 @@ Povoliť vašim kontaktom odosielať súbory a média. Povoliť vašim kontaktom posielať hlasové správy. Všetky hlásenia budú pre vás archivované. - Servery môže prevádzkovať ktokoľvek. arabčina, bulharčina, fínčina, hebrejčina, thajčina a ukrajinčina - vďaka používateľom a Weblate. Archivovať všetky hlásenia? Archivovať a nahrať @@ -466,8 +457,6 @@ Podmienky prijaté dňa: %s. %s.]]> Podmienky používania - Nastavené SMP servery - Nastavené XFTP servery Nastaviť relé Potvrdiť Potvrdiť vymazanie kontaktu? @@ -520,7 +509,6 @@ Verzia jadra: v%s Roh Opraviť meno na %s? - Vytvoriť adresu, aby sa s vami ľudia mohli spojiť. Vytvoriť chatový profil Vytvorený Vytvoriť nový profil v počítačovej aplikácii. 💻 @@ -910,7 +898,6 @@ %dmes Neposielať históriu novým členom. Neposielať históriu novým odberateľom. - Nevytvárať adresu Nepovoliť Nenechajte si ujsť dôležité správy. Znova nezobrazovať @@ -1294,8 +1281,6 @@ Chyba pri preposielaní správ Chyba inicializácie WebView. Ujistite sa, že máte nainštalovaní WebView ktorý podporuje architektúru arm64.\nChyba: %s Chyba pri načítavaní zoznamov chatov - Chyba pri načítavaní SMP serverov - Chyba pri načítavaní XFTP serverov Chyba pri označovaní ako prečítané Chyba pri otváraní prehliadača Chyba pri otváraní chatu @@ -1331,8 +1316,6 @@ Chyba pri ukladaní serverov Chyba pri ukladaní nastavení Chyba pri ukladaní nastavení - Chyba pri ukladaní SMP serverov - Chyba pri ukladaní XFTP serverov Chyba pri aktualizovaní zoznamu chatov Chyba pri aktualizovaní odkazu skupiny Chyba pri aktualizovaní konfigurácie siete @@ -1351,7 +1334,6 @@ Neplatný odkaz! neplatný formát správy Neplatné meno! - Neplatný QR kód Neplatný QR kód Neplatná adresa relé! Neplatná meno relé! @@ -1393,7 +1375,6 @@ Otvoriť priečinok databázy Otvoriť externý odkaz? Otvoriť celý odkaz - Otvoriť nastavenia serveru Otvoriť nastavenia Otvorte SimpleX Chat na prijatie hovoru Otvoriť webový odkaz? @@ -1401,8 +1382,6 @@ Alebo naskenovať QR kód Alebo vložiť odkaz archívu Chyba súboru - naskenovať QR kód vo video hovore, alebo váš kontakt môže zdieľať pozvánku.]]> - ukážte QR kód vo video hovore, alebo zdieľajte odkaz.]]> Ak sa nemôžte stretnúť osobne, ukážte QR kód vo video hovore, alebo zdieľajte odkaz. Ak ste dostali SimpleX Chat pozvánku, môžete ju otvoriť v prehliadači: Nesprávny bezpečnostný kód @@ -1445,8 +1424,6 @@ Uložiť nastavenia SimpleX adresy Uložiť SimpleX meno? Uložiť uvítaciu správu? - Vaše SMP servery - Vaše XFTP servery Vaše ICE servery ICE servery (jeden na riadok) Ujistite sa, že adresy WebRTC ICE serverov sú v správnom formáte, oddelené na riadkoch a nie sú duplikované. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml index da2aea2868..9e782ee24f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml @@ -75,7 +75,6 @@ ข้อมูลแอปทั้งหมดถูกลบแล้ว. รองเพิ่มเติม เพิ่มโปรไฟล์ - เพิ่มเซิร์ฟเวอร์ที่ตั้งไว้ล่วงหน้า แชทและข้อความทั้งหมดจะถูกลบ - การดำเนินการนี้ไม่สามารถยกเลิกได้! ที่อยู่ เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัส QR @@ -92,8 +91,6 @@ อนุญาตข้อความเสียงเฉพาะเมื่อผู้ติดต่อของคุณอนุญาตเท่านั้น ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่. การอัปเดตโปรไฟล์จะถูกส่งไปยังผู้ติดต่อของคุณ. เสมอ - " -\nพร้อมใช้งานใน v5.1" กลับ แฮชข้อความไม่ดี บริการพื้นหลังทำงานตลอดเวลา - การแจ้งเตือนจะแสดงทันทีที่มีข้อความ @@ -164,7 +161,6 @@ ธีมที่กำหนดเอง ID ฐานข้อมูลและตัวเลือกการแยกการส่งผ่าน ID ฐานข้อมูล - เชื่อมต่อ กำลังเชื่อมต่อ เชื่อมต่อผ่านลิงค์ติดต่อ\? เชื่อมต่อผ่านลิงค์เชิญ\? @@ -191,8 +187,6 @@ เวลาที่กําหนดเอง ยืนยัน คัดลอกไปที่คลิปบอร์ดแล้ว - เชื่อมต่อผ่านลิงค์ / คิวอาร์โค้ด - สร้างลิงก์เชิญแบบใช้ครั้งเดียว สร้างกลุ่มลับ ล้าง ล้างแชท\? @@ -211,10 +205,8 @@ เวอร์ชันหลัก: v%s ปรับแต่งธีม สร้างที่อยู่ - สร้างที่อยู่เพื่อให้ผู้อื่นเชื่อมต่อกับคุณ สร้างที่อยู่ SimpleX ดำเนินการต่อ - สร้าง สร้างโปรไฟล์ มีสี กําลังเชื่อมต่อสาย… @@ -277,14 +269,10 @@ ลบกลุ่ม\? การตรวจสอบอุปกรณ์ไม่ได้ถูกเปิดใช้งาน คุณสามารถเปิด SimpleX Lock ผ่านการตั้งค่าได้ เมื่อคุณเปิดใช้งานการตรวจสอบอุปกรณ์แล้ว ใส่ข้อความต้อนรับ… (ไม่บังคับ) - เกิดข้อผิดพลาดในการโหลดเซิร์ฟเวอร์ SMP - เกิดข้อผิดพลาดในการโหลดเซิร์ฟเวอร์ XFTP ข้อผิดพลาด ลบแล้ว ลิงค์เต็ม คำอธิบาย - เกิดข้อผิดพลาดในการบันทึกเซิร์ฟเวอร์ SMP - เกิดข้อผิดพลาดในการบันทึกเซิร์ฟเวอร์ XFTP เกิดข้อผิดพลาดในการอัปเดตการกำหนดค่าเครือข่าย ชื่อที่แสดงซ้ำ! เกิดข้อผิดพลาดในการสร้างโปรไฟล์! @@ -362,7 +350,6 @@ สวัสดี! \nเชื่อมต่อกับฉันผ่าน SimpleX Chat: %s ลบที่อยู่ - อย่าสร้างที่อยู่ ชื่อเต็ม: ชื่อที่แสดง: ออกโดยไม่บันทึก @@ -376,7 +363,6 @@ วิธีใช้มาร์กดาวน์ สิ้นสุดลงแล้ว มันทำงานอย่างไร - กระจายอำนาจแล้ว การโทรเสียงแบบ encrypted จากต้นจนจบ การโทรวิดีแบบ encrypted จากต้นจนจบ ปิดการใช้งาน @@ -517,8 +503,6 @@ เกิดข้อผิดพลาดในการรับไฟล์ หากคุณใส่รหัสผ่านนี้เมื่อเปิดแอป ข้อมูลแอปทั้งหมดจะถูกลบอย่างถาวร! หากคุณเลือกที่จะปฏิเสธ ผู้ส่งจะไม่ได้รับแจ้ง - หากคุณไม่สามารถพบกันในชีวิตจริงได้ คุณสามารถสแกนคิวอาร์โค้ดในวิดีโอคอล หรือผู้ติดต่อของคุณสามารถแชร์ลิงก์เชิญได้ - ให้แสดงคิวอาร์โค้ดในวิดีโอคอล หรือแชร์ลิงก์]]> หากคุณไม่สามารถพบกันในชีวิตจริงได้ ให้แสดงคิวอาร์โค้ดในวิดีโอคอล หรือแชร์ลิงก์ หากคุณยืนยัน เซิร์ฟเวอร์การส่งข้อความจะสามารถเห็นที่อยู่ IP ของคุณและผู้ให้บริการของคุณ - ซึ่งคือเซิร์ฟเวอร์ใดที่คุณกำลังเชื่อมต่ออยู่ หากคุณใส่รหัสผ่านทำลายตัวเองขณะเปิดแอป: @@ -558,7 +542,6 @@ ภาพ หากคุณได้รับลิงก์เชิญ SimpleX Chat คุณสามารถเปิดได้ในเบราว์เซอร์ของคุณ: ภาพตัวอย่างลิงค์ - รหัส QR ไม่ถูกต้อง ลิงค์ไม่ถูกต้อง! ศึกษาเพิ่มเติม รหัสความปลอดภัยไม่ถูกต้อง! @@ -566,7 +549,6 @@ เชิญเพื่อน ๆ มาคุยกันใน SimpleX Chat ตัวเอียง - มีภูมิคุ้มกันต่อสแปมและการละเมิด สร้างการเชื่อมต่อแบบส่วนตัว สามารถเปลี่ยนแปลงได้ในภายหลังผ่านการตั้งค่า สายวิดีโอเข้ามา @@ -617,7 +599,6 @@ กำลังเปิดฐานข้อมูล… ทำเครื่องหมายว่าลบแล้ว กลั่นกรองแล้ว - ตรวจสอบให้แน่ใจว่าที่อยู่เซิร์ฟเวอร์ XFTP อยู่ในรูปแบบที่ถูกต้อง แยกบรรทัดและไม่ซ้ำกัน การแจ้งเตือนเป็นระยะ จำเป็นต้องใช้รหัสผ่าน การแจ้งเตือนเป็นระยะปิดอยู่! @@ -637,7 +618,6 @@ สามารถส่งวิดีโอได้ครั้งละ 10 วิดีโอเท่านั้น โปรดติดต่อผู้ดูแลกลุ่ม การแจ้งเตือน - รอดำเนินการ โปรดขอให้ผู้ติดต่อของคุณเปิดใช้งานการส่งข้อความเสียง เฉพาะเจ้าของกลุ่มเท่านั้นที่สามารถเปิดใช้งานข้อความเสียงได้ ไม่มีรายละเอียด @@ -662,9 +642,6 @@ โฮสต์หัวหอมจะไม่ถูกใช้ รหัสผ่านที่จะแสดง สายที่ไม่ได้รับ - ผู้คนสามารถเชื่อมต่อกับคุณผ่านลิงก์ที่คุณแบ่งปันเท่านั้น - โปรโตคอลและโค้ดโอเพ่นซอร์ส – ใคร ๆ ก็สามารถเปิดใช้เซิร์ฟเวอร์ได้ - การเข้ารหัสแบบ encrypted จากต้นจนจบ 2 ชั้น]]> เป็นระยะ แปะลิงก์ที่ได้รับ ไม่มีการ encrypt จากต้นจนจบ @@ -744,7 +721,6 @@ กลั่นกรองโดย %s เป็นไปได้มากว่าผู้ติดต่อนี้ได้ลบการเชื่อมต่อกับคุณ ข้อผิดพลาดในการส่งข้อความ - ตรวจสอบให้แน่ใจว่าที่อยู่เซิร์ฟเวอร์ SMP อยู่ในรูปแบบที่ถูกต้อง แยกบรรทัดและไม่ซ้ำกัน โฮสต์หัวหอมจะถูกใช้เมื่อมี ผู้ติดต่อของคุณเท่านั้นที่สามารถส่งข้อความเสียงได้ การเปิดลิงก์ในเบราว์เซอร์อาจลดความเป็นส่วนตัวและความปลอดภัยของการเชื่อมต่อ ลิงก์ SimpleX ที่ไม่น่าเชื่อถือจะเป็นสีแดง @@ -758,14 +734,11 @@ คิวอาร์โค้ด คู่มือผู้ใช้ ]]> ที่อยู่เซิร์ฟเวอร์ที่ตั้งไว้ล่วงหน้า - เซิร์ฟเวอร์ที่ตั้งไว้ล่วงหน้า ให้คะแนนแอป พอร์ต พอร์ต %d ได้รับคำตอบ… ได้รับการยืนยัน… - นิยามความเป็นส่วนตัวใหม่ - GitHub repository ของเรา]]> การแจ้งเตือนส่วนตัว โปรดรายงานไปยังผู้พัฒนาแอป ความเป็นส่วนตัวและความปลอดภัย @@ -890,7 +863,6 @@ ส่งข้อความ ส่งข้อความสด ส่ง - (สแกนหรือวางจากคลิปบอร์ด) สแกนคิวอาร์โค้ด ตั้งชื่อผู้ติดต่อ การตั้งค่า @@ -972,7 +944,6 @@ หยุดส่งไฟล์ไหม\? หยุด หยุดรับไฟล์\? - แตะเพื่อเริ่มแชทใหม่ เปลี่ยนที่อยู่ผู้รับ\? เริ่มแชทใหม่ ขอบคุณสำหรับการติดตั้ง SimpleX Chat! @@ -984,20 +955,17 @@ %s ไม่ได้รับการยืนยัน %s ได้รับการยืนยันแล้ว ล็อค SimpleX - เซิร์ฟเวอร์ SMP เซิร์ฟเวอร์ทดสอบ เซิร์ฟเวอร์ทดสอบ บางเซิร์ฟเวอร์ผ่านการทดสอบล้มเหลว: การตั้งค่าพร็อกซี SOCKS Simplexmq: v%s (%2s) - แพลตฟอร์มแรกที่ไม่มีตัวระบุผู้ใช้ - ถูกออกแบบให้เป็นส่วนตัว ปิดลำโพง เปิดลำโพง ข้อความที่ข้ามไป ส่ง ระบบ สนับสนุน SimpleX Chat - พร็อกซี SOCKS หยุด หยุดแชท\? %s วินาที @@ -1008,8 +976,6 @@ ระบบ ขอบคุณผู้ใช้ – มีส่วนร่วมผ่าน Weblate! ขอบคุณผู้ใช้ – มีส่วนร่วมผ่าน Weblate! - แพลตฟอร์มการส่งข้อความและแอปพลิเคชันที่ปกป้องความเป็นส่วนตัวและความปลอดภัยของคุณ - การส่งข้อความส่วนตัวรุ่นต่อไป บทบาทจะถูกเปลี่ยนเป็น "%s" ทุกคนในกลุ่มจะได้รับแจ้ง การดำเนินการนี้ไม่สามารถยกเลิกได้ ไฟล์และสื่อที่ได้รับและส่งทั้งหมดจะถูกลบ รูปภาพความละเอียดต่ำจะยังคงอยู่ หากต้องการเปิดเผยโปรไฟล์ที่ซ่อนอยู่ของคุณ ให้ป้อนรหัสผ่านแบบเต็มในช่องค้นหาในหน้าโปรไฟล์แชทของคุณ @@ -1031,7 +997,6 @@ การ decrypt %1$d ข้อความล้มเหลว %1$s สมาชิก เชื่อมต่อกับ SimpleX Chat นักพัฒนาแอปเพื่อถามคำถามและรับการอัปเดต]]> - คุณสามารถแชร์ที่อยู่ของคุณเป็นลิงก์หรือรหัสคิวอาร์ - ใคร ๆ ก็สามารถเชื่อมต่อกับคุณได้ คุณเปลี่ยนที่อยู่ คุณเปลี่ยนบทบาทของตัวเองเป็น %s โปรไฟล์ปัจจุบันของคุณ @@ -1072,7 +1037,6 @@ ข้อความจะถูกทำเครื่องหมายว่ากลั่นกรองสำหรับสมาชิกทุกคน ยังไม่ได้อ่าน ส่งโดยไม่ได้รับอนุญาต - ยินดีต้อนรับ! ยินดีต้อนรับ %1$s! คุณได้รับเชิญให้เข้าร่วมกลุ่ม คุณไม่มีการแชท @@ -1101,7 +1065,6 @@ ดูรหัสความปลอดภัย ห้ามข้อความเสียง! คุณต้องอนุญาตให้ผู้ติดต่อของคุณส่งข้อความเสียงจึงจะสามารถส่งได้ - (เพื่อแบ่งปันกับผู้ติดต่อของคุณ) เพื่อเริ่มแชทใหม่ วิดีโอ เปิดเสียง @@ -1115,44 +1078,30 @@ SimpleX ทีม คุณจะเชื่อมต่อกับกลุ่มเมื่ออุปกรณ์โฮสต์ของกลุ่มออนไลน์อยู่ โปรดรอหรือตรวจสอบภายหลัง! คุณจะเชื่อมต่อเมื่อคำขอเชื่อมต่อของคุณได้รับการยอมรับ โปรดรอหรือตรวจสอบในภายหลัง! - โปรไฟล์แชทของคุณจะถูกส่ง -\nให้กับผู้ติดต่อของคุณ คุณจะเชื่อมต่อเมื่ออุปกรณ์ของผู้ติดต่อของคุณออนไลน์อยู่ โปรดรอหรือตรวจสอบภายหลัง! - เมื่อมีคนขอเชื่อมต่อ คุณสามารถยอมรับหรือปฏิเสธได้ - เปิดในแอปมือถือ]]> ในการตรวจสอบการเข้ารหัสแบบ encrypt จากต้นจนจบ กับผู้ติดต่อของคุณ ให้เปรียบเทียบ (หรือสแกน) รหัสบนอุปกรณ์ของคุณ การตั้งค่าของคุณ ที่อยู่ SimpleX ของคุณ โปรไฟล์แชทของคุณ ใช้เซิร์ฟเวอร์ - เซิร์ฟเวอร์ของคุณ ที่อยู่เซิร์ฟเวอร์ของคุณ เซิร์ฟเวอร์สำหรับการเชื่อมต่อใหม่ของโปรไฟล์การแชทปัจจุบันของคุณ ใช้สำหรับการเชื่อมต่อใหม่ - เซิร์ฟเวอร์ XFTP - เซิร์ฟเวอร์ SMP ของคุณ - เซิร์ฟเวอร์ XFTP ของคุณ เซิร์ฟเวอร์ ICE ของคุณ ใช้พร็อกซี SOCKS ใช้การเชื่อมต่ออินเทอร์เน็ตโดยตรงหรือไม่\? ใช้พร็อกซี SOCKS หรือไม่\? ใช้โฮสต์ .onion เมื่อพร้อมใช้งาน - อัปเดตโหมดการแยกการขนส่งไหม\? สีของธีม ผู้ติดต่อของคุณจะยังคงเชื่อมต่ออยู่ - คุณสามารถสร้างได้ในภายหลัง - คุณเป็นผู้ควบคุมการแชทของคุณ! โปรไฟล์นี้แชร์กับผู้ติดต่อของคุณเท่านั้น - เราไม่เก็บผู้ติดต่อหรือข้อความของคุณ (เมื่อส่งแล้ว) ไว้บนเซิร์ฟเวอร์ โปรไฟล์ รายชื่อผู้ติดต่อ และข้อความที่ส่งของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณ คุณสามารถใช้มาร์กดาวน์เพื่อจัดรูปแบบข้อความ: รอคำตอบ… - ใช้แชท การสนทนาทางวิดีโอ การโทรของคุณ เซิร์ฟเวอร์ WebRTC ICE - เซิร์ฟเวอร์ ICE ของคุณ ผ่านรีเลย์ ปิดวิดีโอ เปิดวิดีโอ @@ -1216,16 +1165,12 @@ การดำเนินการนี้ไม่สามารถยกเลิกได้ - โปรไฟล์ ผู้ติดต่อ ข้อความ และไฟล์ของคุณจะสูญหายไปอย่างถาวร SimpleX – ใช้แบตเตอรี่เพียงไม่กี่เปอร์เซ็นต์ต่อวัน]]> คุณ: %1$s - เพื่อปกป้องความเป็นส่วนตัว แทนที่จะใช้ ID ผู้ใช้เหมือนที่แพลตฟอร์มอื่นๆใช้ SimpleX มีตัวระบุสำหรับคิวข้อความ โดยแยกจากกันสำหรับผู้ติดต่อแต่ละราย คุณจะต้องตรวจสอบสิทธิ์เมื่อคุณเริ่มหรือกลับมาใช้แอปพลิเคชันอีกครั้งหลังจากผ่านไป 30 วินาทีในพื้นหลัง คุณจะเข้าร่วมกลุ่มที่ลิงก์นี้อ้างถึงและเชื่อมต่อกับสมาชิกในกลุ่ม - ข้อความนี้มีอยู่ในการตั้งค่า รูปเยอะเกิน! วิดีโอเยอะเกิน! ที่อยู่ผู้รับจะถูกเปลี่ยนเป็นเซิร์ฟเวอร์อื่น การเปลี่ยนแปลงที่อยู่จะเสร็จสมบูรณ์หลังจากที่ผู้ส่งออนไลน์ เพื่อการเชื่อมต่อผ่านลิงค์ - ลิงค์นี้ไม่ใช่ลิงค์เชื่อมต่อที่ถูกต้อง! - รหัสคิวอาร์นี้ไม่ใช่ลิงก์! เพื่อการเชื่อมต่อ ผู้ติดต่อของคุณสามารถสแกนคิวอาร์โค้ดหรือใช้ลิงก์ในแอป คุณจะไม่สูญเสียรายชื่อผู้ติดต่อของคุณหากคุณลบที่อยู่ในภายหลัง สตริงนี้ไม่ใช่ลิงค์เชื่อมต่อ! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index 7b05806ea6..88148f022f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -1,7 +1,6 @@ Bildirimler - Bağlantı ya da karekod ile bağlan Gizli grup oluştur SimpleX adresin cevapsız çağrı @@ -77,7 +76,6 @@ Ara Göster İptal - (kodu okut ya da panodan yapıştır) Karekodu okut SimpleX adresi Sunucuları kaydet @@ -93,7 +91,6 @@ Tercihleri kaydet\? Profil parolasını kaydet Profil sadece konuştuğun kişilerle paylaşılır. - Mesajlaşmanın geleceği Ses kapalı Doğrulama iptal edildi Yeniden başlat @@ -141,7 +138,6 @@ Kimlik doğrulama başarısız SimpleX Adresi Mesaj, tüm üyeler için silinecek. - Gizliliğinizi ve güvenliğinizi koruyan mesajlaşma ve uygulama platformu. Gizlilik kipi Yetki, "%s" olarak değiştirilecek. Üye, yeni bir davet alacak. Yetki @@ -179,7 +175,6 @@ Profiliniz, bu bağlantıyı aldığınız kişiye gönderilecek. Adres bağlantısı üzerinden bağlan? hata - Bağlan bağlanıldı silindi dosya alma henüz desteklenmiyor @@ -225,7 +220,6 @@ renklendirilmiş Parolayı onayla geri çevrilmiş çağrı - Oluştur arama hatası bağlanıldı bağlanılıyor… @@ -313,10 +307,6 @@ kişi adres bağlantısı ile SimpleX bağlantı adresi Bağlantıyı tarayıcıda açmak, bağlantı gizliliğini ve güvenliğini azaltabilir. Güvenilmeyen SimpleX bağlantıları kırmızı olacaktır. - SMP sunucuları kaydedilirken hata oluştu - XFTP sunucuları kaydedilirken hata oluştu - SMP sunucuları yüklenirken hata oluştu - XFTP sunucuları yüklenirken hata oluştu Bağlantı yapılandırması güncellenirken hata Konuşma yüklenemedi Konuşmalar yüklenemedi @@ -381,7 +371,6 @@ Hata Kişiselleştirilmiş süre Panoya kopyalandı - Tek seferlik davet bağlantısı oluştur Karekodu okut ile karekodu okut]]> Bekleyen bağlantıları sil\? Sil @@ -394,14 +383,11 @@ Renk temalarını kişiselleştir Çekirdek sürümü: v%s Adresi sil\? - Kişilerin sana bağlanması için bir adres oluştur. SimpleX adresi oluştur Adresi sil Devam et Görseli sil - Konuşman, senin elinde! Profil oluştur - Merkezi olmayan Erişim kodunu onayla Yanlış erişim kodu Yeni erişim kodu @@ -507,7 +493,6 @@ Profil adı: %day %dsn - Adres oluşturma Dosyayı indir Düzelt TCP keep-alive özelliğini etkinleştir @@ -587,7 +572,6 @@ Gizli profil parolası Markdown nasıl kullanılır Nasıl çalışıyor - Spamdan etkilenmez Çağırıyı bitir. Kameranın karşı yüzüne geç Konuşma veri tabanı içe aktarılsın mı? @@ -611,8 +595,6 @@ Gizle Konuşulan kişileri ve mesajları gizle Uygulamayı, son kullanılanlar kısmından gizle. - bir görüntülü aramada karşıdakine karekodunu gösterebilir ya da konuştuğun kişiye bir katılım bağlantısı paylaşabilirsin.]]> - bir görüntülü aramada karşıdakinin karekodunu okutabilirsin ya da konuştuğun kişi seninle bir katılım bağlantısı paylaşabilir.]]> Eğer yüz yüze görüşemiyorsanız bir görüntülü aramada karşıdakine karekodunu gösterebilir ya da konuştuğun kişiye bir katılım bağlantısı paylaşabilirsin. Eğer geri çevirmeyi seçersen göndericiye bildirilmeyecek. Eğer SimplexX Chat katılım bağlantısı alırsan bu bağlantıyı tarayıcında açabilirsin: @@ -663,7 +645,6 @@ saat Sadece uygulama çalışırken bildirim alabileceksiniz, hiçbir arka plan hizmeti başlatılmayacaktır yeni mesaj - Hoşgeldin! Hoşgeldin %1$s! Görsel bekleniyor Görsel bekleniyor @@ -672,10 +653,8 @@ Dosya bekleniyor Sesli mesajlar yasaktır! sana bağlanmak istiyor! - İnsanlar bağlantı talebinde bulunduğunda, kabul edebilir veya reddedebilirsiniz. Mevcut olduğunda Otomatik kabul etme - Kişilerinizin veya mesajlarınızın hiçbirini (teslim edildikten sonra) sunucularda saklamıyoruz. yanıt bekleniyor… onay bekleniyor… Uygulama çalışıyorken @@ -710,7 +689,6 @@ Şuna cevap olarak %s olarak katılın Geçersiz link! - Geçersiz QR kodu Geçersiz sunucu adresi! Terminal için SimpleX Chat\'i yükleyin Aramaya bağlanılıyor @@ -780,10 +758,7 @@ Kişinizin cihazı çevrimiçi olduğunda bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin! Daha fazla bilgi edinin Eğer sonradan bağlantınızı silseniz bile kişilerinizi kaybetmeyeceksiniz. - Sunucunuz Sunucu adresiniz - SMP sunucularınız - XFTP sunucularınız ICE sunucularını yapılandır Hadi SimpleX Chat\'te konuşalım Profiliniz cihazınızda saklanır ve sadece kişilerinizle paylaşılır. SimpleX sunucuları profilinizi göremez. @@ -793,8 +768,6 @@ Bu gruptan artık mesaj almayacaksınız. Sohbet geçmişi korunacaktır. Gruptan ayrıl\? ayrıldı - " -\nv5.1\'de mevcut" Sohbet profili ile (varsayılan) veya bağlantı ile (BETA). bağlantı önizleme resmi Profiliniz, kişileriniz ve gönderilmiş mesajlar cihazınızda saklanır. @@ -852,12 +825,10 @@ sen gözlemcisin Güvenlik kodunu görüntüle Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir. - XFTP sunucuları ICE sunucularınız Nasıl Mevcut profiliniz video arama (uçtan uca şifreli değil) - ICE sunucularınız Video kapalı Video açık Uygulama her başladığında parola girmeniz gerekir - parola cihazınızda saklanmaz. @@ -866,7 +837,6 @@ Biriyle gizli bir profil paylaştığınızda, bu profil sizi davet ettikleri gruplar için kullanılacaktır. İsteğe bağlı karşılama mesajı ile. Kişileriniz bağlı kalacaktır. - Daha sonra oluşturabilirsiniz Mesajları biçimlendirmek için markdown kullanabilirsiniz: Sohbet veritabanınız Mevcut sohbet veritabanınız SİLİNECEK ve içe aktarılan veritabanıyla DEĞİŞTİRİLECEKTİR. @@ -884,7 +854,6 @@ Sesli mesaj Sesli mesaj (%1$s) Sesli mesaj… - Adresinizi bir bağlantı veya QR kodu olarak paylaşabilirsiniz - herkes size bağlanabilir. bağlantı değiştirdiniz Daha sonra Ayarlardan etkinleştirebilirsin Bunları daha sonra uygulamanın Gizlilik ayarlarından etkinleştirebilirsiniz. @@ -892,7 +861,6 @@ \nBu bağlantıyı iptal edebilir ve kişiyi kaldırabilirsiniz (ve daha sonra yeni bir bağlantıyla deneyebilirsiniz). Kişiniz desteklenen maksimum boyuttan (%1$s) daha büyük bir dosya gönderdi. Kişiniz yüklemeyi tamamladığında video alınacaktır. - mobil uygulamada aç seçeneğine tıklayın.]]> SimpleX Chat geliştiricilerine bağlanabilirsiniz.]]> Bir kullanıcının profilini gizleyebilir veya sessize alabilirsiniz - menü için basılı tutun. Sohbet veritabanınızın en son sürümünü SADECE bir cihazda kullanmalısınız, aksi takdirde bazı kişilerden daha fazla mesaj alamayabilirsiniz. @@ -937,7 +905,6 @@ - daha stabil mesaj iletimi. \n- biraz daha iyi gruplar. \n- ve daha fazlası! - Sadece istemci cihazlar kullanıcı profillerini, kişileri, grupları ve gönderilen mesajları depolar. Grup tercihlerini sadece grup sahipleri değiştirebilir. metin yok Ağ durumu @@ -956,17 +923,13 @@ Hatırlayın veya güvenli bir şekilde saklayın - kaybolan bir parolayı kurtarmanın bir yolu yoktur! Sohbet konsolunu aç Sohbet profillerini değiştir. - Bu metin ayarlarda mevcut Filtrelenmiş sohbet yok Çok fazla görsel! Çok fazla video! Lütfen grup yöneticisiyle iletişime geçin - Bekleniyor Lütfen irtibat kişinizden sesli mesaj göndermeyi etkinleştirmesini isteyin. Canlı mesaj! Link ile bağlanmak için - Bu geçerli bir bağlantı linki değil - Bu QR kodu bir bağlantı değil! Kullanıcı Kılavuzu.]]> Yapıştır Bu dize bir bağlantı linki değil! @@ -987,8 +950,6 @@ Zaman dilimi, görsel/ses korumak için UTC kullan. Özel dosya adları Yeni bir sohbet başlatmak için - Kimin bağlanabileceğine siz karar verirsiniz. - Gizlilik yeniden tanımlanıyor Periyodik Gizli bildirimler Aldığın bağlantıyı yapıştır @@ -1010,14 +971,12 @@ Favorilerden çıkar Sohbeti gizli yap! Profil güncellemesi SimpleX kişilerinize gönderilecektir. - GitHub repomuzda daha fazlasını okuyun.]]> Lütfen geliştiricilere bildirin. Profil ve sunucu bağlantıları gizlemeyi kaldır Maksimum 40 saniye, anında alınır. Sesli mesaj kaydet İzin Reddedildi! - (irtibat kişinizle paylaşmak için) profil resmi profil fotoğrafı yer tutucusu Kişinizle uçtan uca şifrelemeyi doğrulamak için cihazlarınızdaki kodu karşılaştırın (veya tarayın). @@ -1028,7 +987,6 @@ Mesaj taslağı Sohbet profillerini parola ile koru! Daha az pil kullanımı - Gizliliği korumak için, SimpleX her bir konuşma için farklı bir ID kullanır. Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor (hata: %1$s). Alıcılar güncellemeleri siz yazdıkça görürler. Bilgilerinizi kullanarak giriş yapın @@ -1062,7 +1020,6 @@ Bağlantı isteğini tekrarla? detay yok Veri tabanı düzgün çalışmıyor. Daha fazla bilgi için dokunun - Açık kaynaklı protokol ve kod - sunucuları herkes çalıştırabilir. Aç Önizlemeyi göster Depolanan dosyaları ve medyayı şifrele @@ -1076,7 +1033,6 @@ Seç Sadece sen arama yapabilirsin. Yeni mobil cihaz - Sohbeti kullan Otomatik olarak bağlan Paylaş %s, %s ve %d diğer üye bağlandı @@ -1141,9 +1097,7 @@ Bağlantı paylaş SimpleX Ekibi %s, %s ve %s bağlandı - SOCKS vekili Masaüstür cihazlar - SMP sunucuları Uyumlu değil! Bağlantı güvenliğini onayla %1$s ile bağlan? @@ -1171,7 +1125,6 @@ Kodu mobilde onayla Medya paylaş… Parola, siz onu değiştirdikten veya uygulamayı yeniden başlattıktan sonra ayarlarda düz metin olarak depolanacak. - Kişinizle bağlantı kurmak için aldığınız bağlantıyı yapıştırın… Kapat gönderildi Canlı mesaj gönder @@ -1184,7 +1137,6 @@ SimpleX Kilit modu Dosya paylaş… Uygulama yeni mesajları periyodik olarak alır - günde pilin yüzde birkaçını kullanır. Uygulama anlık bildirimleri kullanmaz - cihazınızdan gelen veriler sunuculara gönderilmez. - Herhangi bir kullanıcı tanımlayıcısı yok. Hoparlör kapalı Şifreleme çalışıyor ve yeni bir şifreleme anlaşması gerekli değil. Yoksa bağlantı hataları ortaya çıkabilir! Göster @@ -1218,8 +1170,6 @@ Profiliniz %1$s paylaşılacaktır. Rastgele bir profil kullanarak grup oluştur. Gruba zaten bu bağlantı üzerinden katılıyorsunuz. - Sohbet profiliniz kişinize -\ngönderilecek Gizli bir profil paylaştığınız kişiyi ana profilinizi kullandığınız gruba davet etmeye çalışıyorsunuz güvenlik kodu değiştirildi Bluetooth desteği ve diğer iyileştirmeler. @@ -1270,13 +1220,11 @@ alınmış, yasaklanmış Sunucu yükleme için yetki gerektiriyor, şifreyi kontrol edin. Şifreleme yeniden aşma hatası - Ön ayarlı sunucu %s iptal edildi silinmiş kişi TCP bağlantısı zaman aşımına uğradı uygulama/veritabanı içinde farklı değişim: %s / %s SimpleX Chat serverları kullanılıyor. - Ön ayarlı sunucular ekle gizli Bütün gruplar için devre dışı bırak Yeni üyeler için gösterilecek mesajı seç! @@ -1284,7 +1232,6 @@ yönetildi Üye bağlantısı oluşturulurken hata Tüm kişiler için iletim bilgisi gönderme özelliği etkinleştirilecek - XFTP sunucu adreslerinin doğru formatta olduğundan, satırın ayrılmış ve kopyalanmamış olduğundan emin olun. Yenile Lütfen dikkat: Mesaj ve dosya aktarımları SOCKS proxy üzerinden bağlanır. Aramalar doğrudan bağlantı kullanır.]]> Telefon uygulamasında aç seçeneğine tıkla, sonra uygulama içinden Bağlan seçeneğine tıkla.]]> @@ -1293,7 +1240,6 @@ %s ve %s Bağlantılarını koru Alınmış mesaj - Ayarlardan SimpleX kişilerinize görünür yapabilirsiniz. Grubuna bağlanılsın mı? Telefon veya bilgisayar uygulamalarını bağla! 🔗 Yeni bir rasgele profil paylaşılacaktır. @@ -1325,7 +1271,6 @@ .onion ana bilgisayarlarını kullan seçeneğini eğer SOCKS vekili destek vermiyorsa devre dışı bırak]]> Rasgele şifreler düz metin olarak ayarlarda saklanacaktır. \nBunu sonra değiştirebilirsin. - SMP sunucu adreslerinin doğru formatta olduğundan, satırın ayrılmış ve kopyalanmamış olduğundan emin olun. Sahte İsimle katılmak için tıkla Onion ana bilgisayarları kullanılmayacaktır. Dışarıya çıkarmak için parola belirle @@ -1338,7 +1283,6 @@ Bağlanmış bilgisayar ayarları Veritabanı kimlikleri ve Taşıma izolasyonu seçeneği. PING sayısı - Ulaşım izolasyonu modu güncellensin mi? Rasgele Bağlanmış bilgisayarlar Yerel ağ aracılığıyla keşfet @@ -1354,7 +1298,6 @@ %1$d mesaj %2$s tarafından yönetildi Ayarlardaki parola silinsin mi? Alıcılar etkinleştirilsin mi? - Yeni bir sohbet başlatmak için tıkla Kişinin engelini kaldır Yönlendirici sunucusu sadece lazım ise kullanılacak. Diğer taraf IP adresini görebilir. %s ın bağlantısı kesildi]]> @@ -1454,7 +1397,6 @@ Bir canlı mesaj gönder - bu yazdıklarını anlık olarak alıcıya(lara) güncelleyen bir mesajdır Şifre Yöneticisindeki parola silinsin mi? Lere gönder - Takma adla bağlan Her zaman yönlendirici kullan. Kilidini aç %s ten gelen mesajlar gösterilecek! @@ -1874,7 +1816,6 @@ ara Profil değiştirme sırasında hata oluştu. Sohbet profili seç - XFTP sunucuları yapılandırıldı Medya ve dosya sunucuları Kimlik bilgilerini proxy ile kullanmayın. Proxy kayıt edilirken hata oluştu. @@ -1953,10 +1894,8 @@ Tamamlandı Silindi Silme hatası - Sunucu ayarlarını aç Dosya durumu: %s Yeni mesaj - Diğer SMP sunucuları Yeniden bağlan Direkt gönderildi. Tüm Profiller @@ -1985,8 +1924,6 @@ Üye inaktif Henüz direkt bağlantı yok mesaj admin tarafından yönlendirildi. Mesaj sunucuları - SMP sunucları yapılandırıldı - Diğer XFTP sunucuları Medyayı bulanıklaştır. Kişiler silinecek - bu geri alınamaz ! Sohbeti sakla. @@ -2156,7 +2093,6 @@ %d raporu arşivleyelim mi? Arşiv Raporu arşivleyelim mi? - uçtan uca şifreli olarak gönderilir ve doğrudan mesajlarda kuantum sonrası güvenlik sağlanır.]]> Veritabanı şifresini okurken hata oluştu Sohbeti sil Sohbet silinsin mi? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index 78a0b532df..4f49834c7f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -23,7 +23,6 @@ Дозволити безповоротне видалення повідомлень, тільки якщо ваш контакт дозволяє вам. (24 години) Дозволити голосові повідомлення\? Пароль застосунку замінено паролем самознищення. - Додати попередньо встановлені сервери Резервне копіювання даних застосунку Додати на інший пристрій Сховище ключів Android використовується для безпечного збереження ключової фрази - це дозволяє службі сповіщень працювати. @@ -108,8 +107,6 @@ Запит на отримання зображення Прикріпити Аудіо/відео дзвінки - " -\nДоступно в версії 5.1" Аудіо/відео дзвінки заборонені. SimpleX Як ви, так і ваш контакт можуть здійснювати дзвінки. @@ -119,7 +116,6 @@ Приєднатися до групи? Ваш профіль буде відправлено контакту, з якого ви отримали це посилання. Ви приєднаєтеся до всіх учасників групи. - Підключити підключено помилка підключення @@ -159,8 +155,6 @@ Через браузер Відкриття посилання в браузері може зменшити конфіденційність та безпеку з\'єднання. Ненадійні посилання SimpleX будуть виділені червоним кольором. Не вдалося завантажити чати - Помилка збереження серверів SMP - Переконайтеся, що адреси серверів SMP вірного формату, розділені переносами рядків і не дублюються. Помилка оновлення конфігурації мережі Не вдалося завантажити чат Будь ласка, оновіть додаток і зверніться до розробників. @@ -211,7 +205,6 @@ Голосове повідомлення Голосове повідомлення… Контакт і всі повідомлення будуть видалені - цього не можна скасувати! - Очікує Змінити адресу для отримання? Переглянути код безпеки Ви повинні дозволити вашому контакту надсилати голосові повідомлення, щоб мати змогу надсилати їх. @@ -227,8 +220,6 @@ аватар не встановлено QR-код довідка - покажіть QR-код у відеовиклику, або поділіться посиланням.]]> - Ваш профіль буде відправлено \nвашому контакту Одноразове запрошення Невірний код безпеки! Для перевірки end-to-end шифрування порівняйте (або скануйте) код на своїх пристроях. @@ -237,7 +228,6 @@ Допомога з Markdown Блокування SimpleX Консоль чату - Сервери SMP Сканувати QR-код сервера Використовувати для нових підключень Видалити сервер @@ -253,25 +243,18 @@ Якщо доступно Ні .Onion-хости будуть використовуватися, якщо доступні. - Оновити режим ізоляції транспорту? simplexmq: v%s (%2s) Створити адресу Поділитися посиланням Видалити адресу Повне ім\'я: - Ви керуєте своїм чатом! - Платформа обміну повідомленнями і застосунок, які захищають вашу конфіденційність та безпеку. Введіть своє ім\'я: дзвінок в процесі запуск… - Ніяких ідентифікаторів користувачів. - Децентралізована - Використовувати чат Як це впливає на батарею Миттєво Виклик вже завершено! Виклики - Ваші сервери ICE Відкрити через реле Динамік увімкнено @@ -279,7 +262,6 @@ Відхилений виклик %1$d пропущено повідомлень Чати - SOCKS-проксі Помилка при запуску чату Зупинити Імпортувати @@ -307,9 +289,6 @@ Заборонити надсилання повідомлень, які зникають. Забороняйте надсилання голосових повідомлень. Французький інтерфейс - Помилка збереження серверів XFTP - Переконайтеся, що адреси серверів XFTP вірного формату, розділені переносами рядків і не дублюються. - Помилка завантаження серверів XFTP Помилка додавання учасників Помилка приєднання до групи Неможливо отримати файл @@ -326,7 +305,6 @@ Чати підключення… підключення… - Торкніться, щоб розпочати новий чат Чат із розробниками У вас немає чатів ви спостерігач @@ -347,19 +325,14 @@ Якщо ви виберете відхилити, відправник НЕ буде повідомлений. Очистити чат Неправильне посилання! - Це посилання не є дійсним з\'єднувальним посиланням! Запит на з\'єднання відправлено! - Відкрити у мобільному додатку.]]> Сканувати код Скануйте код безпеки з додатка вашого контакту. Невірна адреса сервера! Перевірте адресу сервера і спробуйте ще раз. - Сервери XFTP Встановити SimpleX Chat для терміналу Внести вклад Оцініть додаток - Ваші сервери SMP - Ваші сервери XFTP Використання серверів SimpleX Chat. Як користуватися дзвінок… @@ -405,8 +378,6 @@ Видалити адресу\? Ім\'я профілю: очікування підтвердження… - Приватність перевизначена - Ви вирішуєте, хто може під\'єднатися. зашифрований e2e аудіовиклик Відкрийте SimpleX Chat для прийняття виклику e2e зашифровано @@ -455,7 +426,6 @@ Вийти без збереження Сховати профіль Пароль для відображення - Створити без зашифрування e2e контакт має зашифрування e2e Хеш попереднього повідомлення інший. @@ -517,7 +487,6 @@ аватар Більше Створити профіль - GitHub.]]> Відео увімкнено Це може трапитися, якщо ви або ваше з\'єднання використовували застарілу резервну копію бази даних. Відновити резервну копію бази даних @@ -531,7 +500,6 @@ хвилини Китайський та іспанський інтерфейс підключення %1$d - Помилка завантаження серверів SMP Дубль імені відображення! Помилка відправлення повідомлення Відправник скасував передачу файлу. @@ -568,8 +536,6 @@ Відкликати несанкціонована відправка Вітаємо, %1$s! - Вітаємо! - Цей текст доступний у налаштуваннях Запрошуємо вас до групи Поділитися повідомленням… Поділитися медіа… @@ -606,14 +572,12 @@ \nВи можете скасувати це з\'єднання і видалити контакт (і спробувати пізніше за допомогою нового посилання). Логотип SimpleX Електронна пошта - Цей QR-код не є посиланням! Ви будете підключені до групи, коли пристрій власник групи буде в мережі, зачекайте або перевірте пізніше! Підключення відбудеться, коли ваш запит на підключення буде прийнято. Будь ласка, зачекайте або спробуйте пізніше! Поділитися 1-разовим посиланням Дізнатися більше Щоб підключитися, ваш контакт може сканувати QR-код або використовувати посилання у додатку. Якщо ви не можете зустрітися особисто, покажіть QR-код у відеовиклику або поділіться посиланням. - Ви можете поділитися своєю адресою в якості посилання або QR-коду - кожен може підключитися до вас. Вставити Цей рядок не є з\'єднувальним посиланням! Код безпеки @@ -623,7 +587,6 @@ Markdown у повідомленнях Надсилайте питання та ідеї Ввести сервер вручну - Попередньо встановлений сервер Адреса вашого сервера Сервери для нових підключень до вашого поточного профілю Використовувати сервери SimpleX Chat? @@ -634,7 +597,6 @@ Показати параметри розробника Ідентифікатори бази даних та опція ізоляції транспорту. Сповіщення перестануть працювати, поки ви не перезапустите додаток - Ви можете створити його пізніше Ваш поточний профіль Видалити зображення Зберегти налаштування? @@ -647,7 +609,6 @@ Ви можете використовувати markdown для форматування повідомлень: Створіть свій профіль Створіть приватне підключення - Тільки клієнтські пристрої зберігають профілі, контакти, групи та повідомлення. Приватні сповіщення Споживає більше акумулятора! Додаток завжди працює у фоновому режимі – сповіщення відображаються миттєво.]]> Вставте отримане посилання @@ -822,7 +783,6 @@ Надіслати Підтвердити Інший час - Створити одноразове запрошення Сканувати QR-код Фото Відео @@ -830,7 +790,6 @@ Контакт ще не підключений! Тестувати сервери Зберегти сервери - Ваш сервер Тест сервера не вдався! Деякі сервери не пройшли тест: Використовувати сервер @@ -841,7 +800,6 @@ Налаштування теми Поділитися адресою з контактами SimpleX? підключення дзвінка… - Ми не зберігаємо жодні з ваших контактів чи повідомлень (після доставки) на серверах. очікування відповіді… Як це працює відеовиклик @@ -889,7 +847,6 @@ Дякуємо користувачам – приєднуйтеся через Weblate! Режим блокування SimpleX Системна аутентифікація - Для захисту вашої конфіденційності SimpleX використовує окремі ID для кожного вашого контакту. Коли додаток запущено Періодично контакт не має зашифрування e2e @@ -998,12 +955,9 @@ Скасувати живе повідомлення Скинути без деталей - Підключитися за посиланням / QR-кодом Очистити - Неправильний QR-код Підключення відбудеться, коли пристрій вашого контакту буде онлайн. Будь ласка, зачекайте або спробуйте пізніше! Ви не втратите свої контакти, якщо ви пізніше видалите свою адресу. - Коли люди просять про з\'єднання, ви можете його прийняти чи відхилити. Посібнику користувача.]]> SimpleX-адреса Скинути підтвердження @@ -1021,7 +975,6 @@ Порт Обов\'язково Кольори інтерфейсу - Створіть адресу, щоб дозволити людям підключатися до вас. Контакти залишатимуться підключеними. Створити SimpleX-адресу Оновлення профілю буде відправлено вашим SimpleX контактам. @@ -1035,13 +988,11 @@ Запросити друзів Давайте говорити в SimpleX Chat Продовжити - Не створювати адресу отримано відповідь… отримано підтвердження… підключення… підключено завершено - Стійкий до спаму %1$s хоче підключитися до вас через зашифрований e2e відеовиклик Ігнорувати @@ -1164,8 +1115,6 @@ кольоровий дзвінок завершено %1$s помилка дзвінка - Майбутнє обміну повідомленнями - Кожен може хостити сервери. Інструменти розробника Експериментальні функції Дзвінки @@ -1178,8 +1127,6 @@ Зупинити відправлення файлу Зупинити відправлення файлу? Створити секретну групу - (щоб поділитися з вашим контактом) - (сканувати або вставити з буферу обміну) підключитися до розробників SimpleX Chat, щоб задати будь-які питання і отримувати оновлення.]]> Сканувати QR-код.]]> Адреса SimpleX @@ -1218,7 +1165,6 @@ вас видалили власник видалено - сканувати QR-код у відеовиклику, або ваш контакт може поділитися посиланням на запрошення.]]> Як користуватися Підключення Використовувати .onion-хости на Ні, якщо SOCKS-проксі їх не підтримує.]]> @@ -1251,7 +1197,6 @@ Перервати зміну адреси Дозволити надсилання файлів та медіафайлів. Файли та медіа заборонені. - Підключити інкогніто Використовувати поточний профіль Дозволити Вимкнути сповіщення @@ -1333,7 +1278,6 @@ Навіть коли вимкнено в розмові. Чорновик повідомлення Тільки власники групи можуть включити файли та медіа. - Вставте посилання, яке ви отримали, щоб підключитися до свого контакту… Надсилання повідомлень про доставку вимкнено для %d груп %s, %s і %s підключилися Їх можна замінити в налаштуваннях контактів і груп. @@ -1539,7 +1483,6 @@ Створення посилання… Налаштування для розробників Показувати повільні виклики API - Ви можете зробити це видимим для ваших контактів у SimpleX через Налаштування. %s заблокований %s розблокований ви заблокували %s @@ -1841,7 +1784,6 @@ Адреса сервера призначення %1$s несумісна з налаштуваннями сервера переадресації %2$s. Файл не знайдено — ймовірно, файл був видалений або скасований. Вставити / Сканувати посилання - Налаштовані XFTP сервери Бета Статус файлу Надіслано повідомлень @@ -1876,7 +1818,6 @@ Сервер переадресації %1$s не зміг з\'єднатися з цільовим сервером %2$s. Будь ласка, спробуйте пізніше. Повідомлення може бути доставлено пізніше, якщо учасник стане активним. Нічого не вибрано - Відкрити налаштування сервера Версія сервера несумісна з вашим додатком: %1$s. Повідомлення будуть позначені як модеровані для всіх учасників. Оновлювати додаток автоматично @@ -1993,11 +1934,8 @@ Розмову видалено! Видалити без сповіщення Ви можете надсилати повідомлення %1$s з архівованих контактів. - Налаштовані SMP сервери Ніяких відфільтрованих контактів - Інші SMP сервери Ваші контакти - Інші XFTP сервери Показати відсоток Перевірити оновлення Вимкнено @@ -2202,7 +2140,6 @@ Без фонової служби Сповіщення та батарея Додаток завжди працює у фоні. - зашифрованими end-to-end, з пост-квантовою безпекою в особистих повідомленнях.]]> Покинути чат? Учасник буде видалений з чату — це неможливо скасувати! Бізнес чати diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index 4b8ec8c4b7..9c63cff9ee 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -30,7 +30,6 @@ 30 giây Chấp nhận yêu cầu kết nối? Chấp nhận bằng hồ sơ ẩn danh - Thêm các máy chủ được cài sẵn Thêm vào một thiết bị khác cuộc gọi được chấp nhận đồng ý mã hóa… @@ -138,8 +137,6 @@ Địa chỉ máy tính xấu Thêm liên hệ: để tạo đường dẫn mời mới, hoặc kết nối qua đường dẫn bạn nhận được.]]> hàm băm tin nhắn xấu - " -\nCó sẵn ở v5.1" Tự động chấp nhận Quay về Tự động chấp nhận hình ảnh @@ -277,7 +274,6 @@ Đã kết nối đã kết nối Kết nối trực tiếp? - Kết nối đã kết nối Tự động kết nối đã kết nối @@ -293,7 +289,6 @@ đang kết nối đang kết nối… đang kết nối… - Kết nối ẩn danh đang kết nối Đã kết nối tới máy tính đang kết nối (đã được thông báo) @@ -302,7 +297,6 @@ đang kết nối (lời mời giới thiệu) Kết nối tới máy tính đang ở trong tình trạng không tốt Kết nối đã bị ngắt - Kết nối qua đường dẫn / mã QR Kết nối tới chính bạn? Yêu cầu kết nối đã được gửi! Kết nối qua đường dẫn @@ -340,7 +334,6 @@ liên hệ không có bảo mật đầu cuối Tùy chọn liên hệ Sao chép - Tạo Liên hệ có thể đánh dấu tin nhắn để xóa; bạn vẫn sẽ có thể xem được chúng. Biểu tượng ngữ cảnh Tiếp tục @@ -353,7 +346,6 @@ Tạo hồ sơ mới trong ứng dụng trên máy tính. 💻 Không thể gửi tin nhắn Tạo tệp - Tạo một địa chỉ để cho mọi người kết nối với bạn. Tạo đường dẫn nhóm Tạo đường dẫn Được tạo ra tại @@ -370,7 +362,6 @@ Các màu chế độ tối Tối Lỗi nghiêm trọng - Tạo đường dẫn lời mời dùng một lần Đang tạo đường dẫn… Tạo hồ sơ Tùy chỉnh và chia sẻ các chủ đề màu sắc. @@ -419,7 +410,6 @@ Xóa hồ sơ trò chuyện? Xóa %d tin nhắn? Xóa địa chỉ - Phi tập trung Xóa Xóa cơ sở dữ liệu khỏi thiết bị này Xóa sau @@ -482,8 +472,6 @@ Beta Kiểm tra cập nhật Đang kết nối - Các máy chủ SMP đã được cấu hình - Các máy chủ XFTP đã được cấu hình Bản cập nhật ứng dụng đã được tải xuống Kiểm tra cập nhật Đã kết nối @@ -555,7 +543,6 @@ Kiểm soát mạng của bạn Kết nối và trạng thái máy chủ. Cài đặt nâng cao - Bất kỳ ai cũng có thể tạo máy chủ. Tiếp tục Kết nối nhanh hơn với bạn bè. Cơ sở dữ liệu trò chuyện đã được xuất @@ -587,7 +574,6 @@ Tên hiển thị không thể chứa khoảng trắng. Khám phá qua mạng cục bộ Tải về không thành công - Không tạo địa chỉ Không hiển thị lại Tải về tệp tin Đang tải về kho lưu trữ @@ -711,8 +697,6 @@ Lỗi nhận tệp Lỗi lưu hồ sơ nhóm Lỗi lưu tệp - Lỗi tải máy chủ SMP - Lỗi tải máy chủ XFTP Lỗi kết nối lại máy chủ Lỗi kết nối lại máy chủ Lỗi @@ -721,8 +705,6 @@ lỗi hiển thị tin nhắn lỗi hiển thị nội dung Lỗi lưu máy chủ ICE - Lỗi lưu máy chủ XFTP - Lỗi lưu máy chủ SMP Lỗi gửi tin nhắn Lỗi khởi động kết nối trò chuyện Lỗi dừng kết nối trò chuyện @@ -895,7 +877,6 @@ Chuyển tiếp tối đa 20 tin nhắn cùng một lúc. Cách sử dụng máy chủ của bạn Giao diện Hungary và Thổ Nhĩ Kỳ - Miễn nhiễm với tin nhắn rác Nhập cơ sở dữ liệu trò chuyện? Nếu bạn nhập mã tự hủy của mình khi mở ứng dụng: Máy chủ ICE (một dòng mỗi máy) @@ -909,10 +890,8 @@ Hình ảnh Hình ảnh đã được lưu vào Thư viện Nếu bạn nhận được đường dẫn mời SimpleX Chat, bạn có thể mở nó trong trình duyệt của mình: - quét mã QR trong cuộc gọi video, hoặc liên hệ của bạn có thể chia sẻ một đường dẫn mời.]]> Nếu bạn xác nhận, các máy chủ truyền tin nhắn sẽ có thể biết địa chỉ IP, và nhà cung cấp của bạn - máy chủ nào mà bạn đang kết nối. Nếu bạn chọn từ chối người gửi sẽ KHÔNG được thông báo. - cho liên hệ của bạn xem mã QR trong cuộc gọi video, hoặc chia sẻ đường dẫn.]]> Nhập Bỏ qua không hoạt động @@ -963,7 +942,6 @@ Tên hiển thị không hợp lệ! Đường dẫn kết nối không hợp lệ Thông báo tức thời! - Mã QR không hợp lệ Thông báo tức thời Thông báo tức thời đã bị tắt! Đường dẫn tệp không hợp lệ @@ -977,8 +955,6 @@ Mời thành viên Tên cục bộ Cảnh báo chuyển gửi tin nhắn - Đảm bảo địa chỉ máy chủ SMP ở đúng định dạng, dòng được phân tách và không bị trùng lặp. - Đảm bảo địa chỉ máy chủ XFTP ở đúng định dạng, dòng được phân tách và không bị trùng lặp. Liên kết với điện thoại Thành viên không hoạt động Tin nhắn đã được chuyển tiếp @@ -1172,7 +1148,6 @@ bật Không có gì để chuyển tiếp! Thông báo sẽ dừng hoạt động cho đến khi bạn khởi động lại ứng dụng - Không có thông tin định danh người dùng. không có văn bản tắt tắt` @@ -1195,7 +1170,6 @@ OK Chỉ xóa cuộc trò chuyện Chỉ bạn mới có thể gửi tin nhắn thoại. - Chỉ thiết bị cuối mới lưu trữ các hồ sơ người dùng, liên hệ, nhóm, và tin nhắn Chỉ chủ nhóm mới có thể bật tính năng tin nhắn thoại. Chỉ bạn mới có thể gửi tin nhắn tự xóa. Đường dẫn lời mời dùng một lần @@ -1222,7 +1196,6 @@ Dịch vụ onion sẽ được sử dụng khi có sẵn. Chỉ liên hệ của bạn mới có thể gửi tin nhắn thoại. chủ sở hữu - Mở cài đặt máy chủ Mở đường dẫn trong trình duyệt có thể làm giảm sự riêng tư và bảo mật của kết nối. Đường dẫn SimpleX không đáng tin cậy sẽ được đánh dấu màu đỏ. Chỉ liên hệ của bạn mới có thể xóa tin nhắn mà không thể phục hồi (bạn có thể đánh dấu chúng để xóa). (24 giờ) Mở cài đặt ứng dụng @@ -1248,14 +1221,10 @@ Mở nhóm khác các lỗi khác - Các máy chủ SMP khác - Các máy chủ XFTP khác - Dán đường dẫn mà bạn nhận được để kết nối với liên hệ của bạn… Dán đường dẫn Mật khẩu Định kỳ Đang chờ xử lý - Đang chờ xử lý Không tìm thấy mật khẩu trong Keystore, vui lòng nhập thủ công. Điều này có thể xảy ra nếu bạn khôi phục dữ liệu ứng dụng bằng một công cụ sao lưu. Nếu không phải như vậy, xin vui lòng liên hệ với nhà phát triển. Thành viên trước đây %1$s Dán đường dẫn để kết nối! @@ -1301,14 +1270,12 @@ Lưu lại bản nháp tin nhắn cuối cùng, với các tệp đính kèm. Đang chuẩn bị tải xuống Xin vui lòng cập nhật ứng dụng và liên lạc với các nhà phát triển. - Máy chủ cài sẵn Xin vui lòng thử lại sau. Xem trước Xin vui lòng lưu trữ mật khẩu một cách an toàn, bạn sẽ KHÔNG thể thay đổi nếu bạn làm mất nó. Giao diện tiếng Ba Lan Xin vui lòng khởi động lại ứng dụng. Các máy chủ đã kết nối trước đó - Định hình lại sự riêng tư Quyền riêng tư & bảo mật Bản cập nhật hồ sơ sẽ được gửi đến các liên hệ của bạn. Cấm thả cảm xúc tin nhắn. @@ -1359,7 +1326,6 @@ Cài đặt địa chỉ %s.]]> %s.]]> - Kho lưu trữ GitHub của chúng tôi.]]> %s.]]> %s.]]> %s.]]> @@ -1374,7 +1340,6 @@ %1$s rồi.]]> %1$s!]]> %1$s rồi.]]> - Mở trong ứng dụng di động.]]> Các bên vận hành máy chủ kết nối với các nhà phát triển SimpleX Chat để hỏi bất kỳ câu hỏi nào và nhận thông tin cập nhật.]]> không được sử dụng cùng một cơ sở dữ liệu trên hai thiết .]]> @@ -1403,7 +1368,6 @@ Cuộc trò chuyện đã tồn tại! Thêm bạn bè đã chấp nhận lời mời - mã hóa đầu cuối, với bảo mật sau ượng tử trong các tin nhắn trực tiếp.]]> Giới thiệu về các nhà cung cấp Thêm các thành viên nhóm của bạn vào các cuộc trò chuyện. Địa chỉ doanh nghiệp @@ -1609,7 +1573,6 @@ Đã chọn %d Gửi tin nhắn trực tiếp để kết nối Đang lưu %1$s tin nhắn - (quét hoặc dán từ bảng nháp) Gửi tin nhắn trực tiếp Lưu lời chào? gửi thất bại @@ -1817,7 +1780,6 @@ Loa ngoài bật Âm thanh đã bị tắt Ổn định - Proxy SOCKS Các nhóm nhỏ (tối đa 20 thành viên) Một vài lỗi không nghiêm trọng đã xảy ra trong lúc nhập: Loa ngoài tắt @@ -1843,7 +1805,6 @@ Một số tệp đã không được xuất Loa ngoài Bắt đầu kết nối trò chuyện? - Các máy chủ SMP Bắt đầu kết nối trò chuyện Tin nhắn rác Mạnh @@ -1902,12 +1863,10 @@ Cảm ơn bạn đã cài đặt SimpleX Chat! Kiểm tra máy chủ Kiểm tra các máy chủ - Nhấn để bắt đầu một cuộc trò chuyện mới Nhấn để dán đường dẫn Đuôi Chuyển đổi Kết nối đã chạm giới hạn của các tin nhắn chưa được gửi đi, liên hệ của bạn có thể đang ngoại tuyến. - Tương lai của nhắn tin Hình ảnh không thể được giải mã. Xin vui lòng thử lại với một hình ảnh khác hoặc liên lạc với các nhà phát triển. Các tin nhắn sẽ bị xóa cho tất cả các thành viên. Mã hóa đang hoạt động và thỏa thuận mã hóa mới là không bắt buộc. Nó có thể dẫn đến các lỗi kết nối! @@ -1955,7 +1914,6 @@ Tính năng này chưa được hỗ trợ. Hãy thử bản phát hành tiếp theo. Dấu tick thứ hai mà chúng ta từng thiếu! ✅ Những máy chủ cho tệp mới của hồ sơ trò chuyện hiện tại của bạn - Nền tảng ứng dụng và nhắn tin bảo vệ sự riêng tư và bảo mật của bạn. Bên vận hành được cài sẵn thứ hai trong ứng dụng! Chức vụ sẽ được đổi thành %s. Tất cả mọi người trong cuộc trò chuyện sẽ được thông báo. Văn bản bạn vừa dán không phải là một đường dẫn SimpleX. @@ -1967,11 +1925,8 @@ Việc này không thể được hoàn tác - hồ sơ, các liên hệ, tin nhắn và tệp của bạn sẽ biến mất mà không thể khôi phục. Những máy chủ cho các kết nối mới của hồ sơ trò chuyện hiện tại của bạn Tin nhắn này đã bị xóa hoặc vẫn chưa được nhận. - Mã QR này không phải là một đường dẫn! - Đường dẫn này không phải là một đường dẫn kết nối hợp lệ! Thời gian chờ đã hết trong khi kết nối tới máy tính Để cho phép một ứng dụng di động kết nối tới máy tính, mở cổng này trong tường lửa của bạn, nếu bạn có bật nó lên - Để bảo vệ sự riêng tư của bạn, SimpleX sử dụng các ID riêng biệt cho mỗi liên hệ bạn có. Để nhận thông báo, xin vui lòng nhập mật khẩu cơ sở dữ liệu Quá nhiều ảnh! Quá nhiều video! @@ -1985,7 +1940,6 @@ Tiêu đề Chuyển đổi ẩn danh khi kết nối. Để bảo vệ múi giờ, các tệp hình ảnh/âm thanh sử dụng UTC. - Văn bản này có sẵn trong cài đặt Để được thông báo về các bản phát hành mới, bật kiểm tra định kỳ cho các phiên bản Ổn định hoặc Beta. Để ẩn các tin nhắn không mong muốn. Để tiết lộ hồ sơ ẩn của bạn, nhập đầy đủ mật khẩu vào trường tìm kiếm trong trang Các hồ sơ trò chuyện của bạn. @@ -2014,7 +1968,6 @@ Các phiên truyền tải Các máy chủ không xác định! gửi mà không được cho phép - (để chia sẻ với liên hệ của bạn) Bỏ ẩn Bật Tổng @@ -2028,7 +1981,6 @@ Tối đa tới 100 tin nhắn cuối cùng là được gửi tới các thành viên mới. Sử dụng các thông tin đăng nhập proxy khác cho mỗi kết nối. Sử dụng các thông tin đăng nhập proxy khác nhau cho mỗi hồ sơ. - Cập nhật chế độ cách ly truyền tải? Hủy liên kết máy tính? Tải lên tệp Có bản cập nhật: %s @@ -2076,7 +2028,6 @@ Sử dụng hồ sơ ẩn danh mới qua %1$s Sử dụng proxy SOCKS - Sử dụng SimpleX Chat Sử dụng cho các kết nối mới Sử dụng máy chủ Sử dụng proxy SOCKS? @@ -2117,7 +2068,6 @@ cuộc gọi video (không được mã hóa đầu cuối) qua đường dẫn địa chỉ liên lạc Video - Chúng tôi không lưu bất kỳ liên hệ hay tin nhắn nào của bạn (một khi đã được gửi) trên các máy chủ. Xin chào %1$s! Khi có sẵn Các tin nhắn thoại bị cấm! @@ -2132,7 +2082,6 @@ Màu nền hình nền Đang chờ máy tính… Đang chờ di động để kết nối: - Xin chào! Đang chờ video muốn kết nối với bạn! Đang chờ tệp @@ -2165,19 +2114,15 @@ Tắt tính năng xóa tin nhắn Đặt tên cuộc trò chuyện… Không có Tor hoặc VPN, địa chỉ IP của bạn sẽ bị lộ ra cho các relay XFTP sau đây:\n%1$s. - Các máy chủ XFTP Khi có nhiều hơn một bên vận hành được kích hoạt, không ai trong số họ có siêu dữ liệu để biết được ai trò chuyện với ai. Với các tệp và đa phương tiện được mã hóa. Mức sử dụng pin đã được giảm xuống. Mức sử dụng pin đã được giảm xuống. Với lời chào tùy chọn. - Khi mọi người gửi yêu cầu kết nối, bạn có thể chấp nhận hoặc từ chối nó. Khóa sai hoặc địa chỉ khối tệp không xác định - khả năng cao tệp đã bị xóa. 1 năm Việc này không thể được hoàn tác - các tin nhắn đã được gửi và nhận trong cuộc trò chuyện này sớm hơn thời gian được chọn sẽ bị xóa. có - Bạn có thể hiển thị nó cho các liên hệ SimpleX của mình thông qua Cài đặt. - Bạn có thể tạo nó sau Bạn có thể thay đổi nói trong cài đặt Giao diện. Bạn đang tham gia nhóm thông qua đường dẫn này. Bạn có thể bật vào lúc sau thông qua Cài đặt @@ -2228,9 +2173,7 @@ bạn đã thay đổi địa chỉ Bạn đã yêu cầu kết nối thông qua địa chỉ này rồi! Bạn đã mời một liên hệ - Bạn có thể chia sẻ địa chỉ của mình dưới dạng một đường dẫn hoặc mã QR - bất kỳ ai cũng có thể kết nối với bạn. Bạn có thể xem đường dẫn mời lần nữa trong chi tiết kết nối. - Bạn kiểm soát cuộc trò chuyện của mình! bạn là quan sát viên Bạn có thể chia sẻ địa chỉ này với các liên hệ của mình để họ kết nối với %s. Bạn cần cho phép liên hệ của mình gửi tin nhắn thoại để có thể gửi cho họ. @@ -2239,7 +2182,6 @@ bạn đã thay đổi địa chỉ cho %s Bạn có thể sử dụng markdown để định dạng tin nhắn: Bạn có thể bắt đầu kết nối trò chuyện thông qua phần Cài đặt / Cơ sở dữ liệu ở trên ứng dụng hoặc bằng cách khởi động lại ứng dụng. - Bạn quyết định ai có thể kết nối tới. Cơ sở dữ liệu trò chuyện của bạn Sự riêng tư của bạn Cơ sở dữ liệu trò chuyện hiện tại của bạn sẽ bị XÓA và THAY THẾ bằng cái được nhập vào.\nViệc này không thể được hoàn tác - hồ sơ, các liên hệ, tin nhắn và tệp của bạn sẽ biến mất mà không thể khôi phục. @@ -2248,7 +2190,6 @@ Hồ sơ, các liên hệ và những tin nhắn đã được gửi của bạn được lưu trữ trên thiết bị bạn dùng. Các liên hệ của bạn có thể cho phép xóa tin nhắn hoàn toàn. Thu phóng - Các máy chủ SMP của bạn Bạn đã chia sẻ đường dẫn dùng một lần Hồ sơ trò chuyện của bạn sẽ được gửi tới các thành viên nhóm Hồ sơ hiện tại của bạn @@ -2258,7 +2199,6 @@ Bạn đã gửi lời mời nhóm Bạn đã từ chối lời mời nhóm bạn đã bỏ chặn %s - Hồ sơ trò chuyện của bạn sẽ được gửi\ntới liên hệ của bạn bạn đã chia sẻ đường dẫn ẩn danh dùng một lần Địa chỉ SimpleX của bạn Liên hệ của bạn cần phải trực tuyến để cho kết nối hoàn thành.\nBạn có thể hủy kết nối này và xóa liên hệ (và thử lại sau với một đường dẫn mới). @@ -2267,7 +2207,6 @@ Hồ sơ trò chuyện của bạn sẽ được gửi tới các thành viên có liên lạc Bạn sẽ được kết nối khi yêu cầu kết nối của bạn được chấp nhận, xin vui lòng đợi hoặc kiểm tra sau! Hồ sơ %1$s sẽ được chia sẻ. - Các máy chủ XFTP của bạn Hồ sơ của bạn sẽ được gửi tới liên hệ mà bạn đã nhận từ người đó đường dẫn này. Bạn sẽ kết nối với tất cả các thành viên nhóm. Bạn đã chia sẻ một đường dẫn tệp không hợp lệ. Báo cáo vấn đề tới các nhà phát triển ứng dụng. @@ -2281,9 +2220,7 @@ Các liên hệ của bạn Các hồ sơ trò chuyện của bạn Cài đặt của bạn - Máy chủ của bạn Địa chỉ máy chủ của bạn - Các máy chủ ICE của bạn Thông tin định danh của bạn có thể bị gửi mà không được mã hóa. Hồ sơ của bạn được lưu trên thiết bị bạn dùng và chỉ được chia sẻ với các liên hệ bạn có. Các máy chủ SimpleX không thể xem hồ sơ của bạn. Kết nối của bạn đã bị chuyển tới %s nhưng một lỗi không mong muốn đã xảy ra trong khi chuyển hướng bạn đến hồ sơ. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index 2d5ccbe4b9..804316d18c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -23,7 +23,6 @@ 接受连接请求? 接受隐身聊天 管理员可以创建链接以加入群。 - 添加预设服务器 通过链接连接 已建立连接 连接 %1$d @@ -64,7 +63,6 @@ 通过一次性链接进行连接? 通过联系人地址进行连接? 加入群? - 通过群链接/二维码连接 总是通过中继连接 允许你的联系人不不可逆地删除已发送消息。(24小时) 联系人允许 @@ -169,13 +167,11 @@ 只有群主可以改变群偏好设置。 保存偏好设置? 设置群偏好设置 - 重新定义隐私 改进的隐私和安全 隐身聊天 加入群中 加入隐身聊天 隐身模式 - 点击开始一个新聊天 你的随机资料 通过联系地址链接隐身 通过群链接隐身 @@ -223,7 +219,6 @@ 彩色 已连接 连接 - 连接 文件 聊天资料 按聊天资料(默认)或按连接(BETA)。 @@ -269,10 +264,7 @@ 扫描二维码 从应用程序扫描显示的二维码。]]> 删除待定连接? 如何使用 markdown - 创建 显示名不能包含空格。 - 分散式 - 不受垃圾和骚扰消息影响 端到端加密视频通话 忽视 视频通话来电 @@ -326,7 +318,6 @@ 创建群链接 创建私密群 创建链接 - 创建一次性邀请链接 创建队列 创建私密群 不同的名字、头像和传输隔离。 @@ -398,7 +389,6 @@ 更新网络配置错误 删除联系人请求错误 保存群资料错误 - 保存 SMP 服务器错误 保存 ICE 服务器错误 发送消息错误 完整链接 @@ -433,7 +423,6 @@ 邀请已过期! 实时消息! 链接预览图片 - 无效的二维码 它如何影响电量 它可能在以下情况发生: \n1. 消息在发送客户端 2 天后或在服务器上 30 天后过期。 \n2. 消息解密失败,因为你或你的联系人使用了旧的数据库备份。 \n3.连接被破坏。 离开群? @@ -484,7 +473,6 @@ 设置联系人姓名…… 已收到回复…… 已受到确认…… - 仅客户端设备存储用户个人资料、联系人、群和消息。 视频通话(非端到端加密) 定期 私密通知 @@ -556,7 +544,6 @@ 拒接来电 点对点 错误:%s - 扫描视频通话中的二维码,或者你的联系人可以分享邀请链接。]]> 你的通话 通过中继 未接来电 @@ -564,13 +551,11 @@ 语音消息 语音消息 SimpleX Chat 通话 - 在视频通话中出示二维码,或分享链接。]]> 你的聊天资料 未接来电 待定来电 你的联系人删除了此链接,或者其为已使用的一次性链接。\n要进行连接,请你的联系人创建新链接。 你已经连接到 %1$s。 - 你的聊天资料将被发送 \n给你的联系人 资料和服务器连接 更新网络设置? 只有你可以不可逆地删除消息(你的联系人可以将它们标记为删除)。(24小时) @@ -619,7 +604,6 @@ %d 月 %d 秒 确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。 - 确保 SMP 服务器地址格式正确、每行分开且不重复。 Markdown 帮助 标记为已验证 建立私密连接 @@ -674,7 +658,6 @@ 发送人已取消文件传输。 分享 发送实时消息 - 此文本在设置中可用 未读 保存的 WebRTC ICE 服务器将被删除。 %s 已验证 @@ -684,7 +667,6 @@ 保存并通知联系人 保存并通知联系人 拒绝 - 为了保护隐私,SimpleX 对你的每一个联系人使用不同的 ID。 TCP 连接超时 收到,禁止 设定1天 @@ -692,7 +674,6 @@ 在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。 恢复数据库备份后请输入之前的密码。 此操作无法撤消。 请更新应用程序并联系开发者。 - 任何人都可以托管服务器。 粘贴 PING 次数 禁止发送语音消息。 @@ -711,28 +692,22 @@ SimpleX 消息 %s 未验证 感谢用户——通过 Weblate 做出贡献! - 没有用户标识符。 完全去中心化 - 仅对成员可见。 图像无法解码。 请尝试不同的图像或联系开发者。 主题 此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。 角色将更改为%s。 该成员将收到新的邀请。 此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。 - 此二维码不是链接! 接收地址将变更到不同的服务器。地址更改将在发件人上线后完成。 - 此链接不是有效的连接链接! 开始新的聊天 要与你的联系人验证端到端加密,请比较(或扫描)你设备上的代码。 取消静音 - 更新传输隔离模式? - (从剪贴板扫描或粘贴) 保护队列 揭示 打开 发送失败 未经授权发送 太多图片! - 待办的 更改接收地址? 请让你的联系人启用发送语音消息。 录制语音消息 @@ -741,22 +716,17 @@ 发送 发送实时消息——它会在你键入时为收件人更新 开始新聊天 - (与你的联系人分享) 通过链接连接 设置联系人姓名 你接受的连接将被取消! 你与之共享此链接的联系人将无法连接! 显示二维码 发送问题和想法 - 保护你的隐私和安全的消息传递和应用程序平台。 删去 - 你决定谁可以连接。 - 下一代私密通讯软件 粘贴你收到的链接 已跳过消息 支持 SimpleX Chat 发送链接预览 - SOCKS 代理 停止聊天程序? 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,你将无法收发消息。 恢复数据库备份 @@ -774,7 +744,6 @@ 分享一次性链接 此字符串不是连接链接! 给我们发电子邮件 - SMP 服务器 尚不支持发送文件 尝试连接到用于从该连接接收消息的服务器。 尚不支持接收文件 @@ -786,7 +755,6 @@ SimpleX 群链接 SimpleX 链接 发送人已删除连接请求。 - 预设服务器 二维码 传输隔离 分享链接 @@ -810,8 +778,6 @@ 重置颜色 减少电池使用量 为了保护时区,图像/语音文件使用 UTC。 - 使用聊天 - GitHub 存储库 中阅读更多内容。]]> 打开聊天控制台 停止聊天程序 权限被拒绝! @@ -833,7 +799,6 @@ 查看安全码 语音消息 (%1$s) 等待图像中 - 欢迎! 欢迎 %1$s! 当你的联系人设备在线时,你将可以连接,请稍等或稍后查看! 评价此应用程序 @@ -856,7 +821,6 @@ 当你启动应用或在应用程序驻留后台超过30 秒后,你将需要进行身份验证。 连接到 SimpleX Chat 开发者提出任何问题并接收更新 。]]> 你已接受连接 - 你的 SMP 服务器 %1$d 条已跳过消息 %ds 更新内容 @@ -874,11 +838,9 @@ 你的 SimpleX 地址 为终端安装 SimpleX Chat 使用 SimpleX Chat 服务器? - 我们不会在服务器上存储你的任何联系人或消息(一旦发送)。 WebRTC ICE 服务器 中继服务器保护你的 IP 地址,但它可以观察通话的持续时间。 中继服务器仅在必要时使用。其他人可能会观察到你的IP地址。 - 你的 ICE 服务器 视频关闭 你可以通过应用设置/数据库或重启应用开始聊天。 你将 %s 的角色更改为 %s @@ -886,19 +848,16 @@ 你已更改地址 你可以共享链接或二维码——任何人都可以加入该群。如果你稍后将其删除,你不会失去该群的成员。 间接(%1$s) - 在移动应用程序中打开按钮。]]> SimpleX 你将连接到所有群成员。 通过群链接 通过一次性链接 通过联系地址链接 通过浏览器 - 你的服务器 当可用时 使用 .onion 主机 你的 ICE 服务器 simplexmq: v%s (%2s) - 你的聊天由你掌控! 你可以使用 markdown 来编排消息格式: %dh %d 天 @@ -1012,20 +971,14 @@ 视频将在你的联系人完成上传后收到。 服务器需要授权来上传,检查密码。 上传文件 - XFTP 服务器 - 你的 XFTP 服务器 Use .onion hosts 设置为否。]]> 使用 SOCKS 代理 端口 删除文件 对比文件 主机 - 确保 XFTP 服务器地址格式正确、行分隔且不重复。 创建文件 下载文件 - 加载 SMP 服务器错误 - 加载 XFTP 服务器错误 - 保存 SMP 服务器时出错 端口 %d SOCKS 代理设置 SimpleX 锁定模式 @@ -1079,8 +1032,6 @@ 文件将从服务器中删除。 吊销 音频/视频通话 - " -\n在 v5.1 版本中可用" 应用程序密码 波兰语界面 感谢用户——通过 Weblate 做出贡献! @@ -1127,10 +1078,8 @@ 消失于 设置地址错误 自定义主题 - 创建一个地址,让人们与你联系。 创建 SimpleX 地址 输入欢迎消息……(可选) - 不创建地址 输入欢迎消息…… 深色主题 导出主题 @@ -1169,10 +1118,8 @@ 打开数据库中…… 更改聊天资料 你的联系人可以扫描二维码或使用应用程序中的链接来建立连接。 - 你可以将你的地址作为链接或二维码共享——任何人都可以连接到你。 如果你不能亲自见面,可以在视频通话中展示二维码,或分享链接。 了解更多 - 当人们请求连接时,你可以接受或拒绝它。 如果你以后删除你的地址,你不会丢失你的联系人。 用户指南中阅读更多。]]> 界面颜色 @@ -1185,7 +1132,6 @@ 你好! \n用 SimpleX Chat 与我联系:%s 让我们一起在 SimpleX Chat 里聊天 - 你可以以后创建它 分享地址… 你可以与你的联系人分享该地址,让他们与 %s 联系。 预览 @@ -1262,7 +1208,6 @@ 与 %s 协调加密中… 该功能还没支持。请尝试下一个版本。 允许 - 隐身连接 确认发起私聊? 发送 %s: %s @@ -1334,7 +1279,6 @@ 将送达回执发送给 启用已读回执时出错! 更改密码或重启应用后,密码将以明文形式保存在设置中。 - 粘贴你收到的链接以与你的联系人联系… 送达回执 没有选中的聊天 可以加密 @@ -1501,7 +1445,6 @@ %2$s 审核了 %1$d 条消息 显示内容出错 显示消息出错 - 你可以通过设置让它对你的 SimpleX 联系人可见。 未发送历史消息给新成员。 重试 相机不可用 @@ -1849,8 +1792,6 @@ 私密路由出错 已转发的消息 尚无直接连接,消息由管理员转发。 - 其他 SMP 服务器 - 其他 XFTP 服务器 粘贴链接/扫描 显示百分比 不活跃 @@ -1931,8 +1872,6 @@ 总计 块已上传 订阅被忽略 - 已配置的 SMP 服务器 - 已配置的 XFTP 服务器 当前个人资料 传输会话 已上传 @@ -1941,7 +1880,6 @@ 成员不活跃 如果成员变得活跃,可能会在之后传输消息。 发送的消息 - 打开服务器设置 检查更新 检查更新 停用 @@ -2190,7 +2128,6 @@ 请减小消息大小或删除媒体并再次发送。 将你的团队成员加入对话。 企业地址 - 端到端加密,私信具备后量子密码安全性。]]> 无后台服务 每 10 分钟检查消息 它如何帮助隐私 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index 2909f01636..357099ddef 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -14,7 +14,6 @@ 要在端口啟用 SOCKS 代理伺服器嗎 %d?在啟用這個選項之前,必須先啟用代理伺服器。 管理員 然後,選按: - 新增預設伺服器 新增伺服器 接受 認證無效 @@ -166,8 +165,6 @@ 自動銷毀訊息 開啟新的對話 建立私密群組 - 建立一次性邀請連結 - (分享給你的聯絡人) 點擊按鈕 感謝你安裝 SimpleX Chat! 靜音 @@ -234,7 +231,6 @@ 加入群組? 你的個人檔案將傳送給你接收此連結的聯絡人。 你將連接至此群組內的所有成員。 - 連接 錯誤 連接中 你已連接到此聯絡人使用的伺服器以接收訊息。 @@ -243,8 +239,6 @@ 已刪除 已標記為已刪除 在瀏覽器中開啟連結可能會有隱私疑慮和不確定性。不受 SimpleX 信任的連結會顯示紅色。 - 儲存 SMP 伺服器時出錯 - 請確保 SMP 伺服器連結是正確的格式,每行也分隔且不重複。 更新網路配置時出錯 聊天載入失敗 多個聯絡人載入失敗 @@ -293,13 +287,10 @@ 未經授權傳送 傳送失敗 歡迎 %1$s! - 歡迎! - 在設定中可用這文字 連接中… 你被邀請加入至群組 以 %s 身份加入 連接中… - 點擊以開啟新的對話 找不到檔案 語音訊息 (%1$s) 語音訊息… @@ -356,7 +347,6 @@ 傳送實況的訊息 直播訊息! 傳送實況訊息 - 這會即時顯示你在輸入中的文字 - (掃描或使用剪貼薄貼上) 權限被拒絕! SimpleX 在背景運作而不是使用推送通知。]]> 定期通知 @@ -378,7 +368,6 @@ 已連接 已斷開連接 錯誤 - 待處理 切換接收的聯絡地址? 此功能目前還是實驗階段!對方需要使用 4.2 版本或更高的版本才能成功生效。地址修改後,你會在對話中看到新的訊息 - 請你於修改聯絡地址後,測試是否仍然能夠接收來自這聯絡人(或群組內的成員)的訊息。 查看安全碼 @@ -396,13 +385,11 @@ 沒有詳細資料 一次性邀請連結 已複製至你的剪貼薄 - 透過連結/QR 圖碼連接 掃描二維碼 (僅由群組成員儲存) 想和你對話! SimpleX 徽標 透過連結連接 - 預設伺服器 你的伺服器地址 刪除伺服器 你的 ICE 伺服器 @@ -416,7 +403,6 @@ 使用連結連接 掃描二維碼。]]> 設定 - 這個二維碼不是一個連結! 當可用時 核心版本:v%s simplexmq: v%s (%2s) @@ -454,20 +440,13 @@ 電郵 更多 顯示二維碼 - 無效的 QR 圖碼 無效的連結! - 這個連結不是一個有效的連接連結! 已傳送連接請求 當群組的建立人上線,你便會成功連接至群組,請耐心等待! 當你的連接請求已被接受,你便會連接成功,請耐心等待! 當你的聯絡人上線,你便會連接成功,請耐心等待! - 可於視訊通話中出示你的二維碼,或者分享連結。]]> - 你的個人檔案會傳送給 -\n你的聯絡人 - 視訊通話中掃描二維碼 ,或者你可以分享一個邀請連結給此聯絡人。]]> 貼上 這些字串不是連接連結! - 在電話應用程式內的開啟 按鈕。]]> 一次性邀請連結 掃描二維碼 錯誤的安全碼! @@ -481,7 +460,6 @@ 無效的伺服器地址! 此伺服器用於你目前的個人檔案 使用 SimpleX Chat 伺服器? - 你的 SMP 伺服器 目前使用 SimpleX Chat 伺服器。 如何 配置 ICE 伺服器 @@ -496,7 +474,6 @@ 儲存並通知你的多個聯絡人 你的個人檔案,聯絡人和傳送的訊息只會儲存於你的個人裝置內。 你的個人檔案只會和你的聯絡人分享。 - 建立 如何使用 Markdown 語法 你可以使用 Markdown 語法以更清楚標明訊息: 刪除線 @@ -510,9 +487,6 @@ 使用 SOCKS 代理伺服器 儲存並通知群組內的聯絡人 退出並且不儲存記錄 - 你的對話由你控制! - 一個保護你的隱私和傳送安全通訊的應用程式平台。 - 我們不會在伺服器內儲存你的任何聯絡人和訊息(一旦傳送)。 建立個人檔案 已確認回應… 連接到 SimpleX Chat 開發人員提出任何問題並同意更新。]]> @@ -535,7 +509,6 @@ 資料庫密碼和匯出 傳送電郵 SimpleX 鎖定 - SMP 伺服器 預設伺服器地址 測試伺服器 測試多個伺服器 @@ -543,7 +516,6 @@ 伺服器測試失敗! 有一些伺服器測試失敗: 掃描伺服器的二維碼 - 你的伺服器 連接時需要使用 Onion 主機。 \n請注意:如果沒有 .onion 地址,你將無法連接到伺服器。 聊天個人檔案 透過群組連結 @@ -638,16 +610,10 @@ 儲存群組檔案 語音訊息於這個聊天室是禁用的。 允許你的聯絡人可以完全刪除訊息。 - 沒有用戶識別符。 - 未來的訊息平台 - 去中心化的 - 你決定誰可以連接。 - 重新定義隱私 建立你的個人檔案 這是如何運作 它如何影響電池 私下連接 - 任何人都可以託管伺服器。 忽略 語音通話來電 貼上你收到的連結 @@ -670,7 +636,6 @@ 幫助 SimpleX Chat 聊天 開發者工具 - SOCKS 代理伺服器 重新啟動應用程式以匯入對話資料庫。 刪除所有檔案 啟用自動銷毀訊息? @@ -781,7 +746,6 @@ 聯絡人允許 %ds 私人通知 - GitHub內查看更多。]]> 視訊通話來電 掛斷 點對點 @@ -847,7 +811,6 @@ 正在修改聯絡地址為 %s … 受加密的資料庫密碼會再次更新和儲存於金鑰庫。 當發生: \n1. 訊息將在傳送至客戶端後兩天或在伺服器內三十天時過時。 \n2. 訊息解密失敗,因為你或你的聯絡人用了舊的資料庫備份 \n3. 連接被破壞。 - 只有客戶端裝置儲存個人檔案、聯絡人、群組,和訊息。 請放置你的密碼於安全的地方,如果你遺失了密碼,將不可能修改你的密碼。 停止聊天室以匯出對話,匯入或刪除對話資料庫。當聊天室停止後你將不能接收或傳送訊息。 你正在使用匿名聊天模式進入此群組 - 為了避免分享你的真實個人檔案,邀請聯絡人是不允許的。 @@ -860,8 +823,6 @@ 透過聯絡人的邀請連結連接 透過一次性連結連接 傳輸隔離 - 更新傳輸隔離模式? - 為了保護你的隱私,SimpleX 對你的每個聯絡人使用不同的 ID。 當應用程式是運行中 透過設定啟用於上鎖畫面顯示來電通知。 這操作不能還原 - 你目前的個人檔案,聯絡人,訊息和檔案將不可逆地遺失。 @@ -876,13 +837,11 @@ 你已拒絕加入群組 連接中(宣布階段) 已選擇%d 個聯絡人 - 你的 ICE 伺服器 WebRTC ICE 伺服器 更新 添加更多身份選項 聯絡人頭像 個人檔案頭像占位符 - 不受垃圾和騷擾訊息影響 %1$s 希望透過以下方式聯絡你 開啟視訊 翻轉相機 @@ -914,7 +873,6 @@ 更新群組檔案 你修改了 %s 的身份為 %s 連接中(介紹階段) - 使用聊天 透過轉送 關閉視訊 你修改了自己的身份為 %s @@ -1011,10 +969,6 @@ 資料庫 IDs 和傳輸隔離選項。 降級和開啟對話 個人檔案密碼 - 儲存 XFTP 伺服器時出錯 - 請確保 XFTP 伺服器連結格式正確,隔行顯示且不重複。 - 加載 SMP 伺服器時出錯 - 加載 XFTP 伺服器時出錯 建立檔案 伺服器需要認證後才能上載,檢查密碼 對比檔案 @@ -1079,11 +1033,8 @@ 修改鎖定模式 未修改密碼! 語言/視訊通話 - " -\n在 v5.1中可用" 允許你的聯絡人與你進行通話。 上載檔案 - XFTP 伺服器 系統認證 你未能通過認證;請再試一次。 你可以透過設定啟用 SimpleX 鎖定。 @@ -1092,7 +1043,6 @@ \n當一些錯誤出現或你的連結被破壞時會發生。 %1$d 條訊息解密失敗。 使用SOCKS 代理伺服器 - 你的 XFTP 伺服器 %1$d 條訊息已跳過。 影片和檔案和最大上限為1gb 影片 @@ -1110,7 +1060,6 @@ 停止分享聯絡地址? 自動接受 繼續 - 不用建立聯絡地址 輸入歡迎訊息… (可選擇的) 你好!  \n透過 SimpleX Chat 來和我連接吧:%s @@ -1134,7 +1083,6 @@ 外加的輔助 地址 背景 - 建立一個聯絡地址讓其他用戶與你連接。 自定義主題 黑暗主題 設定聯絡地址時出錯 @@ -1156,12 +1104,9 @@ 已刪除所有的應用程式數據。 設定密碼 你可以與聯絡人分享此地址,讓他們使用 %s 進行連接。 - 你可以在稍後建立它 為了連接,你的聯絡人可以掃描二維碼或使用此應用程式的連結。 如果你不能面對面接觸此聯絡人,可於視訊通話中出示你的二維碼,或者分享連結。 當你在稍後刪除你的聯絡地址時,你並不會遺失你的聯絡人。 - 你可以將你的地址作為連接或二維碼以分享 - 任何人都可以連接到你。 - 當有人向你發出連接請求,你可以接受或拒絕請求。 你的聯絡人會保持連接。 你的所有聯絡人會保持連接。更新了的個人檔案將傳送給你的聯絡人。 新增地址至你的個人檔案,以便你的聯絡人可以與其他人分享。更新了的個人檔案將傳送給你的聯絡人。 @@ -1328,13 +1273,11 @@ 應用程式將為新的本機檔案(影片除外)加密。 檢查你的網路連接並重試 所有個人檔案 - 已設定的 SMP 伺服器 聊天主題 通話 允許降級 始終使用私密路由。 以導出聊天資料庫 - 已設定的 XFTP 伺服器 色彩模式 已儲存的聯絡人 模糊媒體 @@ -1475,7 +1418,6 @@ 輸入密碼短語 傳送的訊息 PC版處理中 - 隱身模式連接 已刪除對話! 目標伺服器錯誤:%1$s 聊天載入中… @@ -1723,7 +1665,6 @@ 禁止傳送檔案和媒體。 打開群組 只有群組所有者才能啟用檔案和媒體。 - 貼上你收到的連結以與你的聯絡人聯絡… 先前連接的伺服器 其他 無 @@ -1741,13 +1682,10 @@ 正在準備下載 只刪除對話 貼上連結 - 其他 SMP 伺服器 - 其他 XFTP 伺服器 請讓你的聯絡人啟用通話。 畫中畫通話 或安全分享此文件連結 無資訊,試試重新加載 - 打開伺服器設定 私密路由出錯 尚無直接連接,訊息由管理員轉發。 什麼也沒選中 @@ -2377,7 +2315,6 @@ 連結將會變短,且群組檔案會透過此連結分享。 分享舊地址 分享舊連結 - 你可以透過設定,讓你的 SimpleX 聯絡人看見它。 簡介: 簡介太長 要儲存加入審批設定嗎? @@ -2403,7 +2340,6 @@ 人類最古老的自由——不被監視地與另一個人交談——建立在不會背叛它的基礎設施之上。 因為我們摧毀了識別你身份的能力,讓你的自主權永遠不會被奪走。 在你的網路中自由交流。 - 端對端加密傳送,直接訊息具備後量子安全性。]]> 營運商承諾:\n- 保持獨立\n- 盡量減少中繼資料使用\n- 執行已驗證的開源程式碼 你承諾:\n- 只在公開群組中發佈合法內容\n- 尊重其他使用者——不發送垃圾訊息 私隱政策與使用條件。 From c7b3e362ec2121742b7240f2dbe24b9cb128f973 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 17 Sep 2026 16:18:04 +0000 Subject: [PATCH 03/28] core, ui: badge credential details in developer tools (#7527) --- apps/ios/Shared/Model/AppAPITypes.swift | 6 + apps/ios/Shared/Model/SimpleXAPI.swift | 6 + .../Views/Badges/BadgesLedgerView.swift | 156 +++++++++++++++++ .../Views/Badges/BadgesYourBadgeView.swift | 20 +++ apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 + apps/ios/SimpleXChat/ChatTypes.swift | 158 ++++++++++++++++++ .../chat/simplex/common/model/ChatModel.kt | 132 +++++++++++++++ .../chat/simplex/common/model/SimpleXAPI.kt | 12 ++ .../common/views/badges/BadgesLedgerView.kt | 158 ++++++++++++++++++ .../views/badges/BadgesYourBadgeView.kt | 26 +++ .../commonMain/resources/MR/base/strings.xml | 19 +++ bots/src/API/Docs/Commands.hs | 1 + bots/src/API/Docs/Responses.hs | 1 + src/Simplex/Chat/Badges/Types.hs | 5 +- src/Simplex/Chat/Controller.hs | 4 +- src/Simplex/Chat/Library/Commands.hs | 6 +- src/Simplex/Chat/Store/Badges.hs | 31 +++- .../SQLite/Migrations/chat_query_plans.txt | 16 ++ src/Simplex/Chat/View.hs | 14 ++ tests/Bots/BadgeServiceTests.hs | 21 ++- 20 files changed, 785 insertions(+), 11 deletions(-) create mode 100644 apps/ios/Shared/Views/Badges/BadgesLedgerView.swift create mode 100644 apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt diff --git a/apps/ios/Shared/Model/AppAPITypes.swift b/apps/ios/Shared/Model/AppAPITypes.swift index 592ad2e041..4ae103d746 100644 --- a/apps/ios/Shared/Model/AppAPITypes.swift +++ b/apps/ios/Shared/Model/AppAPITypes.swift @@ -194,6 +194,7 @@ enum ChatCommand: ChatCmdProtocol { // badges case apiRedeemBadgeCode(userId: Int64, code: String) case apiGetBadgeState(userId: Int64) + case apiGetBadgeLedger(userId: Int64, badgePurchaseId: Int64) case apiAckBadgeAlert(userId: Int64, badgePurchaseId: Int64, alertKind: BadgeAlertKind, snooze: Bool, episode: String) // misc case showVersion @@ -419,6 +420,7 @@ enum ChatCommand: ChatCmdProtocol { case let .apiStandaloneFileInfo(link): return "/_download info \(link)" case let .apiRedeemBadgeCode(userId, code): return "/_redeem_badge_code \(userId) \(code)" case let .apiGetBadgeState(userId): return "/_badge state \(userId)" + case let .apiGetBadgeLedger(userId, badgePurchaseId): return "/_badge ledger \(userId) \(badgePurchaseId)" case let .apiAckBadgeAlert(userId, badgePurchaseId, alertKind, snooze, episode): return "/_badge ack \(userId) \(badgePurchaseId) \(badgeAlertKindParam(alertKind)) \(onOff(snooze)) \(episode)" case .showVersion: return "/version" @@ -610,6 +612,7 @@ enum ChatCommand: ChatCmdProtocol { case .apiStandaloneFileInfo: return "apiStandaloneFileInfo" case .apiRedeemBadgeCode: return "apiRedeemBadgeCode" case .apiGetBadgeState: return "apiGetBadgeState" + case .apiGetBadgeLedger: return "apiGetBadgeLedger" case .apiAckBadgeAlert: return "apiAckBadgeAlert" case .showVersion: return "showVersion" case .getAgentSubsTotal: return "getAgentSubsTotal" @@ -1048,6 +1051,7 @@ enum ChatResponse2: Decodable, ChatAPIResult { // the full user, not UserRef: its profile carries the badge that setUserBadge just stored case badgeRedeemed(user: User, redeemedBadge: LocalBadge, newBadge: Bool, badgeState: BadgeState?) case badgeState(user: UserRef, badgeState: BadgeState?) + case badgeLedger(user: UserRef, badgeLedger: [StatementEntry]) var responseType: String { switch self { @@ -1101,6 +1105,7 @@ enum ChatResponse2: Decodable, ChatAPIResult { case .appSettings: "appSettings" case .badgeRedeemed: "badgeRedeemed" case .badgeState: "badgeState" + case .badgeLedger: "badgeLedger" } } @@ -1156,6 +1161,7 @@ enum ChatResponse2: Decodable, ChatAPIResult { case let .appSettings(appSettings): return String(describing: appSettings) case let .badgeRedeemed(u, redeemedBadge, newBadge, badgeState): return withUser(u, "redeemedBadge: \(String(describing: redeemedBadge))\nnewBadge: \(newBadge)\nbadgeState: \(String(describing: badgeState))") case let .badgeState(u, badgeState): return withUser(u, String(describing: badgeState)) + case let .badgeLedger(u, badgeLedger): return withUser(u, String(describing: badgeLedger)) } } } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 31995a9d5c..d4de1205c7 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -2229,6 +2229,12 @@ func apiGetBadgeStateSync(_ userId: Int64) throws -> BadgeState? { throw r.unexpected } +func apiGetBadgeLedger(_ userId: Int64, _ badgePurchaseId: Int64) async throws -> [StatementEntry] { + let r: ChatResponse2 = try await chatSendCmd(.apiGetBadgeLedger(userId: userId, badgePurchaseId: badgePurchaseId)) + if case let .badgeLedger(_, badgeLedger) = r { return badgeLedger } + throw r.unexpected +} + func apiAckBadgeAlert(_ userId: Int64, _ badgePurchaseId: Int64, _ alertKind: BadgeAlertKind, snooze: Bool, episode: String) async throws -> BadgeState? { let r: ChatResponse2 = try await chatSendCmd(.apiAckBadgeAlert(userId: userId, badgePurchaseId: badgePurchaseId, alertKind: alertKind, snooze: snooze, episode: episode)) if case let .badgeState(_, badgeState) = r { return badgeState } diff --git a/apps/ios/Shared/Views/Badges/BadgesLedgerView.swift b/apps/ios/Shared/Views/Badges/BadgesLedgerView.swift new file mode 100644 index 0000000000..a89bcb1299 --- /dev/null +++ b/apps/ios/Shared/Views/Badges/BadgesLedgerView.swift @@ -0,0 +1,156 @@ +// +// BadgesLedgerView.swift +// SimpleX (iOS) +// +// Created by spaced4ndy on 17.09.2026. +// Copyright © 2026 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +struct BadgesLedgerView: View { + @EnvironmentObject var theme: AppTheme + @EnvironmentObject var chatModel: ChatModel + let badgeState: BadgeState + @State private var entries: [StatementEntry]? = nil + @State private var expanded: Set = [] + + var body: some View { + List { + if let entries { + Section { + if entries.isEmpty { + Text("No entries") + .foregroundColor(theme.colors.secondary) + } else { + ForEach(entries, id: \.entryId) { entry in + ledgerRow(entry) + } + } + } + } + } + .navigationTitle("Badge ledger") + .navigationBarTitleDisplayMode(.inline) + .modifier(ThemedBackground(grouped: true)) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button { showShareSheet(items: [ledgerShareText()]) } label: { + Image(systemName: "square.and.arrow.up") + } + .disabled(entries?.isEmpty ?? true) + } + } + .onAppear(perform: loadLedger) + } + + @ViewBuilder private func ledgerRow(_ entry: StatementEntry) -> some View { + let isExpanded = expanded.contains(entry.entryId) + Button { + withAnimation { + if isExpanded { expanded.remove(entry.entryId) } else { expanded.insert(entry.entryId) } + } + } label: { + HStack { + VStack(alignment: .leading, spacing: 4) { + Text(entry.entryType.text) + Text(dateText(entry.createdAt)) + .font(.caption) + .foregroundColor(theme.colors.secondary) + } + Spacer() + Text(changeText(entry)) + .foregroundStyle(.secondary) + Image(systemName: isExpanded ? "chevron.up" : "chevron.down") + .foregroundColor(theme.colors.secondary) + } + } + .foregroundColor(theme.colors.onBackground) + if isExpanded { + ForEach(entryFields(entry), id: \.0) { field in + infoRow(Text(field.0), field.1).padding(.leading, 24) + } + } + } + + private func changeText(_ entry: StatementEntry) -> String { + let n = entry.changeMonths + let months = abs(n) == 1 + ? String.localizedStringWithFormat(NSLocalizedString("%d month", comment: "time interval"), n) + : String.localizedStringWithFormat(NSLocalizedString("%d months", comment: "time interval"), n) + return n > 0 ? "+" + months : months + } + + private func entryFields(_ entry: StatementEntry) -> [(String, String)] { + var fields = [ + (NSLocalizedString("Date", comment: "ledger entry field"), dateTimeText(entry.createdAt)), + (NSLocalizedString("Balance", comment: "ledger entry field"), "\(entry.balanceMonths)"), + (NSLocalizedString("Balance start", comment: "ledger entry field"), dateTimeText(entry.balanceStartTs)), + (NSLocalizedString("Anchor", comment: "ledger entry field"), dateTimeText(entry.balanceAnchorTs)), + (NSLocalizedString("Badge type", comment: "ledger entry field"), entry.balanceBadgeType.text) + ] + if let pausedSince = entry.wasPausedSince { + fields.append((NSLocalizedString("Paused since", comment: "ledger entry field"), dateTimeText(pausedSince))) + } + fields.append((NSLocalizedString("Entry ID", comment: "ledger entry field"), entry.entryId)) + if let payload = payloadField(entry.entryType) { + fields.append(payload) + } + return fields + } + + private func payloadField(_ entryType: StatementEntryType) -> (String, String)? { + switch entryType { + case let .credit(credit): + switch credit { + case let .payment(invoiceId): + return invoiceId.map { (NSLocalizedString("Invoice ID", comment: "ledger entry field"), $0) } + case let .charge(chargeId): + return (NSLocalizedString("Charge ID", comment: "ledger entry field"), chargeId) + case let .transferIn(fromPurchaseKey): + return (NSLocalizedString("From purchase key", comment: "ledger entry field"), fromPurchaseKey) + case .code, .support, .opening, .unknown: + return nil + } + case let .debit(debit): + switch debit { + case let .upgrade(toPurchaseKey), let .transferOut(toPurchaseKey): + return (NSLocalizedString("To purchase key", comment: "ledger entry field"), toPurchaseKey) + case .refund, .support, .badge, .lapse, .unknown: + return nil + } + } + } + + // the JSON as core sent it: English field names and ISO dates, for support + private func ledgerShareText() -> String { + let encoder = getJSONEncoder() + encoder.outputFormatting = .prettyPrinted + let data = (try? encoder.encode(entries ?? [])) ?? Data() + return String(decoding: data, as: UTF8.self) + } + + private func dateText(_ date: Date) -> String { + DateFormatter.localizedString(from: date, dateStyle: .medium, timeStyle: .none) + } + + private func dateTimeText(_ date: Date) -> String { + DateFormatter.localizedString(from: date, dateStyle: .medium, timeStyle: .short) + } + + private func loadLedger() { + guard let user = chatModel.currentUser else { return } + Task { + do { + let ledger = try await apiGetBadgeLedger(user.userId, badgeState.badgePurchaseId) + await MainActor.run { entries = ledger } + } catch let e { + logger.error("apiGetBadgeLedger error: \(responseError(e))") + await MainActor.run { + showErrorAlert(e, NSLocalizedString("Error", comment: "")) + } + } + } + } +} diff --git a/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift b/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift index 07b6d7a3dc..59eeba7eac 100644 --- a/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift @@ -11,6 +11,8 @@ import SimpleXChat struct BadgesYourBadgeView: View { @EnvironmentObject var theme: AppTheme + @EnvironmentObject var chatModel: ChatModel + @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false let badgeState: BadgeState var showsAsSheet: Bool = false @@ -50,6 +52,24 @@ struct BadgesYourBadgeView: View { } } } + if developerTools { + Section(header: Text("Credential").foregroundColor(theme.colors.secondary)) { + if let badge = chatModel.currentUser?.profile.localBadge { + infoRow("Status", badge.status.rawValue) + infoRow("Expires", DateFormatter.localizedString(from: badge.badge.badgeExpiry, dateStyle: .medium, timeStyle: .short)) + } + infoRow("Months left", "\(badgeState.monthsLeft)") + infoRow("Purchase ID", "\(badgeState.badgePurchaseId)") + Button("Copy purchase key") { + UIPasteboard.general.string = badgeState.purchaseKey + } + NavigationLink { + BadgesLedgerView(badgeState: badgeState) + } label: { + Text("Badge ledger") + } + } + } } } .frame(maxHeight: .infinity) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 9d16c5c1f4..505552647b 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -155,6 +155,7 @@ 6442E0BE2880182D00CEC0F9 /* GroupChatInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6442E0BD2880182D00CEC0F9 /* GroupChatInfoView.swift */; }; 64466DCC29FFE3E800E3D48D /* MailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64466DCB29FFE3E800E3D48D /* MailView.swift */; }; 6448BBB628FA9D56000D2AB9 /* GroupLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6448BBB528FA9D56000D2AB9 /* GroupLinkView.swift */; }; + 644CC229305BFAE400D2A571 /* BadgesLedgerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644CC228305BFAE400D2A571 /* BadgesLedgerView.swift */; }; 644EFFDE292BCD9D00525D5B /* ComposeVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFDD292BCD9D00525D5B /* ComposeVoiceView.swift */; }; 644EFFE0292CFD7F00525D5B /* CIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */; }; 644EFFE2292D089800525D5B /* FramedCIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */; }; @@ -545,6 +546,7 @@ 6442E0BD2880182D00CEC0F9 /* GroupChatInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupChatInfoView.swift; sourceTree = ""; }; 64466DCB29FFE3E800E3D48D /* MailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailView.swift; sourceTree = ""; }; 6448BBB528FA9D56000D2AB9 /* GroupLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupLinkView.swift; sourceTree = ""; }; + 644CC228305BFAE400D2A571 /* BadgesLedgerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgesLedgerView.swift; sourceTree = ""; }; 644EFFDD292BCD9D00525D5B /* ComposeVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeVoiceView.swift; sourceTree = ""; }; 644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIVoiceView.swift; sourceTree = ""; }; 644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FramedCIVoiceView.swift; sourceTree = ""; }; @@ -1212,6 +1214,7 @@ 64C03BF8302F423300072BDE /* Badges */ = { isa = PBXGroup; children = ( + 644CC228305BFAE400D2A571 /* BadgesLedgerView.swift */, 64EB8A9A3054347A0089FFDF /* BadgesView.swift */, 64C03BF0302F423300072BDE /* BadgesHowItWorksView.swift */, 64C03BF1302F423300072BDE /* BadgesPayView.swift */, @@ -1577,6 +1580,7 @@ 5CB0BA9A2827FD8800B3292C /* HowItWorks.swift in Sources */, 5C13730B28156D2700F43030 /* ContactConnectionView.swift in Sources */, 644EFFE0292CFD7F00525D5B /* CIVoiceView.swift in Sources */, + 644CC229305BFAE400D2A571 /* BadgesLedgerView.swift in Sources */, 647B15EA2F4C8D5100EB431E /* ChatRelayView.swift in Sources */, 6432857C2925443C00FBE5C8 /* GroupPreferencesView.swift in Sources */, 8CC317462D4FEBA800292A20 /* ScrollViewCells.swift in Sources */, diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index c6e3bd5d74..ae3c8d662b 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -326,6 +326,7 @@ public struct LocalBadge: Codable, Hashable { // which outlives entitlement so the credential's window can cover a renewal. public struct BadgeState: Codable, Hashable { public var badgePurchaseId: Int64 + public var purchaseKey: String public var badgeType: BadgeType public var shown: Bool public var monthsLeft: Int @@ -337,6 +338,163 @@ public struct BadgeState: Codable, Hashable { public var paidThroughText: String { badgeDateText(paidThrough) } } +public struct StatementEntry: Codable, Hashable { + public var entryId: String + public var changeMonths: Int + public var balanceMonths: Int + public var balanceStartTs: Date + public var balanceAnchorTs: Date + public var balanceBadgeType: BadgeType + public var wasPausedSince: Date? + public var createdAt: Date + public var entryType: StatementEntryType +} + +public enum StatementEntryType: Codable, Hashable { + case credit(StatementCreditType) + case debit(StatementDebitType) + + enum CodingKeys: String, CodingKey { + case type + case credit + case debit + } + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let type = try container.decode(String.self, forKey: .type) + switch type { + case "credit": self = .credit(try container.decode(StatementCreditType.self, forKey: .credit)) + case "debit": self = .debit(try container.decode(StatementDebitType.self, forKey: .debit)) + default: throw DecodingError.dataCorruptedError(forKey: .type, in: container, debugDescription: "unknown entry type \(type)") + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .credit(c): + try container.encode("credit", forKey: .type) + try container.encode(c, forKey: .credit) + case let .debit(d): + try container.encode("debit", forKey: .type) + try container.encode(d, forKey: .debit) + } + } + + public var text: String { + switch self { + case let .credit(c): c.text + case let .debit(d): d.text + } + } +} + +// the service is deployed ahead of clients, so a type this version does not know keeps its tag +public enum StatementCreditType: Codable, Hashable { + case payment(invoiceId: String?) + case code + case charge(chargeId: String) + case support + case transferIn(fromPurchaseKey: String) + case opening + case unknown(type: String) + + enum CodingKeys: String, CodingKey { + case type + case invoiceId + case chargeId + case fromPurchaseKey + } + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let type = try container.decode(String.self, forKey: .type) + switch type { + case "payment": self = .payment(invoiceId: try container.decodeIfPresent(String.self, forKey: .invoiceId)) + case "code": self = .code + case "charge": self = .charge(chargeId: try container.decode(String.self, forKey: .chargeId)) + case "support": self = .support + case "transferIn": self = .transferIn(fromPurchaseKey: try container.decode(String.self, forKey: .fromPurchaseKey)) + case "opening": self = .opening + default: self = .unknown(type: type) + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(text, forKey: .type) + switch self { + case let .payment(invoiceId): try container.encodeIfPresent(invoiceId, forKey: .invoiceId) + case let .charge(chargeId): try container.encode(chargeId, forKey: .chargeId) + case let .transferIn(fromPurchaseKey): try container.encode(fromPurchaseKey, forKey: .fromPurchaseKey) + case .code, .support, .opening, .unknown: () + } + } + + public var text: String { + switch self { + case .payment: "payment" + case .code: "code" + case .charge: "charge" + case .support: "support" + case .transferIn: "transferIn" + case .opening: "opening" + case let .unknown(type): type + } + } +} + +public enum StatementDebitType: Codable, Hashable { + case refund + case upgrade(toPurchaseKey: String) + case transferOut(toPurchaseKey: String) + case support + case badge + case lapse + case unknown(type: String) + + enum CodingKeys: String, CodingKey { + case type + case toPurchaseKey + } + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let type = try container.decode(String.self, forKey: .type) + switch type { + case "refund": self = .refund + case "upgrade": self = .upgrade(toPurchaseKey: try container.decode(String.self, forKey: .toPurchaseKey)) + case "transferOut": self = .transferOut(toPurchaseKey: try container.decode(String.self, forKey: .toPurchaseKey)) + case "support": self = .support + case "badge": self = .badge + case "lapse": self = .lapse + default: self = .unknown(type: type) + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(text, forKey: .type) + switch self { + case let .upgrade(toPurchaseKey), let .transferOut(toPurchaseKey): try container.encode(toPurchaseKey, forKey: .toPurchaseKey) + case .refund, .support, .badge, .lapse, .unknown: () + } + } + + public var text: String { + switch self { + case .refund: "refund" + case .upgrade: "upgrade" + case .transferOut: "transferOut" + case .support: "support" + case .badge: "badge" + case .lapse: "lapse" + case let .unknown(type): type + } + } +} + public struct BadgeAlert: Codable, Hashable { public var kind: BadgeAlertKind public var episode: String diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index b5c0f23c60..5bbb41e4dd 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -2225,6 +2225,7 @@ data class LocalBadge( @Serializable data class BadgeState( val badgePurchaseId: Long, + val purchaseKey: String, val badgeType: BadgeType, val shown: Boolean, val monthsLeft: Int, @@ -2236,6 +2237,137 @@ data class BadgeState( val paidThroughText: String get() = badgeDateText(paidThrough) } +@Serializable +data class StatementEntry( + val entryId: String, + val changeMonths: Int, + val balanceMonths: Int, + val balanceStartTs: Instant, + val balanceAnchorTs: Instant, + val balanceBadgeType: BadgeType, + val wasPausedSince: Instant? = null, + val createdAt: Instant, + val entryType: StatementEntryType +) + +@Serializable +sealed class StatementEntryType { + @Serializable @SerialName("credit") data class Credit(val credit: StatementCreditType): StatementEntryType() + @Serializable @SerialName("debit") data class Debit(val debit: StatementDebitType): StatementEntryType() + + val text: String + get() = when (this) { + is Credit -> credit.text + is Debit -> debit.text + } +} + +// the service is deployed ahead of clients, so a type this version does not know keeps its tag +@Serializable(with = StatementCreditTypeSerializer::class) +sealed class StatementCreditType { + @Serializable data class Payment(val invoiceId: String? = null): StatementCreditType() + object Code: StatementCreditType() + @Serializable data class Charge(val chargeId: String): StatementCreditType() + object Support: StatementCreditType() + @Serializable data class TransferIn(val fromPurchaseKey: String): StatementCreditType() + object Opening: StatementCreditType() + data class Unknown(val type: String): StatementCreditType() + + val text: String + get() = when (this) { + is Payment -> "payment" + is Code -> "code" + is Charge -> "charge" + is Support -> "support" + is TransferIn -> "transferIn" + is Opening -> "opening" + is Unknown -> type + } +} + +object StatementCreditTypeSerializer : KSerializer { + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("StatementCreditType") + + override fun deserialize(decoder: Decoder): StatementCreditType { + require(decoder is JsonDecoder) + val json = decoder.decodeJsonElement().jsonObject + return when (val type = json["type"]?.jsonPrimitive?.content ?: "") { + "payment" -> decoder.json.decodeFromJsonElement(json) + "code" -> StatementCreditType.Code + "charge" -> decoder.json.decodeFromJsonElement(json) + "support" -> StatementCreditType.Support + "transferIn" -> decoder.json.decodeFromJsonElement(json) + "opening" -> StatementCreditType.Opening + else -> StatementCreditType.Unknown(type) + } + } + + override fun serialize(encoder: Encoder, value: StatementCreditType) { + require(encoder is JsonEncoder) + encoder.encodeJsonElement(buildJsonObject { + put("type", value.text) + when (value) { + is StatementCreditType.Payment -> value.invoiceId?.let { put("invoiceId", it) } + is StatementCreditType.Charge -> put("chargeId", value.chargeId) + is StatementCreditType.TransferIn -> put("fromPurchaseKey", value.fromPurchaseKey) + is StatementCreditType.Code, is StatementCreditType.Support, is StatementCreditType.Opening, is StatementCreditType.Unknown -> {} + } + }) + } +} + +@Serializable(with = StatementDebitTypeSerializer::class) +sealed class StatementDebitType { + object Refund: StatementDebitType() + @Serializable data class Upgrade(val toPurchaseKey: String): StatementDebitType() + @Serializable data class TransferOut(val toPurchaseKey: String): StatementDebitType() + object Support: StatementDebitType() + object Badge: StatementDebitType() + object Lapse: StatementDebitType() + data class Unknown(val type: String): StatementDebitType() + + val text: String + get() = when (this) { + is Refund -> "refund" + is Upgrade -> "upgrade" + is TransferOut -> "transferOut" + is Support -> "support" + is Badge -> "badge" + is Lapse -> "lapse" + is Unknown -> type + } +} + +object StatementDebitTypeSerializer : KSerializer { + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("StatementDebitType") + + override fun deserialize(decoder: Decoder): StatementDebitType { + require(decoder is JsonDecoder) + val json = decoder.decodeJsonElement().jsonObject + return when (val type = json["type"]?.jsonPrimitive?.content ?: "") { + "refund" -> StatementDebitType.Refund + "upgrade" -> decoder.json.decodeFromJsonElement(json) + "transferOut" -> decoder.json.decodeFromJsonElement(json) + "support" -> StatementDebitType.Support + "badge" -> StatementDebitType.Badge + "lapse" -> StatementDebitType.Lapse + else -> StatementDebitType.Unknown(type) + } + } + + override fun serialize(encoder: Encoder, value: StatementDebitType) { + require(encoder is JsonEncoder) + encoder.encodeJsonElement(buildJsonObject { + put("type", value.text) + when (value) { + is StatementDebitType.Upgrade -> put("toPurchaseKey", value.toPurchaseKey) + is StatementDebitType.TransferOut -> put("toPurchaseKey", value.toPurchaseKey) + is StatementDebitType.Refund, is StatementDebitType.Support, is StatementDebitType.Badge, is StatementDebitType.Lapse, is StatementDebitType.Unknown -> {} + } + }) + } +} + @Serializable data class BadgeAlert( val kind: BadgeAlertKind, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 8b4e4fc315..966a931208 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -606,6 +606,12 @@ object ChatController { throw Exception("apiGetBadgeState: unexpected ${r.responseType}") } + suspend fun apiGetBadgeLedger(rh: Long?, userId: Long, badgePurchaseId: Long): List { + val r = sendCmd(rh, CC.ApiGetBadgeLedger(userId, badgePurchaseId)) + if (r is API.Result && r.res is CR.BadgeLedger) return r.res.badgeLedger + throw Exception("apiGetBadgeLedger: unexpected ${r.responseType}") + } + suspend fun apiAckBadgeAlert(rh: Long?, userId: Long, badgePurchaseId: Long, alertKind: BadgeAlertKind, snooze: Boolean, episode: String): BadgeState? { val r = sendCmd(rh, CC.ApiAckBadgeAlert(userId, badgePurchaseId, alertKind, snooze, episode)) if (r is API.Result && r.res is CR.BadgeStateR) return r.res.badgeState @@ -4057,6 +4063,7 @@ sealed class CC { // badges class ApiRedeemBadgeCode(val userId: Long, val code: String): CC() class ApiGetBadgeState(val userId: Long): CC() + class ApiGetBadgeLedger(val userId: Long, val badgePurchaseId: Long): CC() class ApiAckBadgeAlert(val userId: Long, val badgePurchaseId: Long, val alertKind: BadgeAlertKind, val snooze: Boolean, val episode: String): CC() // misc class ShowVersion(): CC() @@ -4281,6 +4288,7 @@ sealed class CC { is ApiStandaloneFileInfo -> "/_download info $url" is ApiRedeemBadgeCode -> "/_redeem_badge_code $userId $code" is ApiGetBadgeState -> "/_badge state $userId" + is ApiGetBadgeLedger -> "/_badge ledger $userId $badgePurchaseId" is ApiAckBadgeAlert -> "/_badge ack $userId $badgePurchaseId ${badgeAlertKindParam(alertKind)} ${onOff(snooze)} $episode" is ShowVersion -> "/version" is ResetAgentServersStats -> "/reset servers stats" @@ -4464,6 +4472,7 @@ sealed class CC { is ApiStandaloneFileInfo -> "apiStandaloneFileInfo" is ApiRedeemBadgeCode -> "apiRedeemBadgeCode" is ApiGetBadgeState -> "apiGetBadgeState" + is ApiGetBadgeLedger -> "apiGetBadgeLedger" is ApiAckBadgeAlert -> "apiAckBadgeAlert" is ShowVersion -> "showVersion" is ResetAgentServersStats -> "resetAgentServersStats" @@ -6854,6 +6863,7 @@ sealed class CR { // the full user, not UserRef: its profile carries the badge that setUserBadge just stored @Serializable @SerialName("badgeRedeemed") class BadgeRedeemed(val user: User, val redeemedBadge: LocalBadge, val newBadge: Boolean, val badgeState: BadgeState?): CR() @Serializable @SerialName("badgeState") class BadgeStateR(val user: UserRef, val badgeState: BadgeState?): CR() + @Serializable @SerialName("badgeLedger") class BadgeLedger(val user: UserRef, val badgeLedger: List): CR() @Serializable @SerialName("badgeChanged") class BadgeChanged(val user: User, val badgeState: BadgeState?): CR() @Serializable @SerialName("badgeAlert") class BadgeAlertR(val user: UserRef, val badgeAlert: BadgeAlert): CR() // general @@ -7044,6 +7054,7 @@ sealed class CR { is AppSettingsR -> "appSettings" is BadgeRedeemed -> "badgeRedeemed" is BadgeStateR -> "badgeState" + is BadgeLedger -> "badgeLedger" is BadgeChanged -> "badgeChanged" is BadgeAlertR -> "badgeAlert" is Response -> "* $type" @@ -7251,6 +7262,7 @@ sealed class CR { is AppSettingsR -> json.encodeToString(appSettings) is BadgeRedeemed -> withUser(user, "redeemedBadge: ${json.encodeToString(redeemedBadge)}\nnewBadge: $newBadge\nbadgeState: ${json.encodeToString(badgeState)}") is BadgeStateR -> withUser(user, json.encodeToString(badgeState)) + is BadgeLedger -> withUser(user, json.encodeToString(badgeLedger)) is BadgeChanged -> withUser(user, json.encodeToString(badgeState)) is BadgeAlertR -> withUser(user, json.encodeToString(badgeAlert)) is Response -> json diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt new file mode 100644 index 0000000000..2783727621 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt @@ -0,0 +1,158 @@ +package chat.simplex.common.views.badges + +import InfoRow +import SectionBottomSpacer +import SectionItemView +import SectionView +import itemHPadding +import androidx.compose.foundation.layout.* +import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import dev.icerock.moko.resources.compose.painterResource +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.encodeToString +import chat.simplex.common.model.BadgeState +import chat.simplex.common.model.StatementCreditType +import chat.simplex.common.model.StatementDebitType +import chat.simplex.common.model.StatementEntry +import chat.simplex.common.model.StatementEntryType +import chat.simplex.common.model.json +import chat.simplex.common.model.localDate +import chat.simplex.common.model.localTimestamp +import chat.simplex.common.platform.ColumnWithScrollBar +import chat.simplex.common.platform.Log +import chat.simplex.common.platform.TAG +import chat.simplex.common.platform.chatModel +import chat.simplex.common.platform.shareText +import chat.simplex.common.views.helpers.AlertManager +import chat.simplex.common.views.helpers.AppBarTitle +import chat.simplex.common.views.helpers.ModalView +import chat.simplex.common.views.helpers.ShareButton +import chat.simplex.common.views.helpers.generalGetString +import chat.simplex.common.views.helpers.withBGApi +import chat.simplex.res.MR +import kotlin.math.abs + +@Composable +fun BadgesLedgerView(badgeState: BadgeState, close: () -> Unit) { + val entries = remember { mutableStateOf?>(null) } + val clipboard = LocalClipboardManager.current + + LaunchedEffect(Unit) { + val user = chatModel.currentUser.value ?: return@LaunchedEffect + withBGApi { + try { + val ledger = chatModel.controller.apiGetBadgeLedger(chatModel.remoteHostId(), user.userId, badgeState.badgePurchaseId) + withContext(Dispatchers.Main) { entries.value = ledger } + } catch (e: Exception) { + Log.e(TAG, "apiGetBadgeLedger: ${e.message}") + AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error), e.message) + } + } + } + + ModalView( + close, + cardScreen = true, + endButtons = { + val loaded = entries.value + if (!loaded.isNullOrEmpty()) { + ShareButton { clipboard.shareText(ledgerShareText(loaded)) } + } + } + ) { + ColumnWithScrollBar { + AppBarTitle(stringResource(MR.strings.badges_ledger)) + val loaded = entries.value + if (loaded != null) { + SectionView { + if (loaded.isEmpty()) { + SectionItemView { + Text(stringResource(MR.strings.badges_ledger_no_entries), color = MaterialTheme.colors.secondary) + } + } else { + loaded.forEach { LedgerRow(it) } + } + } + } + SectionBottomSpacer() + } + } +} + +@Composable +private fun LedgerRow(entry: StatementEntry) { + val expanded = remember(entry.entryId) { mutableStateOf(false) } + SectionItemView(click = { expanded.value = !expanded.value }) { + Row( + Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text(entry.entryType.text) + Text(localDate(entry.createdAt), color = MaterialTheme.colors.secondary, fontSize = 12.sp) + } + Text(changeText(entry), color = MaterialTheme.colors.secondary) + Icon( + painterResource(if (expanded.value) MR.images.ic_chevron_up else MR.images.ic_chevron_down), + contentDescription = null, + tint = MaterialTheme.colors.secondary, + modifier = Modifier.size(20.dp) + ) + } + } + if (expanded.value) { + val indented = PaddingValues(start = 24.dp + itemHPadding, end = itemHPadding) + entryFields(entry).forEach { (label, value) -> InfoRow(label, value, padding = indented) } + } +} + +private fun changeText(entry: StatementEntry): String { + val n = entry.changeMonths + val months = String.format(generalGetString(if (abs(n) == 1) MR.strings.ttl_month else MR.strings.ttl_months), n) + return if (n > 0) "+$months" else months +} + +private fun entryFields(entry: StatementEntry): List> { + val fields = mutableListOf( + generalGetString(MR.strings.badges_ledger_date) to localTimestamp(entry.createdAt), + generalGetString(MR.strings.badges_ledger_balance) to entry.balanceMonths.toString(), + generalGetString(MR.strings.badges_ledger_balance_start) to localTimestamp(entry.balanceStartTs), + generalGetString(MR.strings.badges_ledger_anchor) to localTimestamp(entry.balanceAnchorTs), + generalGetString(MR.strings.badges_ledger_badge_type) to entry.balanceBadgeType.text, + ) + val pausedSince = entry.wasPausedSince + if (pausedSince != null) { + fields.add(generalGetString(MR.strings.badges_ledger_paused_since) to localTimestamp(pausedSince)) + } + fields.add(generalGetString(MR.strings.badges_ledger_entry_id) to entry.entryId) + payloadField(entry.entryType)?.let { fields.add(it) } + return fields +} + +private fun payloadField(entryType: StatementEntryType): Pair? = when (entryType) { + is StatementEntryType.Credit -> when (val credit = entryType.credit) { + is StatementCreditType.Payment -> credit.invoiceId?.let { generalGetString(MR.strings.badges_ledger_invoice_id) to it } + is StatementCreditType.Charge -> generalGetString(MR.strings.badges_ledger_charge_id) to credit.chargeId + is StatementCreditType.TransferIn -> generalGetString(MR.strings.badges_ledger_from_purchase_key) to credit.fromPurchaseKey + is StatementCreditType.Code, is StatementCreditType.Support, is StatementCreditType.Opening, is StatementCreditType.Unknown -> null + } + is StatementEntryType.Debit -> when (val debit = entryType.debit) { + is StatementDebitType.Upgrade -> generalGetString(MR.strings.badges_ledger_to_purchase_key) to debit.toPurchaseKey + is StatementDebitType.TransferOut -> generalGetString(MR.strings.badges_ledger_to_purchase_key) to debit.toPurchaseKey + is StatementDebitType.Refund, is StatementDebitType.Support, is StatementDebitType.Badge, is StatementDebitType.Lapse, is StatementDebitType.Unknown -> null + } +} + +// the JSON as core sent it: English field names and ISO dates, for support +private fun ledgerShareText(entries: List): String = json.encodeToString(entries) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt index c17559d5b0..035eb64846 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt @@ -1,5 +1,7 @@ package chat.simplex.common.views.badges +import InfoRow +import SectionItemView import SectionSpacer import SectionTextFooter import SectionView @@ -11,12 +13,17 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.model.BadgeState +import chat.simplex.common.model.ChatController.appPrefs +import chat.simplex.common.model.localTimestamp import chat.simplex.common.platform.ColumnWithScrollBar +import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.helpers.AppBarTitle import chat.simplex.common.views.helpers.ModalManager @@ -47,6 +54,25 @@ fun BadgesYourBadgeView(badgeState: BadgeState) { ) } SectionSpacer() + if (appPrefs.developerTools.get()) { + val clipboard = LocalClipboardManager.current + SectionView(stringResource(MR.strings.badges_credential)) { + val badge = chatModel.currentUser.value?.profile?.localBadge + if (badge != null) { + InfoRow(stringResource(MR.strings.badges_credential_status), badge.status.name) + InfoRow(stringResource(MR.strings.badges_credential_expires), localTimestamp(badge.badge.badgeExpiry)) + } + InfoRow(stringResource(MR.strings.badges_credential_months_left), badgeState.monthsLeft.toString()) + InfoRow(stringResource(MR.strings.badges_credential_purchase_id), badgeState.badgePurchaseId.toString()) + SectionItemView({ clipboard.setText(AnnotatedString(badgeState.purchaseKey)) }) { + Text(stringResource(MR.strings.badges_copy_purchase_key), color = MaterialTheme.colors.primary) + } + SectionItemView({ ModalManager.start.showCustomModal { close -> BadgesLedgerView(badgeState, close) } }) { + Text(stringResource(MR.strings.badges_ledger)) + } + } + SectionSpacer() + } } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index f2f6555b78..e310834fda 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -3205,6 +3205,25 @@ Your support ended on %1$s. Remind me later Dismiss + Credential + Status + Expires + Months left + Purchase ID + Copy purchase key + Badge ledger + No entries + Date + Balance + Balance start + Anchor + Badge type + Paused since + Entry ID + Invoice ID + Charge ID + From purchase key + To purchase key Supporter perks Supporter badge ❤️ Help keep the network running — send files up to 2 GB. diff --git a/bots/src/API/Docs/Commands.hs b/bots/src/API/Docs/Commands.hs index c389605f31..eb4804fa45 100644 --- a/bots/src/API/Docs/Commands.hs +++ b/bots/src/API/Docs/Commands.hs @@ -378,6 +378,7 @@ undocumentedCommands = "APIExportArchive", "APIForwardChatItems", "APIGetAppSettings", + "APIGetBadgeLedger", "APIGetBadgeState", "APIGetCallInvitations", "APIGetChat", diff --git a/bots/src/API/Docs/Responses.hs b/bots/src/API/Docs/Responses.hs index 5d01c03a39..18392ae1b5 100644 --- a/bots/src/API/Docs/Responses.hs +++ b/bots/src/API/Docs/Responses.hs @@ -134,6 +134,7 @@ undocumentedResponses = "CRAppSettings", "CRArchiveExported", "CRArchiveImported", + "CRBadgeLedger", "CRBadgeRedeemed", "CRBadgeState", "CRBroadcastSent", diff --git a/src/Simplex/Chat/Badges/Types.hs b/src/Simplex/Chat/Badges/Types.hs index 4c81cb50ac..cc205458c7 100644 --- a/src/Simplex/Chat/Badges/Types.hs +++ b/src/Simplex/Chat/Badges/Types.hs @@ -215,10 +215,11 @@ data BadgeAlertPrice = BadgeAlertPrice } deriving (Show) --- | The user's badge as the badge surfaces render it. The purchase keys are deliberately absent: --- this travels to the UI and over remote control, and they are secrets that stay in core. +-- | The user's badge as the badge surfaces render it. The private purchase key is deliberately +-- absent: this travels to the UI and over remote control, and it is a secret that stays in core. data BadgeState = BadgeState { badgePurchaseId :: Int64, + purchaseKey :: C.PublicKeyEd25519, -- the purchase's identifier on the service badgeType :: BadgeType, shown :: BoolDef, monthsLeft :: Int, diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 6206e8ae50..a5f46faee2 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -84,7 +84,7 @@ import qualified Simplex.Messaging.Agent.Store.DB as DB import Simplex.Messaging.Client (HostMode (..), SMPProxyFallback (..), SMPProxyMode (..), SMPWebPortServers (..), SocksMode (..)) import qualified Simplex.Messaging.Crypto as C import Simplex.Chat.Badges (BadgeCredential, FileSizeLimits, LocalBadge) -import Simplex.Chat.Badges.Service (BadgeServiceErrorCode) +import Simplex.Chat.Badges.Service (BadgeServiceErrorCode, StatementEntry) import Simplex.Chat.Badges.Types (BadgeAlert (..), BadgeAlertKind, BadgeState (..)) import Simplex.Messaging.Crypto.BBS (BBSPublicKey) import Simplex.Messaging.Crypto.File (CryptoFile (..)) @@ -660,6 +660,7 @@ data ChatCommand | AddBadge BadgeCredential -- attach an issued badge credential (testing; credential from `simplex-chat badge sign`) | APIRedeemBadgeCode {userId :: UserId, code :: Text} -- redeem a badge code with the configured badge service | APIGetBadgeState {userId :: UserId} -- the user's badges, their balances and any current alert + | APIGetBadgeLedger {userId :: UserId, badgePurchaseId :: Int64} -- the purchase's ledger, oldest first -- episode is last because it is free text: it is the value that makes one occurrence of an -- alert distinct from the next, and the app returns whatever it was given | APIAckBadgeAlert {userId :: UserId, badgePurchaseId :: Int64, alertKind :: BadgeAlertKind, snooze :: Bool, episode :: Text} @@ -869,6 +870,7 @@ data ChatResponse | CRServiceReplyAccepted {user :: User, connectionId :: AgentConnId} | CRBadgeRedeemed {user :: User, redeemedBadge :: LocalBadge, newBadge :: Bool, badgeState :: Maybe BadgeState} | CRBadgeState {user :: User, badgeState :: Maybe BadgeState} + | CRBadgeLedger {user :: User, badgeLedger :: [StatementEntry]} | CRUserAcceptedGroupSent {user :: User, groupInfo :: GroupInfo, hostContact :: Maybe Contact} | CRUserDeletedMembers {user :: User, groupInfo :: GroupInfo, members :: [GroupMember], withMessages :: Bool, msgSigned :: Bool} | CRGroupsList {user :: User, groups :: [GroupInfo]} diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index c3d5624cb1..49df03a6d2 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -3567,6 +3567,8 @@ processChatCommand cxt nm = \case -- the read also signals the worker, whose results follow as CEvtBadgeChanged lift $ startBadgeWork user CRBadgeState user <$> getUserBadgeState user + APIGetBadgeLedger userId badgePurchaseId -> withUserId userId $ \user -> + CRBadgeLedger user <$> withStore' (\db -> getBadgeLedger db user badgePurchaseId) APIAckBadgeAlert userId badgePurchaseId alertKind snooze episode -> withUserId userId $ \user -> do now <- badgeNow let snoozeUntil = if snooze then Just (addUTCTime nominalDay now) else Nothing @@ -5417,9 +5419,10 @@ getUserBadgeState user = do Just p@UserBadgePurchase {badgePurchaseId} -> fmap (badgeStateOf now p) <$> withStore' (`getBadgeLedgerLastEntry` badgePurchaseId) where - badgeStateOf now p@UserBadgePurchase {badgePurchaseId, badgeType, shown} balance = + badgeStateOf now p@UserBadgePurchase {badgePurchaseId, purchaseKey, badgeType, shown} balance = BadgeState { badgePurchaseId, + purchaseKey, badgeType, shown = BoolDef shown, monthsLeft = balanceMonths balance, @@ -6039,6 +6042,7 @@ chatCommandP = "/_service_request " *> (APISendServiceRequest <$> A.decimal <* A.space <*> strP <*> optional (" timeout=" *> (realToFrac <$> A.double)) <*> optional (" sign_key=" *> strP) <* A.space <*> jsonP), "/_redeem_badge_code " *> (APIRedeemBadgeCode <$> A.decimal <* A.space <*> textP), "/_badge state " *> (APIGetBadgeState <$> A.decimal), + "/_badge ledger " *> (APIGetBadgeLedger <$> A.decimal <* A.space <*> A.decimal), "/_badge ack " *> (APIAckBadgeAlert <$> A.decimal <* A.space <*> A.decimal <* A.space <*> badgeAlertKindP <* A.space <*> onOffP <* A.space <*> textP), "/_service_response " *> (APISendServiceResponse <$> A.decimal <* A.space <*> strP <* A.space <*> jsonP), "/_call invite @" *> (APISendCallInvitation <$> A.decimal <* A.space <*> jsonP), diff --git a/src/Simplex/Chat/Store/Badges.hs b/src/Simplex/Chat/Store/Badges.hs index c17bd5f360..d581150df8 100644 --- a/src/Simplex/Chat/Store/Badges.hs +++ b/src/Simplex/Chat/Store/Badges.hs @@ -4,6 +4,7 @@ {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeOperators #-} module Simplex.Chat.Store.Badges ( BadgeCodeRedemption (..), @@ -22,6 +23,7 @@ module Simplex.Chat.Store.Badges getLatestIssuedCredential, storeBadgeStatement, getBadgeLedgerLastEntry, + getBadgeLedger, getBadgeLedgerEntryId, ) where @@ -31,7 +33,7 @@ import Crypto.Random (ChaChaDRG) import qualified Data.Aeson as J import qualified Data.ByteString.Lazy.Char8 as LB import Data.Int (Int64) -import Data.Maybe (isJust) +import Data.Maybe (isJust, mapMaybe) import Data.Text (Text) import Data.Time.Clock (UTCTime) import Simplex.Chat.Badges @@ -306,7 +308,7 @@ storeBadgeStatement db badgePurchaseId badgeType tip entries now = -- | The balance is the last row; nothing derives it by summing the history. getBadgeLedgerLastEntry :: DB.Connection -> Int64 -> IO (Maybe StatementEntry) getBadgeLedgerLastEntry db badgePurchaseId = - maybeFirstRow' Nothing toEntry $ + maybeFirstRow' Nothing toStatementEntry $ DB.query db [sql| @@ -318,10 +320,27 @@ getBadgeLedgerLastEntry db badgePurchaseId = LIMIT 1 |] (Only badgePurchaseId) - where - toEntry ((entryId, changeMonths, balanceMonths, balanceStartTs, balanceAnchorTs, balanceBadgeType) :. (wasPausedSince, createdAt, entryType_, credit_, debit_, value_)) = - (\entryType -> StatementEntry {entryId, changeMonths, balanceMonths, balanceStartTs, balanceAnchorTs, balanceBadgeType, wasPausedSince, createdAt, entryType}) - <$> maybe (entryTypeFromColumns entryType_ credit_ debit_) (entryTypeFromValue entryType_) value_ + +-- | Oldest first. A row whose type this version cannot rebuild is left out, as it is from the tip. +getBadgeLedger :: DB.Connection -> User -> Int64 -> IO [StatementEntry] +getBadgeLedger db User {userId} badgePurchaseId = + mapMaybe toStatementEntry + <$> DB.query + db + [sql| + SELECT l.entry_uuid, l.change_months, l.balance_months, l.balance_start_ts, l.balance_anchor_ts, l.balance_badge_type, + l.was_paused_since, l.service_created_at, l.entry_type, l.entry_credit_type, l.entry_debit_type, l.entry_type_value + FROM badge_ledger l + JOIN badge_purchases p ON p.badge_purchase_id = l.badge_purchase_id + WHERE l.badge_purchase_id = ? AND p.user_id = ? + ORDER BY l.entry_id + |] + (badgePurchaseId, userId) + +toStatementEntry :: (Text, Int, Int, UTCTime, UTCTime, BadgeType) :. (Maybe UTCTime, UTCTime, Text, Maybe Text, Maybe Text, Maybe Text) -> Maybe StatementEntry +toStatementEntry ((entryId, changeMonths, balanceMonths, balanceStartTs, balanceAnchorTs, balanceBadgeType) :. (wasPausedSince, createdAt, entryType_, credit_, debit_, value_)) = + (\entryType -> StatementEntry {entryId, changeMonths, balanceMonths, balanceStartTs, balanceAnchorTs, balanceBadgeType, wasPausedSince, createdAt, entryType}) + <$> maybe (entryTypeFromColumns entryType_ credit_ debit_) (entryTypeFromValue entryType_) value_ -- | Decodes the stored JSON rather than rebuilding from the tag, so a version that has since -- learnt the type reads it with its fields, and one that has not still gets it back verbatim. diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt index 10cf2b93c2..fd518f855e 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt @@ -4024,6 +4024,18 @@ Query: Plan: SCAN group_members +Query: + SELECT l.entry_uuid, l.change_months, l.balance_months, l.balance_start_ts, l.balance_anchor_ts, l.balance_badge_type, + l.was_paused_since, l.service_created_at, l.entry_type, l.entry_credit_type, l.entry_debit_type, l.entry_type_value + FROM badge_ledger l + JOIN badge_purchases p ON p.badge_purchase_id = l.badge_purchase_id + WHERE l.badge_purchase_id = ? AND p.user_id = ? + ORDER BY l.entry_id + +Plan: +SEARCH p USING COVERING INDEX idx_badge_purchases_user (user_id=? AND rowid=?) +SEARCH l USING INDEX idx_badge_ledger_purchase (badge_purchase_id=?) + Query: SELECT m.group_member_id FROM group_members m @@ -7679,6 +7691,10 @@ Query: SELECT sent_inv_queue_info FROM group_members WHERE group_member_id = ? A Plan: SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?) +Query: SELECT service_created_at, balance_start_ts FROM badge_ledger ORDER BY entry_id +Plan: +SCAN badge_ledger + Query: SELECT shared_msg_id FROM chat_items WHERE shared_msg_id IS NOT NULL ORDER BY chat_item_id DESC LIMIT 1 Plan: SCAN chat_items diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 007dc8af0b..66158303f9 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -44,6 +44,8 @@ import Simplex.Chat.Help import Simplex.Chat.Library.Commands (badgeServiceErrorText, maxImageSize) import Simplex.Chat.Markdown import Simplex.Chat.Badges (BadgeInfo (..), BadgeStatus (..), BadgeType (..), LocalBadge, localBadgeInfo, localBadgeStatus) +import Simplex.Chat.Badges.Ledger (creditTypeTag, debitTypeTag) +import Simplex.Chat.Badges.Service (StatementEntry (..), StatementEntryType (..)) import Simplex.Chat.Badges.Types (BadgeAlert (..), BadgeState (..)) import Simplex.Chat.Messages hiding (NewChatItem (..)) import Simplex.Chat.Messages.CIContent @@ -192,6 +194,7 @@ chatResponseToView hu cfg@ChatConfig {logLevel, showReactions, showFullLinks, te -- the badge is only shown when it is the one now on the profile; a replayed code's badge may not be CRBadgeRedeemed u badge newBadge _ -> ttyUser u $ if newBadge then "badge redeemed" : viewContactBadge (Just badge) else ["badge already redeemed"] CRBadgeState u st -> ttyUser u $ viewUserBadgeState st + CRBadgeLedger u entries -> ttyUser u $ viewBadgeLedger entries CRGroupCreated u g -> ttyUser u $ viewGroupCreated g testView CRPublicGroupCreated u g _groupLink _relays -> ttyUser u $ viewGroupCreated g testView CRPublicGroupCreationFailed u results -> ttyUser u $ viewPublicGroupCreationFailed results @@ -1854,6 +1857,17 @@ viewUserBadgeState = maybe [] viewBadge viewBadgeAlert :: BadgeAlert -> [StyledString] viewBadgeAlert BadgeAlert {kind, date} = [plain $ "badge alert: " <> textEncode kind <> " " <> day date] +viewBadgeLedger :: [StatementEntry] -> [StyledString] +viewBadgeLedger [] = ["no ledger entries"] +viewBadgeLedger entries = map viewEntry entries + where + viewEntry StatementEntry {createdAt, entryType, changeMonths, balanceMonths, balanceStartTs} = + plain $ day createdAt <> " " <> entryKind entryType <> " " <> withSign changeMonths <> " -> " <> tshow balanceMonths <> ", from " <> day balanceStartTs + entryKind = \case + SECredit c -> creditTypeTag c + SEDebit d -> debitTypeTag d + withSign n = (if n >= 0 then "+" else "") <> tshow n + day :: UTCTime -> Text day = T.pack . formatTime defaultTimeLocale "%Y-%m-%d" diff --git a/tests/Bots/BadgeServiceTests.hs b/tests/Bots/BadgeServiceTests.hs index 640d0ba533..4897722683 100644 --- a/tests/Bots/BadgeServiceTests.hs +++ b/tests/Bots/BadgeServiceTests.hs @@ -17,7 +17,7 @@ import ChatTests.DBUtils import ChatTests.Utils import Control.Concurrent (forkIO, killThread, threadDelay) import Control.Concurrent.STM (atomically, readTMVar) -import Control.Monad (void, when) +import Control.Monad (forM_, void, when) import Control.Exception (finally) import qualified Data.Aeson as J import qualified Data.ByteString.Char8 as B @@ -32,6 +32,7 @@ import System.Timeout (timeout) import Data.Text (Text) import qualified Data.Text as T import Data.Time.Clock (NominalDiffTime, UTCTime, addUTCTime, diffUTCTime, getCurrentTime, nominalDay) +import Data.Time.Format (defaultTimeLocale, formatTime) import Simplex.Chat.Badges (BadgeCredential (..), BadgeInfo (..), BadgeMasterKey, BadgeType (..), generateMasterKey) import Simplex.Chat.Badges.Code (BadgeCode, badgeCodeText, formatBadgeCode, parseBadgeCode, randomBadgeCode) import Simplex.Chat.Badges.Ledger (addMonths, creditTypeTag, debitTypeTag, endOfMondayAfter) @@ -504,6 +505,12 @@ ledgerRows ChatController {chatStore} table = <> table <> " ORDER BY entry_id" +-- the two dates the CLI prints for each row +ledgerTimes :: ChatController -> IO [(UTCTime, UTCTime)] +ledgerTimes ChatController {chatStore} = + withTransaction chatStore $ \db -> + DB.query_ db "SELECT service_created_at, balance_start_ts FROM badge_ledger ORDER BY entry_id" + -- | The client's verdict on each row, in ledger order. The service has no such column: it computes -- the rows rather than checking what someone else computed. balanceChecks :: ChatController -> IO [Maybe Bool] @@ -539,6 +546,18 @@ testClientReplicatesLedger ps = -- nor a second issuance for the one month issued: the replay names a month already stored expiries <- issuedExpiries (chatController alice) length expiries `shouldBe` 1 + -- the CLI lists the rows oldest first, with the dates they carry + times <- ledgerTimes (chatController alice) + alice ##> "/_badge ledger 1 1" + forM_ (zip times [("code", "+3", "3"), ("badge", "-1", "2")]) $ \((createdAt, from), (kind, change, balance)) -> + alice <## (day createdAt <> " " <> kind <> " " <> change <> " -> " <> balance <> ", from " <> day from) + -- and nothing for a purchase that is another profile's + alice ##> "/create user alisa" + showActiveUser alice "alisa" + alice ##> "/_badge ledger 2 1" + alice <## "no ledger entries" + where + day = formatTime defaultTimeLocale "%Y-%m-%d" -- the balance start of the last row, which is when the next month falls due dueAtOf :: [ReplicatedRow] -> UTCTime From c8466b2010fde031421d72dd7b3ef6db1615ab1b Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 18 Sep 2026 10:18:10 +0100 Subject: [PATCH 04/28] core: refactor groups (#7503) * core: refactor groups * refactor * refactor * refactor * refactor * refactor * rename * refactor * remove * rename * diff * simplify * relay requests * bot types * check useRelays * refactor * query plans --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- .../src/Directory/Service.hs | 24 +- .../src/Directory/Store.hs | 20 +- bots/api/TYPES.md | 37 --- bots/src/API/Docs/Types.hs | 6 - .../types/typescript/src/types.ts | 31 -- .../src/simplex_chat/types/_types.py | 21 -- plans/2026-09-13-group-keys-sum-type.md | 252 ++++++++++++++++ src/Simplex/Chat/Bot/Store.hs | 7 +- src/Simplex/Chat/Controller.hs | 6 +- src/Simplex/Chat/Library/Commands.hs | 269 +++++++++-------- src/Simplex/Chat/Library/Internal.hs | 221 +++++++------- src/Simplex/Chat/Library/Subscriber.hs | 276 +++++++++--------- src/Simplex/Chat/Store/Connections.hs | 22 +- src/Simplex/Chat/Store/ContactRequest.hs | 18 +- src/Simplex/Chat/Store/Direct.hs | 2 +- src/Simplex/Chat/Store/Groups.hs | 117 ++++---- .../SQLite/Migrations/chat_query_plans.txt | 35 ++- src/Simplex/Chat/Store/Shared.hs | 57 +++- src/Simplex/Chat/Types.hs | 54 ++-- src/Simplex/Chat/Web.hs | 6 +- tests/ChatTests/Groups.hs | 55 ++++ tests/ChatTests/Profiles.hs | 14 +- tests/ChatTests/Utils.hs | 6 +- 23 files changed, 916 insertions(+), 640 deletions(-) create mode 100644 plans/2026-09-13-group-keys-sum-type.md diff --git a/apps/simplex-directory-service/src/Directory/Service.hs b/apps/simplex-directory-service/src/Directory/Service.hs index 0e04f154d1..f10cbf44fd 100644 --- a/apps/simplex-directory-service/src/Directory/Service.hs +++ b/apps/simplex-directory-service/src/Directory/Service.hs @@ -566,14 +566,12 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o notifyAdminUsers $ "The group " <> groupReference toGroup <> " is updated" <> byMember <> "." checkRolesSendToApprove gr' n' processProfileChange gr byMember n' = - withDB' "getGroupLink" cc (\db -> runExceptT $ getGroupLink db user toGroup) >>= \case + getGroupAndRegLink cc user groupId >>= \case Left e -> linkReadError $ T.pack e - Right (Left SEGroupLinkNotFound {}) -> profileChange Nothing - Right (Left e) -> linkReadError $ tshow e - Right (Right gLink) -> profileChange $ Just gLink + Right (g, _, gLink_) -> profileChange g gLink_ where linkReadError e = logError $ "Error reading group link for " <> groupReference toGroup <> ": " <> e - profileChange gLink_ + profileChange g gLink_ | not (linkOnlyChange gLink_) = sendForApproval byMember n' | groupRegStatus gr == GRSActive = do notifyOwner gr $ @@ -581,7 +579,7 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o <> "!\nThe group is listed in directory." notifyAdminUsers $ "The group " <> groupReference toGroup <> " is updated" <> byMember <> " - only link or whitespace changes.\nThe group remained listed in directory." forM_ gLink_ $ \gLink -> - updateGroupLinkData cc user toGroup gLink >>= \case + updateGroupLinkData cc user g gLink >>= \case Right _ -> pure () Left e -> logError $ "Error updating group link data for " <> groupReference toGroup <> ": " <> tshow e | otherwise = pure () @@ -1283,7 +1281,7 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o deAdminCommand ct ciId cmd | knownCt `elem` adminUsers || knownCt `elem` superUsers = case cmd of DCApproveGroup {groupId, displayName = n, groupApprovalId, promote} -> - withGroupRegLink sendReply groupId n $ \g gr@GroupReg {userGroupRegId = ugrId, promoted} curLink_ -> + withGroupRegLink sendReply groupId n $ \gik@(GIK g _) gr@GroupReg {userGroupRegId = ugrId, promoted} curLink_ -> case groupRegStatus gr of GRSPendingApproval gaId | gaId == groupApprovalId -> do @@ -1300,7 +1298,7 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o let grPromoted' | promoted || knownCt `elem` superUsers = fromMaybe promoted promote | otherwise = False - gLink_ <- if isPublicGroup_ then pure (Right Nothing) else approvedGroupLink g curLink_ + gLink_ <- if isPublicGroup_ then pure (Right Nothing) else approvedGroupLink gik curLink_ case gLink_ of Left e -> sendReply e Right gLink' -> @@ -1464,14 +1462,14 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o mkSendReply :: Contact -> ChatItemId -> Text -> IO () mkSendReply ct ciId = sendComposedMessage cc ct (Just ciId) . MCText - withGroupRegLink :: (Text -> IO ()) -> GroupId -> GroupName -> (GroupInfo -> GroupReg -> Maybe GroupLink -> IO ()) -> IO () + withGroupRegLink :: (Text -> IO ()) -> GroupId -> GroupName -> (GroupInfoKeys -> GroupReg -> Maybe GroupLink -> IO ()) -> IO () withGroupRegLink sendReply gId = withGroupRegLink_ sendReply gId . Just - withGroupRegLink_ :: (Text -> IO ()) -> GroupId -> Maybe GroupName -> (GroupInfo -> GroupReg -> Maybe GroupLink -> IO ()) -> IO () + withGroupRegLink_ :: (Text -> IO ()) -> GroupId -> Maybe GroupName -> (GroupInfoKeys -> GroupReg -> Maybe GroupLink -> IO ()) -> IO () withGroupRegLink_ sendReply gId gName_ action = getGroupAndRegLink cc user gId >>= \case Left e -> sendReply $ "Group " <> tshow gId <> " error (getGroup): " <> T.pack e - Right (g@GroupInfo {groupProfile = GroupProfile {displayName}}, gr, gLink_) + Right (g@(GIK GroupInfo {groupProfile = GroupProfile {displayName}} _), gr, gLink_) | maybe False (displayName ==) gName_ -> action g gr gLink_ | otherwise -> @@ -1482,7 +1480,7 @@ directoryServiceEvent opts@DirectoryOpts {adminUsers, superUsers, serviceName, o withGroupAndReg_ :: (Text -> IO ()) -> GroupId -> Maybe GroupName -> (GroupInfo -> GroupReg -> IO ()) -> IO () withGroupAndReg_ sendReply gId gName_ action = - withGroupRegLink_ sendReply gId gName_ $ \g gr _ -> action g gr + withGroupRegLink_ sendReply gId gName_ $ \(GIK g _) gr _ -> action g gr getOwnersInfo :: [(GroupInfo, GroupReg)] -> IO [((GroupInfo, GroupReg), Maybe (Either String Contact))] getOwnersInfo gs = @@ -1560,7 +1558,7 @@ getGroupLink' :: ChatController -> User -> GroupInfo -> IO (Either String GroupL getGroupLink' cc user gInfo = withDB "getGroupLink" cc $ \db -> withExceptT groupDBError $ getGroupLink db user gInfo -updateGroupLinkData :: ChatController -> User -> GroupInfo -> GroupLink -> IO (Either ChatError GroupLink) +updateGroupLinkData :: ChatController -> User -> GroupInfoKeys -> GroupLink -> IO (Either ChatError GroupLink) updateGroupLinkData cc user gInfo gLink = runReaderT (runExceptT $ setGroupLinkData NRMBackground user gInfo gLink) cc setGroupLinkRole :: ChatController -> GroupInfo -> GroupMemberRole -> IO (Maybe CreatedLinkContact) diff --git a/apps/simplex-directory-service/src/Directory/Store.hs b/apps/simplex-directory-service/src/Directory/Store.hs index 5594b02bae..98226805bc 100644 --- a/apps/simplex-directory-service/src/Directory/Store.hs +++ b/apps/simplex-directory-service/src/Directory/Store.hs @@ -74,7 +74,7 @@ import Simplex.Chat.Names (claimDomain) import Simplex.Chat.Options.DB (FromField (..), ToField (..)) import Simplex.Chat.Store import Simplex.Chat.Store.Groups -import Simplex.Chat.Store.Shared (groupInfoQueryFields, groupInfoQueryFrom) +import Simplex.Chat.Store.Shared (GroupKeysRow, groupInfoQueryFields, groupInfoQueryFrom, mkGroupKeys, toGroupInfo_) import Simplex.Chat.Types import Simplex.Chat.Types.Shared (GroupMemberRole (..)) import Simplex.Messaging.Agent.Protocol (CreatedConnLink (..), SimplexDomain) @@ -309,12 +309,17 @@ getGroupReg_ db gId = |] (Only gId) -getGroupAndRegLink :: ChatController -> User -> GroupId -> IO (Either String (GroupInfo, GroupReg, Maybe GroupLink)) +getGroupAndRegLink :: ChatController -> User -> GroupId -> IO (Either String (GroupInfoKeys, GroupReg, Maybe GroupLink)) getGroupAndRegLink cc user@User {userId, userContactId} gId = withDB "getGroupAndRegLink" cc $ \db -> do currentTs <- liftIO getCurrentTime - ExceptT $ firstRow (toGroupInfoRegLink currentTs (storeCxt cc) user) ("group " ++ show gId ++ " not found") $ - DB.query db (groupReqQuery <> " AND g.group_id = ?") (userId, userContactId, gId) + (g, gksData, gr, gLink_) <- + ExceptT $ firstRow (toGroupInfoKeysRegLink currentTs cxt user) ("group " ++ show gId ++ " not found") $ + DB.query db (groupReqQuery <> " AND g.group_id = ?") (userId, userContactId, gId) + gks <- withExceptT groupDBError $ mkGroupKeys db cxt g gksData + pure (GIK g gks, gr, gLink_) + where + cxt = storeCxt cc getUserGroupReg :: ChatController -> User -> ContactId -> UserGroupRegId -> IO (Either String (GroupInfo, GroupReg)) getUserGroupReg cc user@User {userId, userContactId} ctId ugrId = @@ -438,7 +443,12 @@ toGroupInfoReg currentTs cxt user row = let (g, gr, _) = toGroupInfoRegLink curr toGroupInfoRegLink :: UTCTime -> StoreCxt -> User -> (GroupInfoRow :. GroupRegRow :. GroupLinkRow) -> (GroupInfo, GroupReg, Maybe GroupLink) toGroupInfoRegLink currentTs cxt User {userContactId} (groupRow :. grRow :. linkRow) = - (toGroupInfo currentTs cxt userContactId [] groupRow, rowToGroupReg grRow, toMaybeGroupLink linkRow) + (toGroupInfo_ currentTs cxt userContactId [] groupRow, rowToGroupReg grRow, toMaybeGroupLink linkRow) + +toGroupInfoKeysRegLink :: UTCTime -> StoreCxt -> User -> (GroupInfoRow :. GroupRegRow :. GroupLinkRow) -> (GroupInfo, GroupKeysRow, GroupReg, Maybe GroupLink) +toGroupInfoKeysRegLink currentTs cxt User {userContactId} (groupRow :. grRow :. linkRow) = + let (g, gksData) = toGroupInfo currentTs cxt userContactId [] groupRow + in (g, gksData, rowToGroupReg grRow, toMaybeGroupLink linkRow) type GroupRegRow = (GroupId, UserGroupRegId, ContactId, Maybe GroupMemberId, GroupRegStatus, BoolInt, UTCTime) diff --git a/bots/api/TYPES.md b/bots/api/TYPES.md index e79f8638ad..14ff04b08c 100644 --- a/bots/api/TYPES.md +++ b/bots/api/TYPES.md @@ -105,7 +105,6 @@ This file is generated automatically. - [GroupFeature](#groupfeature) - [GroupFeatureEnabled](#groupfeatureenabled) - [GroupInfo](#groupinfo) -- [GroupKeys](#groupkeys) - [GroupLink](#grouplink) - [GroupLinkOwner](#grouplinkowner) - [GroupLinkPlan](#grouplinkplan) @@ -120,7 +119,6 @@ This file is generated automatically. - [GroupPreferences](#grouppreferences) - [GroupProfile](#groupprofile) - [GroupRelay](#grouprelay) -- [GroupRootKey](#grouprootkey) - [GroupShortLinkData](#groupshortlinkdata) - [GroupShortLinkInfo](#groupshortlinkinfo) - [GroupSummary](#groupsummary) @@ -163,7 +161,6 @@ This file is generated automatically. - [ProxyError](#proxyerror) - [PublicGroupAccess](#publicgroupaccess) - [PublicGroupData](#publicgroupdata) -- [PublicGroupKeys](#publicgroupkeys) - [PublicGroupProfile](#publicgroupprofile) - [RCErrorType](#rcerrortype) - [RatchetSyncState](#ratchetsyncstate) @@ -2535,19 +2532,9 @@ MemberSupport: - rosterVersion: int64? - membersRequireAttention: int - viaGroupLinkUri: string? -- groupKeys: [GroupKeys](#groupkeys)? - groupDomainVerified: bool? ---- - -## GroupKeys - -**Record type**: -- publicGroupKeys: [PublicGroupKeys](#publicgroupkeys)? -- memberPrivKey: string - - --- ## GroupLink @@ -2769,21 +2756,6 @@ UpdateRequired: - relayCap: [RelayCapabilities](#relaycapabilities) ---- - -## GroupRootKey - -**Discriminated union type**: - -Private: -- type: "private" -- rootPrivKey: string - -Public: -- type: "public" -- rootPubKey: string - - --- ## GroupShortLinkData @@ -3413,15 +3385,6 @@ NO_SESSION: - publicMemberCount: int64 ---- - -## PublicGroupKeys - -**Record type**: -- publicGroupId: string -- groupRootKey: [GroupRootKey](#grouprootkey) - - --- ## PublicGroupProfile diff --git a/bots/src/API/Docs/Types.hs b/bots/src/API/Docs/Types.hs index 70777afa21..58298c44fb 100644 --- a/bots/src/API/Docs/Types.hs +++ b/bots/src/API/Docs/Types.hs @@ -291,8 +291,6 @@ chatTypesDocsData = (sti @GroupFeature, STEnum, "GF", [], "", ""), (sti @GroupFeatureEnabled, STEnum, "FE", [], "", ""), (sti @GroupInfo, STRecord, "", [], "", ""), - (sti @GroupKeys, STRecord, "", [], "", ""), - (sti @GroupRootKey, STUnion, "GRK", [], "", ""), (sti @GroupLink, STRecord, "", [], "", ""), (sti @GroupLinkOwner, STRecord, "", [], "", ""), (sti @GroupLinkPlan, STUnion, "GLP", [], "", ""), @@ -349,7 +347,6 @@ chatTypesDocsData = (sti @ProxyError, STUnion, "", [], "", ""), (sti @PublicGroupAccess, STRecord, "", [], "", ""), (sti @PublicGroupData, STRecord, "", [], "", ""), - (sti @PublicGroupKeys, STRecord, "", [], "", ""), (sti @PublicGroupProfile, STRecord, "", [], "", ""), (sti @RatchetSyncState, STEnum, "RS", [], "", ""), (sti @RCErrorType, STUnion, "RCE", [], "", ""), @@ -527,8 +524,6 @@ deriving instance Generic GroupChatScopeInfo deriving instance Generic GroupFeature deriving instance Generic GroupFeatureEnabled deriving instance Generic GroupInfo -deriving instance Generic GroupKeys -deriving instance Generic GroupRootKey deriving instance Generic GroupLink deriving instance Generic GroupLinkOwner deriving instance Generic GroupLinkPlan @@ -592,7 +587,6 @@ deriving instance Generic ProxyClientError deriving instance Generic ProxyError deriving instance Generic PublicGroupAccess deriving instance Generic PublicGroupData -deriving instance Generic PublicGroupKeys deriving instance Generic PublicGroupProfile deriving instance Generic RatchetSyncState deriving instance Generic RCErrorType diff --git a/packages/simplex-chat-client/types/typescript/src/types.ts b/packages/simplex-chat-client/types/typescript/src/types.ts index 170f5c5504..3bf3fdc831 100644 --- a/packages/simplex-chat-client/types/typescript/src/types.ts +++ b/packages/simplex-chat-client/types/typescript/src/types.ts @@ -2895,15 +2895,9 @@ export interface GroupInfo { rosterVersion?: number // int64 membersRequireAttention: number // int viaGroupLinkUri?: string - groupKeys?: GroupKeys groupDomainVerified?: boolean } -export interface GroupKeys { - publicGroupKeys?: PublicGroupKeys - memberPrivKey: string -} - export interface GroupLink { userContactLinkId: number // int64 connLinkContact: CreatedConnLink @@ -3097,26 +3091,6 @@ export interface GroupRelay { relayCap: RelayCapabilities } -export type GroupRootKey = GroupRootKey.Private | GroupRootKey.Public - -export namespace GroupRootKey { - export type Tag = "private" | "public" - - interface Interface { - type: Tag - } - - export interface Private extends Interface { - type: "private" - rootPrivKey: string - } - - export interface Public extends Interface { - type: "public" - rootPubKey: string - } -} - export interface GroupShortLinkData { groupProfile: GroupProfile publicGroupData?: PublicGroupData @@ -3747,11 +3721,6 @@ export interface PublicGroupData { publicMemberCount: number // int64 } -export interface PublicGroupKeys { - publicGroupId: string - groupRootKey: GroupRootKey -} - export interface PublicGroupProfile { groupType: GroupType groupLink: string diff --git a/packages/simplex-chat-python/src/simplex_chat/types/_types.py b/packages/simplex-chat-python/src/simplex_chat/types/_types.py index 38e0318af1..6a8fd96c87 100644 --- a/packages/simplex-chat-python/src/simplex_chat/types/_types.py +++ b/packages/simplex-chat-python/src/simplex_chat/types/_types.py @@ -2031,13 +2031,8 @@ class GroupInfo(TypedDict): rosterVersion: NotRequired[int] # int64 membersRequireAttention: int # int viaGroupLinkUri: NotRequired[str] - groupKeys: NotRequired["GroupKeys"] groupDomainVerified: NotRequired[bool] -class GroupKeys(TypedDict): - publicGroupKeys: NotRequired["PublicGroupKeys"] - memberPrivKey: str - class GroupLink(TypedDict): userContactLinkId: int # int64 connLinkContact: "CreatedConnLink" @@ -2172,18 +2167,6 @@ class GroupRelay(TypedDict): relayLink: NotRequired[str] relayCap: "RelayCapabilities" -class GroupRootKey_private(TypedDict): - type: Literal["private"] - rootPrivKey: str - -class GroupRootKey_public(TypedDict): - type: Literal["public"] - rootPubKey: str - -GroupRootKey = GroupRootKey_private | GroupRootKey_public - -GroupRootKey_Tag = Literal["private", "public"] - class GroupShortLinkData(TypedDict): groupProfile: "GroupProfile" publicGroupData: NotRequired["PublicGroupData"] @@ -2626,10 +2609,6 @@ class PublicGroupAccess(TypedDict): class PublicGroupData(TypedDict): publicMemberCount: int # int64 -class PublicGroupKeys(TypedDict): - publicGroupId: str - groupRootKey: "GroupRootKey" - class PublicGroupProfile(TypedDict): groupType: "GroupType" groupLink: str diff --git a/plans/2026-09-13-group-keys-sum-type.md b/plans/2026-09-13-group-keys-sum-type.md new file mode 100644 index 0000000000..5d8e8e98ab --- /dev/null +++ b/plans/2026-09-13-group-keys-sum-type.md @@ -0,0 +1,252 @@ +# Group keys as a sum type + +Branch: `master`, on top of `core: refactor groups`. + +## Summary + +`GroupInfo.groupKeys` is removed, and the user's private keys leave every API response and event. + +Group keys become a sum type with one constructor per kind of group, each holding the user's member key. + +A group and its keys come from one query. Every read of keys is a read of the group. + +The member key is written at every group insert, and generated at the first read of a row created before this change. `createUserMemberKey` is removed. + +## Terms + +- **p2p group** — `use_relays = 0`. The user's member key signs messages. +- **public group** — `use_relays = 1`. Identified by `public_group_id` and the group root key. +- **member key** — `groups.member_priv_key`, the user's own key in the group. +- **root key** — the group's identity key. The owner holds it as `GRKPrivate`; everyone else holds `GRKPublic`. +- **relay request** — a group row a relay creates on `XGrpRelayInv`, before it fetches the group link. +- **prepared channel** — a public group prepared from a link, before `APIConnectPreparedGroup` stores the root key. + +## 1. The type + +`Simplex/Chat/Types.hs`. + +```haskell +data GroupKeys + = GKGroup + { memberPrivKey :: C.PrivateKeyEd25519 + } + | GKPublicGroup + { groupRootKey :: GroupRootKey, + memberPrivKey :: C.PrivateKeyEd25519 + } + | GKRelayRequest + { memberPrivKey :: C.PrivateKeyEd25519 + } + | GKPreparedPublicGroup + { memberPrivKey :: C.PrivateKeyEd25519 + } + deriving (Eq, Show) + +isPublicGroup :: GroupKeys -> Bool + +data GroupInfoKeys = GIK GroupInfo GroupKeys +``` + +`GroupInfoKeys` is the group read with its keys. A function that signs takes it in place of `GroupInfo`; the name `gInfo` denotes whichever of the two a scope holds. + +`PublicGroupKeys` is removed. `GroupRootKey` is unchanged, and its JSON instance is removed with those of `GroupKeys` and `PublicGroupKeys`. + +`GroupInfo` loses `groupKeys` and keeps every other field, `rosterVersion` included. Its `deriveJSON` then emits public fields only. + +`RequestEntity` becomes `REBusinessChat GroupInfoKeys GroupMember`. + +`PreparedChatEntity` becomes `PCEGroup {groupInfo :: GroupInfoKeys, hostMember}`. + +`ReceivedGroupInvitation` gains `groupKeys :: GroupKeys`. + +## 2. Reading + +`Simplex/Chat/Store/Shared.hs`. + +`StoreCxt` gains the generator, named `drg` because `random` collides with `ChatController.random` wherever both records are in scope. + +```haskell +data StoreCxt = StoreCxt {vr :: VersionRangeChat, badgeKeys :: Map Int BBSPublicKey, drg :: TVar ChaChaDRG} +``` + +```haskell +storeCxt :: ChatController -> StoreCxt +``` + +`toGroupInfo` returns `(GroupInfo, GroupKeysRow)`; `toGroupInfo_` returns the group alone. + +```haskell +mkGroupKeys :: DB.Connection -> StoreCxt -> GroupInfo -> GroupKeysRow -> ExceptT StoreError IO GroupKeys +``` + +The member key is taken from the row, or generated and stored. The constructor follows: + +| `use_relays` | `public_group_id` | root key | result | +| --- | --- | --- | --- | +| 0 | — | — | `GKGroup` | +| 1 | present | present | `GKPublicGroup` | +| 1 | present | absent | `GKPreparedPublicGroup` | +| 1 | absent | — | `GKRelayRequest` | + +### Reads + +| function | returns | +| --- | --- | +| `getGroupInfoRow` | `(GroupInfo, GroupKeysRow)` | +| `getGroupInfoKeys` | `GroupInfoKeys` | +| `getGroupInfo` | `GroupInfo`, as `fst <$> getGroupInfoRow` | +| `getGroupKeys_` | `(Group, GroupKeys)` | +| `getGroup` | `Group`, as `fst <$> getGroupKeys_` | + +All five issue one `groupInfoQuery`. `getGroupKeys_` and `getGroup` add the member query. + +`getGroupInfoKeys` returns the group with `membership.memberPubKey` set from the member key it materialized, so the pair agrees on a row created before this change. + +A site that needs keys switches its existing read to `getGroupInfoKeys` or `getGroupKeys_`. + +### Reads that return keys with their entity + +| function | returns | +| --- | --- | +| `getConnectionEntityKeys` | `(ConnectionEntity, Maybe GroupKeysRow)` | +| `getConnectionEntity` | `ConnectionEntity`, as `fst <$> getConnectionEntityKeys` | +| `getGroupInvitation` | `ReceivedGroupInvitation`, with `groupKeys` | +| `createGroupInvitation` | `(GroupInfoKeys, GroupMemberId)` | +| `createBusinessRequestGroup` | `(GroupInfoKeys, GroupMember)` | +| `updatePreparedRelayedGroup` | `GroupInfoKeys` | +| `getRelayServedGroups` | `[GroupInfoKeys]` | +| `getAcceptedBusinessChat` | `Maybe (GroupInfo, GroupKeysRow)` | +| `getGroupAndRegLink` (directory service) | `(GroupInfoKeys, GroupReg, Maybe GroupLink)` | + +### Reads that discard the keys + +`toGroupInfo_` builds the group for `getBaseGroupDetails`, `getRelayInactiveGroups` and `toGroupInfoRegLink`. + +## 3. Message handling + +`getUserEntity` reads the entity with `getConnectionEntityKeys` and builds the keys from the row with `mkGroupKeys` in the same transaction; the first message on a row created before this change writes the member key. `processAgentMessageConn` takes `Maybe GroupKeys` and passes `GroupInfoKeys` to `processGroupMessage`. + +Handlers that send take `GroupInfoKeys`: `xGrpInfo`, `xGrpRosterAck`, `xGrpRosterRequest`, `xGrpLinkAcpt`, `xGrpMemNew`, `xGrpMemRole`, `xGrpMemDel`, `xGrpLeave`, `xGrpMsgForward`, `applyAtRosterVersion`, `bFileChunkGroup`, `receiveRosterChunk`, `rosterCompletion`, `sendRosterAck`. `updatePublicGroupData` in `Internal.hs` takes `GroupInfo` and `GroupKeys` and returns the updated `GroupInfo`. + +An entity of a group connection without keys raises `CEInternalError`. + +## 4. Writing the member key + +One statement writes `groups.member_priv_key` after this change, in `setUserMemberKey`: + +```sql +UPDATE groups +SET member_priv_key = COALESCE(member_priv_key, ?), updated_at = ? +WHERE group_id = ? +RETURNING member_priv_key +``` + +`group_members.member_pub_key` for the membership row is set from the returned key. + +```haskell +setUserMemberKey :: DB.Connection -> GroupId -> GroupMemberId -> C.PrivateKeyEd25519 -> ExceptT StoreError IO C.PrivateKeyEd25519 +``` + +### Inserts + +Every insert writes a member key. `createRelayRequestGroup` generates one and passes its public half to `createContactMemberInv_`, closing the TODO it held. + +`createNewGroup` takes a non-optional `GroupKeys` and derives `use_relays` from `isPublicGroup`. + +### Updates that stop writing the member key + +`updateGroupMemberKeys` is replaced by `setGroupRootKey`, which writes `root_pub_key` alone. `updateRelayGroupKeys` keeps `group_type`, `group_link` and `public_group_id`, and calls it. + +### Callers that stop generating keys + +| caller | change | +| --- | --- | +| `APIConnectPreparedGroup` | writes the root key alone | +| `createRelayLink` | signs the relay link with the stored member key | + +A relay's member key and its relay-link root key are the same key. Members read it from the link as `FixedLinkData.rootKey`. + +The owner keeps the split: the root key authorises owner keys through `OwnerAuth`, and the member key signs messages and shares. + +### `createUserMemberKey` + +Removed, with its six calls. Each caller takes `GroupKeys` from its own read. + +## 5. The error + +```haskell +| SEGroupNotFound {groupId :: GroupId} +``` + +A relay request and a prepared channel read as their own constructors, so every read returns them. + +## 6. Consumers of the keys + +`groupBindingData` reads `publicGroupId` from `groupProfile.publicGroup`, so it takes `GroupInfo`. Everything that verifies — `verifyGroupSig`, `withVerifiedMsg`, `xInfoMember`, `storeMemberKey`, `verifyKey`, `rcvGroupChatBinding` — takes `GroupInfo` alone. The receive path is unchanged. + +`sndGroupChatBinding` asserts the user's own member key, which `membership.memberPubKey` holds as the public half. + +```haskell +groupMemberKey :: GroupKeys -> MemberKey +``` + +| site | uses | +| --- | --- | +| `groupLinkData` | root key as `GRKPrivate`, member key | +| `groupMsgSigning` | member key | +| `groupMemberKey` | member key | +| `encodeXMemberConnInfo` | member key | +| `APIShareChatMsgContent` | root key as the owner test, member key to sign | + +### Functions that take `GroupInfoKeys` in place of `GroupInfo` + +`Internal.hs`: `acceptGroupJoinRequestAsync`, `acceptBusinessJoinRequestAsync`, `groupLinkData`, `setGroupLinkData`, `setGroupLinkData'`, `setGroupLinkDataAsync`, `introduceToModerators`, `introduceToAll`, `introduceToRemaining`, `introduceMember`, `introduceInChannel`, `serveRoster`, `sendInlineBlobChunks`, `sendRelayCapIfNeeded`, `sendGroupMemberMessages`, `sendGroupMessage`, `sendGroupMessage'`, `sendRoster`, `broadcastRoster`, `sendGroupRosterToRelay`, `sendGroupMessages`, `sendGroupSignedMessages`, `sendGroupProfileUpdate`, `sendGroupMessages_`, `groupMsgSigning`, `encodeXMemberConnInfo`, `allowAgentConnectionAsync` (as `Maybe GroupInfoKeys`). + +`Commands.hs`: `delEventSigned`, `changeRoleInvitedMems`, `deleteMemsSend`, `deletePendingMember`, `blockMembers`, `sendGroupContentMessages`, `sendGroupContentMessages_`, `getCommandGroupChatItems`, `delGroupChatItemsForMembers`, `sendGrpInvitation`, `connectToRelay`, `leaveChannelRelay`, `leaveGroupSendMsg`, `runUpdateGroupProfile`. `changeRoleCurrentMems` takes `Group` and `GroupKeys`. `newGroup` takes `GroupKeys` and loses its `Bool`. + +`joinContact` takes `Maybe (Maybe GroupInfoKeys)` and `Maybe MemberId`. + +`Subscriber.hs`: `processGroupMessage` and every handler under it that sends; `acceptJoin`, `getLinkDataCreateRelayLink`. + +Directory service: `updateGroupLinkData` and the `withGroupRegLink` callbacks. + +`saveConnInfo` returns `Maybe GroupInfoKeys`. + +## 7. Queries + +The query count is unchanged. Every site that needs keys takes them from a read it already performs: + +| site | before | after | +| --- | --- | --- | +| commands holding a group | `getGroupInfo` | `getGroupInfoKeys` | +| commands holding a group and members | `getGroup` | `getGroupKeys_` | +| `processAgentMessageConn` | `getConnectionEntity` | `getConnectionEntityKeys` | +| `APIJoinGroup` | `getGroupInvitation` | same, with `groupKeys` in the record | +| `APIConnectPreparedGroup` | `getGroupInfo` | `getGroupInfoRow` | +| business request | `getGroupInfo` | `getGroupInfoRow` | +| directory service link update | `getGroupLink` | `getGroupAndRegLink` | + +## 8. Schema + +The schema is unchanged. The columns keep their meaning: + +- `groups.member_priv_key` — written at insert, or at the first read of a row created before this change. +- `groups.root_priv_key` — the owner's root key. +- `groups.root_pub_key` — every other member's copy of the root key. +- `group_profiles.public_group_id` — the public group identity. + +## 9. Tests + +`testGroupMemberKeyGenerated` (`tests/ChatTests/Groups.hs`): a p2p group whose member key columns are NULL on both sides. The first send stores a key, the profile update carries and is signed by that key, the peer stores it from the update and verifies the next signed event with it, `member_pub_key` of the membership is the public half of `member_priv_key`, and a second send leaves the key unchanged. + +Covered by the existing suites: relay request and prepared channel flows (`chat relay tests`), relay link signing (`chat relay tests`), `GroupInfo` JSON (`Bot API docs`, once the generated files are writable). + +## Open + +`bots/api/TYPES.md`, `packages/simplex-chat-client/types/typescript/src/types.ts` and `packages/simplex-chat-python/src/simplex_chat/types/_types.py` still declare `GroupKeys`. The `Bot API docs` test regenerates them once they are writable; they are owned by root. + +## Out of scope + +- The sum type in API responses and events. +- Moving relay request data out of the `groups` row. +- `groupSummary.publicMemberCount` moving into `GKPublicGroup`, since both apps decode `GroupSummary`. diff --git a/src/Simplex/Chat/Bot/Store.hs b/src/Simplex/Chat/Bot/Store.hs index 1f5a2924d5..bfa5b04ebc 100644 --- a/src/Simplex/Chat/Bot/Store.hs +++ b/src/Simplex/Chat/Bot/Store.hs @@ -4,8 +4,7 @@ {-# LANGUAGE ScopedTypeVariables #-} module Simplex.Chat.Bot.Store - ( storeCxt, - withDB, + ( withDB, withDB', ) where @@ -20,10 +19,6 @@ import Simplex.Messaging.Agent.Store.Common (withTransaction) import qualified Simplex.Messaging.Agent.Store.DB as DB import Simplex.Messaging.Util (catchAll) -storeCxt :: ChatController -> StoreCxt -storeCxt ChatController {config} = mkStoreCxt config -{-# INLINE storeCxt #-} - withDB' :: Text -> ChatController -> (DB.Connection -> IO a) -> IO (Either String a) withDB' cxt cc a = withDB cxt cc $ ExceptT . fmap Right . a diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index a5f46faee2..9cc80fc54b 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -228,9 +228,9 @@ newWebPreviewState = do -- | Builds the read-only context threaded through store functions from chat config. -- The single construction point, so new store-wide config (e.g. server keys) is added in one place. -mkStoreCxt :: ChatConfig -> StoreCxt -mkStoreCxt ChatConfig {chatVRange, badgePublicKeys} = StoreCxt chatVRange badgePublicKeys -{-# INLINE mkStoreCxt #-} +storeCxt :: ChatController -> StoreCxt +storeCxt ChatController {config = ChatConfig {chatVRange, badgePublicKeys}, random} = StoreCxt chatVRange badgePublicKeys random +{-# INLINE storeCxt #-} data RandomAgentServers = RandomAgentServers { smpServers :: NonEmpty (ServerCfg 'PSMP), diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index 49df03a6d2..89c6305d73 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -753,8 +753,8 @@ processChatCommand cxt nm = \case Nothing -> pure () withGroupLock "sendMessage" chatId $ do (gInfo, cmrs) <- withFastStore $ \db -> do - g <- getGroupInfo db cxt user chatId - (g,) <$> mapM (composedMessageReqMentions db user g) cms + gik@(GIK g _) <- getGroupInfoKeys db cxt user chatId + (gik,) <$> mapM (composedMessageReqMentions db user g) cms sendGroupContentMessages user gInfo gsScope asGroup live itemTTL sign cmrs APICreateChatTag (ChatTagData emoji text) -> withUser $ \user -> withFastStore' $ \db -> do _ <- createChatTag db user emoji text @@ -783,7 +783,7 @@ processChatCommand cxt nm = \case createNoteFolderContentItems user folderId (L.map composedMessageReq cms) APIReportMessage gId reportedItemId reportReason reportText -> withUser $ \user -> withGroupLock "reportMessage" gId $ do - gInfo <- withFastStore $ \db -> getGroupInfo db cxt user gId + gInfo <- withFastStore $ \db -> getGroupInfoKeys db cxt user gId let mc = MCReport reportText reportReason cm = ComposedMessage {fileSource = Nothing, quotedItemId = Just reportedItemId, msgContent = mc, mentions = M.empty} sendGroupContentMessages user gInfo (Just $ GCSMemberSupport Nothing) False False Nothing False [composedMessageReq cm] @@ -818,7 +818,7 @@ processChatCommand cxt nm = \case _ -> throwChatError CEInvalidChatItemUpdate CChatItem SMDRcv _ -> throwChatError CEInvalidChatItemUpdate CTGroup -> withGroupLock "updateChatItem" chatId $ do - gInfo@GroupInfo {groupId, membership} <- withFastStore $ \db -> getGroupInfo db cxt user chatId + g@(GIK gInfo@GroupInfo {groupId, membership} _) <- withFastStore $ \db -> getGroupInfoKeys db cxt user chatId when (isNothing scope) $ assertUserGroupRole gInfo GRAuthor let (_, ft_) = msgContentTexts mc if prohibitedSimplexLinks gInfo membership mc ft_ @@ -840,7 +840,7 @@ processChatCommand cxt nm = \case mentions' = M.map (\CIMention {memberId} -> MsgMention {memberId}) ciMentions event = XMsgUpdate itemSharedMId mc mentions' (ttl' <$> itemTimed) (justTrue . (live &&) =<< itemLive) msgScope (Just showGroupAsSender) reuseSign = case msgVerified of Just (MVSigned _) -> True; _ -> False - SndMessage {msgId} <- sendGroupMessage user gInfo scope recipients reuseSign event + SndMessage {msgId} <- sendGroupMessage user g scope recipients reuseSign event ci' <- withFastStore' $ \db -> do currentTs <- liftIO getCurrentTime when changed $ @@ -886,7 +886,7 @@ processChatCommand cxt nm = \case else markDirectCIsDeleted user ct items =<< liftIO getCurrentTime pure $ CRChatItemsDeleted user deletions True False CTGroup -> withGroupLock "deleteChatItem" chatId $ do - (gInfo, items) <- getCommandGroupChatItems user chatId itemIds + (g@(GIK gInfo _), items) <- getCommandGroupChatItems user chatId itemIds -- TODO [knocking] check scope for all items? chatScopeInfo <- mapM (getChatScopeInfo cxt user) scope deletions <- case mode of @@ -899,14 +899,14 @@ processChatCommand cxt nm = \case recipients <- getGroupRecipients cxt user gInfo chatScopeInfo groupKnockingVersion assertDeletable items assertUserGroupRole gInfo GRObserver -- can still delete messages sent earlier - let signedEvents = L.nonEmpty $ mapMaybe (delEventSigned gInfo chatScopeInfo False) items - mapM_ (sendGroupSignedMessages user gInfo Nothing False recipients) signedEvents + let signedEvents = L.nonEmpty $ mapMaybe (delEventSigned g chatScopeInfo False) items + mapM_ (sendGroupSignedMessages user g Nothing False recipients) signedEvents delGroupChatItems user gInfo chatScopeInfo items False CIDMHistory -> do unless (publicGroupEditor gInfo (membership gInfo)) $ throwChatError CEInvalidChatItemDelete recipients <- getGroupRecipients cxt user gInfo chatScopeInfo groupKnockingVersion - let signedEvents = L.nonEmpty $ mapMaybe (delEventSigned gInfo chatScopeInfo True) items - mapM_ (sendGroupSignedMessages user gInfo Nothing False recipients) signedEvents + let signedEvents = L.nonEmpty $ mapMaybe (delEventSigned g chatScopeInfo True) items + mapM_ (sendGroupSignedMessages user g Nothing False recipients) signedEvents delGroupChatItems user gInfo chatScopeInfo items False pure $ CRChatItemsDeleted user deletions True False CTLocal -> do @@ -929,20 +929,20 @@ processChatCommand cxt nm = \case itemsMsgIds :: [CChatItem c] -> [SharedMsgId] itemsMsgIds = mapMaybe (\(CChatItem _ ChatItem {meta = CIMeta {itemSharedMsgId}}) -> itemSharedMsgId) -- history delete always signs (attributable owner action); self-delete signs iff the target was held signed (deniability) - delEventSigned :: GroupInfo -> Maybe GroupChatScopeInfo -> Bool -> CChatItem 'CTGroup -> Maybe (Maybe MsgSigning, ChatMsgEvent 'Json) - delEventSigned gInfo chatScopeInfo onlyHistory (CChatItem _ ChatItem {meta = CIMeta {itemSharedMsgId, msgVerified}}) = + delEventSigned :: GroupInfoKeys -> Maybe GroupChatScopeInfo -> Bool -> CChatItem 'CTGroup -> Maybe (Maybe MsgSigning, ChatMsgEvent 'Json) + delEventSigned g@(GIK gInfo _) chatScopeInfo onlyHistory (CChatItem _ ChatItem {meta = CIMeta {itemSharedMsgId, msgVerified}}) = delEvent <$> itemSharedMsgId where delEvent msgId = let evt = XMsgDel msgId Nothing (toMsgScope gInfo <$> chatScopeInfo) onlyHistory - in (groupMsgSigning (onlyHistory || itemSigned) gInfo evt, evt) + in (groupMsgSigning (onlyHistory || itemSigned) g evt, evt) itemSigned = case msgVerified of Just (MVSigned _) -> True; _ -> False APIDeleteMemberChatItem gId itemIds -> withUser $ \user -> withGroupLock "deleteChatItem" gId $ do - (gInfo, items) <- getCommandGroupChatItems user gId itemIds + (g@(GIK gInfo _), items) <- getCommandGroupChatItems user gId itemIds -- TODO [knocking] check scope is Nothing for all items? (prohibit moderation in support chats?) ms <- withFastStore' $ \db -> getGroupMembers db cxt user gInfo let recipients = filter memberCurrent ms - deletions <- delGroupChatItemsForMembers user gInfo Nothing recipients items + deletions <- delGroupChatItemsForMembers user g Nothing recipients items pure $ CRChatItemsDeleted user deletions True False APIArchiveReceivedReports gId -> withUser $ \user -> withFastStore $ \db -> do g <- getGroupInfo db cxt user gId @@ -950,7 +950,7 @@ processChatCommand cxt nm = \case ciIds <- liftIO $ markReceivedGroupReportsDeleted db user g deleteTs pure $ CRGroupChatItemsDeleted user g ciIds True (Just $ membership g) APIDeleteReceivedReports gId itemIds mode -> withUser $ \user -> withGroupLock "deleteReports" gId $ do - (gInfo, items) <- getCommandGroupChatItems user gId itemIds + (g@(GIK gInfo _), items) <- getCommandGroupChatItems user gId itemIds unless (all isRcvReport items) $ throwCmdError "some items are not received reports" -- TODO [knocking] scope can be different for each item if reports are from different members -- TODO (currently we pass Nothing as scope which is wrong) @@ -961,7 +961,7 @@ processChatCommand cxt nm = \case CIDMBroadcast -> do ms <- withFastStore' $ \db -> getGroupModerators db cxt user gInfo let recipients = filter memberCurrent ms - delGroupChatItemsForMembers user gInfo Nothing recipients items + delGroupChatItemsForMembers user g Nothing recipients items pure $ CRChatItemsDeleted user deletions True False where isRcvReport = \case @@ -990,9 +990,9 @@ processChatCommand cxt nm = \case CTGroup -> withGroupLock "chatItemReaction" chatId $ do -- TODO [knocking] check chat item scope? - (g@GroupInfo {membership}, CChatItem md ci) <- withFastStore $ \db -> do - g <- getGroupInfo db cxt user chatId - (g,) <$> getGroupCIWithReactions db user g itemId + (gik@(GIK g@GroupInfo {membership} _), CChatItem md ci) <- withFastStore $ \db -> do + gik@(GIK g _) <- getGroupInfoKeys db cxt user chatId + (gik,) <$> getGroupCIWithReactions db user g itemId chatScopeInfo <- mapM (getChatScopeInfo cxt user) scope recipients <- getGroupRecipients cxt user g chatScopeInfo groupKnockingVersion case ci of @@ -1004,7 +1004,7 @@ processChatCommand cxt nm = \case let itemMemberId = memberId' <$> chatItemMember g ci rs <- withFastStore' $ \db -> getGroupReactions db g membership itemMemberId itemSharedMId True checkReactionAllowed rs - SndMessage {msgId} <- sendGroupMessage user g scope recipients False (XMsgReact itemSharedMId itemMemberId (toMsgScope g <$> chatScopeInfo) reaction add) + SndMessage {msgId} <- sendGroupMessage user gik scope recipients False (XMsgReact itemSharedMId itemMemberId (toMsgScope g <$> chatScopeInfo) reaction add) createdAt <- liftIO getCurrentTime reactions <- withFastStore' $ \db -> do setGroupReaction db g membership itemMemberId itemSharedMId True reaction add msgId createdAt @@ -1089,7 +1089,7 @@ processChatCommand cxt nm = \case case L.nonEmpty cmrs of Just cmrs' -> withGroupLock "forwardChatItem, to group" toChatId $ do - gInfo <- withFastStore $ \db -> getGroupInfo db cxt user toChatId + gInfo <- withFastStore $ \db -> getGroupInfoKeys db cxt user toChatId sendGroupContentMessages user gInfo toScope sendAsGroup False itemTTL False cmrs' Nothing -> pure $ CRNewChatItems user [] CTLocal -> do @@ -1119,7 +1119,7 @@ processChatCommand cxt nm = \case | otherwise = displayName -- TODO [knocking] from scope? CTGroup -> withGroupLock "forwardChatItem, from group" fromChatId $ do - (gInfo, items) <- getCommandGroupChatItems user fromChatId itemIds + (GIK gInfo _, items) <- getCommandGroupChatItems user fromChatId itemIds catMaybes <$> mapM (\ci -> ciComposeMsgReq gInfo ci <$$> prepareMsgReq ci) items where ciComposeMsgReq :: GroupInfo -> CChatItem 'CTGroup -> (MsgContent, Maybe CryptoFile) -> ComposedMessageReq @@ -1226,16 +1226,16 @@ processChatCommand cxt nm = \case let ext = takeExtension fileName pure $ prefix <> formattedDate <> ext APIShareChatMsgContent (ChatRef CTGroup groupId _) toSendRef -> withUser $ \user -> do - GroupInfo {groupProfile = gp@GroupProfile {publicGroup}, membership = GroupMember {memberId, memberRole}, groupKeys} <- - withFastStore $ \db -> getGroupInfo db cxt user groupId + GIK GroupInfo {groupProfile = gp@GroupProfile {publicGroup}, membership = GroupMember {memberId, memberRole}} gks <- + withFastStore $ \db -> getGroupInfoKeys db cxt user groupId case publicGroup of Nothing -> throwCmdError "not a public group" Just PublicGroupProfile {groupLink} -> do - let signingKeys = case (memberRole, groupKeys) of - (GROwner, Just gk@GroupKeys {publicGroupKeys = Just PublicGroupKeys {groupRootKey = GRKPrivate _}}) -> Just gk + let signingKeys = case (memberRole, gks) of + (GROwner, GKPublicGroup {groupRootKey = GRKPrivate _, memberPrivKey}) -> Just memberPrivKey _ -> Nothing ownerSig <- - pure signingKeys $>>= \GroupKeys {memberPrivKey} -> + pure signingKeys $>>= \memberPrivKey -> mkLinkOwnerSig memberPrivKey groupLink (Just memberId) <$$> shareChatBinding user toSendRef let text = safeDecodeUtf8 $ strEncode groupLink pure $ CRChatMsgContent user MCChat {text, chatLink = MCLGroup groupLink gp, ownerSig} @@ -1378,7 +1378,7 @@ processChatCommand cxt nm = \case withFastStore' $ \db -> deletePendingContactConnection db userId chatId pure $ CRContactConnectionDeleted user conn CTGroup | isNothing scope -> do - gInfo@GroupInfo {membership} <- withFastStore $ \db -> getGroupInfo db cxt user chatId + g@(GIK gInfo@GroupInfo {membership} _) <- withFastStore $ \db -> getGroupInfoKeys db cxt user chatId let isOwner = memberRole' membership == GROwner canDelete = isOwner || not (memberCurrent membership) unless canDelete $ throwChatError $ CEGroupUserRole gInfo GROwner @@ -1391,7 +1391,7 @@ processChatCommand cxt nm = \case let doSendDel = memberActive membership && isOwner msgSigned <- if doSendDel - then (\SndMessage {signedMsg_} -> isJust signedMsg_) <$> sendGroupMessage' user gInfo recipients XGrpDel + then (\SndMessage {signedMsg_} -> isJust signedMsg_) <$> sendGroupMessage' user g recipients XGrpDel else pure False deleteGroupLinkIfExists user gInfo deleteMembersConnections' user members doSendDel @@ -2293,7 +2293,7 @@ processChatCommand cxt nm = \case pure $ CRStartedConnectionToContact user ct' customUserProfile CVRConnectedContact ct' -> pure $ CRContactAlreadyExists user ct' APIConnectPreparedGroup {groupId, incognito, ownerContact, msgContent_} -> withUser $ \user -> do - gInfo <- withFastStore $ \db -> getGroupInfo db cxt user groupId + g@(GIK gInfo _) <- withFastStore $ \db -> getGroupInfoKeys db cxt user groupId case gInfo of GroupInfo {preparedGroup = Nothing} -> throwCmdError "group doesn't have link to connect" GroupInfo {useRelays = BoolDef True, preparedGroup = Just PreparedGroup {connLinkToConnect}} -> do @@ -2313,9 +2313,8 @@ processChatCommand cxt nm = \case -- set group link info and incognito profile, generate and store membership keys incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing let cReqHash = contactCReqHash $ CRContactUri crData {crScheme = SSSimplex} e2e - (_, memberPrivKey) <- atomically . C.generateKeyPair =<< asks random - gInfo' <- withFastStore $ \db -> do - gInfo' <- updatePreparedRelayedGroup db cxt user gInfo mainCReq cReqHash incognitoProfile rootKey memberPrivKey publicMemberCount_ + g'@(GIK gInfo' _) <- withFastStore $ \db -> do + g'@(GIK gInfo' _) <- updatePreparedRelayedGroup db cxt user gInfo mainCReq cReqHash incognitoProfile rootKey publicMemberCount_ -- Pre-emptively create owner members with trusted keys from link data forM_ owners $ \OwnerAuth {ownerId, ownerKey} -> do let ctId_ = case ownerContact of @@ -2323,9 +2322,9 @@ processChatCommand cxt nm = \case | memberId == MemberId ownerId -> Just contactId _ -> Nothing void $ createLinkOwnerMember db cxt user gInfo' ctId_ (MemberId ownerId) ownerKey - pure gInfo' + pure g' rs <- withGroupLock "connectPreparedGroup" groupId $ - mapConcurrently (connectToRelay user gInfo') relays + mapConcurrently (connectToRelay user g') relays let relayFailed = \case (_, _, Left _) -> True; _ -> False (failed, succeeded) = partition relayFailed rs if null succeeded @@ -2367,7 +2366,7 @@ processChatCommand cxt nm = \case smId <- getSharedMsgId withFastStore' $ \db -> setRequestSharedMsgIdForGroup db groupId smId pure (smId, mc) - r <- connectViaContact user (Just $ PCEGroup gInfo hostMember) incognito connLinkToConnect welcomeSharedMsgId msg_ `catchAllErrors` \e -> do + r <- connectViaContact user (Just $ PCEGroup g hostMember) incognito connLinkToConnect welcomeSharedMsgId msg_ `catchAllErrors` \e -> do -- get updated group info, in case connection was started (connLinkPreparedConnection) - in UI it would lock ability to change -- user or incognito profile for group or business chat, in case server received request while client got network error gInfo' <- withFastStore $ \db -> getGroupInfo db cxt user groupId @@ -2699,14 +2698,14 @@ processChatCommand cxt nm = \case g <- asks random memberId <- liftIO $ MemberId <$> encodedRandomBytes g 12 (_, memberPrivKey) <- atomically $ C.generateKeyPair g - gInfo <- newGroup user incognito gProfile False memberId (Just GroupKeys {publicGroupKeys = Nothing, memberPrivKey}) Nothing + gInfo <- newGroup user incognito gProfile memberId GKGroup {memberPrivKey} Nothing createNewGroupItems user gInfo pure $ CRGroupCreated user gInfo NewGroup incognito gProfile -> withUser $ \User {userId} -> processChatCommand cxt nm $ APINewGroup userId incognito gProfile APINewPublicGroup userId incognito relayIds groupProfile -> withUserId userId $ \user -> do (gProfile', memberId, groupKeys, setupLink) <- prepareGroupLink user - gInfo <- newGroup user incognito gProfile' True memberId (Just groupKeys) (Just 1) + gInfo <- newGroup user incognito gProfile' memberId groupKeys (Just 1) (gLink, results) <- setupLink gInfo `catchAllErrors` \e -> do deleteInProgressGroup user gInfo throwError e @@ -2753,8 +2752,7 @@ processChatCommand cxt nm = \case userLinkData = UserContactLinkData UserContactData {direct = False, owners = [ownerAuth], relays = [], userData, ratchetKeys = Nothing} -- create connection with prepared link (single network call) connId <- withAgent $ \a -> createConnectionForLink a nm (aUserId user) True ccLink preparedParams userLinkData subMode - let groupKeys = GroupKeys {publicGroupKeys, memberPrivKey} - publicGroupKeys = Just PublicGroupKeys {publicGroupId = B64UrlByteString entityId, groupRootKey = GRKPrivate rootPrivKey} + let groupKeys = GKPublicGroup {groupRootKey = GRKPrivate rootPrivKey, memberPrivKey} setupLink gInfo = do -- TODO [relays] starting role should be communicated in protocol from owner to relays subRole <- asks $ channelSubscriberRole . config @@ -2804,7 +2802,7 @@ processChatCommand cxt nm = \case _ -> False APIAddMember groupId contactId memRole -> withUser $ \user -> withGroupLock "addMember" groupId $ do -- TODO for large groups: no need to load all members to determine if contact is a member - (group, contact) <- withFastStore $ \db -> (,) <$> getGroup db cxt user groupId <*> getContact db cxt user contactId + ((group, gks), contact) <- withFastStore $ \db -> (,) <$> getGroupKeys_ db cxt user groupId <*> getContact db cxt user contactId let Group gInfo members = group Contact {localDisplayName = cName} = contact when (useRelays' gInfo) $ throwCmdError "can't invite contact to channel" @@ -2814,7 +2812,7 @@ processChatCommand cxt nm = \case when (contactConnIncognito contact) $ throwChatError CEContactIncognitoCantInvite -- [incognito] forbid to invite contacts if user joined the group using an incognito profile when (incognitoMembership gInfo) $ throwChatError CEGroupIncognitoCantInvite - let sendInvitation = sendGrpInvitation user contact gInfo + let sendInvitation = sendGrpInvitation user contact (GIK gInfo gks) case contactMember contact members of Nothing -> do gVar <- asks random @@ -2837,13 +2835,13 @@ processChatCommand cxt nm = \case (invitation, ct) <- withFastStore $ \db -> do inv@ReceivedGroupInvitation {fromMember} <- getGroupInvitation db cxt user groupId (inv,) <$> getContactViaMember db cxt user fromMember - let ReceivedGroupInvitation {fromMember, connRequest, groupInfo = g@GroupInfo {membership, chatSettings}} = invitation + let ReceivedGroupInvitation {fromMember, connRequest, groupInfo = g@GroupInfo {membership, chatSettings}, groupKeys = gks} = invitation GroupMember {memberId = membershipMemId} = membership Contact {activeConn} = ct case activeConn of Just Connection {peerChatVRange} -> do subMode <- chatReadVar subscriptionMode - dm <- encodeConnInfo $ XGrpAcpt membershipMemId (groupMemberKey g) + dm <- encodeConnInfo $ XGrpAcpt membershipMemId (Just $ groupMemberKey gks) agentConnId <- case memberConn fromMember of Nothing -> do agentConnId <- withAgent $ \a -> prepareConnectionToJoin a (aUserId user) True connRequest PQSupportOff @@ -2866,7 +2864,7 @@ processChatCommand cxt nm = \case pure $ CRUserAcceptedGroupSent user g {membership = membership {memberStatus = GSMemAccepted}} Nothing Nothing -> throwChatError $ CEContactNotActive ct APIAcceptMember groupId gmId role -> withUser $ \user@User {userId} -> do - (gInfo, m) <- withFastStore $ \db -> (,) <$> getGroupInfo db cxt user groupId <*> getGroupMemberById db cxt user gmId + (g@(GIK gInfo _), m) <- withFastStore $ \db -> (,) <$> getGroupInfoKeys db cxt user groupId <*> getGroupMemberById db cxt user gmId assertUserGroupRole gInfo $ max GRModerator role case memberStatus m of GSMemPendingApproval | memberCategory m == GCInviteeMember -> do -- only host can approve @@ -2875,14 +2873,14 @@ processChatCommand cxt nm = \case Just mConn -> case memberAdmission >>= review of Just MCAll -> do - introduceToModerators cxt user gInfo m + introduceToModerators cxt user g m withFastStore' $ \db -> updateGroupMemberStatus db userId m GSMemPendingReview let m' = m {memberStatus = GSMemPendingReview} pure $ CRMemberAccepted user gInfo m' Nothing -> do let msg = XGrpLinkAcpt GAAccepted role (memberId' m) void $ sendDirectMemberMessage mConn msg groupId - introduceToRemaining cxt user gInfo m {memberRole = role} + introduceToRemaining cxt user g m {memberRole = role} when (groupFeatureAllowed SGFHistory gInfo) $ sendHistory user gInfo m (m', gInfo') <- withFastStore' $ \db -> do m' <- updateGroupMemberAccepted db user m GSMemConnected role @@ -2900,13 +2898,13 @@ processChatCommand cxt nm = \case modMs <- withFastStore' $ \db -> getGroupModerators db cxt user gInfo let rcpModMs' = filter memberCurrent modMs msg = XGrpLinkAcpt GAAccepted role (memberId' m) - void $ sendGroupMessage user gInfo scope ([m] <> rcpModMs') False msg + void $ sendGroupMessage user g scope ([m] <> rcpModMs') False msg when (maxVersion (memberChatVRange m) < groupKnockingVersion) $ forM_ (memberConn m) $ \mConn -> do let msg2 = XMsgNew $ mcSimple (MCText acceptedToGroupMessage) void $ sendDirectMemberMessage mConn msg2 groupId when (memberCategory m == GCInviteeMember) $ do - introduceToRemaining cxt user gInfo m {memberRole = role} + introduceToRemaining cxt user g m {memberRole = role} when (groupFeatureAllowed SGFHistory gInfo) $ sendHistory user gInfo m (m', gInfo') <- withFastStore' $ \db -> do m' <- updateGroupMemberAccepted db user m newMemberStatus role @@ -2938,7 +2936,7 @@ processChatCommand cxt nm = \case APIMembersRole groupId memberIds newRole -> withUser $ \user -> withGroupLock "memberRole" groupId $ do -- TODO [relays] possible optimization is to read only required members + relays - g@(Group gInfo members) <- withFastStore $ \db -> getGroup db cxt user groupId + (g@(Group gInfo members), gks) <- withFastStore $ \db -> getGroupKeys_ db cxt user groupId when (selfSelected gInfo) $ throwCmdError "can't change role for self" let (invitedMems, currentMems, unchangedMems, maxRole, anyAdmin, anyPending, anyPrivilegedTarget, anyRelay, anyRosterChange, finalPrivilegedCount) = selectMembers members when (length invitedMems + length currentMems + length unchangedMems /= length memberIds) $ throwChatError CEGroupMemberNotFound @@ -2954,11 +2952,11 @@ processChatCommand cxt nm = \case throwCmdError "only the group owner can change moderator and admin roles" when (useRelays' gInfo && isRosterRole newRole && finalPrivilegedCount > maxGroupRosterSize) $ throwCmdError $ "the number of members, moderators and admins would exceed the limit of " <> show maxGroupRosterSize - (errs1, changed1) <- changeRoleInvitedMems user gInfo invitedMems + (errs1, changed1) <- changeRoleInvitedMems user (GIK gInfo gks) invitedMems let doBumpRoster = useRelays' gInfo && memberRole' (membership gInfo) == GROwner && anyRosterChange -- roster (with the change projected in) before the delta, so a relay stores the blob at this version before forwarding the delta - rosterVer <- if doBumpRoster then Just <$> broadcastRoster user gInfo (RDRoleChanged newRole currentMems) else pure Nothing - (errs2, changed2, acis, msgSigned) <- changeRoleCurrentMems user g rosterVer currentMems + rosterVer <- if doBumpRoster then Just <$> broadcastRoster user (GIK gInfo gks) (RDRoleChanged newRole currentMems) else pure Nothing + (errs2, changed2, acis, msgSigned) <- changeRoleCurrentMems user g gks rosterVer currentMems unless (null acis) $ toView $ CEvtNewChatItems user acis let errs = errs1 <> errs2 unless (null errs) $ toView $ CEvtChatErrors errs @@ -2985,8 +2983,8 @@ processChatCommand cxt nm = \case -- a current member's role actually changes here; it alters the roster iff the old or new role is on it | otherwise -> (invited, m : current, unchanged, maxRole', anyAdmin', anyPending', anyPrivTarget', anyRelay', anyRosterChange || isRosterRole newRole || isRosterRole memberRole, privCount') | otherwise = (invited, current, unchanged, maxRole, anyAdmin, anyPending, anyPrivTarget, anyRelay, anyRosterChange, if isRosterRole memberRole then privCount + 1 else privCount) - changeRoleInvitedMems :: User -> GroupInfo -> [GroupMember] -> CM ([ChatError], [GroupMember]) - changeRoleInvitedMems user gInfo memsToChange = do + changeRoleInvitedMems :: User -> GroupInfoKeys -> [GroupMember] -> CM ([ChatError], [GroupMember]) + changeRoleInvitedMems user gInfo@(GIK g _) memsToChange = do -- not batched, as we need to send different invitations to different connections anyway mems_ <- forM memsToChange $ \m -> (Right <$> changeRole m) `catchAllErrors` (pure . Left) pure $ partitionEithers mems_ @@ -2998,15 +2996,15 @@ processChatCommand cxt nm = \case sendGrpInvitation user ct gInfo (m :: GroupMember) {memberRole = newRole} cReq withFastStore' $ \db -> updateGroupMemberRole db user m newRole pure (m :: GroupMember) {memberRole = newRole} - _ -> throwChatError $ CEGroupCantResendInvitation gInfo cName - changeRoleCurrentMems :: User -> Group -> Maybe VersionRoster -> [GroupMember] -> CM ([ChatError], [GroupMember], [AChatItem], Bool) - changeRoleCurrentMems user (Group gInfo members) rosterVer memsToChange = case L.nonEmpty memsToChange of + _ -> throwChatError $ CEGroupCantResendInvitation g cName + changeRoleCurrentMems :: User -> Group -> GroupKeys -> Maybe VersionRoster -> [GroupMember] -> CM ([ChatError], [GroupMember], [AChatItem], Bool) + changeRoleCurrentMems user (Group gInfo members) gks rosterVer memsToChange = case L.nonEmpty memsToChange of Nothing -> pure ([], [], [], False) Just memsToChange' -> do let mKey m = if isJust rosterVer then MemberKey <$> memberPubKey m else Nothing events = L.map (\m@GroupMember {memberId} -> XGrpMemRole memberId newRole (mKey m) rosterVer) memsToChange' recipients = filter memberCurrent members - (msgs_, _gsr) <- sendGroupMessages user gInfo Nothing False recipients False events + (msgs_, _gsr) <- sendGroupMessages user (GIK gInfo gks) Nothing False recipients False events let signed = any (either (const False) (\SndMessage {signedMsg_} -> isJust signedMsg_)) msgs_ itemsData = zipWith (fmap . sndItemData) memsToChange (L.toList msgs_) cis_ <- saveSndChatItems user (CDGroupSnd gInfo Nothing) False itemsData Nothing False @@ -3026,7 +3024,7 @@ processChatCommand cxt nm = \case APIBlockMembersForAll groupId memberIds blockFlag -> withUser $ \user -> withGroupLock "blockForAll" groupId $ do -- TODO [relays] possible optimization is to read only required members + relays - Group gInfo members <- withFastStore $ \db -> getGroup db cxt user groupId + (Group gInfo members, gks) <- withFastStore $ \db -> getGroupKeys_ db cxt user groupId when (selfSelected gInfo) $ throwCmdError "can't block/unblock self" -- TODO [relays] consider sending restriction to all members (remove filtering), as we do in delivery jobs let (blockMems, remainingMems, maxRole, anyAdmin, anyPending) = selectMembers members @@ -3034,7 +3032,7 @@ processChatCommand cxt nm = \case when (length memberIds > 1 && anyAdmin) $ throwCmdError "can't block/unblock multiple members when admins selected" when anyPending $ throwCmdError "can't block/unblock members pending approval" assertUserGroupRole gInfo $ max GRModerator maxRole - blockMembers user gInfo blockMems remainingMems + blockMembers user (GIK gInfo gks) blockMems remainingMems where selfSelected GroupInfo {membership} = elem (groupMemberId' membership) memberIds selectMembers :: [GroupMember] -> ([GroupMember], [GroupMember], GroupMemberRole, Bool, Bool) @@ -3047,14 +3045,14 @@ processChatCommand cxt nm = \case anyPending' = anyPending || memberPending m in (m : block, remaining, maxRole', anyAdmin', anyPending') | otherwise = (block, m : remaining, maxRole, anyAdmin, anyPending) - blockMembers :: User -> GroupInfo -> [GroupMember] -> [GroupMember] -> CM ChatResponse - blockMembers user gInfo blockMems remainingMems = case L.nonEmpty blockMems of + blockMembers :: User -> GroupInfoKeys -> [GroupMember] -> [GroupMember] -> CM ChatResponse + blockMembers user g@(GIK gInfo _) blockMems remainingMems = case L.nonEmpty blockMems of Nothing -> throwCmdError "no members to block/unblock" Just blockMems' -> do let mrs = if blockFlag then MRSBlocked else MRSUnrestricted events = L.map (\GroupMember {memberId} -> XGrpMemRestrict memberId MemberRestrictions {restriction = mrs}) blockMems' recipients = filter memberCurrent remainingMems - (msgs_, _gsr) <- sendGroupMessages_ user gInfo recipients False events + (msgs_, _gsr) <- sendGroupMessages_ user g recipients False events let msgSigned = any (either (const False) (\SndMessage {signedMsg_} -> isJust signedMsg_)) msgs_ itemsData = zipWith (fmap . sndItemData) blockMems (L.toList msgs_) cis_ <- saveSndChatItems user (CDGroupSnd gInfo Nothing) False itemsData Nothing False @@ -3075,7 +3073,7 @@ processChatCommand cxt nm = \case APIRemoveMembers {groupId, groupMemberIds, withMessages} -> withUser $ \user -> withGroupLock "removeMembers" groupId $ do -- TODO [relays] possible optimization is to read only required members + relays - Group gInfo members <- withFastStore $ \db -> getGroup db cxt user groupId + (Group gInfo members, gks) <- withFastStore $ \db -> getGroupKeys_ db cxt user groupId let (count, invitedMems, pendingApprvMems, pendingRvwMems, currentMems, maxRole, anyAdmin, anyPrivilegedRemoved, anyRosterRemoved) = selectMembers gmIds members gmIds = S.fromList $ L.toList groupMemberIds memCount = length groupMemberIds @@ -3088,13 +3086,13 @@ processChatCommand cxt nm = \case let recipients = filter memberCurrent members let doBumpRoster = useRelays' gInfo && memberRole' (membership gInfo) == GROwner && anyRosterRemoved -- roster (excluding the removed members) before the delta, so a relay stores the blob at this version before forwarding the delta - rosterVer <- if doBumpRoster then Just <$> broadcastRoster user gInfo (RDRemoved currentMems) else pure Nothing - (errs2, deleted2, acis2, signed2) <- deleteMemsSend user gInfo Nothing rosterVer recipients currentMems + rosterVer <- if doBumpRoster then Just <$> broadcastRoster user (GIK gInfo gks) (RDRemoved currentMems) else pure Nothing + (errs2, deleted2, acis2, signed2) <- deleteMemsSend user (GIK gInfo gks) Nothing rosterVer recipients currentMems (errs3, deleted3, acis3, signed3) <- - foldM (\acc m -> deletePendingMember acc user gInfo [m] m) ([], [], [], False) pendingApprvMems + foldM (\acc m -> deletePendingMember acc user (GIK gInfo gks) [m] m) ([], [], [], False) pendingApprvMems let moderators = filter (\GroupMember {memberRole} -> memberRole >= GRModerator) members (errs4, deleted4, acis4, signed4) <- - foldM (\acc m -> deletePendingMember acc user gInfo (m : moderators) m) ([], [], [], False) pendingRvwMems + foldM (\acc m -> deletePendingMember acc user (GIK gInfo gks) (m : moderators) m) ([], [], [], False) pendingRvwMems let acis = acis2 <> acis3 <> acis4 errs = errs1 <> errs2 <> errs3 <> errs4 deleted = deleted1 <> deleted2 <> deleted3 <> deleted4 @@ -3102,7 +3100,7 @@ processChatCommand cxt nm = \case -- Read group info with updated membersRequireAttention and publicMemberCount gInfo' <- if useRelays' gInfo - then updatePublicGroupData user gInfo + then updatePublicGroupData user gInfo gks else withFastStore $ \db -> getGroupInfo db cxt user groupId let acis' = map (updateACIGroupInfo gInfo') acis unless (null acis') $ toView $ CEvtNewChatItems user acis' @@ -3136,18 +3134,18 @@ processChatCommand cxt nm = \case delMember db m = do deleteGroupMember db user m pure m {memberStatus = GSMemRemoved} - deletePendingMember :: ([ChatError], [GroupMember], [AChatItem], Bool) -> User -> GroupInfo -> [GroupMember] -> GroupMember -> CM ([ChatError], [GroupMember], [AChatItem], Bool) + deletePendingMember :: ([ChatError], [GroupMember], [AChatItem], Bool) -> User -> GroupInfoKeys -> [GroupMember] -> GroupMember -> CM ([ChatError], [GroupMember], [AChatItem], Bool) deletePendingMember (accErrs, accDeleted, accACIs, accSigned) user gInfo recipients m = do (m', scopeInfo) <- mkMemberSupportChatInfo m (errs, deleted, acis, signed) <- deleteMemsSend user gInfo (Just scopeInfo) Nothing recipients [m'] pure (errs <> accErrs, deleted <> accDeleted, acis <> accACIs, accSigned || signed) - deleteMemsSend :: User -> GroupInfo -> Maybe GroupChatScopeInfo -> Maybe VersionRoster -> [GroupMember] -> [GroupMember] -> CM ([ChatError], [GroupMember], [AChatItem], Bool) - deleteMemsSend user gInfo chatScopeInfo rosterVer recipients memsToDelete = case L.nonEmpty memsToDelete of + deleteMemsSend :: User -> GroupInfoKeys -> Maybe GroupChatScopeInfo -> Maybe VersionRoster -> [GroupMember] -> [GroupMember] -> CM ([ChatError], [GroupMember], [AChatItem], Bool) + deleteMemsSend user g@(GIK gInfo _) chatScopeInfo rosterVer recipients memsToDelete = case L.nonEmpty memsToDelete of Nothing -> pure ([], [], [], False) Just memsToDelete' -> do let chatScope = toChatScope <$> chatScopeInfo events = L.map (\GroupMember {memberId} -> XGrpMemDel memberId withMessages rosterVer) memsToDelete' - (msgs_, _gsr) <- sendGroupMessages user gInfo chatScope False recipients False events + (msgs_, _gsr) <- sendGroupMessages user g chatScope False recipients False events let signed = any (either (const False) (\SndMessage {signedMsg_} -> isJust signedMsg_)) msgs_ itemsData_ = zipWith (fmap . sndItemData) memsToDelete (L.toList msgs_) skipUnwantedItem = \case @@ -3184,14 +3182,14 @@ processChatCommand cxt nm = \case | groupFeatureUserAllowed SGFFullDelete gInfo = deleteGroupMembersCIs user gInfo ms | otherwise = markGroupMembersCIsDeleted user gInfo ms membership APILeaveGroup groupId -> withUser $ \user@User {userId} -> do - gInfo@GroupInfo {membership} <- withFastStore $ \db -> getGroupInfo db cxt user groupId + g@(GIK gInfo@GroupInfo {membership} _) <- withFastStore $ \db -> getGroupInfoKeys db cxt user groupId filesInfo <- withFastStore' $ \db -> getGroupFileInfo db user gInfo withGroupLock "leaveGroup" groupId $ do cancelFilesInProgress user filesInfo msg <- if useRelays' gInfo && isRelay membership - then leaveChannelRelay gInfo - else leaveGroupSendMsg user gInfo + then leaveChannelRelay g + else leaveGroupSendMsg user g (gInfo', scopeInfo) <- mkLocalGroupChatScope gInfo ci <- saveSndChatItem user (CDGroupSnd gInfo' scopeInfo) msg (CISndGroupEvent SGEUserLeft) toView $ CEvtNewChatItems user [AChatItem SCTGroup SMDSnd (GroupChat gInfo' scopeInfo) ci] @@ -3206,9 +3204,9 @@ processChatCommand cxt nm = \case pure $ CRLeftMemberUser user gInfo' {membership = membership {memberStatus = GSMemLeft}, relayOwnStatus = relayOwnStatus'} where -- Relay leaving channel: create delivery job for cursor-based sending and async connection cleanup. - leaveChannelRelay gInfo = do + leaveChannelRelay g@(GIK gInfo _) = do msg@SndMessage {msgBody, signedMsg_} <- - liftEither . runIdentity =<< lift (createSndMessages $ Identity (GroupId groupId, groupMsgSigning False gInfo XGrpLeave, XGrpLeave)) + liftEither . runIdentity =<< lift (createSndMessages $ Identity (GroupId groupId, groupMsgSigning False g XGrpLeave, XGrpLeave)) let body = encodeBatchElement signedMsg_ msgBody withFastStore' $ \db -> do deleteGroupDeliveryTasks db gInfo @@ -3216,9 +3214,9 @@ processChatCommand cxt nm = \case createMsgDeliveryJob db gInfo (DJSGroup {jobSpec = DJRelayRemoved}) [] body lift . void $ getDeliveryJobWorker True (groupId, DWSGroup) pure msg - leaveGroupSendMsg user gInfo = do + leaveGroupSendMsg user g@(GIK gInfo _) = do (members, recipients) <- getRecipients user gInfo - msg <- sendGroupMessage' user gInfo recipients XGrpLeave + msg <- sendGroupMessage' user g recipients XGrpLeave deleteMembersConnections' user members True pure msg getRecipients user gInfo @@ -3278,7 +3276,7 @@ processChatCommand cxt nm = \case ct_ <- forM cName_ $ \cName -> withFastStore $ \db -> getContactByName db cxt user cName processChatCommand cxt nm $ APIListGroups userId (contactId' <$> ct_) search_ APIUpdateGroupProfile groupId p' -> withUser $ \user -> do - gInfo <- withFastStore $ \db -> getGroupInfo db cxt user groupId + gInfo <- withFastStore $ \db -> getGroupInfoKeys db cxt user groupId runUpdateGroupProfile user gInfo p' False UpdateGroupNames gName GroupProfile {displayName, fullName, shortDescr} -> updateGroupProfileByName gName $ \p -> p {displayName, fullName, shortDescr} @@ -3289,7 +3287,7 @@ processChatCommand cxt nm = \case ShowGroupDescription gName -> withUser $ \user -> CRGroupDescription user <$> withFastStore (\db -> getGroupInfoByName db cxt user gName) APISetPublicGroupAccess gId access@PublicGroupAccess {groupDomainClaim = newClaim} -> withUser $ \user -> do - gInfo@GroupInfo {groupProfile = p@GroupProfile {publicGroup}} <- withStore $ \db -> getGroupInfo db cxt user gId + gInfo@(GIK GroupInfo {groupProfile = p@GroupProfile {publicGroup}} _) <- withStore $ \db -> getGroupInfoKeys db cxt user gId case publicGroup of Just pg@PublicGroupProfile {groupLink, publicGroupAccess = existingAccess} -> do let domainChanged = (claimDomain <$> newClaim) /= (claimDomain <$> (existingAccess >>= groupDomainClaim)) @@ -3332,11 +3330,11 @@ processChatCommand cxt nm = \case gLnk <- withFastStore $ \db -> getGroupLink db user gInfo pure $ CRGroupLink user gInfo gLnk APIAddGroupShortLink groupId -> withUser $ \user -> do - (gInfo, gLink) <- withFastStore $ \db -> do - gInfo <- getGroupInfo db cxt user groupId + (g@(GIK gInfo _), gLink) <- withFastStore $ \db -> do + g@(GIK gInfo _) <- getGroupInfoKeys db cxt user groupId gLink <- getGroupLink db user gInfo - pure (gInfo, gLink) - gLink' <- setGroupLinkData nm user gInfo gLink + pure (g, gLink) + gLink' <- setGroupLinkData nm user g gLink pure $ CRGroupLink user gInfo gLink' APICreateMemberContact gId gMemberId -> withUser $ \user -> do (g, m) <- withFastStore $ \db -> (,) <$> getGroupInfo db cxt user gId <*> getGroupMember db cxt user gId gMemberId @@ -3522,10 +3520,10 @@ processChatCommand cxt nm = \case void . sendDirectContactMessage user contact $ XFileCancel sharedMsgId pure $ CRSndFileCancelled user (Just aci) ftm fts (Just (ChatRef CTGroup groupId scope), Just aci) -> do - (gInfo, sharedMsgId) <- withFastStore $ \db -> (,) <$> getGroupInfo db cxt user groupId <*> getSharedMsgIdByFileId db userId fileId + (g@(GIK gInfo _), sharedMsgId) <- withFastStore $ \db -> (,) <$> getGroupInfoKeys db cxt user groupId <*> getSharedMsgIdByFileId db userId fileId chatScopeInfo <- mapM (getChatScopeInfo cxt user) scope recipients <- getGroupRecipients cxt user gInfo chatScopeInfo groupKnockingVersion - void . sendGroupMessage user gInfo scope recipients False $ XFileCancel sharedMsgId + void . sendGroupMessage user g scope recipients False $ XFileCancel sharedMsgId pure $ CRSndFileCancelled user (Just aci) ftm fts (Just _, _) -> throwChatError $ CEFileInternal "invalid chat ref for file transfer" where @@ -3873,7 +3871,7 @@ processChatCommand cxt nm = \case -- relay-group joins (only via connectToRelay) carry the target relay member in preparedEntity_; -- its memberId binds the join signature so a sibling relay can't replay it relayMemberId_ = case preparedEntity_ of - Just (PCEGroup gInfo m) | useRelays' gInfo -> Just (memberId' m) + Just (PCEGroup (GIK gInfo _) m) | useRelays' gInfo -> Just (memberId' m) _ -> Nothing joinPreparedConn' xContactId_ conn@Connection {customUserProfileId} gInfo_ = do when (incognito /= isJust customUserProfileId) $ throwCmdError "incognito mode is different from prepared connection" @@ -3890,7 +3888,7 @@ processChatCommand cxt nm = \case xContactId <- mkXContactId xContactId_ -- [incognito] generate profile to send, or use membership profile for relay groups incognitoProfile_ <- case gInfo_ of - Just (Just gInfo) | useRelays' gInfo -> pure $ ExistingIncognito <$> incognitoMembershipProfile gInfo + Just (Just (GIK gInfo _)) | useRelays' gInfo -> pure $ ExistingIncognito <$> incognitoMembershipProfile gInfo _ -> if incognito then Just . NewIncognito <$> liftIO generateRandomProfile else pure Nothing let incognitoProfile = fromIncognitoProfile <$> incognitoProfile_ subMode <- chatReadVar subscriptionMode @@ -3924,8 +3922,8 @@ processChatCommand cxt nm = \case ct' <- withStore $ \db -> getContact db cxt user contactId pure $ CRSentInvitationToContact user ct' incognitoProfile _ -> throwCmdError "contact already has connection" - connectToRelay :: User -> GroupInfo -> ShortLinkContact -> CM (ShortLinkContact, GroupMember, Either ChatError ()) - connectToRelay user gInfo relayLink = do + connectToRelay :: User -> GroupInfoKeys -> ShortLinkContact -> CM (ShortLinkContact, GroupMember, Either ChatError ()) + connectToRelay user g@(GIK gInfo _) relayLink = do gVar <- asks random -- Save relayLink to re-use relay member record on retry (check by relayLink) relayMember <- withFastStore $ \db -> getCreateRelayForMember db cxt gVar user gInfo relayLink @@ -3938,7 +3936,7 @@ processChatCommand cxt nm = \case pure $ MemberId entityId _ -> throwChatError $ CEException "relay link: no relay link data or entity id" let relayLinkToConnect = CCLink cReq (Just relayLink) - void $ connectViaContact user (Just $ PCEGroup gInfo (relayMember {memberId = relayMemberId})) (incognitoMembership gInfo) relayLinkToConnect Nothing Nothing + void $ connectViaContact user (Just $ PCEGroup g (relayMember {memberId = relayMemberId})) (incognitoMembership gInfo) relayLinkToConnect Nothing Nothing relayMember' <- withFastStore $ \db -> getGroupMember db cxt user (groupId' gInfo) (groupMemberId' relayMember) pure (relayLink, relayMember', r) syncSubscriberRelays :: User -> GroupInfo -> [ShortLinkContact] -> CM () @@ -3971,21 +3969,19 @@ processChatCommand cxt nm = \case pure (connId, chatV) mkXContactId :: Maybe XContactId -> CM XContactId mkXContactId = maybe (XContactId <$> drgRandomBytes 16) pure - joinContact :: User -> Connection -> ConnReqContact -> Maybe Profile -> XContactId -> Maybe SharedMsgId -> Maybe (SharedMsgId, MsgContent) -> Maybe (Maybe GroupInfo) -> Maybe MemberId -> PQSupport -> CM Connection + joinContact :: User -> Connection -> ConnReqContact -> Maybe Profile -> XContactId -> Maybe SharedMsgId -> Maybe (SharedMsgId, MsgContent) -> Maybe (Maybe GroupInfoKeys) -> Maybe MemberId -> PQSupport -> CM Connection joinContact user conn cReq incognitoProfile xContactId welcomeSharedMsgId msg_ gInfo_ relayMemberId_ pqSup = do -- gInfo_ is Maybe (Maybe GroupInfo), where Just Nothing means "some unknown group", e.g. when joining via link without profile profileToSend <- presentUserBadge user incognitoProfile $ case gInfo_ of - Just gInfo_' -> userProfileInGroup' user gInfo_' incognitoProfile + Just gInfo_' -> userProfileInGroup' user ((\(GIK g _) -> g) <$> gInfo_') incognitoProfile Nothing -> userProfileDirect user incognitoProfile Nothing True dm <- case gInfo_ of - Just (Just gInfo) - | useRelays' gInfo -> case relayMemberId_ of + Just (Just gInfo@(GIK g gks)) + | useRelays' g -> case relayMemberId_ of Just relayMemberId -> encodeXMemberConnInfo gInfo relayMemberId profileToSend Nothing -> throwChatError $ CEInternalError "relay group join without target relay memberId" - | otherwise -> do - gInfo' <- createUserMemberKey gInfo - encodeConnInfoPQ pqSup $ XContact profileToSend (groupMemberKey gInfo') (Just xContactId) welcomeSharedMsgId msg_ + | otherwise -> encodeConnInfoPQ pqSup $ XContact profileToSend (Just $ groupMemberKey gks) (Just xContactId) welcomeSharedMsgId msg_ _ -> encodeConnInfoPQ pqSup $ XContact profileToSend Nothing (Just xContactId) welcomeSharedMsgId msg_ subMode <- chatReadVar subscriptionMode @@ -4100,8 +4096,8 @@ processChatCommand cxt nm = \case void (sendDirectContactMessage user ct' $ XInfo p Nothing) `catchAllErrors` eToView lift . when (directOrUsed ct') $ createSndFeatureItems user ct ct' pure $ CRContactPrefsUpdated user ct ct' - runUpdateGroupProfile :: User -> GroupInfo -> GroupProfile -> Bool -> CM ChatResponse - runUpdateGroupProfile user gInfo@GroupInfo {businessChat, groupProfile = p@GroupProfile {displayName = n}} p'@GroupProfile {displayName = n', image = img', memberAdmission = ma'} domainVerified = do + runUpdateGroupProfile :: User -> GroupInfoKeys -> GroupProfile -> Bool -> CM ChatResponse + runUpdateGroupProfile user (GIK gInfo@GroupInfo {businessChat, groupProfile = p@GroupProfile {displayName = n}} gks) p'@GroupProfile {displayName = n', image = img', memberAdmission = ma'} domainVerified = do assertUserGroupRole gInfo GROwner when (n /= n') $ checkValidName n' checkProfileImageSize img' @@ -4121,14 +4117,14 @@ processChatCommand cxt nm = \case withStore $ \db -> getGroupMemberByMemberId db cxt user gInfo' businessId let p'' = p' {displayName, fullName, shortDescr, image} :: GroupProfile recipients = filter memberCurrentOrPending oldMs - void $ sendGroupMessage user gInfo' Nothing recipients False (XGrpInfo p'') + void $ sendGroupMessage user (GIK gInfo' gks) Nothing recipients False (XGrpInfo p'') let ps' = fromMaybe defaultBusinessGroupPrefs $ groupPreferences p' recipients = filter memberCurrentOrPending newMs - sendGroupMessage user gInfo' Nothing recipients False $ XGrpPrefs ps' + sendGroupMessage user (GIK gInfo' gks) Nothing recipients False $ XGrpPrefs ps' Nothing -> do - void $ setGroupLinkData' nm user gInfo' + void $ setGroupLinkData' nm user (GIK gInfo' gks) recipients <- getRecipients - sendGroupMessage user gInfo' Nothing recipients False (XGrpInfo p') + sendGroupMessage user (GIK gInfo' gks) Nothing recipients False (XGrpInfo p') where getRecipients | useRelays' gInfo' = withFastStore' $ \db -> getGroupRelayMembers db cxt user gInfo' @@ -4152,13 +4148,13 @@ processChatCommand cxt nm = \case when (memberStatus membership == GSMemInvited) $ throwChatError (CEGroupNotJoined g) when (memberRemoved membership) $ throwChatError CEGroupMemberUserRemoved unless (memberActive membership) $ throwChatError CEGroupMemberNotActive - delGroupChatItemsForMembers :: User -> GroupInfo -> Maybe GroupChatScopeInfo -> [GroupMember] -> [CChatItem 'CTGroup] -> CM [ChatItemDeletion] - delGroupChatItemsForMembers user gInfo chatScopeInfo ms items = do + delGroupChatItemsForMembers :: User -> GroupInfoKeys -> Maybe GroupChatScopeInfo -> [GroupMember] -> [CChatItem 'CTGroup] -> CM [ChatItemDeletion] + delGroupChatItemsForMembers user g@(GIK gInfo _) chatScopeInfo ms items = do assertDeletable gInfo items assertUserGroupRole gInfo GRModerator let msgMemIds = itemsMsgMemIds gInfo items -- moderation deletes always sign (attributable; avoids the catch-up-moderator divergence) - signedEvents = L.nonEmpty $ map (\(msgId, memId) -> let evt = XMsgDel msgId memId (toMsgScope gInfo <$> chatScopeInfo) False in (groupMsgSigning True gInfo evt, evt)) msgMemIds + signedEvents = L.nonEmpty $ map (\(msgId, memId) -> let evt = XMsgDel msgId memId (toMsgScope gInfo <$> chatScopeInfo) False in (groupMsgSigning True g evt, evt)) msgMemIds mapM_ (sendGroupSignedMessages_ gInfo ms) signedEvents delGroupChatItems user gInfo chatScopeInfo items True where @@ -4196,10 +4192,10 @@ processChatCommand cxt nm = \case updateGroupProfileByName = updateGroupProfileByName_ Nothing updateGroupProfileByName_ :: Maybe GroupFeature -> GroupName -> (GroupProfile -> GroupProfile) -> CM ChatResponse updateGroupProfileByName_ feature_ gName update = withUser $ \user -> do - gInfo@GroupInfo {groupProfile = p} <- withStore $ \db -> - getGroupIdByName db user gName >>= getGroupInfo db cxt user + gInfo@(GIK g@GroupInfo {groupProfile = p} _) <- withStore $ \db -> + getGroupIdByName db user gName >>= getGroupInfoKeys db cxt user forM_ feature_ $ \feature -> do - let channel = useRelays' gInfo + let channel = useRelays' g applicable = if channel then groupFeatureInChannel feature else groupFeatureInRegularGroup feature unless applicable $ throwCmdError $ T.unpack (groupFeatureNameText feature) <> " is not available in " <> (if channel then "channels" else "groups") @@ -4257,29 +4253,30 @@ processChatCommand cxt nm = \case groupId <- getGroupIdByName db user gName groupMemberId <- getGroupMemberIdByName db user groupId groupMemberName pure (groupId, groupMemberId) - newGroup :: User -> IncognitoEnabled -> GroupProfile -> Bool -> MemberId -> Maybe GroupKeys -> Maybe Int64 -> CM GroupInfo - newGroup user incognito gProfile@GroupProfile {displayName, image, memberAdmission} useRelays memberId groupKeys_ publicMemberCount_ = do + newGroup :: User -> IncognitoEnabled -> GroupProfile -> MemberId -> GroupKeys -> Maybe Int64 -> CM GroupInfo + newGroup user incognito gProfile@GroupProfile {displayName, image, memberAdmission, publicGroup} memberId groupKeys publicMemberCount_ = do checkValidName displayName checkProfileImageSize image checkGroupProfileSize gProfile - when (useRelays && isJust (memberAdmission >>= review)) $ throwCmdError "Admission review is not supported in channels" + when (isPublicGroup groupKeys && isJust (memberAdmission >>= review)) $ throwCmdError "Admission review is not supported in channels" + when (not (isPublicGroup groupKeys) && isJust publicGroup) $ throwCmdError "publicGroup is not allowed in groups" -- [incognito] generate incognito profile for group membership incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing - withFastStore $ \db -> createNewGroup db cxt user gProfile incognitoProfile useRelays memberId groupKeys_ publicMemberCount_ + withFastStore $ \db -> createNewGroup db cxt user gProfile incognitoProfile memberId groupKeys publicMemberCount_ createNewGroupItems :: User -> GroupInfo -> CM () createNewGroupItems user gInfo = do let cd = CDGroupSnd gInfo Nothing createInternalChatItem user cd CIChatBanner (Just epochStart) createInternalChatItem user cd (CISndGroupE2EEInfo $ e2eInfoGroup gInfo) Nothing createGroupFeatureItems user cd CISndGroupFeature gInfo - sendGrpInvitation :: User -> Contact -> GroupInfo -> GroupMember -> ConnReqInvitation -> CM () - sendGrpInvitation user ct@Contact {contactId, localDisplayName} gInfo@GroupInfo {groupId, groupProfile, membership, businessChat} m@GroupMember {groupMemberId, memberId, memberRole = memRole} cReq = do + sendGrpInvitation :: User -> Contact -> GroupInfoKeys -> GroupMember -> ConnReqInvitation -> CM () + sendGrpInvitation user ct@Contact {contactId, localDisplayName} (GIK gInfo@GroupInfo {groupId, groupProfile, membership, businessChat} gks) m@GroupMember {groupMemberId, memberId, memberRole = memRole} cReq = do let currentMemCount = fromIntegral $ currentMembers $ groupSummary gInfo GroupMember {memberRole = userRole, memberId = userMemberId} = membership groupInv = GroupInvitation { fromMember = MemberIdRole userMemberId userRole, - fromMemberKey = groupMemberKey gInfo, + fromMemberKey = Just $ groupMemberKey gks, invitedMember = MemberIdRole memberId memRole, connRequest = cReq, groupProfile, @@ -4826,19 +4823,17 @@ processChatCommand cxt nm = \case quoteData ChatItem {content = CISndMsgContent qmc} = pure (qmc, CIQDirectSnd, True) quoteData ChatItem {content = CIRcvMsgContent qmc} = pure (qmc, CIQDirectRcv, False) quoteData _ = throwError SEInvalidQuote - sendGroupContentMessages :: User -> GroupInfo -> Maybe GroupChatScope -> ShowGroupAsSender -> Bool -> Maybe Int -> Bool -> NonEmpty ComposedMessageReq -> CM ChatResponse - sendGroupContentMessages user gInfo scope showGroupAsSender live itemTTL sign cmrs = do + sendGroupContentMessages :: User -> GroupInfoKeys -> Maybe GroupChatScope -> ShowGroupAsSender -> Bool -> Maybe Int -> Bool -> NonEmpty ComposedMessageReq -> CM ChatResponse + sendGroupContentMessages user gInfo@(GIK g _) scope showGroupAsSender live itemTTL sign cmrs = do assertMultiSendable live cmrs chatScopeInfo <- mapM (getChatScopeInfo cxt user) scope - -- the member key is created before the send, so that signatures and file badge proofs assert the same key - gInfo' <- createUserMemberKey gInfo - recipients <- getGroupRecipients cxt user gInfo' chatScopeInfo modsCompatVersion - sendGroupContentMessages_ user gInfo' scope showGroupAsSender chatScopeInfo recipients live itemTTL sign cmrs + recipients <- getGroupRecipients cxt user g chatScopeInfo modsCompatVersion + sendGroupContentMessages_ user gInfo scope showGroupAsSender chatScopeInfo recipients live itemTTL sign cmrs where hasReport = any (\(ComposedMessage {msgContent}, _, _, _) -> isReport msgContent) cmrs modsCompatVersion = if hasReport then contentReportsVersion else groupKnockingVersion - sendGroupContentMessages_ :: User -> GroupInfo -> Maybe GroupChatScope -> ShowGroupAsSender -> Maybe GroupChatScopeInfo -> [GroupMember] -> Bool -> Maybe Int -> Bool -> NonEmpty ComposedMessageReq -> CM ChatResponse - sendGroupContentMessages_ user gInfo@GroupInfo {groupId, membership} scope showGroupAsSender chatScopeInfo recipients live itemTTL sign cmrs = do + sendGroupContentMessages_ :: User -> GroupInfoKeys -> Maybe GroupChatScope -> ShowGroupAsSender -> Maybe GroupChatScopeInfo -> [GroupMember] -> Bool -> Maybe Int -> Bool -> NonEmpty ComposedMessageReq -> CM ChatResponse + sendGroupContentMessages_ user g@(GIK gInfo@GroupInfo {groupId, membership} _) scope showGroupAsSender chatScopeInfo recipients live itemTTL sign cmrs = do forM_ allowedRole $ assertUserGroupRole gInfo assertGroupContentAllowed processComposedMessages @@ -4868,7 +4863,7 @@ processChatCommand cxt nm = \case (fInvs_, ciFiles_) <- L.unzip <$> setupSndFileTransfers (length recipients) timed_ <- sndGroupCITimed live gInfo itemTTL (chatMsgEvents, quotedItems_) <- L.unzip <$> prepareMsgs (L.zip cmrs fInvs_) timed_ - (msgs_, gsr) <- sendGroupMessages user gInfo Nothing showGroupAsSender recipients signMsgs chatMsgEvents + (msgs_, gsr) <- sendGroupMessages user g Nothing showGroupAsSender recipients signMsgs chatMsgEvents let itemsData = prepareSndItemsData (L.toList cmrs) (L.toList ciFiles_) (L.toList quotedItems_) (L.toList msgs_) cis_ <- saveSndChatItems user (CDGroupSnd gInfo chatScopeInfo) showGroupAsSender itemsData timed_ live when (length cis_ /= length cmrs) $ logError "sendGroupContentMessages: cmrs and cis_ length mismatch" @@ -4992,12 +4987,12 @@ processChatCommand cxt nm = \case where getDirectCI :: DB.Connection -> ChatItemId -> IO (Either ChatError (CChatItem 'CTDirect)) getDirectCI db itemId = runExceptT . withExceptT ChatErrorStore $ getDirectChatItem db user ctId itemId - getCommandGroupChatItems :: User -> Int64 -> NonEmpty ChatItemId -> CM (GroupInfo, [CChatItem 'CTGroup]) + getCommandGroupChatItems :: User -> Int64 -> NonEmpty ChatItemId -> CM (GroupInfoKeys, [CChatItem 'CTGroup]) getCommandGroupChatItems user gId itemIds = do - gInfo <- withFastStore $ \db -> getGroupInfo db cxt user gId + g@(GIK gInfo _) <- withFastStore $ \db -> getGroupInfoKeys db cxt user gId (errs, items) <- lift $ partitionEithers <$> withStoreBatch (\db -> map (getGroupCI db gInfo) (L.toList itemIds)) unless (null errs) $ toView $ CEvtChatErrors errs - pure (gInfo, items) + pure (g, items) where getGroupCI :: DB.Connection -> GroupInfo -> ChatItemId -> IO (Either ChatError (CChatItem 'CTGroup)) getGroupCI db gInfo itemId = runExceptT . withExceptT ChatErrorStore $ getGroupCIWithReactions db user gInfo itemId @@ -5206,7 +5201,7 @@ presentUserBadgeToContacts user'@User {userId, profile = LocalProfile {localBadg Just User {userId = activeId} | activeId == userId -> Just user' active_ -> active_ lift $ withAgent' $ \a -> setUserEntitlement a (aUserId user') (badgeServerCredential localBadge) - cxt <- asks $ mkStoreCxt . config + cxt <- chatStoreCxt contacts <- withFastStore' $ \db -> getUserContacts db cxt user' withChatLock "presentUserBadge" $ forM_ contacts $ \ct -> case contactSendConn_ ct of @@ -5839,8 +5834,8 @@ runRelayGroupLinkChecks user = do where checkRelayServedGroups = do cxt <- chatStoreCxt - relayGroups <- withStore' $ \db -> getRelayServedGroups db cxt user - forM_ relayGroups $ \gInfo@GroupInfo {groupProfile = gp} -> flip catchAllErrors eToView $ do + relayGroups <- withStore $ \db -> getRelayServedGroups db cxt user + forM_ relayGroups $ \g@(GIK gInfo@GroupInfo {groupProfile = gp} _) -> flip catchAllErrors eToView $ do case publicGroup gp of Just PublicGroupProfile {groupLink = sLnk} -> do (_, ContactLinkData _ UserContactData {relays = relayLinks}, _) <- @@ -5856,7 +5851,7 @@ runRelayGroupLinkChecks user = do else void $ withStore' $ \db -> updateRelayOwnStatusFromTo db gInfo RSActive RSInactive _ -> pure () _ -> pure () - sendRelayCapIfNeeded user gInfo + sendRelayCapIfNeeded user g checkRelayInactiveGroups = do cxt <- chatStoreCxt ttl <- asks (relayInactiveTTL . config) diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs index 441d52ffe4..e40e2466a5 100644 --- a/src/Simplex/Chat/Library/Internal.hs +++ b/src/Simplex/Chat/Library/Internal.hs @@ -470,9 +470,9 @@ sndBadgeProof_ User {profile = LocalProfile {localBadge}} ph = case localBadge o _ -> pure Nothing sndGroupChatBinding :: GroupInfo -> ShowGroupAsSender -> Maybe ByteString -sndGroupChatBinding GroupInfo {groupKeys, membership = GroupMember {memberId}} asGroup - | asGroup = (\PublicGroupKeys {publicGroupId} -> encodeChatBinding CBChannel $ smpEncode publicGroupId) <$> (groupKeys >>= publicGroupKeys) - | otherwise = (\GroupKeys {memberPrivKey} -> encodeChatBinding CBGroup $ groupBindingData groupKeys memberId (C.publicKey memberPrivKey)) <$> groupKeys +sndGroupChatBinding gInfo@GroupInfo {membership = GroupMember {memberId, memberPubKey}} asGroup + | asGroup = (\PublicGroupProfile {publicGroupId} -> encodeChatBinding CBChannel $ smpEncode publicGroupId) <$> publicGroup' gInfo + | otherwise = (\k -> encodeChatBinding CBGroup $ groupBindingData gInfo memberId k) <$> memberPubKey cryptoFileDigest :: CryptoFile -> CM FD.FileDigest cryptoFileDigest (CryptoFile filePath cfArgs) = do @@ -1020,11 +1020,11 @@ acceptContactRequestAsync agentAcceptContactAsync cmdId acId True cReqInvId (XInfo profileToSend Nothing) cReqPQSup subMode pure ct' -acceptGroupJoinRequestAsync :: User -> Int64 -> GroupInfo -> InvitationId -> VersionRangeChat -> Profile -> Maybe XContactId -> Maybe MemberId -> Maybe SharedMsgId -> GroupAcceptance -> GroupMemberRole -> Maybe IncognitoProfile -> Maybe MemberKey -> Maybe GroupMember -> CM GroupMember +acceptGroupJoinRequestAsync :: User -> Int64 -> GroupInfoKeys -> InvitationId -> VersionRangeChat -> Profile -> Maybe XContactId -> Maybe MemberId -> Maybe SharedMsgId -> GroupAcceptance -> GroupMemberRole -> Maybe IncognitoProfile -> Maybe MemberKey -> Maybe GroupMember -> CM GroupMember acceptGroupJoinRequestAsync user@User {userId} uclId - gInfo@GroupInfo {groupProfile, membership, businessChat} + (GIK gInfo@GroupInfo {groupProfile, membership, businessChat} gks) cReqInvId cReqChatVRange cReqProfile @@ -1058,7 +1058,7 @@ acceptGroupJoinRequestAsync GroupLinkInvitation { fromMember = MemberIdRole userMemberId userRole, fromMemberName = displayName, - fromMemberKey = groupMemberKey gInfo, + fromMemberKey = Just $ groupMemberKey gks, invitedMember = MemberIdRole memberId gLinkMemRole, groupProfile, accepted = Just gAccepted, @@ -1106,11 +1106,11 @@ acceptGroupJoinSendRejectAsync agentAcceptContactAsync cmdId acId False cReqInvId msg PQSupportOff subMode pure m -acceptBusinessJoinRequestAsync :: User -> Int64 -> GroupInfo -> GroupMember -> UserContactRequest -> CM (GroupInfo, GroupMember) +acceptBusinessJoinRequestAsync :: User -> Int64 -> GroupInfoKeys -> GroupMember -> UserContactRequest -> CM (GroupInfo, GroupMember) acceptBusinessJoinRequestAsync user uclId - gInfo@GroupInfo {membership = GroupMember {memberRole = userRole, memberId = userMemberId}} + (GIK gInfo@GroupInfo {membership = GroupMember {memberRole = userRole, memberId = userMemberId}} gks) clientMember@GroupMember {groupMemberId, memberId} UserContactRequest {agentInvitationId = AgentInvId cReqInvId, cReqChatVRange, xContactId} = do cxt <- chatStoreCxt @@ -1122,7 +1122,7 @@ acceptBusinessJoinRequestAsync GroupLinkInvitation { fromMember = MemberIdRole userMemberId userRole, fromMemberName = displayName, - fromMemberKey = groupMemberKey gInfo, + fromMemberKey = Just $ groupMemberKey gks, invitedMember = MemberIdRole memberId GRMember, groupProfile = businessGroupProfile userProfile groupPreferences, accepted = Just GAAccepted, @@ -1197,15 +1197,15 @@ businessGroupProfile :: Profile -> GroupPreferences -> GroupProfile businessGroupProfile Profile {displayName, fullName, shortDescr, description, image} groupPreferences = GroupProfile {displayName, fullName, description, shortDescr, image, publicGroup = Nothing, groupPreferences = Just groupPreferences, memberAdmission = Nothing} -introduceToModerators :: StoreCxt -> User -> GroupInfo -> GroupMember -> CM () -introduceToModerators cxt user gInfo@GroupInfo {groupId} m@GroupMember {memberRole, memberId} = do +introduceToModerators :: StoreCxt -> User -> GroupInfoKeys -> GroupMember -> CM () +introduceToModerators cxt user gInfo@(GIK g@GroupInfo {groupId} _) m@GroupMember {memberRole, memberId} = do forM_ (memberConn m) $ \mConn -> do let msg = if maxVersion (memberChatVRange m) >= groupKnockingVersion then XGrpLinkAcpt GAPendingReview memberRole memberId else XMsgNew $ mcSimple (MCText pendingReviewMessage) void $ sendDirectMemberMessage mConn msg groupId - modMs <- withStore' $ \db -> getGroupModerators db cxt user gInfo + modMs <- withStore' $ \db -> getGroupModerators db cxt user g let rcpModMs = filter shouldIntroduceToMod modMs introduceMember user gInfo m rcpModMs (Just $ MSMember $ memberId' m) where @@ -1215,15 +1215,15 @@ introduceToModerators cxt user gInfo@GroupInfo {groupId} m@GroupMember {memberRo && groupMemberId' mem /= groupMemberId' m && maxVersion (memberChatVRange mem) >= groupKnockingVersion -introduceToAll :: StoreCxt -> User -> GroupInfo -> GroupMember -> CM () -introduceToAll cxt user gInfo m = do - (members, vector) <- withStore $ \db -> liftM2 (,) (liftIO $ getGroupMembers db cxt user gInfo) (getMemberRelationsVector db m) +introduceToAll :: StoreCxt -> User -> GroupInfoKeys -> GroupMember -> CM () +introduceToAll cxt user gInfo@(GIK g _) m = do + (members, vector) <- withStore $ \db -> liftM2 (,) (liftIO $ getGroupMembers db cxt user g) (getMemberRelationsVector db m) let recipients = filter (shouldIntroduce m vector) members introduceMember user gInfo m recipients Nothing -introduceToRemaining :: StoreCxt -> User -> GroupInfo -> GroupMember -> CM () -introduceToRemaining cxt user gInfo m = do - (members, vector) <- withStore $ \db -> liftM2 (,) (liftIO $ getGroupMembers db cxt user gInfo) (getMemberRelationsVector db m) +introduceToRemaining :: StoreCxt -> User -> GroupInfoKeys -> GroupMember -> CM () +introduceToRemaining cxt user gInfo@(GIK g _) m = do + (members, vector) <- withStore $ \db -> liftM2 (,) (liftIO $ getGroupMembers db cxt user g) (getMemberRelationsVector db m) let recipients = filter (shouldIntroduce m vector) members introduceMember user gInfo m recipients Nothing @@ -1233,17 +1233,17 @@ shouldIntroduce m vec mem = && groupMemberId' mem /= groupMemberId' m && getRelation (indexInGroup mem) vec == MRNew -introduceMember :: User -> GroupInfo -> GroupMember -> [GroupMember] -> Maybe MsgScope -> CM () +introduceMember :: User -> GroupInfoKeys -> GroupMember -> [GroupMember] -> Maybe MsgScope -> CM () introduceMember _ _ GroupMember {activeConn = Nothing} _ _ = throwChatError $ CEInternalError "member connection not active" -introduceMember user gInfo toMember@GroupMember {activeConn = Just conn} introduceToMembers msgScope = do - void . sendGroupMessage' user gInfo introduceToMembers $ XGrpMemNew (memberInfo gInfo toMember) msgScope +introduceMember user gInfo@(GIK g _) toMember@GroupMember {activeConn = Just conn} introduceToMembers msgScope = do + void . sendGroupMessage' user gInfo introduceToMembers $ XGrpMemNew (memberInfo g toMember) msgScope sendIntroductions introduceToMembers where sendIntroductions reMembers = do updateToMemberVector reMembers updateReMembersVectors reMembers shuffledReMembers <- liftIO $ shuffleMembers reMembers - let events = map (memberIntroEvt gInfo) shuffledReMembers + let events = map (memberIntroEvt g) shuffledReMembers forM_ (L.nonEmpty events) $ \events' -> sendGroupMemberMessages user gInfo conn events' updateToMemberVector :: [GroupMember] -> CM () @@ -1272,11 +1272,11 @@ memberIntroEvt gInfo reMember = -- Forward the saved owner-signed roster verbatim (reusing its signed shared_msg_id), then the -- blob chunks, so the recipient verifies the owner signature. -serveRoster :: User -> GroupInfo -> GroupMember -> CM () -serveRoster user gInfo member = +serveRoster :: User -> GroupInfoKeys -> GroupMember -> CM () +serveRoster user gInfo@(GIK g _) member = when (member `supportsVersion` groupRosterVersion) $ do cxt <- chatStoreCxt - withStore' (\db -> getStoredGroupRoster db gInfo) >>= \case + withStore' (\db -> getStoredGroupRoster db g) >>= \case Just (ownerGMId, brokerTs, sm@SignedMsg {signedBody}, blob_, storedVer_) -> case J.eitherDecodeStrict' signedBody :: Either String (ChatMessage 'Json) of Left e -> logError $ "serveRoster: cannot decode saved roster message: " <> tshow e @@ -1297,24 +1297,24 @@ serveRoster user gInfo member = -- Used in groups with relays to introduce moderators and above to a new member, -- and to announce the new member to moderators and above. -- This doesn't create introduction records in db, compared to above methods. -introduceInChannel :: StoreCxt -> User -> GroupInfo -> GroupMember -> CM () +introduceInChannel :: StoreCxt -> User -> GroupInfoKeys -> GroupMember -> CM () introduceInChannel _ _ _ GroupMember {activeConn = Nothing} = throwChatError $ CEInternalError "member connection not active" -introduceInChannel cxt user gInfo subscriber@GroupMember {activeConn = Just conn, indexInGroup = subscriberIdx} = do +introduceInChannel cxt user g@(GIK gInfo _) subscriber@GroupMember {activeConn = Just conn, indexInGroup = subscriberIdx} = do (owners, adminsMods) <- withStore' $ \db -> (,) <$> getGroupOwners db cxt user gInfo <*> getGroupAdminsMods db cxt user gInfo let modMs = owners <> adminsMods - void $ sendGroupMessage' user gInfo modMs $ XGrpMemNew (memberInfo gInfo subscriber) Nothing + void $ sendGroupMessage' user g modMs $ XGrpMemNew (memberInfo gInfo subscriber) Nothing withStore' $ \db -> setMemberVectorNewRelations db subscriber [(indexInGroup m, (IDSubjectIntroduced, MRIntroduced)) | m <- modMs] -- owner intros first so the joiner has the owner profile loaded before applying the saved roster (signed by the owner) sendIntros owners - serveRoster user gInfo subscriber + serveRoster user g subscriber sendIntros adminsMods withStore' $ \db -> setMembersVectorsNewRelation db modMs subscriberIdx IDSubjectIntroduced MRIntroduced where sendIntros ms = forM_ (L.nonEmpty $ map (memberIntroEvt gInfo) ms) $ \evts -> - sendGroupMemberMessages user gInfo conn evts + sendGroupMemberMessages user g conn evts userProfileInGroup :: User -> GroupInfo -> Maybe Profile -> Profile userProfileInGroup user g = userProfileInGroup' user (Just g) @@ -1558,29 +1558,29 @@ splitFileDescr partSize lastSize rfdText = splitParts 1 rfdText then fileDescr :| [] else fileDescr <| splitParts (partNo + 1) rest -setGroupLinkData' :: NetworkRequestMode -> User -> GroupInfo -> CM (Maybe GroupLink) -setGroupLinkData' nm user gInfo = - withFastStore' (\db -> runExceptT $ getGroupLink db user gInfo) >>= \case +setGroupLinkData' :: NetworkRequestMode -> User -> GroupInfoKeys -> CM (Maybe GroupLink) +setGroupLinkData' nm user gInfo@(GIK g _) = + withFastStore' (\db -> runExceptT $ getGroupLink db user g) >>= \case Right gLink@GroupLink {shortLinkDataSet} | shortLinkDataSet -> Just <$> setGroupLinkData nm user gInfo gLink _ -> pure Nothing -setGroupLinkData :: NetworkRequestMode -> User -> GroupInfo -> GroupLink -> CM GroupLink -setGroupLinkData nm user gInfo gLink = do +setGroupLinkData :: NetworkRequestMode -> User -> GroupInfoKeys -> GroupLink -> CM GroupLink +setGroupLinkData nm user g@(GIK gInfo _) gLink = do cxt <- chatStoreCxt (conn, groupRelays) <- withFastStore $ \db -> (,) <$> getGroupLinkConnection db cxt user gInfo <*> liftIO (getPublishableGroupRelays db cxt user gInfo) - let (userLinkData, crClientData) = groupLinkData gInfo gLink groupRelays + let (userLinkData, crClientData) = groupLinkData g gLink groupRelays linkType = if useRelays' gInfo then CCTChannel else CCTGroup sLnk <- shortenShortLink' . setShortLinkType_ linkType =<< withAgent (\a -> setConnShortLink a nm (aConnId conn) SCMContact userLinkData (Just crClientData) False Nothing) withFastStore' $ \db -> setGroupLinkShortLink db gLink sLnk -setGroupLinkDataAsync :: User -> GroupInfo -> GroupLink -> CM () -setGroupLinkDataAsync user gInfo gLink = do +setGroupLinkDataAsync :: User -> GroupInfoKeys -> GroupLink -> CM () +setGroupLinkDataAsync user g@(GIK gInfo _) gLink = do cxt <- chatStoreCxt (conn, groupRelays) <- withStore $ \db -> (,) <$> getGroupLinkConnection db cxt user gInfo <*> liftIO (getPublishableGroupRelays db cxt user gInfo) - let (userLinkData, crClientData) = groupLinkData gInfo gLink groupRelays + let (userLinkData, crClientData) = groupLinkData g gLink groupRelays setAgentConnShortLinkAsync user conn userLinkData (Just crClientData) connectToRelayAsync :: User -> GroupInfo -> ShortLinkContact -> CM () @@ -1595,15 +1595,15 @@ connectToRelayAsync user gInfo relayLink = do newConnIds <- getAgentConnShortLinkAsync user CFGetRelayDataJoin Nothing relayLink withFastStore' $ \db -> createRelayMemberConnectionAsync db user gInfo relayMember relayLink newConnIds subMode -updatePublicGroupData :: User -> GroupInfo -> CM GroupInfo -updatePublicGroupData user gInfo +updatePublicGroupData :: User -> GroupInfo -> GroupKeys -> CM GroupInfo +updatePublicGroupData user gInfo gks | useRelays' gInfo && memberRole' (membership gInfo) == GROwner = do cxt <- chatStoreCxt (gInfo', gLink) <- withStore $ \db -> do gInfo' <- updatePublicMemberCount db cxt user gInfo gLink <- getGroupLink db user gInfo' pure (gInfo', gLink) - setGroupLinkDataAsync user gInfo' gLink + setGroupLinkDataAsync user (GIK gInfo' gks) gLink pure gInfo' | useRelays' gInfo && isRelay (membership gInfo) = do cxt <- chatStoreCxt @@ -1647,14 +1647,14 @@ updateContactFromLinkData user ct@Contact {profile = profile@LocalProfile {conta verifyChanged = contactDomainVerified /= Just True || claimChanged -- TODO [relays] owner: set owners on updating link data (multi-owner) -groupLinkData :: GroupInfo -> GroupLink -> [GroupRelay] -> (UserConnLinkData 'CMContact, CRClientData) -groupLinkData gInfo@GroupInfo {groupProfile, groupSummary = GroupSummary {publicMemberCount}, membership = GroupMember {memberId}, groupKeys} GroupLink {groupLinkId} groupRelays = +groupLinkData :: GroupInfoKeys -> GroupLink -> [GroupRelay] -> (UserConnLinkData 'CMContact, CRClientData) +groupLinkData (GIK gInfo@GroupInfo {groupProfile, groupSummary = GroupSummary {publicMemberCount}, membership = GroupMember {memberId}} gks) GroupLink {groupLinkId} groupRelays = let direct = not $ useRelays' gInfo relays = mapMaybe (\GroupRelay {relayLink} -> relayLink) groupRelays publicGroupData_ = PublicGroupData <$> publicMemberCount userData = encodeShortLinkData $ GroupShortLinkData {groupProfile, publicGroupData = publicGroupData_} - owners = case groupKeys of - Just GroupKeys {publicGroupKeys = Just PublicGroupKeys {groupRootKey = GRKPrivate rootPrivKey}, memberPrivKey} -> + owners = case gks of + GKPublicGroup {groupRootKey = GRKPrivate rootPrivKey, memberPrivKey} -> let ownerId = unMemberId memberId ownerKey = C.publicKey memberPrivKey authOwnerSig = C.sign' rootPrivKey (ownerId <> C.encodePubKey ownerKey) @@ -2308,18 +2308,19 @@ createSndMessages idsEvents = do encodeMessage sharedMsgId = encodeChatMessage maxEncodedMsgLength ChatMessage {chatVRange = vr, msgId = Just sharedMsgId, chatMsgEvent = evnt} -groupMsgSigning :: Bool -> GroupInfo -> ChatMsgEvent e -> Maybe MsgSigning -groupMsgSigning sign GroupInfo {membership = GroupMember {memberId}, groupKeys} evt = case groupKeys of - Just gks@GroupKeys {memberPrivKey} | shouldSign -> Just $ MsgSigning CBGroup bindingData KRMember memberPrivKey - where - tag = toCMEventTag evt - shouldSign = requiresSignature tag || (sign && signableContent tag) - bindingData = groupBindingData (Just gks) memberId (C.publicKey memberPrivKey) - _ -> Nothing - -groupBindingData :: Maybe GroupKeys -> MemberId -> C.PublicKeyEd25519 -> ByteString -groupBindingData gks memberId memberKey = case gks >>= publicGroupKeys of - Just PublicGroupKeys {publicGroupId} -> smpEncode (publicGroupId, memberId) +groupMsgSigning :: Bool -> GroupInfoKeys -> ChatMsgEvent e -> Maybe MsgSigning +groupMsgSigning sign (GIK gInfo@GroupInfo {membership = GroupMember {memberId}} gks) evt + | shouldSign = Just $ MsgSigning CBGroup bindingData KRMember memberPrivKey' + | otherwise = Nothing + where + memberPrivKey' = memberPrivKey gks + tag = toCMEventTag evt + shouldSign = requiresSignature tag || (sign && signableContent tag) + bindingData = groupBindingData gInfo memberId (C.publicKey memberPrivKey') + +groupBindingData :: GroupInfo -> MemberId -> C.PublicKeyEd25519 -> ByteString +groupBindingData gInfo memberId memberKey = case publicGroup' gInfo of + Just PublicGroupProfile {publicGroupId} -> smpEncode (publicGroupId, memberId) Nothing -> smpEncode (memberId, memberKey) type HistoryFile = (FileInvitation, RcvFileDescrText, Maybe UTCTime, Maybe BadgeProof) @@ -2330,11 +2331,11 @@ directChatBinding ct = encodeChatBinding CBDirect <$> withAgent (`getConnectionRatchetAdHash` aConnId conn) rcvGroupChatBinding :: GroupInfo -> Maybe GroupMember -> ShowGroupAsSender -> Maybe BadgeProof -> Maybe ByteString -rcvGroupChatBinding GroupInfo {groupKeys} m_ asGroup badge_ = - case (groupKeys >>= publicGroupKeys, asGroup, m_) of - (Just PublicGroupKeys {publicGroupId}, True, _) -> +rcvGroupChatBinding gInfo m_ asGroup badge_ = + case (publicGroup' gInfo, asGroup, m_) of + (Just PublicGroupProfile {publicGroupId}, True, _) -> Just $ encodeChatBinding CBChannel $ smpEncode publicGroupId - (Just PublicGroupKeys {publicGroupId}, False, Just GroupMember {memberId}) -> + (Just PublicGroupProfile {publicGroupId}, False, Just GroupMember {memberId}) -> Just $ encodeChatBinding CBGroup $ smpEncode (publicGroupId, memberId) (Nothing, False, Just GroupMember {memberId, memberPubKey}) -> (\k -> encodeChatBinding CBGroup $ smpEncode (memberId, k)) <$> (memberPubKey <|> proofMemberKey memberId badge_) @@ -2387,21 +2388,13 @@ rcvFileProhibited binding_ FileInvitation {fileSize, fileBadge} = do then Nothing else Just FileProhibited {maxSize, badgeStatus = Just st} -createUserMemberKey :: GroupInfo -> CM GroupInfo -createUserMemberKey gInfo@GroupInfo {groupId, membership, groupKeys} - | useRelays' gInfo || isJust groupKeys = pure gInfo - | otherwise = do - (_, memberPrivKey) <- atomically . C.generateKeyPair =<< asks random - withStore' $ \db -> setUserMemberKey db groupId (groupMemberId' membership) memberPrivKey - pure gInfo {groupKeys = Just GroupKeys {publicGroupKeys = Nothing, memberPrivKey}} +groupMemberKey :: GroupKeys -> MemberKey +groupMemberKey gks = MemberKey $ C.publicKey $ memberPrivKey gks -groupMemberKey :: GroupInfo -> Maybe MemberKey -groupMemberKey GroupInfo {groupKeys} = MemberKey . C.publicKey . memberPrivKey <$> groupKeys - -sendGroupMemberMessages :: forall e. MsgEncodingI e => User -> GroupInfo -> Connection -> NonEmpty (ChatMsgEvent e) -> CM () -sendGroupMemberMessages user gInfo@GroupInfo {groupId} conn events = do +sendGroupMemberMessages :: forall e. MsgEncodingI e => User -> GroupInfoKeys -> Connection -> NonEmpty (ChatMsgEvent e) -> CM () +sendGroupMemberMessages user g@(GIK gInfo@GroupInfo {groupId} _) conn events = do when (connDisabled conn) $ throwChatError (CEConnectionDisabled conn) - let idsEvts = L.map (\evt -> (GroupId groupId, groupMsgSigning False gInfo evt, evt)) events + let idsEvts = L.map (\evt -> (GroupId groupId, groupMsgSigning False g evt, evt)) events (errs, msgs) <- lift $ partitionEithers . L.toList <$> createSndMessages idsEvts unless (null errs) $ toView $ CEvtChatErrors errs forM_ (L.nonEmpty msgs) $ \msgs' -> @@ -2468,15 +2461,13 @@ encodeSignedConnInfo signing chatMsgEvent = do -- signed XMember for a relay-group join: proves the joiner holds the member key it asserts, and carries -- viaRelay = the target relay's memberId inside the signed body so a sibling relay can't accept a replay -encodeXMemberConnInfo :: GroupInfo -> MemberId -> Profile -> CM ByteString -encodeXMemberConnInfo GroupInfo {membership = GroupMember {memberId}, groupKeys} relayMemberId profileToSend = - case groupKeys of - Just gks@GroupKeys {memberPrivKey} -> - let xMemberEvt = XMember profileToSend memberId (MemberKey $ C.publicKey memberPrivKey) (Just relayMemberId) - bindingData = groupBindingData (Just gks) memberId (C.publicKey memberPrivKey) - signing = MsgSigning CBGroup bindingData KRMember memberPrivKey - in encodeSignedConnInfo signing xMemberEvt - Nothing -> throwChatError $ CEInternalError "no group keys for channel membership" +encodeXMemberConnInfo :: GroupInfoKeys -> MemberId -> Profile -> CM ByteString +encodeXMemberConnInfo (GIK gInfo@GroupInfo {membership = GroupMember {memberId}} gks) relayMemberId profileToSend = + let memberPrivKey' = memberPrivKey gks + xMemberEvt = XMember profileToSend memberId (MemberKey $ C.publicKey memberPrivKey') (Just relayMemberId) + bindingData = groupBindingData gInfo memberId (C.publicKey memberPrivKey') + signing = MsgSigning CBGroup bindingData KRMember memberPrivKey' + in encodeSignedConnInfo signing xMemberEvt deliverMessage :: Connection -> CMEventTag e -> MsgBody -> MessageId -> CM (Int64, PQEncryption) deliverMessage conn cmEventTag msgBody msgId = do @@ -2539,13 +2530,13 @@ deliverMessagesB msgReqs = do where updatePQ = updateConnPQSndEnabled db connId pqSndEnabled' -sendGroupMessage :: MsgEncodingI e => User -> GroupInfo -> Maybe GroupChatScope -> [GroupMember] -> Bool -> ChatMsgEvent e -> CM SndMessage +sendGroupMessage :: MsgEncodingI e => User -> GroupInfoKeys -> Maybe GroupChatScope -> [GroupMember] -> Bool -> ChatMsgEvent e -> CM SndMessage sendGroupMessage user gInfo gcScope members sign chatMsgEvent = do sendGroupMessages user gInfo gcScope False members sign (chatMsgEvent :| []) >>= \case ((Right msg) :| [], _) -> pure msg _ -> throwChatError $ CEInternalError "sendGroupMessage: expected 1 message" -sendGroupMessage' :: MsgEncodingI e => User -> GroupInfo -> [GroupMember] -> ChatMsgEvent e -> CM SndMessage +sendGroupMessage' :: MsgEncodingI e => User -> GroupInfoKeys -> [GroupMember] -> ChatMsgEvent e -> CM SndMessage sendGroupMessage' user gInfo members chatMsgEvent = sendGroupMessages_ user gInfo members False (chatMsgEvent :| []) >>= \case ((Right msg) :| [], _) -> pure msg @@ -2571,8 +2562,8 @@ applyRosterDelta delta current = case delta of -- advances past a version the owner hasn't recorded), then broadcast the matching blob with the change projected -- onto the served roster (so it excludes demoted/removed members). Returns the reserved version for the delta -- that follows. The blob send is best-effort - a failed send heals on the next change or on resume. -broadcastRoster :: User -> GroupInfo -> RosterDelta -> CM VersionRoster -broadcastRoster user gInfo delta = do +broadcastRoster :: User -> GroupInfoKeys -> RosterDelta -> CM VersionRoster +broadcastRoster user g@(GIK gInfo _) delta = do let rosterVer = maybe (VersionRoster 0) (\(VersionRoster n) -> VersionRoster (n + 1)) (rosterVersion gInfo) withStore' $ \db -> setGroupRosterVersion db gInfo rosterVer sendRosterBlob rosterVer `catchAllErrors` eToView @@ -2583,18 +2574,18 @@ broadcastRoster user gInfo delta = do (relays, rosterMems) <- withStore' $ \db -> (,) <$> getGroupRelayMembers db cxt user gInfo <*> getGroupRosterMembers db cxt user gInfo forM_ (L.nonEmpty relays) $ \relays' -> - sendRoster user gInfo (L.toList relays') rosterVer (buildGroupRoster $ applyRosterDelta delta rosterMems) + sendRoster user g (L.toList relays') rosterVer (buildGroupRoster $ applyRosterDelta delta rosterMems) -- Send the current roster (no version bump) to a newly added relay so it can serve joiners. -sendGroupRosterToRelay :: User -> GroupInfo -> GroupMember -> CM () -sendGroupRosterToRelay user gInfo relayMember = +sendGroupRosterToRelay :: User -> GroupInfoKeys -> GroupMember -> CM () +sendGroupRosterToRelay user g@(GIK gInfo _) relayMember = forM_ (rosterVersion gInfo) $ \rosterVer -> do cxt <- chatStoreCxt rosterMems <- withStore' $ \db -> getGroupRosterMembers db cxt user gInfo - sendRoster user gInfo [relayMember] rosterVer (buildGroupRoster rosterMems) + sendRoster user g [relayMember] rosterVer (buildGroupRoster rosterMems) -- Row-less send (no files/snd_files rows, so no send-side cleanup); redelivery is the agent's. -sendRoster :: User -> GroupInfo -> [GroupMember] -> VersionRoster -> [RosterMember] -> CM () +sendRoster :: User -> GroupInfoKeys -> [GroupMember] -> VersionRoster -> [RosterMember] -> CM () sendRoster user gInfo members rosterVer roster = do let blob = encodeRosterBlob roster fileInv = InlineFileInvitation {fileSize = fromIntegral (B.length blob), fileDigest = FD.FileDigest $ LC.sha512Hash $ LB.fromStrict blob} @@ -2602,7 +2593,7 @@ sendRoster user gInfo members rosterVer roster = do sendInlineBlobChunks user gInfo members sharedMsgId blob -- Send a binary blob as BFileChunks under a shared_msg_id to the given members (chunked by fileChunkSize). -sendInlineBlobChunks :: User -> GroupInfo -> [GroupMember] -> SharedMsgId -> ByteString -> CM () +sendInlineBlobChunks :: User -> GroupInfoKeys -> [GroupMember] -> SharedMsgId -> ByteString -> CM () sendInlineBlobChunks user gInfo members sharedMsgId blob = do chSize <- fromIntegral <$> asks (fileChunkSize . config) go chSize 1 blob @@ -2615,8 +2606,8 @@ sendInlineBlobChunks user gInfo members sharedMsgId blob = do -- Relay advertises its current web preview capability to channel owners. -- Idempotent: sends only when the configured web domain differs from what was last sent, and only to -- owners whose recorded chat version supports relayWebCapVersion (older apps can't parse XGrpRelayCap). -sendRelayCapIfNeeded :: User -> GroupInfo -> CM () -sendRelayCapIfNeeded user gInfo = do +sendRelayCapIfNeeded :: User -> GroupInfoKeys -> CM () +sendRelayCapIfNeeded user g@(GIK gInfo _) = do ChatConfig {webPreviewConfig} <- asks config let currentWebDomain = (\WebPreviewConfig {webDomain} -> webDomain) <$> webPreviewConfig sentWebDomain <- withStore' (`getRelaySentWebDomain` gInfo) @@ -2625,24 +2616,22 @@ sendRelayCapIfNeeded user gInfo = do owners <- withStore' $ \db -> getGroupOwners db cxt user gInfo let capableOwners = filter (\m -> memberCurrent m && m `supportsVersion` relayWebCapVersion) owners unless (null capableOwners) $ do - void $ sendGroupMessage' user gInfo capableOwners (XGrpRelayCap RelayCapabilities {webDomain = currentWebDomain}) + void $ sendGroupMessage' user g capableOwners (XGrpRelayCap RelayCapabilities {webDomain = currentWebDomain}) withStore' $ \db -> updateRelaySentWebDomain db gInfo currentWebDomain -sendGroupMessages :: MsgEncodingI e => User -> GroupInfo -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> Bool -> NonEmpty (ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) -sendGroupMessages user gInfo' scope asGroup members sign events = do - gInfo <- createUserMemberKey gInfo' +sendGroupMessages :: MsgEncodingI e => User -> GroupInfoKeys -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> Bool -> NonEmpty (ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) +sendGroupMessages user gInfo scope asGroup members sign events = do sendGroupProfileUpdate user gInfo scope asGroup members sendGroupMessages_ user gInfo members sign events -- per-item signer variant of sendGroupMessages (used for per-item delete signing); preserves the profile-update prelude -sendGroupSignedMessages :: MsgEncodingI e => User -> GroupInfo -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> NonEmpty (Maybe MsgSigning, ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) -sendGroupSignedMessages user gInfo' scope asGroup members signedEvents = do - gInfo <- createUserMemberKey gInfo' +sendGroupSignedMessages :: MsgEncodingI e => User -> GroupInfoKeys -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> NonEmpty (Maybe MsgSigning, ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) +sendGroupSignedMessages user gInfo@(GIK g _) scope asGroup members signedEvents = do sendGroupProfileUpdate user gInfo scope asGroup members - sendGroupSignedMessages_ gInfo members signedEvents + sendGroupSignedMessages_ g members signedEvents -sendGroupProfileUpdate :: User -> GroupInfo -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> CM () -sendGroupProfileUpdate user gInfo scope asGroup members = +sendGroupProfileUpdate :: User -> GroupInfoKeys -> Maybe GroupChatScope -> ShowGroupAsSender -> [GroupMember] -> CM () +sendGroupProfileUpdate user g@(GIK gInfo gks) scope asGroup members = -- TODO [knocking] send current profile to pending member after approval? when shouldSendProfileUpdate $ sendProfileUpdate `catchAllErrors` eToView @@ -2661,7 +2650,7 @@ sendGroupProfileUpdate user gInfo scope asGroup members = sendProfileUpdate = do -- shouldSendProfileUpdate excludes incognito membership, so the badge is presented profileUpdate <- presentUserBadge user Nothing $ redactedMemberProfile gInfo (membership gInfo) $ fromLocalProfile p - void $ sendGroupMessage' user gInfo members $ XInfo profileUpdate (groupMemberKey gInfo) + void $ sendGroupMessage' user g members $ XInfo profileUpdate (Just $ groupMemberKey gks) currentTs <- liftIO getCurrentTime withStore' $ \db -> updateUserMemberProfileSentAt db user gInfo currentTs @@ -2671,9 +2660,9 @@ data GroupSndResult = GroupSndResult forwarded :: [GroupMember] } -sendGroupMessages_ :: MsgEncodingI e => User -> GroupInfo -> [GroupMember] -> Bool -> NonEmpty (ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) -sendGroupMessages_ _user gInfo recipientMembers sign events = - sendGroupSignedMessages_ gInfo recipientMembers $ L.map (\evt -> (groupMsgSigning sign gInfo evt, evt)) events +sendGroupMessages_ :: MsgEncodingI e => User -> GroupInfoKeys -> [GroupMember] -> Bool -> NonEmpty (ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) +sendGroupMessages_ _user gInfo@(GIK g _) recipientMembers sign events = + sendGroupSignedMessages_ g recipientMembers $ L.map (\evt -> (groupMsgSigning sign gInfo evt, evt)) events sendGroupSignedMessages_ :: MsgEncodingI e => GroupInfo -> [GroupMember] -> NonEmpty (Maybe MsgSigning, ChatMsgEvent e) -> CM (NonEmpty (Either ChatError SndMessage), GroupSndResult) sendGroupSignedMessages_ gInfo@GroupInfo {groupId} recipientMembers signedEvents = do @@ -3046,10 +3035,10 @@ joinAgentConnectionAsync :: CommandId -> Bool -> ConnId -> Bool -> ConnectionReq joinAgentConnectionAsync cmdId updateConn connId enableNtfs cReqUri cInfo subMode = withAgent $ \a -> joinConnectionAsync a (aCorrId cmdId) updateConn connId enableNtfs cReqUri cInfo PQSupportOff subMode -allowAgentConnectionAsync :: MsgEncodingI e => User -> Connection -> ConfirmationId -> Maybe GroupInfo -> ChatMsgEvent e -> CM () +allowAgentConnectionAsync :: MsgEncodingI e => User -> Connection -> ConfirmationId -> Maybe GroupInfoKeys -> ChatMsgEvent e -> CM () allowAgentConnectionAsync user conn@Connection {pqSupport} confId gInfo_ msg = do let signing_ = case gInfo_ of - Just gInfo | useRelays' gInfo || maxVersion (peerChatVRange conn) >= relayWebCapVersion -> groupMsgSigning False gInfo msg + Just gInfo@(GIK g _) | useRelays' g || maxVersion (peerChatVRange conn) >= relayWebCapVersion -> groupMsgSigning False gInfo msg _ -> Nothing dm <- case signing_ of Just signing -> encodeSignedConnInfo signing msg @@ -3292,7 +3281,7 @@ createChatItems :: createChatItems user itemTs_ dirsCIContents = do createdAt <- liftIO getCurrentTime let itemTs = fromMaybe createdAt itemTs_ - cxt <- chatStoreCxt' + cxt <- asks storeCxt void . withStoreBatch' $ \db -> map (updateChat db cxt createdAt) dirsCIContents withStoreBatch' $ \db -> concatMap (createACIs db itemTs createdAt) dirsCIContents where @@ -3390,13 +3379,9 @@ waitChatStartedAndActivated = do unless (isJust started && activated) retry chatStoreCxt :: CM StoreCxt -chatStoreCxt = lift chatStoreCxt' +chatStoreCxt = asks storeCxt {-# INLINE chatStoreCxt #-} -chatStoreCxt' :: CM' StoreCxt -chatStoreCxt' = mkStoreCxt <$> asks config -{-# INLINE chatStoreCxt' #-} - chatVersionRange :: CM VersionRangeChat chatVersionRange = lift chatVersionRange' {-# INLINE chatVersionRange #-} diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 1514418847..2288763791 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -115,9 +115,9 @@ smallGroupsRcptsMemLimit = 20 -- Verifies member signatures over CBGroup <> (publicGroupId, memberId) or (memberId, pubKey) <> signedBody under the given key. -- signatures is NonEmpty so the verification can't be vacuously true. -verifyGroupSig :: C.PublicKeyEd25519 -> Maybe GroupKeys -> MemberId -> NonEmpty MsgSignature -> ByteString -> Bool -verifyGroupSig key gks memberId signatures signedBody = - let prefix = encodeChatBinding CBGroup $ groupBindingData gks memberId key +verifyGroupSig :: C.PublicKeyEd25519 -> GroupInfo -> MemberId -> NonEmpty MsgSignature -> ByteString -> Bool +verifyGroupSig key gInfo memberId signatures signedBody = + let prefix = encodeChatBinding CBGroup $ groupBindingData gInfo memberId key in all (\case (MsgSignature KRMember sig) -> C.verify (C.APublicVerifyKey C.SEd25519 key) sig (prefix <> signedBody)) signatures processAgentMessage :: ACorrId -> ConnId -> AEvent 'AEConn -> CM () @@ -138,13 +138,18 @@ processAgentMessage corrId connId msg = do -- Missing connection/entity errors here will be sent to the view but not shown as CRITICAL alert, -- as in this case no need to ACK message - we can't process messages for this connection anyway. critical connId (withStore $ getUserEntity cxt) >>= \case - Just (user, entity) -> processAgentMessageConn cxt user entity corrId connId msg `catchAllErrors` eToView + Just (user, entity, gks_) -> processAgentMessageConn cxt user entity gks_ corrId connId msg `catchAllErrors` eToView _ -> throwChatError $ CENoConnectionUser (AgentConnId connId) where - getUserEntity :: StoreCxt -> DB.Connection -> ExceptT StoreError IO (Maybe (User, ConnectionEntity)) + getUserEntity :: StoreCxt -> DB.Connection -> ExceptT StoreError IO (Maybe (User, ConnectionEntity, Maybe GroupKeys)) getUserEntity cxt db = liftIO (getUserByAConnId db $ AgentConnId connId) - >>= mapM (\user -> (user,) <$> (getConnectionEntity db cxt user (AgentConnId connId) >>= liftIO . updateConnStatus db)) + >>= mapM (\user -> do + (entity, groupKeysData_) <- getConnectionEntityKeys db cxt user (AgentConnId connId) + gks_ <- case entity of + RcvGroupMsgConnection _ gInfo _ -> mapM (mkGroupKeys db cxt gInfo) groupKeysData_ + _ -> pure Nothing + (user,,gks_) <$> liftIO (updateConnStatus db entity)) updateConnStatus :: DB.Connection -> ConnectionEntity -> IO ConnectionEntity updateConnStatus db acEntity = case agentMsgConnStatus (entityConnection acEntity) msg of @@ -431,8 +436,8 @@ processAgentMsgRcvFile _corrId aFileId msg = do type ShouldDeleteGroupConns = Bool -processAgentMessageConn :: StoreCxt -> User -> ConnectionEntity -> ACorrId -> ConnId -> AEvent 'AEConn -> CM () -processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMessage = +processAgentMessageConn :: StoreCxt -> User -> ConnectionEntity -> Maybe GroupKeys -> ACorrId -> ConnId -> AEvent 'AEConn -> CM () +processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId agentMessage = case agentMessage of END -> case entity of RcvDirectMsgConnection _ (Just ct) -> toView $ CEvtContactAnotherClient user ct @@ -441,8 +446,9 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe _ -> case entity of RcvDirectMsgConnection conn contact_ -> processDirectMessage agentMessage entity conn contact_ - RcvGroupMsgConnection conn gInfo m -> - processGroupMessage agentMessage entity conn gInfo m + RcvGroupMsgConnection conn gInfo m -> case gks_ of + Just gks -> processGroupMessage agentMessage entity conn (GIK gInfo gks) m + Nothing -> throwChatError $ CEInternalError "group connection entity without group keys" UserContactConnection conn uc -> processContactConnMessage agentMessage entity conn uc where @@ -497,10 +503,10 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe incognitoProfile <- forM customUserProfileId $ \profileId -> withStore (\db -> getProfileById db userId profileId) profileToSend <- presentUserBadge user incognitoProfile $ case gInfo_ of - Just gInfo -> userProfileInGroup user gInfo (fromLocalProfile <$> incognitoProfile) + Just (GIK gInfo _) -> userProfileInGroup user gInfo (fromLocalProfile <$> incognitoProfile) Nothing -> userProfileDirect user (fromLocalProfile <$> incognitoProfile) Nothing True -- [async agent commands] no continuation needed, but command should be asynchronous for stability - allowAgentConnectionAsync user conn'' confId gInfo_ $ XInfo profileToSend (groupMemberKey =<< gInfo_) + allowAgentConnectionAsync user conn'' confId gInfo_ $ XInfo profileToSend ((\(GIK _ gks) -> groupMemberKey gks) <$> gInfo_) INFO pqSupport connInfo -> do processINFOpqSupport conn pqSupport void $ saveConnInfo conn connInfo @@ -620,6 +626,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe void $ withStore' $ \db -> resetMemberContactFields db ct' XGrpLinkInv glInv -> do -- XGrpLinkInv here means we are connecting via business contact card, so we replace contact with group + when (isPublicGroupInv glInv) $ throwChatError $ CEInvalidChatMessage conn'' Nothing (safeDecodeUtf8 connInfo) "x.grp.link.inv: publicGroup not allowed in p2p groups" memberKeys <- atomically . C.generateKeyPair =<< asks random (gInfo, host) <- withStore $ \db -> do liftIO $ deleteContactCardKeepConn db connId ct @@ -628,7 +635,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- [incognito] send saved profile incognitoProfile <- forM customUserProfileId $ \pId -> withStore (\db -> getProfileById db userId pId) profileToSend <- presentUserBadge user incognitoProfile $ userProfileInGroup user gInfo (fromLocalProfile <$> incognitoProfile) - allowAgentConnectionAsync user conn'' confId (Just gInfo) $ XInfo profileToSend (groupMemberKey gInfo) + let gks = GKGroup {memberPrivKey = snd memberKeys} + allowAgentConnectionAsync user conn'' confId (Just $ GIK gInfo gks) $ XInfo profileToSend (Just $ groupMemberKey gks) toView $ CEvtBusinessLinkConnecting user gInfo host ct _ -> messageError "CONF for existing contact must have x.grp.mem.info or x.info" INFO pqSupport connInfo -> do @@ -754,8 +762,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe ci <- saveSndChatItem user (CDDirectSnd ct) msg (CISndMsgContent mc) toView $ CEvtNewChatItems user [AChatItem SCTDirect SMDSnd (DirectChat ct) ci] - processGroupMessage :: AEvent e -> ConnectionEntity -> Connection -> GroupInfo -> GroupMember -> CM () - processGroupMessage agentMsg connEntity conn@Connection {connId, customUserProfileId, connectionCode} gInfo@GroupInfo {groupId, groupProfile, membership, chatSettings} m = case agentMsg of + processGroupMessage :: AEvent e -> ConnectionEntity -> Connection -> GroupInfoKeys -> GroupMember -> CM () + processGroupMessage agentMsg connEntity conn@Connection {connId, customUserProfileId, connectionCode} g@(GIK gInfo@GroupInfo {groupId, groupProfile, membership, chatSettings} gks) m = case agentMsg of INV (ACR _ cReq) -> withCompletedCommand conn agentMsg $ \CommandData {cmdFunction} -> case cReq of @@ -780,7 +788,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe withStore $ \db -> liftIO $ updateGroupMemberStatus db userId m GSMemAccepted forM_ mKey $ \(MemberKey k) -> withStore' $ \db -> setMemberPubKey db (groupMemberId' m) k -- [async agent commands] no continuation needed, but command should be asynchronous for stability - allowAgentConnectionAsync user conn' confId (Just gInfo) XOk + allowAgentConnectionAsync user conn' confId (Just g) XOk | otherwise -> messageError "x.grp.acpt: memberId is different from expected" XGrpRelayAcpt relayLink relayCap | memberRole' membership == GROwner && isRelay m -> do @@ -800,7 +808,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe liftIO $ updateGroupMemberStatus db userId m GSMemLeft pure (relay', m {memberStatus = GSMemLeft}) -- complete the contact handshake so the relay receives INFO and cleans up its transient bookkeeping - allowAgentConnectionAsync user conn' confId (Just gInfo) XOk + allowAgentConnectionAsync user conn' confId (Just g) XOk toView $ CEvtGroupRelayUpdated user gInfo m' relay' toViewTE $ TERelayRejected user gInfo reason | otherwise -> messageError "x.grp.relay.reject: only owner should receive relay rejection" @@ -812,12 +820,11 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe pgId = fmap (\PublicGroupProfile {publicGroupId} -> publicGroupId), useRelays' gInfo == isJust rcvPG && pgId rcvPG == pgId curPG -> do -- XGrpLinkInv here means we are connecting via prepared group, and we have to update user and host member records - (gInfo'', m') <- withStore $ \db -> updatePreparedUserAndHostMembersInvited db cxt user gInfo m glInv - gInfo' <- createUserMemberKey gInfo'' + (gInfo', m') <- withStore $ \db -> updatePreparedUserAndHostMembersInvited db cxt user gInfo m glInv -- [incognito] send saved profile incognitoProfile <- forM customUserProfileId $ \pId -> withStore (\db -> getProfileById db userId pId) profileToSend <- presentUserBadge user incognitoProfile $ userProfileInGroup user gInfo' (fromLocalProfile <$> incognitoProfile) - allowAgentConnectionAsync user conn' confId (Just gInfo') $ XInfo profileToSend (groupMemberKey gInfo') + allowAgentConnectionAsync user conn' confId (Just $ GIK gInfo' gks) $ XInfo profileToSend (Just $ groupMemberKey gks) toView $ CEvtGroupLinkConnecting user gInfo' m' | otherwise -> messageError "x.grp.link.inv: publicGroupId mismatch" XGrpLinkReject glRjct@GroupLinkRejection {rejectionReason} -> do @@ -833,7 +840,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe membershipProfile <- presentUserBadge user (incognitoMembershipProfile gInfo) $ redactedMemberProfile gInfo membership $ fromLocalProfile $ memberProfile membership -- TODO update member profile -- [async agent commands] no continuation needed, but command should be asynchronous for stability - allowAgentConnectionAsync user conn' confId (Just gInfo) $ XGrpMemInfo membershipMemId membershipProfile + allowAgentConnectionAsync user conn' confId (Just g) $ XGrpMemInfo membershipMemId membershipProfile | otherwise -> messageError "x.grp.mem.info: memberId is different from expected" _ -> messageError "CONF from member must have x.grp.mem.info" INFO _pqSupport connInfo -> do @@ -914,12 +921,12 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe Nothing -> do withStore' $ \db -> setGroupRosterVersion db gInfo (VersionRoster 0) pure gInfo {rosterVersion = Just (VersionRoster 0)} - sendGroupRosterToRelay user gInfo' m + sendGroupRosterToRelay user (GIK gInfo' gks) m else do -- a relay below groupRosterVersion can't ack a roster; publish it on connect as before -- the handshake (getPublishableGroupRelays and the LINK handler include/activate it by version) gLink <- withStore $ \db -> getGroupLink db user gInfo - setGroupLinkDataAsync user gInfo gLink + setGroupLinkDataAsync user g gLink | otherwise -> do (gInfo', mStatus) <- if not (memberPending m) @@ -940,26 +947,25 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe when (isJust viaUserContactLink && isNothing (memberContactId m')) $ sendXGrpLinkMem gInfo'' m' if useRelays' gInfo'' then do - introduceInChannel cxt user gInfo'' m' + introduceInChannel cxt user (GIK gInfo'' gks) m' case mStatus of GSMemPendingApproval -> pure () GSMemPendingReview -> pure () _ -> when (groupFeatureAllowed SGFHistory gInfo'') $ sendHistory user gInfo'' m' else case mStatus of GSMemPendingApproval -> pure () - GSMemPendingReview -> introduceToModerators cxt user gInfo'' m' + GSMemPendingReview -> introduceToModerators cxt user (GIK gInfo'' gks) m' _ -> do - introduceToAll cxt user gInfo'' m' + introduceToAll cxt user (GIK gInfo'' gks) m' let memberIsCustomer = case businessChat gInfo'' of Just BusinessChatInfo {chatType = BCCustomer, customerId} -> memberId' m' == customerId _ -> False when (groupFeatureAllowed SGFHistory gInfo'' && not memberIsCustomer) $ sendHistory user gInfo'' m' where - sendXGrpLinkMem gInfo''' m' = do - gInfo'' <- createUserMemberKey gInfo''' + sendXGrpLinkMem gInfo'' m' = do let incognitoProfile = ExistingIncognito <$> incognitoMembershipProfile gInfo'' profileToSend <- presentUserBadge user incognitoProfile $ userProfileInGroup user gInfo'' (fromIncognitoProfile <$> incognitoProfile) - sendGroupMemberMessages user gInfo'' conn [XGrpLinkMem profileToSend (groupMemberKey gInfo'')] + sendGroupMemberMessages user (GIK gInfo'' gks) conn [XGrpLinkMem profileToSend (Just $ groupMemberKey gks)] _ -> do unless (memberPending m) $ withStore' $ \db -> updateGroupMemberStatus db userId m GSMemConnected notifyMemberConnected gInfo m Nothing @@ -1023,7 +1029,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe case fwd_ of Just fwd | SJson <- enc -> do logInfo $ "group fwd=" <> tshow tag <> " " <> eInfo - xGrpMsgForward gInfo' scopeInfo m' fwd parsedMsg brokerTs + xGrpMsgForward (GIK gInfo' gks) scopeInfo m' fwd parsedMsg brokerTs `catchAllErrors` \e -> eToView e pure newDeliveryTasks -- direct JSON and binary messages; binary events don't produce delivery tasks @@ -1074,36 +1080,36 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe XFileAcptInv sharedMsgId fileConnReq_ fName -> Nothing <$ xFileAcptInvGroup gInfo' m'' sharedMsgId fileConnReq_ fName XInfo p mKey -> fmap ctx <$> xInfoMember gInfo' m'' p mKey msg brokerTs XGrpLinkMem p mKey -> Nothing <$ xGrpLinkMem gInfo' m'' conn' p mKey msg - XGrpLinkAcpt acceptance role memberId -> Nothing <$ xGrpLinkAcpt gInfo' m'' acceptance role memberId msg brokerTs + XGrpLinkAcpt acceptance role memberId -> Nothing <$ xGrpLinkAcpt (GIK gInfo' gks) m'' acceptance role memberId msg brokerTs XGrpRelayNew rl -> fmap ctx <$> xGrpRelayNew gInfo' m'' rl XGrpRelayCap relayCap | memberRole' membership == GROwner && isRelay m'' -> Nothing <$ withStore' (\db -> updateRelayCapabilities db m'' relayCap) | otherwise -> Nothing <$ messageWarning "x.grp.relay.cap: only owner should receive relay capabilities" - XGrpMemNew memInfo msgScope -> fmap ctx <$> xGrpMemNew gInfo' m'' memInfo msgScope msg brokerTs + XGrpMemNew memInfo msgScope -> fmap ctx <$> xGrpMemNew (GIK gInfo' gks) m'' memInfo msgScope msg brokerTs XGrpMemIntro memInfo memRestrictions_ -> Nothing <$ xGrpMemIntro gInfo' m'' memInfo memRestrictions_ XGrpMemInv memId introInv -> Nothing <$ xGrpMemInv gInfo' m'' memId introInv XGrpMemFwd memInfo introInv -> Nothing <$ xGrpMemFwd gInfo' m'' memInfo introInv - XGrpMemRole memId memRole memberKey rosterVer -> fmap ctx <$> xGrpMemRole gInfo' Nothing m'' memId memRole memberKey rosterVer msg brokerTs + XGrpMemRole memId memRole memberKey rosterVer -> fmap ctx <$> xGrpMemRole (GIK gInfo' gks) Nothing m'' memId memRole memberKey rosterVer msg brokerTs XGrpMemRestrict memId memRestrictions -> fmap ctx <$> xGrpMemRestrict gInfo' m'' memId memRestrictions msg brokerTs XGrpMemCon memId -> Nothing <$ xGrpMemCon gInfo' m'' memId XGrpMemDel memId withMessages rosterVer -> case encoding @e of - SJson -> fmap ctx <$> xGrpMemDel gInfo' Nothing m'' memId withMessages rosterVer verifiedMsg msg brokerTs False + SJson -> fmap ctx <$> xGrpMemDel (GIK gInfo' gks) Nothing m'' memId withMessages rosterVer verifiedMsg msg brokerTs False SBinary -> pure Nothing - XGrpLeave -> fmap ctx <$> xGrpLeave gInfo' m'' msg brokerTs + XGrpLeave -> fmap ctx <$> xGrpLeave (GIK gInfo' gks) m'' msg brokerTs XGrpDel -> Just (DeliveryTaskContext (DJSGroup {jobSpec = DJRelayRemoved}) False) <$ xGrpDel gInfo' m'' msg brokerTs - XGrpInfo p' -> fmap ctx <$> xGrpInfo gInfo' m'' p' msg brokerTs + XGrpInfo p' -> fmap ctx <$> xGrpInfo (GIK gInfo' gks) m'' p' msg brokerTs XGrpPrefs ps' -> fmap ctx <$> xGrpPrefs gInfo' m'' ps' msg XGrpRoster gr -> fmap ctx <$> xGrpRoster gInfo' m'' m'' gr verifiedMsg sharedMsgId_ brokerTs - XGrpRosterAck ackVer ackErr -> Nothing <$ xGrpRosterAck gInfo' m'' ackVer ackErr - XGrpRosterRequest reqVer -> Nothing <$ xGrpRosterRequest gInfo' m'' reqVer + XGrpRosterAck ackVer ackErr -> Nothing <$ xGrpRosterAck (GIK gInfo' gks) m'' ackVer ackErr + XGrpRosterRequest reqVer -> Nothing <$ xGrpRosterRequest (GIK gInfo' gks) m'' reqVer -- TODO [knocking] why don't we forward these messages? XGrpDirectInv connReq mContent_ msgScope -> memberCanSend (Just m'') msgScope $ Nothing <$ xGrpDirectInv gInfo' m'' conn' connReq mContent_ msg brokerTs - XGrpMsgForward fwd msg' -> Nothing <$ xGrpMsgForward gInfo' Nothing m'' fwd (ParsedMsg Nothing Nothing msg') brokerTs + XGrpMsgForward fwd msg' -> Nothing <$ xGrpMsgForward (GIK gInfo' gks) Nothing m'' fwd (ParsedMsg Nothing Nothing msg') brokerTs XInfoProbe probe -> Nothing <$ xInfoProbe (COMGroupMember m'') probe XInfoProbeCheck probeHash -> Nothing <$ xInfoProbeCheck (COMGroupMember m'') probeHash XInfoProbeOk probe -> Nothing <$ xInfoProbeOk (COMGroupMember m'') probe - BFileChunk sharedMsgId chunk -> Nothing <$ bFileChunkGroup gInfo' m'' sharedMsgId chunk msgMeta + BFileChunk sharedMsgId chunk -> Nothing <$ bFileChunkGroup (GIK gInfo' gks) m'' sharedMsgId chunk msgMeta _ -> Nothing <$ messageError ("unsupported message: " <> tshow event) forM deliveryTaskContext_ $ \taskContext -> do let contentChanged :: CM () @@ -1170,7 +1176,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe mapM_ toView fileEvent_ unless (null acis) $ toView $ CEvtChatItemsStatusesUpdated user acis when continued $ do - when (isUserGrpFwdRelay gInfo) $ serveRoster user gInfo m -- roster ahead of the resumed backlog + when (isUserGrpFwdRelay gInfo) $ serveRoster user g m -- roster ahead of the resumed backlog sendPendingGroupMessages user gInfo m conn SWITCH qd phase cStats -> do toView $ CEvtGroupMemberSwitch user gInfo m (SwitchProgress qd phase cStats) @@ -1241,7 +1247,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe withStore' $ \db -> updateConnLinkData db user conn cReq cReqHash groupLinkId chatV pqSup let incognitoProfile = fromLocalProfile <$> incognitoMembershipProfile gInfo profileToSend <- presentUserBadge user incognitoProfile $ userProfileInGroup user gInfo incognitoProfile - dm <- encodeXMemberConnInfo gInfo relayMemberId profileToSend + dm <- encodeXMemberConnInfo g relayMemberId profileToSend subMode <- chatReadVar subscriptionMode (cmdId, connId') <- prepareAgentJoin user (Just conn) True cReq joinAgentConnectionAsync cmdId True connId' True cReq dm subMode @@ -1257,7 +1263,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe liftIO $ updateGroupMemberStatus db userId m GSMemAccepted (m', relay) <- setRelayLinkAccepted db cxt user m (MemberKey relayKey) relayProfile pure (confId, m', relay) - allowAgentConnectionAsync user conn confId (Just gInfo) XOk + allowAgentConnectionAsync user conn confId (Just g) XOk toView $ CEvtGroupRelayUpdated user gInfo m' relay else -- TODO [relays] owner: TBC failed RelayStatus? @@ -1266,7 +1272,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe QCONT -> do continued <- continueSending connEntity conn when continued $ do - when (isUserGrpFwdRelay gInfo) $ serveRoster user gInfo m -- roster ahead of the resumed backlog + when (isUserGrpFwdRelay gInfo) $ serveRoster user g m -- roster ahead of the resumed backlog sendPendingGroupMessages user gInfo m conn MWARN msgId err -> do withStore' $ \db -> updateGroupItemsErrorStatus db msgId (groupMemberId' m) (GSSWarning $ agentSndError err) @@ -1311,9 +1317,9 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe _ -> pure Nothing sendGroupAutoReply mc = \case Just UserContactRequest {welcomeSharedMsgId = Just smId} -> - void $ sendGroupMessage' user gInfo [m] $ XMsgUpdate smId mc M.empty Nothing Nothing Nothing Nothing + void $ sendGroupMessage' user g [m] $ XMsgUpdate smId mc M.empty Nothing Nothing Nothing Nothing _ -> do - msg <- sendGroupMessage' user gInfo [m] $ XMsgNew $ mcSimple mc + msg <- sendGroupMessage' user g [m] $ XMsgNew $ mcSimple mc ci <- saveSndChatItem user (CDGroupSnd gInfo Nothing) msg (CISndMsgContent mc) withStore' $ \db -> createGroupSndStatus db (chatItemId' ci) (groupMemberId' m) GSSNew toView $ CEvtNewChatItems user [AChatItem SCTGroup SMDSnd (GroupChat gInfo Nothing) ci] @@ -1340,7 +1346,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe r n'' = Just (ci, CIRcvDecryptionError mde n'') mdeUpdatedCI _ _ = Nothing - receiveFileChunk :: Maybe GroupInfo -> RcvFileTransfer -> Maybe Connection -> MsgMeta -> FileChunk -> CM () + receiveFileChunk :: Maybe GroupInfoKeys -> RcvFileTransfer -> Maybe Connection -> MsgMeta -> FileChunk -> CM () receiveFileChunk gInfo_ ft@RcvFileTransfer {fileId, fileType, chunkSize} conn_ MsgMeta {recipient = (msgId, _), integrity} = \case FileChunkCancel -> case fileType of -- cancel only this source's transfer; other relays' in-flight transfers are independent @@ -1408,13 +1414,13 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe CFSetShortLink -> case (ucGroupId_, auData) of (Just groupId, UserContactLinkData UserContactData {relays = relayLinks}) -> do - (gInfo, gLink, relays, relaysChanged, newlyActiveLinks) <- withStore $ \db -> do - gInfo <- getGroupInfo db cxt user groupId + (g@(GIK gInfo _), gLink, relays, relaysChanged, newlyActiveLinks) <- withStore $ \db -> do + g@(GIK gInfo _) <- getGroupInfoKeys db cxt user groupId gLink <- getGroupLink db user gInfo relays <- liftIO $ getGroupRelays db gInfo (relays', changed, newlyActiveLinks) <- liftIO $ foldrM (updateRelay db) ([], False, []) relays liftIO $ setGroupInProgressDone db gInfo - pure (gInfo, gLink, relays', changed, newlyActiveLinks) + pure (g, gLink, relays', changed, newlyActiveLinks) toView $ CEvtGroupLinkDataUpdated user gInfo gLink relays relaysChanged let GroupSummary {publicMemberCount} = groupSummary gInfo -- Owner is counted in publicMemberCount; > 1 means at least one subscriber. @@ -1430,7 +1436,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe allRelayMembers events = XGrpRelayNew <$> newlyActive unless (null recipients) $ - void $ sendGroupMessages user gInfo Nothing False recipients False events + void $ sendGroupMessages user g Nothing False recipients False events where updateRelay :: DB.Connection -> GroupRelay -> ([GroupRelay], Bool, [ShortLinkContact]) -> IO ([GroupRelay], Bool, [ShortLinkContact]) updateRelay db relay@GroupRelay {relayLink, relayStatus} (acc, changed, newlyActiveLinks) = @@ -1479,7 +1485,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe REContact ct -> -- TODO [short links] update request msg toView $ CEvtContactRequestAlreadyAccepted user ct - REBusinessChat gInfo _clientMember -> + REBusinessChat (GIK gInfo _) _clientMember -> -- TODO [short links] update request msg toView $ CEvtBusinessRequestAlreadyAccepted user gInfo RSCurrentRequest prevUcr_ ucr@UserContactRequest {welcomeSharedMsgId} re_ -> case re_ of @@ -1513,8 +1519,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe else pure Nothing ct' <- acceptContactRequestAsync user uclId ct ucr incognitoProfile toView $ CEvtAcceptingContactRequest user ct' - Just (REBusinessChat gInfo clientMember) -> do - (_gInfo', _clientMember') <- acceptBusinessJoinRequestAsync user uclId gInfo clientMember ucr + Just (REBusinessChat g@(GIK gInfo _) clientMember) -> do + (_gInfo', _clientMember') <- acceptBusinessJoinRequestAsync user uclId g clientMember ucr let cd = CDGroupRcv gInfo Nothing clientMember void $ case prevUcr_ of Just UserContactRequest {requestSharedMsgId = prevSharedMsgId_} -> @@ -1606,7 +1612,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- ##### Group link join requests (don't create contact requests) ##### Just gli@GroupLinkInfo {groupId, memberRole = gLinkMemRole} -> do -- TODO [short links] deduplicate request by xContactId? - gInfo <- withStore $ \db -> getGroupInfo db cxt user groupId + g@(GIK gInfo _) <- withStore $ \db -> getGroupInfoKeys db cxt user groupId if | useRelays' gInfo -> messageWarning $ "processContactConnMessage (group " <> groupName' gInfo <> "): ignored direct join request from " <> displayName <> " (group uses relays)" @@ -1617,7 +1623,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe maybe (pure $ Right (GAAccepted, gLinkMemRole)) (\am -> liftIO $ am gInfo gli p) acceptMember_ >>= \case Right (acceptance, useRole) -> do let profileMode = ExistingIncognito <$> incognitoMembershipProfile gInfo - mem <- acceptGroupJoinRequestAsync user uclId gInfo invId chatVRange p xContactId_ Nothing welcomeMsgId_ acceptance useRole profileMode memberKey_ Nothing + mem <- acceptGroupJoinRequestAsync user uclId g invId chatVRange p xContactId_ Nothing welcomeMsgId_ acceptance useRole profileMode memberKey_ Nothing (gInfo', mem', scopeInfo) <- mkGroupChatScope gInfo mem createInternalChatItem user (CDGroupRcv gInfo' scopeInfo mem') (CIRcvGroupEvent RGEInvitedViaGroupLink) Nothing toView $ CEvtAcceptingGroupJoinRequestMember user gInfo' mem' @@ -1661,7 +1667,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe (_ucl, gLinkInfo_) <- withStore $ \db -> getUserContactLinkById db userId uclId case gLinkInfo_ of Just GroupLinkInfo {groupId, memberRole = gLinkMemRole} -> do - gInfo <- withStore $ \db -> getGroupInfo db cxt user groupId + g@(GIK gInfo _) <- withStore $ \db -> getGroupInfoKeys db cxt user groupId existing_ <- withStore' $ \db -> eitherToMaybe <$> runExceptT (getGroupMemberByMemberId db cxt user gInfo joiningMemberId) case existing_ of Just rosterMem @@ -1669,21 +1675,21 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- possession of that exact key, otherwise this is an attempt to impersonate it | isRosterRole (memberRole' rosterMem) -> if verifyKey gInfo rosterMem - then acceptJoin gInfo (Just rosterMem) (memberRole' rosterMem) + then acceptJoin g (Just rosterMem) (memberRole' rosterMem) else messageError "memberJoinRequestViaRelay: rejected join claiming privileged memberId (key mismatch or invalid signature)" - _ -> acceptJoin gInfo Nothing gLinkMemRole + _ -> acceptJoin g Nothing gLinkMemRole Nothing -> messageError "memberJoinRequestViaRelay: no group link info for relay link" where -- replay defense: the viaRelay == own memberId check (viaRelay is in the signed body); without it a sibling relay could replay a privileged member's signed join - verifyKey gInfo rosterMem = case (signedMsg_, groupKeys gInfo) of - (Just SignedMsg {chatBinding = CBGroup, signatures, signedBody}, Just gks) -> + verifyKey gInfo rosterMem = case signedMsg_ of + Just SignedMsg {chatBinding = CBGroup, signatures, signedBody} -> memberPubKey rosterMem == Just joiningKey - && verifyGroupSig joiningKey (Just gks) joiningMemberId signatures signedBody + && verifyGroupSig joiningKey gInfo joiningMemberId signatures signedBody && viaRelay == Just (memberId' (membership gInfo)) _ -> False - acceptJoin gInfo existingMem_ acceptRole = do - mem <- acceptGroupJoinRequestAsync user uclId gInfo invId chatVRange p Nothing (Just joiningMemberId) Nothing GAAccepted acceptRole Nothing (Just joiningMemberKey) existingMem_ + acceptJoin g@(GIK gInfo _) existingMem_ acceptRole = do + mem <- acceptGroupJoinRequestAsync user uclId g invId chatVRange p Nothing (Just joiningMemberId) Nothing GAAccepted acceptRole Nothing (Just joiningMemberKey) existingMem_ (gInfo', mem', scopeInfo) <- mkGroupChatScope gInfo mem createInternalChatItem user (CDGroupRcv gInfo' scopeInfo mem') (CIRcvGroupEvent RGEInvitedViaGroupLink) Nothing toView $ CEvtAcceptingGroupJoinRequestMember user gInfo' mem' @@ -2592,8 +2598,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- A group BFileChunk is a normal inline file chunk or a roster blob chunk, both located by -- (group_id, shared_msg_id). A chunk matching no in-flight transfer (an orphaned re-served roster -- chunk, or a missing normal file) is ignored; the outer withAckMessage acks it. - bFileChunkGroup :: GroupInfo -> GroupMember -> SharedMsgId -> FileChunk -> MsgMeta -> CM () - bFileChunkGroup gInfo@GroupInfo {groupId} fromMember sharedMsgId chunk meta = do + bFileChunkGroup :: GroupInfoKeys -> GroupMember -> SharedMsgId -> FileChunk -> MsgMeta -> CM () + bFileChunkGroup gInfo@(GIK GroupInfo {groupId} _) fromMember sharedMsgId chunk meta = do fileId_ <- withStore' $ \db -> getGroupRcvFileId db userId groupId (groupMemberId' fromMember) sharedMsgId forM_ fileId_ $ \fileId -> do ft <- withStore $ \db -> getRcvFileTransfer db user fileId @@ -2613,7 +2619,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- A roster re-serve re-sends the blob from chunk 1; discard any partial first, else chunk 1 over a -- partial is out-of-order (RcvChunkError) and appending after the stale prefix corrupts the blob. - receiveRosterChunk :: GroupInfo -> RcvFileTransfer -> MsgMeta -> FileChunk -> CM () + receiveRosterChunk :: GroupInfoKeys -> RcvFileTransfer -> MsgMeta -> FileChunk -> CM () receiveRosterChunk gInfo ft meta chunk = do case chunk of FileChunk {chunkNo} | chunkNo == 1 -> do @@ -2678,14 +2684,14 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe when (fromMemId == memId) $ throwChatError CEGroupDuplicateMemberId -- [incognito] if direct connection with host is incognito, create membership using the same incognito profile memberKeys <- atomically . C.generateKeyPair =<< asks random - (gInfo@GroupInfo {groupId, localDisplayName, groupProfile, membership}, hostId) <- withStore $ \db -> createGroupInvitation db cxt user ct inv customUserProfileId memberKeys + (GIK gInfo@GroupInfo {groupId, localDisplayName, groupProfile, membership} gks, hostId) <- withStore $ \db -> createGroupInvitation db cxt user ct inv customUserProfileId memberKeys void $ createChatItem user (CDGroupSnd gInfo Nothing) False CIChatBanner Nothing Nothing (Just epochStart) let GroupMember {groupMemberId, memberId = membershipMemId} = membership -- hostContact is only reported for group links, where the client replaces -- the transient host connection view with the group and removes its chat joinGroupAsync hostContact_ sameLink = do subMode <- chatReadVar subscriptionMode - dm <- encodeConnInfo $ XGrpAcpt membershipMemId (groupMemberKey gInfo) + dm <- encodeConnInfo $ XGrpAcpt membershipMemId (Just $ groupMemberKey gks) connIds@(cmdId, acId) <- prepareAgentJoin user Nothing True connRequest withStore' $ \db -> do when sameLink $ setViaGroupLinkUri db groupId connId @@ -2815,11 +2821,11 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe | otherwise -> messageError "member key not signed by that key, ignored" where signed = case signedMsg_ of - Just SignedMsg {chatBinding = CBGroup, signatures, signedBody} -> verifyGroupSig k (groupKeys gInfo) memberId signatures signedBody + Just SignedMsg {chatBinding = CBGroup, signatures, signedBody} -> verifyGroupSig k gInfo memberId signatures signedBody _ -> False - xGrpLinkAcpt :: GroupInfo -> GroupMember -> GroupAcceptance -> GroupMemberRole -> MemberId -> RcvMessage -> UTCTime -> CM () - xGrpLinkAcpt gInfo@GroupInfo {membership} m acceptance role memberId msg brokerTs + xGrpLinkAcpt :: GroupInfoKeys -> GroupMember -> GroupAcceptance -> GroupMemberRole -> MemberId -> RcvMessage -> UTCTime -> CM () + xGrpLinkAcpt g@(GIK gInfo@GroupInfo {membership} _) m acceptance role memberId msg brokerTs | memberRole' m < GRModerator || memberRole' m < role = messageError "x.grp.link.acpt with insufficient member permissions" | sameMemberId memberId membership = processUserAccepted @@ -2868,7 +2874,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe GAPendingApproval -> messageWarning "x.grp.link.acpt: unexpected group acceptance - pending approval" introduceToRemainingMembers acceptedMember = do - introduceToRemaining cxt user gInfo acceptedMember + introduceToRemaining cxt user g acceptedMember when (groupFeatureAllowed SGFHistory gInfo) $ sendHistory user gInfo acceptedMember maybeCreateGroupDescrLocal :: GroupInfo -> GroupMember -> CM () @@ -3144,7 +3150,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe toView $ CEvtContactAndMemberAssociated user c2 g m1 c2' pure c2' - saveConnInfo :: Connection -> ConnInfo -> CM (Connection, Maybe GroupInfo) + saveConnInfo :: Connection -> ConnInfo -> CM (Connection, Maybe GroupInfoKeys) saveConnInfo activeConn connInfo = do ChatMessage {chatVRange, chatMsgEvent} <- parseChatMessage activeConn connInfo conn' <- updatePeerChatVRange activeConn chatVRange @@ -3154,21 +3160,25 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe toView $ CEvtContactConnecting user ct pure (conn', Nothing) XGrpLinkInv glInv -> do + when (isPublicGroupInv glInv) $ throwChatError $ CEInvalidChatMessage conn' Nothing (safeDecodeUtf8 connInfo) "x.grp.link.inv: publicGroup not allowed in p2p groups" memberKeys <- atomically . C.generateKeyPair =<< asks random (gInfo, host) <- withStore $ \db -> createGroupInvitedViaLink db cxt user conn' memberKeys glInv toView $ CEvtGroupLinkConnecting user gInfo host - pure (conn', Just gInfo) + pure (conn', Just $ GIK gInfo GKGroup {memberPrivKey = snd memberKeys}) XGrpLinkReject glRjct@GroupLinkRejection {rejectionReason} -> do memberKeys <- atomically . C.generateKeyPair =<< asks random (gInfo, host) <- withStore $ \db -> createGroupRejectedViaLink db cxt user conn' memberKeys glRjct toView $ CEvtGroupLinkConnecting user gInfo host toViewTE $ TEGroupLinkRejected user gInfo rejectionReason - pure (conn', Just gInfo) + pure (conn', Just $ GIK gInfo GKGroup {memberPrivKey = snd memberKeys}) -- TODO show/log error, other events in SMP confirmation _ -> pure (conn', Nothing) - xGrpMemNew :: GroupInfo -> GroupMember -> MemberInfo -> Maybe MsgScope -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) - xGrpMemNew gInfo m memInfo@(MemberInfo memId memRole _ _ assertedKey_) msgScope_ msg brokerTs = do + isPublicGroupInv :: GroupLinkInvitation -> Bool + isPublicGroupInv GroupLinkInvitation {groupProfile = GroupProfile {publicGroup}} = isJust publicGroup + + xGrpMemNew :: GroupInfoKeys -> GroupMember -> MemberInfo -> Maybe MsgScope -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) + xGrpMemNew (GIK gInfo gks) m memInfo@(MemberInfo memId memRole _ _ assertedKey_) msgScope_ msg brokerTs = do unless (useRelays' gInfo) $ checkHostRole m memRole if sameMemberId memId (membership gInfo) then pure Nothing @@ -3188,7 +3198,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe messageWarning $ "x.grp.mem.new: relay asserted key differs from roster-established key, keeping roster key, memberId=" <> safeDecodeUtf8 (strEncode memId) updatedMember <- withStore $ \db -> updateRosterMemberAnnounced db cxt user m unknownMember memInfo initialStatus -- roster members can't be pending, so no members-require-attention update - gInfo' <- updatePublicGroupData user gInfo + gInfo' <- updatePublicGroupData user gInfo gks toView $ CEvtUnknownMemberAnnounced user gInfo' m unknownMember updatedMember memberAnnouncedToView updatedMember gInfo' pure $ deliveryJobScope updatedMember @@ -3203,7 +3213,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe then liftIO $ increaseGroupMembersRequireAttention db user gInfo else pure gInfo pure (updatedMember, gInfo') - gInfo'' <- updatePublicGroupData user gInfo' + gInfo'' <- updatePublicGroupData user gInfo' gks toView $ CEvtUnknownMemberAnnounced user gInfo'' m unknownMember updatedMember memberAnnouncedToView updatedMember gInfo'' pure $ deliveryJobScope updatedMember @@ -3221,7 +3231,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe then liftIO $ increaseGroupMembersRequireAttention db user gInfo else pure gInfo pure (newMember, gInfo') - gInfo'' <- updatePublicGroupData user gInfo' + gInfo'' <- updatePublicGroupData user gInfo' gks memberAnnouncedToView newMember gInfo'' pure $ deliveryJobScope newMember where @@ -3341,8 +3351,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- batch), then advance it in the same transaction; a strictly lower version is a replay and is ignored. -- Only an owner sender may advance it: a non-owner signed event is rejected by the action that follows, -- but must not bump roster_version first, or every later owner roster at a lower version is dropped. - applyAtRosterVersion :: GroupInfo -> Maybe GroupMember -> GroupMember -> Maybe VersionRoster -> CM (Maybe DeliveryJobScope) -> CM (Maybe DeliveryJobScope) - applyAtRosterVersion gInfo fwdRelay_ sender rosterVer_ action + applyAtRosterVersion :: GroupInfoKeys -> Maybe GroupMember -> GroupMember -> Maybe VersionRoster -> CM (Maybe DeliveryJobScope) -> CM (Maybe DeliveryJobScope) + applyAtRosterVersion g@(GIK gInfo _) fwdRelay_ sender rosterVer_ action | not (useRelays' gInfo) = action | otherwise = case rosterVer_ of Nothing -> action @@ -3380,19 +3390,19 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe | otherwise = case fwdRelay_ of Just relay | gap, relay `supportsVersion` groupRosterVersion -> - void $ sendGroupMessage' user gInfo [relay] (XGrpRosterRequest prevComplete) + void $ sendGroupMessage' user g [relay] (XGrpRosterRequest prevComplete) _ -> pure () where gap = v > nextCompleteVersion prevComplete - xGrpMemRole :: GroupInfo -> Maybe GroupMember -> GroupMember -> MemberId -> GroupMemberRole -> Maybe MemberKey -> Maybe VersionRoster -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) - xGrpMemRole gInfo@GroupInfo {membership} fwdRelay_ m@GroupMember {memberRole = senderRole} memId memRole memberKey_ rosterVer_ msg@RcvMessage {msgSigned} brokerTs + xGrpMemRole :: GroupInfoKeys -> Maybe GroupMember -> GroupMember -> MemberId -> GroupMemberRole -> Maybe MemberKey -> Maybe VersionRoster -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) + xGrpMemRole g@(GIK gInfo@GroupInfo {membership} _) fwdRelay_ m@GroupMember {memberRole = senderRole} memId memRole memberKey_ rosterVer_ msg@RcvMessage {msgSigned} brokerTs | memRole == GRRelay = messageError "x.grp.mem.role: relay role can't be assigned" $> Nothing | membershipMemId == memId = - applyAtRosterVersion gInfo fwdRelay_ m rosterVer_ $ + applyAtRosterVersion g fwdRelay_ m rosterVer_ $ let gInfo' = gInfo {membership = membership {memberRole = memRole}} in changeMemberRole gInfo' membership False (\db -> updateGroupMemberRole db user membership memRole) (RGEUserRole memRole) True - | otherwise = applyAtRosterVersion gInfo fwdRelay_ m rosterVer_ $ do + | otherwise = applyAtRosterVersion g fwdRelay_ m rosterVer_ $ do defaultRole <- unknownMemberRole gInfo -- an owner-signed event with a key TOFU-creates an unknown member only for a roster role; else a plain lookup let allowCreate = useRelays' gInfo && senderRole == GROwner && isRosterRole memRole && isJust memberKey_ @@ -3486,8 +3496,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- Blob arrived: verify the owner-attested digest over the plaintext and guard against -- downgrade before applying; on a relay, ack the owner and re-serve to members. - rosterCompletion :: GroupInfo -> RcvFileTransfer -> CM () - rosterCompletion gInfo RcvFileTransfer {fileId, fileStatus} = + rosterCompletion :: GroupInfoKeys -> RcvFileTransfer -> CM () + rosterCompletion g@(GIK gInfo _) RcvFileTransfer {fileId, fileStatus} = withStore' (\db -> getRosterTransfer db fileId) >>= \case -- defensive: the file always has its transfer (created together, deleted together) Nothing -> lift (closeFileHandle fileId rcvFiles) >> forM_ (rosterFilePath fileStatus) removeFsFile @@ -3497,7 +3507,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe let isRelay' = isUserGrpFwdRelay gInfo ackErr err = do cleanupRosterTransferById transferId - when isRelay' $ forM_ owner_ $ \owner -> sendRosterAck gInfo owner pendingVer (Just err) + when isRelay' $ forM_ owner_ $ \owner -> sendRosterAck g owner pendingVer (Just err) if FD.FileDigest (LC.sha512Hash (LB.fromStrict blob)) /= pendingDigest then ackErr "relay could not verify the roster blob" else case parseAll rosterBlobP blob of @@ -3522,7 +3532,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe emitRosterResults gInfo author rosterBrokerTs results -- ack while setting up (own status accepted/acknowledged); a serving (active) relay must not ack broadcasts. when (isRelay' && (relayOwnStatus gInfo == Just RSAccepted || relayOwnStatus gInfo == Just RSAcknowledgedRoster)) $ do - sendRosterAck gInfo author pendingVer Nothing + sendRosterAck g author pendingVer Nothing withStore' $ \db -> void $ updateRelayOwnStatusFromTo db gInfo RSAccepted RSAcknowledgedRoster where rosterFilePath = \case @@ -3588,11 +3598,11 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe else pure (gInfo, author) toView CEvtMemberRole {user, groupInfo = gInfo', byMember = author', member, fromRole, toRole, msgSigned = Just MSSVerified} - sendRosterAck :: GroupInfo -> GroupMember -> VersionRoster -> Maybe Text -> CM () + sendRosterAck :: GroupInfoKeys -> GroupMember -> VersionRoster -> Maybe Text -> CM () sendRosterAck gInfo owner ackVer err = void $ sendGroupMessage' user gInfo [owner] (XGrpRosterAck ackVer err) - xGrpRosterAck :: GroupInfo -> GroupMember -> VersionRoster -> Maybe Text -> CM () - xGrpRosterAck gInfo m ackVer err = do + xGrpRosterAck :: GroupInfoKeys -> GroupMember -> VersionRoster -> Maybe Text -> CM () + xGrpRosterAck g@(GIK gInfo _) m ackVer err = do relay_ <- withStore' $ \db -> eitherToMaybe <$> runExceptT (getGroupRelayByGMId db (groupMemberId' m)) case relay_ of Just relay@GroupRelay {relayStatus = RSAccepted} -> case err of @@ -3602,7 +3612,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe relay' <- liftIO $ updateRelayStatus db relay RSAcknowledgedRoster gLink <- getGroupLink db user gInfo pure (relay', gLink) - setGroupLinkDataAsync user gInfo gLink + setGroupLinkDataAsync user g gLink toView $ CEvtGroupRelayUpdated user gInfo m relay' | otherwise -> messageWarning "x.grp.roster.ack: stale version, awaiting ack for the current roster" Just e -> do @@ -3616,13 +3626,13 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- - the latter bounds reflected amplification (a member can't re-trigger a full serve). Gating on the stored -- blob (not roster_version, the gate) means the relay serves only a blob the requester will accept. -- serveRoster records the served version (on all serve paths) and is a no-op without a roster. - xGrpRosterRequest :: GroupInfo -> GroupMember -> Maybe VersionRoster -> CM () - xGrpRosterRequest gInfo m reqVer_ = + xGrpRosterRequest :: GroupInfoKeys -> GroupMember -> Maybe VersionRoster -> CM () + xGrpRosterRequest g@(GIK gInfo _) m reqVer_ = when (isUserGrpFwdRelay gInfo) $ do (stored_, served_) <- withStore' $ \db -> (,) <$> getStoredRosterVersion db gInfo <*> getMemberRosterServedVersion db m forM_ stored_ $ \stored -> - when (maybe True (stored >) reqVer_ && maybe True (stored >) served_) $ serveRoster user gInfo m + when (maybe True (stored >) reqVer_ && maybe True (stored >) served_) $ serveRoster user g m checkHostRole :: GroupMember -> GroupMemberRole -> CM () checkHostRole GroupMember {memberRole, localDisplayName} memRole = @@ -3668,11 +3678,11 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe withStore $ \db -> setMemberVectorRelationConnected db sendingMem refMem MRSubjectConnected withStore $ \db -> setMemberVectorRelationConnected db refMem sendingMem MRReferencedConnected - xGrpMemDel :: GroupInfo -> Maybe GroupMember -> GroupMember -> MemberId -> Bool -> Maybe VersionRoster -> VerifiedMsg 'Json -> RcvMessage -> UTCTime -> Bool -> CM (Maybe DeliveryJobScope) - xGrpMemDel gInfo@GroupInfo {membership} fwdRelay_ m@GroupMember {memberRole = senderRole} memId withMessages rosterVer_ verifiedMsg msg@RcvMessage {msgSigned} brokerTs forwarded = do + xGrpMemDel :: GroupInfoKeys -> Maybe GroupMember -> GroupMember -> MemberId -> Bool -> Maybe VersionRoster -> VerifiedMsg 'Json -> RcvMessage -> UTCTime -> Bool -> CM (Maybe DeliveryJobScope) + xGrpMemDel g@(GIK gInfo@GroupInfo {membership} gks) fwdRelay_ m@GroupMember {memberRole = senderRole} memId withMessages rosterVer_ verifiedMsg msg@RcvMessage {msgSigned} brokerTs forwarded = do let GroupMember {memberId = membershipMemId} = membership if membershipMemId == memId - then applyAtRosterVersion gInfo fwdRelay_ m rosterVer_ $ checkRole membership $ do + then applyAtRosterVersion g fwdRelay_ m rosterVer_ $ checkRole membership $ do deleteGroupLinkIfExists user gInfo -- TODO [relays] possible improvement is to immediately delete rcv queues if isUserGrpFwdRelay unless (isUserGrpFwdRelay gInfo) $ deleteGroupConnections user gInfo False @@ -3684,7 +3694,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe deleteMemberItem msg gInfo RGEUserDeleted toView $ CEvtDeletedMemberUser user gInfo {membership = membership'} m withMessages msgSigned pure $ Just DJSGroup {jobSpec = DJRelayRemoved} - else applyAtRosterVersion gInfo fwdRelay_ m rosterVer_ $ + else applyAtRosterVersion g fwdRelay_ m rosterVer_ $ withStore' (\db -> runExceptT $ getGroupMemberByMemberId db cxt user gInfo memId) >>= \case Left _ -> do messageError "x.grp.mem.del with unknown member ID" @@ -3710,7 +3720,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe fullyDeleteMemberRecord user gInfo deletedMember -- Undeleted "member connected" chat item will prevent deletion of member record. | otherwise -> deleteOrUpdateMemberRecord user gInfo deletedMember - gInfo'' <- updatePublicGroupData user gInfo' + gInfo'' <- updatePublicGroupData user gInfo' gks let wasDeleted = memberStatus == GSMemRemoved || memberStatus == GSMemLeft -- Clear forwardedByMember if it references the deleted member, -- as the member record was already deleted above. @@ -3752,12 +3762,12 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe | useRelays' gInfo = asks $ channelSubscriberRole . config | otherwise = pure GRAuthor - xGrpLeave :: GroupInfo -> GroupMember -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) - xGrpLeave gInfo m msg@RcvMessage {msgSigned} brokerTs = do + xGrpLeave :: GroupInfoKeys -> GroupMember -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) + xGrpLeave (GIK gInfo gks) m msg@RcvMessage {msgSigned} brokerTs = do deleteMemberConnection m -- member record is not deleted to allow creation of "member left" chat item gInfo' <- updateMemberRecordDeleted user gInfo m GSMemLeft - gInfo'' <- updatePublicGroupData user gInfo' + gInfo'' <- updatePublicGroupData user gInfo' gks unless (muteEventInChannel gInfo'' m) $ do (gInfo''', m', scopeInfo) <- mkGroupChatScope gInfo'' m (ci, cInfo) <- saveRcvChatItemNoParse user (CDGroupRcv gInfo''' scopeInfo m') msg brokerTs (CIRcvGroupEvent RGEMemberLeft) @@ -3777,8 +3787,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe groupMsgToView cInfo ci toView $ CEvtGroupDeleted user gInfo'' {membership = membership {memberStatus = GSMemGroupDeleted}} m' msgSigned - xGrpInfo :: GroupInfo -> GroupMember -> GroupProfile -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) - xGrpInfo g@GroupInfo {groupProfile = p@GroupProfile {publicGroup = pg}, businessChat} m@GroupMember {memberRole} p'@GroupProfile {publicGroup = pg'} msg@RcvMessage {msgSigned} brokerTs + xGrpInfo :: GroupInfoKeys -> GroupMember -> GroupProfile -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) + xGrpInfo gik@(GIK g@GroupInfo {groupProfile = p@GroupProfile {publicGroup = pg}, businessChat} gks) m@GroupMember {memberRole} p'@GroupProfile {publicGroup = pg'} msg@RcvMessage {msgSigned} brokerTs | memberRole < GROwner = messageError "x.grp.info with insufficient member permissions" $> Nothing | let pgId = fmap (\PublicGroupProfile {publicGroupId} -> publicGroupId), useRelays' g && (isNothing pg' || pgId pg' /= pgId pg) = messageError "x.grp.info: publicGroupId mismatch for channel" $> Nothing @@ -3798,10 +3808,10 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe -- other owners receiving the update do not refresh the same link ChatConfig {updateGroupLinksFromApp} <- asks config unless (useRelays' g'' || updateGroupLinksFromApp) $ - void $ forkIO $ void $ setGroupLinkData' NRMBackground user g'' + void $ forkIO $ void $ setGroupLinkData' NRMBackground user (GIK g'' gks) Just _ -> updateGroupPrefs_ msgSigned g m $ fromMaybe defaultBusinessGroupPrefs $ groupPreferences p' -- relay advertises its web capability now that the owner's version is known (bumped by saveGroupRcvMsg) - when (isRelay (membership g)) $ sendRelayCapIfNeeded user g + when (isRelay (membership g)) $ sendRelayCapIfNeeded user gik pure $ Just DJSGroup {jobSpec = DJDeliveryJob {includePending = True}} xGrpPrefs :: GroupInfo -> GroupMember -> GroupPreferences -> RcvMessage -> CM (Maybe DeliveryJobScope) @@ -3916,8 +3926,8 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe toViewTE $ TEContactVerificationReset user ct createInternalChatItem user (CDDirectRcv ct) (CIRcvConnEvent RCEVerificationCodeReset) Nothing - xGrpMsgForward :: GroupInfo -> Maybe GroupChatScopeInfo -> GroupMember -> GrpMsgForward -> ParsedMsg 'Json -> UTCTime -> CM () - xGrpMsgForward gInfo scopeInfo m@GroupMember {localDisplayName} GrpMsgForward {fwdSender, fwdBrokerTs = msgTs} parsedMsg@(ParsedMsg _ _ chatMsg@ChatMessage {chatMsgEvent}) brokerTs = do + xGrpMsgForward :: GroupInfoKeys -> Maybe GroupChatScopeInfo -> GroupMember -> GrpMsgForward -> ParsedMsg 'Json -> UTCTime -> CM () + xGrpMsgForward g@(GIK gInfo _) scopeInfo m@GroupMember {localDisplayName} GrpMsgForward {fwdSender, fwdBrokerTs = msgTs} parsedMsg@(ParsedMsg _ _ chatMsg@ChatMessage {chatMsgEvent}) brokerTs = do unless (isMemberGrpFwdRelay gInfo m) $ throwChatError (CEGroupContactRole localDisplayName) case fwdSender of FwdMember memberId memberName -> do @@ -3961,13 +3971,13 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe XFileCancel sharedMsgId -> void $ xFileCancelGroup gInfo author_ sharedMsgId XInfo p mKey -> withAuthor XInfo_ $ \author -> void $ xInfoMember gInfo author p mKey rcvMsg msgTs XGrpRelayNew rl -> withAuthor XGrpRelayNew_ $ \author -> void $ xGrpRelayNew gInfo author rl - XGrpMemNew memInfo msgScope -> withAuthor XGrpMemNew_ $ \author -> void $ xGrpMemNew gInfo author memInfo msgScope rcvMsg msgTs - XGrpMemRole memId memRole memberKey rosterVer -> withAuthor XGrpMemRole_ $ \author -> void $ xGrpMemRole gInfo (Just m) author memId memRole memberKey rosterVer rcvMsg msgTs + XGrpMemNew memInfo msgScope -> withAuthor XGrpMemNew_ $ \author -> void $ xGrpMemNew g author memInfo msgScope rcvMsg msgTs + XGrpMemRole memId memRole memberKey rosterVer -> withAuthor XGrpMemRole_ $ \author -> void $ xGrpMemRole g (Just m) author memId memRole memberKey rosterVer rcvMsg msgTs XGrpMemRestrict memId memRestrictions -> withAuthor XGrpMemRestrict_ $ \author -> void $ xGrpMemRestrict gInfo author memId memRestrictions rcvMsg msgTs - XGrpMemDel memId withMessages rosterVer -> withAuthor XGrpMemDel_ $ \author -> void $ xGrpMemDel gInfo (Just m) author memId withMessages rosterVer verifiedMsg rcvMsg msgTs True - XGrpLeave -> withAuthor XGrpLeave_ $ \author -> void $ xGrpLeave gInfo author rcvMsg msgTs + XGrpMemDel memId withMessages rosterVer -> withAuthor XGrpMemDel_ $ \author -> void $ xGrpMemDel g (Just m) author memId withMessages rosterVer verifiedMsg rcvMsg msgTs True + XGrpLeave -> withAuthor XGrpLeave_ $ \author -> void $ xGrpLeave g author rcvMsg msgTs XGrpDel -> withAuthor XGrpDel_ $ \author -> void $ xGrpDel gInfo author rcvMsg msgTs - XGrpInfo p' -> withAuthor XGrpInfo_ $ \author -> void $ xGrpInfo gInfo author p' rcvMsg msgTs + XGrpInfo p' -> withAuthor XGrpInfo_ $ \author -> void $ xGrpInfo g author p' rcvMsg msgTs XGrpPrefs ps' -> withAuthor XGrpPrefs_ $ \author -> void $ xGrpPrefs gInfo author ps' rcvMsg XGrpRoster gr -> withAuthor XGrpRoster_ $ \author -> void $ xGrpRoster gInfo m author gr verifiedMsg sharedMsgId_ msgTs _ -> messageError $ "x.grp.msg.forward: unsupported forwarded event " <> T.pack (show $ toCMEventTag event) @@ -3978,7 +3988,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe Nothing -> messageError $ "x.grp.msg.forward: event " <> tshow tag <> " requires author" withVerifiedMsg :: GroupInfo -> Maybe GroupChatScopeInfo -> GroupMember -> ParsedMsg e -> UTCTime -> (VerifiedMsg e -> CM a) -> CM (Maybe a) - withVerifiedMsg gInfo@GroupInfo {membership, groupKeys} scopeInfo member@GroupMember {memberPubKey, memberId} (ParsedMsg _ signedMsg_ chatMsg@ChatMessage {chatMsgEvent}) ts action = + withVerifiedMsg gInfo@GroupInfo {membership} scopeInfo member@GroupMember {memberPubKey, memberId} (ParsedMsg _ signedMsg_ chatMsg@ChatMessage {chatMsgEvent}) ts action = case verified of Just verifiedMsg -> Just <$> action verifiedMsg Nothing -> do @@ -3988,7 +3998,7 @@ processAgentMessageConn cxt user@User {userId} entity corrId agentConnId agentMe verified = case signedMsg_ of Just sm@SignedMsg {chatBinding, signatures, signedBody} -> case memberPubKey of Just pubKey -> case chatBinding of - CBGroup -> signed MSSVerified <$ guard (verifyGroupSig pubKey groupKeys memberId signatures signedBody) + CBGroup -> signed MSSVerified <$ guard (verifyGroupSig pubKey gInfo memberId signatures signedBody) _ -> signed MSSSignedNoKey <$ guard signatureOptional Nothing -> signed MSSSignedNoKey <$ guard (signatureOptional || unverifiedAllowed membership member tag) where @@ -4476,10 +4486,10 @@ runRelayRequestWorker a Worker {doWork} = do eToView e processRelayRequest :: GroupId -> RelayRequestData -> CM () processRelayRequest groupId rrd = do - (gInfo, groupLink_) <- withStore $ \db -> do - gInfo <- getGroupInfo db cxt user groupId + (g@(GIK gInfo _), groupLink_) <- withStore $ \db -> do + g@(GIK gInfo _) <- getGroupInfoKeys db cxt user groupId groupLink_ <- liftIO $ runExceptT $ getGroupLink db user gInfo - pure (gInfo, groupLink_) + pure (g, groupLink_) -- Check if relay link already exists (recovery case) case groupLink_ of Right GroupLink {connLinkContact = CCLink _ sLnk_} -> @@ -4487,11 +4497,14 @@ runRelayRequestWorker a Worker {doWork} = do Just sLnk -> acceptOwnerConnection rrd gInfo sLnk Nothing -> throwChatError $ CEException "processRelayRequest: relay link doesn't have short link" Left _ -> do - (gInfo', sLnk) <- getLinkDataCreateRelayLink rrd gInfo + (gInfo', sLnk) <- getLinkDataCreateRelayLink rrd g acceptOwnerConnection rrd gInfo' sLnk where - getLinkDataCreateRelayLink :: RelayRequestData -> GroupInfo -> CM (GroupInfo, ShortLinkContact) - getLinkDataCreateRelayLink RelayRequestData {reqGroupLink} gInfo = do + getLinkDataCreateRelayLink :: RelayRequestData -> GroupInfoKeys -> CM (GroupInfo, ShortLinkContact) + getLinkDataCreateRelayLink RelayRequestData {reqGroupLink} (GIK gInfo gks) = do + memberPrivKey' <- case gks of + GKRelayRequest {memberPrivKey} -> pure memberPrivKey + _ -> throwChatError $ CEException "getLinkDataCreateRelayLink: group is not a relay request" (FixedLinkData {linkEntityId, rootKey}, cData@(ContactLinkData _ UserContactData {owners}), _) <- getShortLinkConnReq' NRMBackground user reqGroupLink liftIO (decodeLinkUserData cData) >>= \case Nothing -> throwChatError $ CEException "getLinkDataCreateRelayLink: no group link data" @@ -4501,10 +4514,10 @@ runRelayRequestWorker a Worker {doWork} = do | B64UrlByteString entityId == publicGroupId -> pure pg _ -> throwChatError $ CEException "getLinkDataCreateRelayLink: linkEntityId does not match profile publicGroupId" validateGroupProfile gp - ((_, memberPrivKey), sLnk) <- createRelayLink gInfo + sLnk <- createRelayLink gInfo (C.publicKey memberPrivKey', memberPrivKey') gInfo' <- withStore $ \db -> do void $ updateGroupProfile db user gInfo gp - updateRelayGroupKeys db user gInfo pg rootKey memberPrivKey owners + updateRelayGroupKeys db user gInfo pg rootKey owners getGroupInfo db cxt user groupId pure (gInfo', sLnk) where @@ -4512,14 +4525,13 @@ runRelayRequestWorker a Worker {doWork} = do validateGroupProfile _groupProfile = do -- TODO [relays] relay: validate group profile, verify owner's signature pure () - createRelayLink :: GroupInfo -> CM (C.KeyPairEd25519, ShortLinkContact) - createRelayLink gi = do + createRelayLink :: GroupInfo -> C.KeyPairEd25519 -> CM ShortLinkContact + createRelayLink gi sigKeys = do let GroupInfo {membership} = gi GroupMember {memberId = MemberId relayMemId, memberProfile = p} = membership gVar <- asks random groupLinkId <- GroupLinkId <$> drgRandomBytes 16 subMode <- chatReadVar subscriptionMode - sigKeys <- atomically $ C.generateKeyPair gVar let crClientData = encodeJSON $ CRDataGroup groupLinkId -- prepare link with relayMemId as linkEntityId (no server request) (ccLink, preparedParams) <- withAgent $ \a' -> prepareConnectionLink a' (aUserId user) sigKeys relayMemId True (Just crClientData) CR.IKPQOff False Nothing @@ -4534,7 +4546,7 @@ runRelayRequestWorker a Worker {doWork} = do -- TODO [relays] starting role should be communicated in protocol from owner to relays subRole <- asks $ channelSubscriberRole . config void $ withFastStore $ \db -> createGroupLink db gVar user gi connId ccLink' groupLinkId subRole subMode - pure (sigKeys, sLnk) + pure sLnk acceptOwnerConnection :: RelayRequestData -> GroupInfo -> ShortLinkContact -> CM () acceptOwnerConnection RelayRequestData {relayInvId, reqChatVRange} gi relayLink = do ownerMember <- withStore $ \db -> getHostMember db cxt user groupId diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index fe7539fad7..1057a71a02 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -12,6 +12,7 @@ module Simplex.Chat.Store.Connections ( getChatLockEntity, getConnectionEntity, + getConnectionEntityKeys, getConnectionEntityByConnReq, getConnectionEntityViaShortLink, getContactConnEntityByConnReqHash, @@ -76,18 +77,23 @@ getChatLockEntity db agentConnId = do -- - from receiving: getConnectionEntity, getContactConnEntityByConnReqHash -- - from subscribing: getContactConnsToSub, getUCLConnsToSub, getMemberConnsToSub, getPendingConnsToSub getConnectionEntity :: DB.Connection -> StoreCxt -> User -> AgentConnId -> ExceptT StoreError IO ConnectionEntity -getConnectionEntity db cxt user@User {userId, userContactId} agentConnId = do +getConnectionEntity db cxt user agentConnId = fst <$> getConnectionEntityKeys db cxt user agentConnId + +getConnectionEntityKeys :: DB.Connection -> StoreCxt -> User -> AgentConnId -> ExceptT StoreError IO (ConnectionEntity, Maybe GroupKeysRow) +getConnectionEntityKeys db cxt user@User {userId, userContactId} agentConnId = do c@Connection {connType, entityId} <- getConnection_ case entityId of Nothing -> if connType == ConnContact - then pure $ RcvDirectMsgConnection c Nothing + then pure (RcvDirectMsgConnection c Nothing, Nothing) else throwError $ SEInternalError $ "connection " <> show connType <> " without entity" Just entId -> case connType of - ConnMember -> uncurry (RcvGroupMsgConnection c) <$> getGroupAndMember_ entId c - ConnContact -> RcvDirectMsgConnection c . Just <$> getContactRec_ entId c - ConnUserContact -> UserContactConnection c <$> getUserContact_ entId + ConnMember -> do + ((gInfo, keysData), m) <- getGroupAndMember_ entId c + pure (RcvGroupMsgConnection c gInfo m, Just keysData) + ConnContact -> (,Nothing) . RcvDirectMsgConnection c . Just <$> getContactRec_ entId c + ConnUserContact -> (,Nothing) . UserContactConnection c <$> getUserContact_ entId where getConnection_ :: ExceptT StoreError IO Connection getConnection_ = ExceptT $ do @@ -134,7 +140,7 @@ getConnectionEntity db cxt user@User {userId, userContactId} agentConnId = do contactRequest = UserContactRequestRef <$> contactRequestId <*> (unBI <$> rejectionSupported_) groupDirectInv = toGroupDirectInvitation groupDirectInvRow in Contact {contactId, localDisplayName, profile, activeConn, contactUsed, contactStatus, chatSettings, userPreferences, mergedPreferences, createdAt, updatedAt, chatTs, preparedContact, contactRequestId, contactRequest, contactGroupMemberId, contactGrpInvSent, groupDirectInv, chatTags, chatItemTTL, uiThemes, chatDeleted, customData} - getGroupAndMember_ :: Int64 -> Connection -> ExceptT StoreError IO (GroupInfo, GroupMember) + getGroupAndMember_ :: Int64 -> Connection -> ExceptT StoreError IO ((GroupInfo, GroupKeysRow), GroupMember) getGroupAndMember_ groupMemberId c = do currentTs <- liftIO getCurrentTime gm <- @@ -178,8 +184,8 @@ getConnectionEntity db cxt user@User {userId, userContactId} agentConnId = do AND mu.member_status NOT IN (?,?,?) |] (groupMemberId, userId, userContactId, GSMemRemoved, GSMemLeft, GSMemGroupDeleted) - liftIO $ bitraverse (addGroupChatTags db) pure gm - toGroupAndMember :: UTCTime -> Connection -> GroupInfoRow :. GroupMemberRow -> (GroupInfo, GroupMember) + liftIO $ bitraverse (\(g, keysData) -> (,keysData) <$> addGroupChatTags db g) pure gm + toGroupAndMember :: UTCTime -> Connection -> GroupInfoRow :. GroupMemberRow -> ((GroupInfo, GroupKeysRow), GroupMember) toGroupAndMember currentTs c (groupInfoRow :. memberRow) = let groupInfo = toGroupInfo currentTs cxt userContactId [] groupInfoRow member = toGroupMember currentTs userContactId memberRow diff --git a/src/Simplex/Chat/Store/ContactRequest.hs b/src/Simplex/Chat/Store/ContactRequest.hs index 146f957947..f87a1e242a 100644 --- a/src/Simplex/Chat/Store/ContactRequest.hs +++ b/src/Simplex/Chat/Store/ContactRequest.hs @@ -91,11 +91,12 @@ createOrUpdateContactRequest pure $ RSAcceptedRequest cr (REContact ct) Nothing -> liftIO (getAcceptedBusinessChat xContactId) >>= \case - Just gInfo@GroupInfo {businessChat = Just BusinessChatInfo {customerId}} -> do + Just (gInfo@GroupInfo {businessChat = Just BusinessChatInfo {customerId}}, keysData) -> do clientMember <- getGroupMemberByMemberId db cxt user gInfo customerId cr <- liftIO $ getContactRequestByXContactId xContactId - pure $ RSAcceptedRequest cr (REBusinessChat gInfo clientMember) - Just GroupInfo {businessChat = Nothing} -> throwError SEInvalidBusinessChatContactRequest + gks <- mkGroupKeys db cxt gInfo keysData + pure $ RSAcceptedRequest cr (REBusinessChat (GIK gInfo gks) clientMember) + Just (GroupInfo {businessChat = Nothing}, _) -> throwError SEInvalidBusinessChatContactRequest -- 2) if no legacy accepted contact or business chat was found, next we try to find an existing request Nothing -> liftIO (getContactRequestByXContactId xContactId) >>= \case @@ -131,7 +132,7 @@ createOrUpdateContactRequest |] (userId, xContactId) mapM (addDirectChatTags db) ct_ - getAcceptedBusinessChat :: XContactId -> IO (Maybe GroupInfo) + getAcceptedBusinessChat :: XContactId -> IO (Maybe (GroupInfo, GroupKeysRow)) getAcceptedBusinessChat xContactId = do currentTs <- getCurrentTime g_ <- @@ -140,7 +141,7 @@ createOrUpdateContactRequest db (groupInfoQuery <> " WHERE g.business_xcontact_id = ? AND g.user_id = ? AND mu.contact_id = ?") (xContactId, userId, userContactId) - mapM (addGroupChatTags db) g_ + forM g_ $ \(g, keysData) -> (,keysData) <$> addGroupChatTags db g getContactRequestByXContactId :: XContactId -> IO (Maybe UserContactRequest) getContactRequestByXContactId xContactId = do currentTs <- getCurrentTime @@ -214,7 +215,7 @@ createOrUpdateContactRequest pure $ RSCurrentRequest Nothing ucr (Just $ REContact ct) createBusinessChat = do let groupPreferences = maybe defaultBusinessGroupPrefs businessGroupPrefs $ preferences' user - (gInfo@GroupInfo {groupId}, clientMember) <- + (gInfo@(GIK GroupInfo {groupId} _), clientMember) <- createBusinessRequestGroup db cxt gVar user cReqChatVRange profile profileId ldn groupPreferences liftIO $ DB.execute @@ -302,11 +303,12 @@ createOrUpdateContactRequest ct <- getContact db cxt user contactId pure $ Just (REContact ct) (Nothing, Just businessGroupId) -> do - gInfo <- getGroupInfo db cxt user businessGroupId + (gInfo, keysData) <- getGroupInfoRow db cxt user businessGroupId case gInfo of GroupInfo {businessChat = Just BusinessChatInfo {customerId}} -> do clientMember <- getGroupMemberByMemberId db cxt user gInfo customerId - pure $ Just (REBusinessChat gInfo clientMember) + gks <- mkGroupKeys db cxt gInfo keysData + pure $ Just (REBusinessChat (GIK gInfo gks) clientMember) _ -> throwError SEInvalidBusinessChatContactRequest (Nothing, Nothing) -> pure Nothing _ -> throwError $ SEInvalidContactRequestEntity contactRequestId diff --git a/src/Simplex/Chat/Store/Direct.hs b/src/Simplex/Chat/Store/Direct.hs index 53d5cd619e..a87d266b03 100644 --- a/src/Simplex/Chat/Store/Direct.hs +++ b/src/Simplex/Chat/Store/Direct.hs @@ -188,7 +188,7 @@ createConnReqConnection db userId acId preparedEntity_ cReq cReqHash sLnk xConta connId <- insertedRowId db case preparedEntity_ of -- For relay groups, setPreparedGroupLinkInfo_ is called via updatePreparedRelayedGroup before the relay loop - Just (PCEGroup gInfo _) | not (useRelays' gInfo) -> + Just (PCEGroup (GIK gInfo _) _) | not (useRelays' gInfo) -> setPreparedGroupLinkInfo_ db gInfo cReq cReqHash customUserProfileId Nothing currentTs _ -> pure () pure diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index 84a58fb222..2c0b2dc080 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -40,6 +40,7 @@ module Simplex.Chat.Store.Groups createGroupRejectedViaLink, setGroupInvitationChatItemId, getGroup, + getGroupKeys_, getGroupInfoByUserContactLinkConnReq, getGroupInfoViaUserTarget, getGroupViaShortLinkToConnect, @@ -144,7 +145,7 @@ module Simplex.Chat.Store.Groups updatePreparedRelayedGroup, updatePublicMemberCount, setPublicMemberCount, - updateGroupMemberKeys, + setGroupRootKey, updateRelayGroupKeys, updateGroupMemberStatus, updateGroupMemberStatusById, @@ -376,26 +377,24 @@ setGroupLinkShortLink db gLnk@GroupLink {userContactLinkId, connLinkContact = CC pure gLnk {connLinkContact = CCLink connFullLink (Just shortLink), shortLinkDataSet = True, shortLinkLargeDataSet = BoolDef True} -- | creates completely new group with a single member - the current user -createNewGroup :: DB.Connection -> StoreCxt -> User -> GroupProfile -> Maybe Profile -> Bool -> MemberId -> Maybe GroupKeys -> Maybe Int64 -> ExceptT StoreError IO GroupInfo -createNewGroup db cxt user@User {userId} groupProfile incognitoProfile useRelays memberId groupKeys publicMemberCount_ = ExceptT $ do +createNewGroup :: DB.Connection -> StoreCxt -> User -> GroupProfile -> Maybe Profile -> MemberId -> GroupKeys -> Maybe Int64 -> ExceptT StoreError IO GroupInfo +createNewGroup db cxt user@User {userId} groupProfile incognitoProfile memberId groupKeys publicMemberCount_ = ExceptT $ do let GroupProfile {displayName, fullName, shortDescr, description, image, publicGroup, groupPreferences, memberAdmission} = groupProfile (groupType_, groupLink_, publicGroupId_) = case publicGroup of Just PublicGroupProfile {groupType, groupLink, publicGroupId} -> (Just groupType, Just groupLink, Just publicGroupId) Nothing -> (Nothing, Nothing, Nothing) fullGroupPreferences = mergeGroupPreferences groupPreferences + useRelays = isPublicGroup groupKeys rosterVersion0 = if useRelays then Just (VersionRoster 0) else Nothing currentTs <- getCurrentTime customUserProfileId <- mapM (createIncognitoProfile_ db userId currentTs) incognitoProfile withLocalDisplayName db userId displayName $ \ldn -> runExceptT $ do - let (rootPrivKey_, rootPubKey_, memberPrivKey_) = case groupKeys of - Nothing -> (Nothing, Nothing, Nothing) - Just GroupKeys {publicGroupKeys, memberPrivKey} -> - let (rpk, rpub) = case publicGroupKeys of - Just PublicGroupKeys {groupRootKey} -> case groupRootKey of - GRKPrivate pk -> (Just pk, Nothing) - GRKPublic k -> (Nothing, Just k) - Nothing -> (Nothing, Nothing) - in (rpk, rpub, Just memberPrivKey) + let (rootPrivKey_, rootPubKey_) = case groupKeys of + GKPublicGroup {groupRootKey} -> case groupRootKey of + GRKPrivate pk -> (Just pk, Nothing) + GRKPublic k -> (Nothing, Just k) + _ -> (Nothing, Nothing) + memberPrivKey_ = Just $ memberPrivKey groupKeys groupId <- liftIO $ do DB.execute db @@ -423,7 +422,7 @@ createNewGroup db cxt user@User {userId} groupProfile incognitoProfile useRelays :. (rootPrivKey_, rootPubKey_, memberPrivKey_, publicMemberCount_, rosterVersion0) ) insertedRowId db - let memberPubKey = C.publicKey . memberPrivKey <$> groupKeys + let memberPubKey = Just $ C.publicKey $ memberPrivKey groupKeys membership <- createContactMemberInv_ db user groupId Nothing user (MemberIdRole memberId GROwner) GCUserMember GSMemCreator IBUser customUserProfileId memberPubKey currentTs (vr cxt) let chatSettings = ChatSettings {enableNtfs = MFAll, sendRcpts = Nothing, favorite = False} pure @@ -451,18 +450,17 @@ createNewGroup db cxt user@User {userId} groupProfile incognitoProfile useRelays customData = Nothing, membersRequireAttention = 0, viaGroupLinkUri = Nothing, - groupKeys, groupDomainVerified = Nothing } -- | creates a new group record for the group the current user was invited to, or returns an existing one -createGroupInvitation :: DB.Connection -> StoreCxt -> User -> Contact -> GroupInvitation -> Maybe ProfileId -> C.KeyPairEd25519 -> ExceptT StoreError IO (GroupInfo, GroupMemberId) +createGroupInvitation :: DB.Connection -> StoreCxt -> User -> Contact -> GroupInvitation -> Maybe ProfileId -> C.KeyPairEd25519 -> ExceptT StoreError IO (GroupInfoKeys, GroupMemberId) createGroupInvitation _ _ _ Contact {localDisplayName, activeConn = Nothing} _ _ _ = throwError $ SEContactNotReady localDisplayName createGroupInvitation db cxt user@User {userId} contact@Contact {contactId, activeConn = Just Connection {peerChatVRange}} GroupInvitation {fromMember, fromMemberKey, invitedMember, connRequest, groupProfile, business} incognitoProfileId memberKeys = do liftIO getInvitationGroupId_ >>= \case Nothing -> createGroupInvitation_ Just gId -> do - gInfo@GroupInfo {membership, groupProfile = p'} <- getGroupInfo db cxt user gId + GIK gInfo@GroupInfo {membership, groupProfile = p'} gks <- getGroupInfoKeys db cxt user gId hostId <- getHostMemberId_ db user gId let GroupMember {groupMemberId, memberId, memberRole} = membership MemberIdRole {memberId = invMemberId, memberRole = invMemberRole} = invitedMember @@ -472,13 +470,13 @@ createGroupInvitation db cxt user@User {userId} contact@Contact {contactId, acti if p' == groupProfile then pure gInfo else updateGroupProfile db user gInfo groupProfile - pure (gInfo', hostId) + pure (GIK gInfo' gks, hostId) where getInvitationGroupId_ :: IO (Maybe Int64) getInvitationGroupId_ = maybeFirstRow fromOnly $ DB.query db "SELECT group_id FROM groups WHERE inv_queue_info = ? AND user_id = ? LIMIT 1" (connRequest, userId) - createGroupInvitation_ :: ExceptT StoreError IO (GroupInfo, GroupMemberId) + createGroupInvitation_ :: ExceptT StoreError IO (GroupInfoKeys, GroupMemberId) createGroupInvitation_ = do let GroupProfile {displayName, fullName, shortDescr, description, image, groupPreferences, memberAdmission} = groupProfile fullGroupPreferences = mergeGroupPreferences groupPreferences @@ -530,9 +528,9 @@ createGroupInvitation db cxt user@User {userId} contact@Contact {contactId, acti customData = Nothing, membersRequireAttention = 0, viaGroupLinkUri = Nothing, - groupKeys = Just GroupKeys {publicGroupKeys = Nothing, memberPrivKey = snd memberKeys}, groupDomainVerified = Nothing - }, + } + `GIK` GKGroup {memberPrivKey = snd memberKeys}, groupMemberId ) @@ -946,10 +944,13 @@ setGroupInvitationChatItemId db User {userId} groupId chatItemId = do -- TODO return the last connection that is ready, not any last connection -- requires updating connection status getGroup :: DB.Connection -> StoreCxt -> User -> GroupId -> ExceptT StoreError IO Group -getGroup db cxt user groupId = do - gInfo <- getGroupInfo db cxt user groupId +getGroup db cxt user groupId = fst <$> getGroupKeys_ db cxt user groupId + +getGroupKeys_ :: DB.Connection -> StoreCxt -> User -> GroupId -> ExceptT StoreError IO (Group, GroupKeys) +getGroupKeys_ db cxt user groupId = do + GIK gInfo gks <- getGroupInfoKeys db cxt user groupId members <- liftIO $ getGroupMembers db cxt user gInfo - pure $ Group gInfo members + pure (Group gInfo members, gks) deleteGroupChatItems :: DB.Connection -> User -> GroupInfo -> IO () deleteGroupChatItems db User {userId} GroupInfo {groupId} = @@ -1054,7 +1055,7 @@ getInProgressGroups db cxt user@User {userId} createdAtCutoff = do getBaseGroupDetails :: DB.Connection -> StoreCxt -> User -> Maybe ContactId -> Maybe Text -> IO [GroupInfo] getBaseGroupDetails db cxt User {userId, userContactId} _contactId_ search_ = do currentTs <- getCurrentTime - map (toGroupInfo currentTs cxt userContactId []) + map (toGroupInfo_ currentTs cxt userContactId []) <$> DB.query db (groupInfoQuery <> " " <> condition) (userId, userContactId, search, search, search, search) where condition = @@ -1361,11 +1362,11 @@ getGroupInvitation :: DB.Connection -> StoreCxt -> User -> GroupId -> ExceptT St getGroupInvitation db cxt user groupId = getConnRec_ user >>= \case Just connRequest -> do - groupInfo@GroupInfo {membership} <- getGroupInfo db cxt user groupId + GIK groupInfo@GroupInfo {membership} groupKeys <- getGroupInfoKeys db cxt user groupId when (memberStatus membership /= GSMemInvited) $ throwError SEGroupAlreadyJoined hostId <- getHostMemberId_ db user groupId fromMember <- getGroupMember db cxt user groupId hostId - pure ReceivedGroupInvitation {fromMember, connRequest, groupInfo} + pure ReceivedGroupInvitation {fromMember, connRequest, groupInfo, groupKeys} _ -> throwError SEGroupInvitationNotFound where getConnRec_ :: User -> ExceptT StoreError IO (Maybe ConnReqInvitation) @@ -1695,12 +1696,6 @@ setGroupMemberKeyRole db GroupMember {groupMemberId} pubKey role = do currentTs <- getCurrentTime DB.execute db "UPDATE group_members SET member_pub_key = ?, member_role = ?, updated_at = ? WHERE group_member_id = ?" (pubKey, role, currentTs, groupMemberId) -setUserMemberKey :: DB.Connection -> GroupId -> GroupMemberId -> C.PrivateKeyEd25519 -> IO () -setUserMemberKey db groupId membershipId memberPrivKey = do - currentTs <- getCurrentTime - DB.execute db "UPDATE groups SET member_priv_key = ?, updated_at = ? WHERE group_id = ?" (memberPrivKey, currentTs, groupId) - DB.execute db "UPDATE group_members SET member_pub_key = ?, updated_at = ? WHERE group_member_id = ?" (C.publicKey memberPrivKey, currentTs, membershipId) - setMemberPubKey :: DB.Connection -> GroupMemberId -> C.PublicKeyEd25519 -> IO () setMemberPubKey db groupMemberId pubKey = do currentTs <- getCurrentTime @@ -1914,13 +1909,13 @@ createRelayRequestGroup db cxt user@User {userId} GroupRelayInvitation {fromMemb groupPreferences = Nothing, memberAdmission = Nothing } - (groupId, _groupLDN) <- createGroup_ db userId placeholderProfile Nothing Nothing True (Just relayStatus) Nothing Nothing currentTs + (_, memberPrivKey) <- atomically $ C.generateKeyPair (drg cxt) + (groupId, _groupLDN) <- createGroup_ db userId placeholderProfile Nothing Nothing True (Just relayStatus) Nothing (Just memberPrivKey) currentTs -- Store relay request data for recovery liftIO $ setRelayRequestData_ groupId currentTs ownerMemberId <- insertOwner_ currentTs groupId let relayMember = MemberIdRole relayMemberId GRRelay - -- TODO [member keys] should relays use member keys? - _membership <- createContactMemberInv_ db user groupId (Just ownerMemberId) user relayMember GCUserMember memberStatus IBUnknown Nothing Nothing currentTs (vr cxt) + _membership <- createContactMemberInv_ db user groupId (Just ownerMemberId) user relayMember GCUserMember memberStatus IBUnknown Nothing (Just $ C.publicKey memberPrivKey) currentTs (vr cxt) ownerMember <- getGroupMember db cxt user groupId ownerMemberId g <- getGroupInfo db cxt user groupId pure (g, ownerMember) @@ -2015,16 +2010,17 @@ isRelayGroupRejected db User {userId} groupLink = (userId, groupLink, RSRejected) ) -getRelayServedGroups :: DB.Connection -> StoreCxt -> User -> IO [GroupInfo] +getRelayServedGroups :: DB.Connection -> StoreCxt -> User -> ExceptT StoreError IO [GroupInfoKeys] getRelayServedGroups db cxt User {userId, userContactId} = do - currentTs <- getCurrentTime - map (toGroupInfo currentTs cxt userContactId []) + currentTs <- liftIO getCurrentTime + rows <- liftIO $ map (toGroupInfo currentTs cxt userContactId []) <$> DB.query db ( groupInfoQuery <> " WHERE g.user_id = ? AND mu.contact_id = ? AND g.relay_own_status IN (?, ?, ?)" ) (userId, userContactId, RSAccepted, RSAcknowledgedRoster, RSActive) + forM rows $ \(g, keysData) -> GIK g <$> mkGroupKeys db cxt g keysData getRelayPublishableGroups :: DB.Connection -> User -> IO [(Int64, B64UrlByteString, Maybe PublicGroupAccess)] getRelayPublishableGroups db User {userId, userContactId} = @@ -2062,7 +2058,7 @@ getRelayInactiveGroups :: DB.Connection -> StoreCxt -> User -> NominalDiffTime - getRelayInactiveGroups db cxt User {userId, userContactId} ttl = do currentTs <- getCurrentTime let cutoffTs = addUTCTime (- ttl) currentTs - map (toGroupInfo currentTs cxt userContactId []) + map (toGroupInfo_ currentTs cxt userContactId []) <$> DB.query db ( groupInfoQuery @@ -2149,7 +2145,7 @@ createJoiningMemberConnection Connection {connId} <- createConnection_ db userId ConnMember (Just groupMemberId) agentConnId ConnNew chatV cReqChatVRange Nothing (Just uclId) Nothing 0 createdAt subMode PQSupportOff setCommandConnId db user cmdId connId -createBusinessRequestGroup :: DB.Connection -> StoreCxt -> TVar ChaChaDRG -> User -> VersionRangeChat -> Profile -> Int64 -> Text -> GroupPreferences -> ExceptT StoreError IO (GroupInfo, GroupMember) +createBusinessRequestGroup :: DB.Connection -> StoreCxt -> TVar ChaChaDRG -> User -> VersionRangeChat -> Profile -> Int64 -> Text -> GroupPreferences -> ExceptT StoreError IO (GroupInfoKeys, GroupMember) createBusinessRequestGroup db cxt @@ -2164,7 +2160,7 @@ createBusinessRequestGroup (groupId, membership@GroupMember {memberId = userMemberId}) <- insertGroup_ currentTs (groupMemberId, memberId) <- insertClientMember_ currentTs groupId membership liftIO $ DB.execute db "UPDATE groups SET business_member_id = ?, customer_member_id = ? WHERE group_id = ?" (userMemberId, memberId, groupId) - groupInfo <- getGroupInfo db cxt user groupId + groupInfo <- getGroupInfoKeys db cxt user groupId clientMember <- getGroupMemberById db cxt user groupMemberId pure (groupInfo, clientMember) where @@ -2250,14 +2246,14 @@ createMemberConnectionAsync db user@User {userId} groupMemberId (cmdId, agentCon -- which is used in single-connection flows. updatePreparedRelayedGroup :: DB.Connection -> StoreCxt -> User -> GroupInfo -> ConnReqContact -> ConnReqUriHash -> Maybe Profile -> - C.PublicKeyEd25519 -> C.PrivateKeyEd25519 -> Maybe Int64 -> - ExceptT StoreError IO GroupInfo -updatePreparedRelayedGroup db cxt user@User {userId} gInfo cReq cReqHash incognitoProfile rootPubKey memberPrivKey publicMemberCount_ = do + C.PublicKeyEd25519 -> Maybe Int64 -> + ExceptT StoreError IO GroupInfoKeys +updatePreparedRelayedGroup db cxt user@User {userId} gInfo cReq cReqHash incognitoProfile rootPubKey publicMemberCount_ = do currentTs <- liftIO getCurrentTime customUserProfileId <- liftIO $ mapM (createIncognitoProfile_ db userId currentTs) incognitoProfile liftIO $ setPreparedGroupLinkInfo_ db gInfo cReq cReqHash customUserProfileId publicMemberCount_ currentTs - liftIO $ updateGroupMemberKeys db (groupId' gInfo) rootPubKey memberPrivKey (groupMemberId' $ membership gInfo) - getGroupInfo db cxt user (groupId' gInfo) + liftIO $ setGroupRootKey db (groupId' gInfo) rootPubKey + getGroupInfoKeys db cxt user (groupId' gInfo) updatePublicMemberCount :: DB.Connection -> StoreCxt -> User -> GroupInfo -> ExceptT StoreError IO GroupInfo updatePublicMemberCount db cxt user GroupInfo {groupId} = do @@ -2284,23 +2280,15 @@ setPublicMemberCount db cxt user GroupInfo {groupId} publicCount = do liftIO $ DB.execute db "UPDATE groups SET public_member_count = ?, updated_at = ? WHERE group_id = ?" (publicCount, currentTs, groupId) getGroupInfo db cxt user groupId -updateGroupMemberKeys :: DB.Connection -> GroupId -> C.PublicKeyEd25519 -> C.PrivateKeyEd25519 -> GroupMemberId -> IO () -updateGroupMemberKeys db groupId rootPubKey memberPrivKey membershipGMId = do +setGroupRootKey :: DB.Connection -> GroupId -> C.PublicKeyEd25519 -> IO () +setGroupRootKey db groupId rootPubKey = do currentTs <- getCurrentTime - DB.execute - db - "UPDATE groups SET root_pub_key = ?, member_priv_key = ?, updated_at = ? WHERE group_id = ?" - (rootPubKey, memberPrivKey, currentTs, groupId) - DB.execute - db - "UPDATE group_members SET member_pub_key = ?, updated_at = ? WHERE group_member_id = ?" - (C.publicKey memberPrivKey, currentTs, membershipGMId) + DB.execute db "UPDATE groups SET root_pub_key = ?, updated_at = ? WHERE group_id = ?" (rootPubKey, currentTs, groupId) -updateRelayGroupKeys :: DB.Connection -> User -> GroupInfo -> PublicGroupProfile -> C.PublicKeyEd25519 -> C.PrivateKeyEd25519 -> [OwnerAuth] -> ExceptT StoreError IO () -updateRelayGroupKeys db user@User {userId} gInfo PublicGroupProfile {groupType, groupLink, publicGroupId} rootPubKey memberPrivKey owners = do +updateRelayGroupKeys :: DB.Connection -> User -> GroupInfo -> PublicGroupProfile -> C.PublicKeyEd25519 -> [OwnerAuth] -> ExceptT StoreError IO () +updateRelayGroupKeys db user@User {userId} gInfo PublicGroupProfile {groupType, groupLink, publicGroupId} rootPubKey owners = do currentTs <- liftIO getCurrentTime - let membershipGMId = groupMemberId' $ membership gInfo - groupId = groupId' gInfo + let groupId = groupId' gInfo liftIO $ do DB.execute db @@ -2309,14 +2297,7 @@ updateRelayGroupKeys db user@User {userId} gInfo PublicGroupProfile {groupType, WHERE group_profile_id IN (SELECT group_profile_id FROM groups WHERE user_id = ? AND group_id = ?) |] (groupType, groupLink, publicGroupId, currentTs, userId, groupId) - DB.execute - db - "UPDATE groups SET root_pub_key = ?, member_priv_key = ?, updated_at = ? WHERE group_id = ?" - (rootPubKey, memberPrivKey, currentTs, groupId) - DB.execute - db - "UPDATE group_members SET member_pub_key = ?, updated_at = ? WHERE group_member_id = ?" - (C.publicKey memberPrivKey, currentTs, membershipGMId) + setGroupRootKey db groupId rootPubKey -- TODO [relays] relay: if not found, create owner record (multi-owner) forM_ owners $ \OwnerAuth {ownerId, ownerKey} -> do ownerGMId <- getGroupMemberIdViaMemberId db user gInfo (MemberId ownerId) diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt index fd518f855e..e887bb2548 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt @@ -1870,6 +1870,15 @@ Query: Plan: SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?) +Query: + UPDATE groups + SET member_priv_key = COALESCE(member_priv_key, ?), updated_at = ? + WHERE group_id = ? + RETURNING member_priv_key + +Plan: +SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) + Query: UPDATE groups SET relay_request_inv_id = ?, @@ -7587,10 +7596,22 @@ Query: SELECT member_id FROM group_members WHERE member_role = ? LIMIT 1 Plan: SCAN group_members +Query: SELECT member_priv_key FROM groups +Plan: +SCAN groups + Query: SELECT member_pub_key FROM group_members WHERE local_display_name = ? Plan: SCAN group_members +Query: SELECT member_pub_key FROM group_members WHERE member_category = 'host' +Plan: +SCAN group_members + +Query: SELECT member_pub_key FROM group_members WHERE member_category = 'user' +Plan: +SCAN group_members + Query: SELECT member_pub_key FROM group_members WHERE member_role = 'moderator' Plan: SCAN group_members @@ -7967,6 +7988,14 @@ Query: UPDATE group_members SET member_pub_key = ?, updated_at = ? WHERE group_m Plan: SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?) +Query: UPDATE group_members SET member_pub_key = NULL WHERE member_category = 'host' +Plan: +SCAN group_members + +Query: UPDATE group_members SET member_pub_key = NULL WHERE member_category = 'user' +Plan: +SCAN group_members + Query: UPDATE group_members SET member_relations_vector = set_member_vector_new_relation(member_relations_vector, ?, ?, ?), updated_at = ? WHERE group_member_id = ? Plan: SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?) @@ -8059,6 +8088,10 @@ Query: UPDATE groups SET local_display_name = ?, updated_at = ? WHERE user_id = Plan: SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) +Query: UPDATE groups SET member_priv_key = NULL +Plan: +SCAN groups + Query: UPDATE groups SET members_require_attention=1 WHERE group_id=? Plan: SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) @@ -8079,7 +8112,7 @@ Query: UPDATE groups SET request_shared_msg_id = ? WHERE group_id = ? Plan: SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) -Query: UPDATE groups SET root_pub_key = ?, member_priv_key = ?, updated_at = ? WHERE group_id = ? +Query: UPDATE groups SET root_pub_key = ?, updated_at = ? WHERE group_id = ? Plan: SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) diff --git a/src/Simplex/Chat/Store/Shared.hs b/src/Simplex/Chat/Store/Shared.hs index c98609a065..8eeefa328f 100644 --- a/src/Simplex/Chat/Store/Shared.hs +++ b/src/Simplex/Chat/Store/Shared.hs @@ -694,18 +694,21 @@ type GroupMemberRow = (GroupMemberId, GroupId, Int64, MemberId, VersionChat, Ver type ProfileRow = (ProfileId, ContactName, Text, Maybe Text, Maybe Text, Maybe ImageData, Maybe ConnLinkContact, Maybe ChatPeerType, LocalAlias, Maybe Preferences) :. BadgeRow :. ContactDomainRow -toGroupInfo :: UTCTime -> StoreCxt -> Int64 -> [ChatTagId] -> GroupInfoRow -> GroupInfo +toGroupInfo :: UTCTime -> StoreCxt -> Int64 -> [ChatTagId] -> GroupInfoRow -> (GroupInfo, GroupKeysRow) toGroupInfo now cxt userContactId chatTags ((groupId, localDisplayName, displayName, fullName, shortDescr, localAlias, description, image, groupType_, groupLink_, publicGroupId_) :. accessRow :. (enableNtfs_, sendRcpts, BI favorite, groupPreferences, memberAdmission) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt) :. preparedGroupRow :. businessRow :. (BI useRelays, relayOwnStatus, uiThemes, currentMembers, publicMemberCount, rosterVersion, customData, chatItemTTL, membersRequireAttention, viaGroupLinkUri, groupDomainVerified) :. groupKeysRow :. userMemberRow) = let membership = (toGroupMember now userContactId userMemberRow) {memberChatVRange = vr cxt} chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts = unBI <$> sendRcpts, favorite} fullGroupPreferences = mergeGroupPreferences groupPreferences publicGroup = toPublicGroupProfile groupType_ groupLink_ publicGroupId_ (toPublicGroupAccess accessRow) - groupKeys = toGroupKeys publicGroupId_ groupKeysRow groupProfile = GroupProfile {displayName, fullName, shortDescr, description, image, publicGroup, groupPreferences, memberAdmission} businessChat = toBusinessChatInfo (toPublicGroupAccess accessRow >>= groupDomainClaim) businessRow preparedGroup = toPreparedGroup preparedGroupRow groupSummary = GroupSummary {currentMembers, publicMemberCount} - in GroupInfo {groupId, useRelays = BoolDef useRelays, relayOwnStatus, localDisplayName, groupProfile, localAlias, businessChat, fullGroupPreferences, membership, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, preparedGroup, chatTags, chatItemTTL, uiThemes, groupSummary, rosterVersion, customData, membersRequireAttention, viaGroupLinkUri, groupKeys, groupDomainVerified = unBI <$> groupDomainVerified} + gInfo = GroupInfo {groupId, useRelays = BoolDef useRelays, relayOwnStatus, localDisplayName, groupProfile, localAlias, businessChat, fullGroupPreferences, membership, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, preparedGroup, chatTags, chatItemTTL, uiThemes, groupSummary, rosterVersion, customData, membersRequireAttention, viaGroupLinkUri, groupDomainVerified = unBI <$> groupDomainVerified} + in (gInfo, groupKeysRow) + +toGroupInfo_ :: UTCTime -> StoreCxt -> Int64 -> [ChatTagId] -> GroupInfoRow -> GroupInfo +toGroupInfo_ now cxt userContactId chatTags row = fst $ toGroupInfo now cxt userContactId chatTags row toPreparedGroup :: PreparedGroupRow -> Maybe PreparedGroup toPreparedGroup = \case @@ -733,13 +736,35 @@ toPublicGroupAccess (groupWebPage, groupDomain_, domainWebPage_, allowEmbedding_ domainWebPage = maybe False unBI domainWebPage_ allowEmbedding = maybe False unBI allowEmbedding_ -toGroupKeys :: Maybe B64UrlByteString -> GroupKeysRow -> Maybe GroupKeys -toGroupKeys publicGroupId_ (rootPrivKey, rootPubKey, memberPrivKey) = - let publicGroupKeys = case (publicGroupId_, GRKPrivate <$> rootPrivKey <|> GRKPublic <$> rootPubKey) of - (Just publicGroupId, Just groupRootKey) -> Just $ Just PublicGroupKeys {publicGroupId, groupRootKey} - (Nothing, Nothing) -> Just Nothing - _ -> Nothing -- invalid state, in which case messages won't be signed even if memberPrivKey is present - in GroupKeys <$> publicGroupKeys <*> memberPrivKey +mkGroupKeys :: DB.Connection -> StoreCxt -> GroupInfo -> GroupKeysRow -> ExceptT StoreError IO GroupKeys +mkGroupKeys db cxt g@GroupInfo {groupId, groupProfile = GroupProfile {publicGroup}, membership} (rootPrivKey, rootPubKey, memberPrivKey_) = do + memberPrivKey <- case memberPrivKey_ of + Just k -> pure k + Nothing -> do + (_, k) <- atomically $ C.generateKeyPair (drg cxt) + setUserMemberKey db groupId (groupMemberId' membership) k + pure $ case (useRelays' g, isJust publicGroup, GRKPrivate <$> rootPrivKey <|> GRKPublic <$> rootPubKey) of + (False, _, _) -> GKGroup {memberPrivKey} + (True, True, Just groupRootKey) -> GKPublicGroup {groupRootKey, memberPrivKey} + (True, True, Nothing) -> GKPreparedPublicGroup {memberPrivKey} + (True, False, _) -> GKRelayRequest {memberPrivKey} + +setUserMemberKey :: DB.Connection -> GroupId -> GroupMemberId -> C.PrivateKeyEd25519 -> ExceptT StoreError IO C.PrivateKeyEd25519 +setUserMemberKey db groupId membershipId newKey = do + currentTs <- liftIO getCurrentTime + memberPrivKey <- + ExceptT . firstRow fromOnly (SEGroupNotFound groupId) $ + DB.query + db + [sql| + UPDATE groups + SET member_priv_key = COALESCE(member_priv_key, ?), updated_at = ? + WHERE group_id = ? + RETURNING member_priv_key + |] + (newKey, currentTs, groupId) + liftIO $ DB.execute db "UPDATE group_members SET member_pub_key = ?, updated_at = ? WHERE group_member_id = ?" (C.publicKey memberPrivKey, currentTs, membershipId) + pure memberPrivKey toGroupMember :: UTCTime -> Int64 -> GroupMemberRow -> GroupMember toGroupMember now userContactId ((groupMemberId, groupId, indexInGroup, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, BI showMessages, memberRestriction_) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId) :. profileRow :. (createdAt, updatedAt) :. (supportChatTs_, supportChatUnread, supportChatMemberAttention, supportChatMentions, supportChatLastMsgFromMemberTs, memberPubKey, relayLink, memberCode_, memberCodeVerifiedAt_)) = @@ -901,8 +926,18 @@ addGroupChatTags db g@GroupInfo {groupId} = do chatTags <- getGroupChatTags db groupId pure (g :: GroupInfo) {chatTags} +getGroupInfoKeys :: DB.Connection -> StoreCxt -> User -> Int64 -> ExceptT StoreError IO GroupInfoKeys +getGroupInfoKeys db cxt user groupId = do + (g@GroupInfo {membership}, keysData) <- getGroupInfoRow db cxt user groupId + gks <- mkGroupKeys db cxt g keysData + let membership' = membership {memberPubKey = Just $ C.publicKey $ memberPrivKey gks} :: GroupMember + pure $ GIK (g :: GroupInfo) {membership = membership'} gks + getGroupInfo :: DB.Connection -> StoreCxt -> User -> Int64 -> ExceptT StoreError IO GroupInfo -getGroupInfo db cxt User {userId, userContactId} groupId = ExceptT $ do +getGroupInfo db cxt user groupId = fst <$> getGroupInfoRow db cxt user groupId + +getGroupInfoRow :: DB.Connection -> StoreCxt -> User -> Int64 -> ExceptT StoreError IO (GroupInfo, GroupKeysRow) +getGroupInfoRow db cxt User {userId, userContactId} groupId = ExceptT $ do currentTs <- getCurrentTime chatTags <- getGroupChatTags db groupId firstRow (toGroupInfo currentTs cxt userContactId chatTags) (SEGroupNotFound groupId) $ diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 7bfd2f299d..282d6b2fda 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -30,7 +30,9 @@ module Simplex.Chat.Types where import Control.Applicative ((<|>)) +import Control.Concurrent.STM (TVar) import Crypto.Number.Serialize (os2ip) +import Crypto.Random (ChaChaDRG) import Data.Aeson (FromJSON (..), ToJSON (..)) import qualified Data.Aeson as J import qualified Data.Aeson.Encoding as JE @@ -437,7 +439,7 @@ instance ToJSON ConnReqUriHash where data RequestEntity = REContact Contact - | REBusinessChat GroupInfo GroupMember + | REBusinessChat GroupInfoKeys GroupMember type RepeatRequest = Bool @@ -479,17 +481,30 @@ groupRootPubKey :: GroupRootKey -> C.PublicKeyEd25519 groupRootPubKey (GRKPrivate pk) = C.publicKey pk groupRootPubKey (GRKPublic pk) = pk -data GroupKeys = GroupKeys - { publicGroupKeys :: Maybe PublicGroupKeys, - memberPrivKey :: C.PrivateKeyEd25519 - } +data GroupKeys + = GKGroup + { memberPrivKey :: C.PrivateKeyEd25519 + } + | GKPublicGroup + { groupRootKey :: GroupRootKey, + memberPrivKey :: C.PrivateKeyEd25519 + } + | GKRelayRequest + { memberPrivKey :: C.PrivateKeyEd25519 + } + | GKPreparedPublicGroup + { memberPrivKey :: C.PrivateKeyEd25519 + } deriving (Eq, Show) -data PublicGroupKeys = PublicGroupKeys - { publicGroupId :: B64UrlByteString, - groupRootKey :: GroupRootKey - } - deriving (Eq, Show) +isPublicGroup :: GroupKeys -> Bool +isPublicGroup = \case + GKGroup {} -> False + GKPublicGroup {} -> True + GKRelayRequest {} -> True + GKPreparedPublicGroup {} -> True + +data GroupInfoKeys = GIK GroupInfo GroupKeys data GroupInfo = GroupInfo { groupId :: GroupId, @@ -515,7 +530,6 @@ data GroupInfo = GroupInfo rosterVersion :: Maybe VersionRoster, membersRequireAttention :: Int, viaGroupLinkUri :: Maybe ConnReqContact, - groupKeys :: Maybe GroupKeys, groupDomainVerified :: Maybe Bool } deriving (Eq, Show) @@ -523,6 +537,9 @@ data GroupInfo = GroupInfo useRelays' :: GroupInfo -> Bool useRelays' GroupInfo {useRelays} = isTrue useRelays +publicGroup' :: GroupInfo -> Maybe PublicGroupProfile +publicGroup' g@GroupInfo {groupProfile = GroupProfile {publicGroup}} = if useRelays' g then publicGroup else Nothing + relayServesGroup :: GroupInfo -> Bool relayServesGroup GroupInfo {relayOwnStatus} = case relayOwnStatus of Just RSInactive -> False @@ -595,7 +612,7 @@ data GroupLink = GroupLink data ContactOrGroup = CGContact Contact | CGGroup GroupInfo [GroupMember] -data PreparedChatEntity = PCEContact Contact | PCEGroup {groupInfo :: GroupInfo, hostMember :: GroupMember} +data PreparedChatEntity = PCEContact Contact | PCEGroup {groupInfo :: GroupInfoKeys, hostMember :: GroupMember} contactAndGroupIds :: ContactOrGroup -> (Maybe ContactId, Maybe GroupId) contactAndGroupIds = \case @@ -1145,7 +1162,8 @@ memberRestrictions m data ReceivedGroupInvitation = ReceivedGroupInvitation { fromMember :: GroupMember, connRequest :: ConnReqInvitation, - groupInfo :: GroupInfo + groupInfo :: GroupInfo, + groupKeys :: GroupKeys } deriving (Eq, Show) @@ -2240,8 +2258,8 @@ type VersionChat = Version ChatVersion type VersionRangeChat = VersionRange ChatVersion -- | Store-wide context passed to store functions in place of the bare `vr` --- parameter. Built from config by mkStoreCxt; more fields are added here over time. -data StoreCxt = StoreCxt {vr :: VersionRangeChat, badgeKeys :: Map Int BBSPublicKey} +-- parameter. Built from config by storeCxt; more fields are added here over time. +data StoreCxt = StoreCxt {vr :: VersionRangeChat, badgeKeys :: Map Int BBSPublicKey, drg :: TVar ChaChaDRG} pattern VersionChat :: Word16 -> VersionChat pattern VersionChat v = Version v @@ -2347,12 +2365,6 @@ instance FromJSON GroupSummary where parseJSON = $(JQ.mkParseJSON defaultJSON ''GroupSummary) omittedField = Just GroupSummary {currentMembers = 0, publicMemberCount = Nothing} -$(JQ.deriveJSON (sumTypeJSON $ dropPrefix "GRK") ''GroupRootKey) - -$(JQ.deriveJSON defaultJSON ''PublicGroupKeys) - -$(JQ.deriveJSON defaultJSON ''GroupKeys) - $(JQ.deriveJSON defaultJSON ''GroupInfo) $(JQ.deriveJSON defaultJSON ''Group) diff --git a/src/Simplex/Chat/Web.hs b/src/Simplex/Chat/Web.hs index 9720116d91..30d674d55f 100644 --- a/src/Simplex/Chat/Web.hs +++ b/src/Simplex/Chat/Web.hs @@ -42,7 +42,7 @@ import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as TIO import Data.Time.Clock (UTCTime, getCurrentTime) -import Simplex.Chat.Controller (ChatController (..), CorsOrigin (..), PublishableGroup (..), WebPreviewConfig (..), WebPreviewState (..), mkStoreCxt) +import Simplex.Chat.Controller (ChatController (..), CorsOrigin (..), PublishableGroup (..), WebPreviewConfig (..), WebPreviewState (..), storeCxt) import Simplex.Chat.Markdown (FormattedText (..), MarkdownList, parseMaybeMarkdownList) import Simplex.Chat.Messages ( CChatItem (..), @@ -137,7 +137,7 @@ webPreviewWorker cfg@WebPreviewConfig {webJsonDir, webCorsFile, webUpdateInterva seedRoutinePending wps forever $ workerLoop wps `catchOwn` \e -> logError ("web preview worker error: " <> tshow e) where - cxt = mkStoreCxt (config cc) + cxt = storeCxt cc workerLoop wps@WebPreviewState {priorityRender, filesToRemove, corsNeeded, routinePending, wakeSignal} = do drainRemovals @@ -262,7 +262,7 @@ renderGroupPreview WebPreviewConfig {webJsonDir, webPreviewItemCount} cc user gI pure $ corsEntry publicGroupId <$> publicGroupAccess Nothing -> pure Nothing where - cxt = mkStoreCxt (config cc) + cxt = storeCxt cc channelContentChanged :: ChatController -> Int64 -> STM () channelContentChanged cc gId = diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index e17de3a766..66deaae225 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -114,6 +114,7 @@ chatGroupTests = do it "shared batch body reference across binary and json members" testGroupSharedBatchBodyMixedModes it "shared batch body reused across binary and json members" testSharedBatchBodyMixed it "all old members group upgrades to current version" testGroupAllOldThenUpgrade + it "member key is generated at the first read of a group created without one" testGroupMemberKeyGenerated describe "async group connections" $ do xit "create and join group when clients go offline" testGroupAsync describe "group links" $ do @@ -2594,6 +2595,60 @@ testGroupAllOldThenUpgrade ps = where oldCfg = testCfg {chatVRange = mkVersionRange (VersionChat 9) (VersionChat 17)} +testGroupMemberKeyGenerated :: HasCallStack => TestParams -> IO () +testGroupMemberKeyGenerated = + testChat2 aliceProfile bobProfile $ \alice bob -> do + alice ##> "/g team" + alice <## "group #team is created" + alice <## "to add members use /a team or /create link #team" + alice ##> "/create link #team" + gLink <- getGroupLink alice "team" GRMember True + bob ##> ("/c " <> gLink) + bob <## "connection request sent!" + alice <## "bob (Bob): accepting request to join group #team..." + concurrentlyN_ + [ alice <## "#team: bob joined the group", + do + bob <## "#team: joining the group..." + bob <## "#team: you joined the group" + ] + alice #> "#team hi0" + bob <# "#team alice> hi0" + void $ withCCTransaction alice $ \db -> do + DB.execute_ db "UPDATE groups SET member_priv_key = NULL" + DB.execute_ db "UPDATE group_members SET member_pub_key = NULL WHERE member_category = 'user'" + void $ withCCTransaction bob $ \db -> + DB.execute_ db "UPDATE group_members SET member_pub_key = NULL WHERE member_category = 'host'" + alice ##> "/p alisa" + alice <## "user profile is changed to alisa (your 0 contacts are notified)" + alice #> "#team hi1" + bob <# "#team alisa> hi1" + bob ##> "/_get chat #1 count=100" + r <- chat <$> getTermLine bob + r `shouldContain` [(0, "updated profile (signed, no key to verify)")] + privKey1 <- alicePrivKey alice + pubKey1 <- alicePubKey alice + bobKnownKey <- withCCTransaction bob $ \db -> + DB.query_ db "SELECT member_pub_key FROM group_members WHERE member_category = 'host'" :: IO [Only (Maybe C.PublicKeyEd25519)] + (C.publicKey <$> privKey1) `shouldBe` pubKey1 + bobKnownKey `shouldBe` [Only pubKey1] + alice ##> "/p alisa2" + alice <## "user profile is changed to alisa2 (your 0 contacts are notified)" + alice #> "#team hi2" + bob <# "#team alisa2> hi2" + bob ##> "/_get chat #1 count=100" + r' <- chat <$> getTermLine bob + r' `shouldContain` [(0, "updated profile (signed)")] + privKey2 <- alicePrivKey alice + privKey2 `shouldBe` privKey1 + where + alicePrivKey alice = do + [Only k] <- withCCTransaction alice $ \db -> DB.query_ db "SELECT member_priv_key FROM groups" :: IO [Only (Maybe C.PrivateKeyEd25519)] + pure k + alicePubKey alice = do + [Only k] <- withCCTransaction alice $ \db -> DB.query_ db "SELECT member_pub_key FROM group_members WHERE member_category = 'user'" :: IO [Only (Maybe C.PublicKeyEd25519)] + pure k + testGroupAsync :: HasCallStack => TestParams -> IO () testGroupAsync ps = do withNewTestChat ps "alice" aliceProfile $ \alice -> do diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 743bd5be52..10cb6e45ff 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -24,7 +24,7 @@ import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Data.Time.Format (defaultTimeLocale, formatTime) import qualified Data.Map.Strict as M import Simplex.Chat.Badges (BadgeCredential, BadgeInfo (..), BadgePurchase (..), BadgeRequest (..), BadgeType (..), generateMasterKey, issueBadge, verifyPayment) -import Simplex.Chat.Controller (ChatConfig (..), ChatController (..), ChatHooks (..), defaultChatHooks, mkStoreCxt) +import Simplex.Chat.Controller (ChatConfig (..), ChatHooks (..), defaultChatHooks, storeCxt) import Simplex.Chat.Options (ChatOpts (..), CoreChatOpts (..)) import Simplex.Chat.Protocol (LinkOwnerSig, MsgChatLink (..), MsgContent (..)) import Simplex.Chat.Store.Shared (createContact) @@ -1611,13 +1611,13 @@ testPlanAddressContactViaAddress = Left _ -> error "error parsing contact link" Right cReq -> do let profile = aliceProfile {contactLink = Just cReq} - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] bob ##> "/delete @alice" bob <## "alice: contact is deleted" - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] bob ##> ("/_connect plan 1 " <> cLink) @@ -1632,7 +1632,7 @@ testPlanAddressContactViaAddress = alice ##> "/delete @bob" alice <## "bob: contact is deleted" - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] -- GUI api @@ -1673,13 +1673,13 @@ testPlanAddressContactViaShortAddress = Left _ -> error "error parsing contact link" Right shortLink -> do let profile = aliceProfile {contactLink = Just shortLink} - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] bob ##> "/delete @alice" bob <## "alice: contact is deleted" - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] bob ##> ("/_connect plan 1 " <> sLink) @@ -1694,7 +1694,7 @@ testPlanAddressContactViaShortAddress = alice ##> "/delete @bob" alice <## "bob: contact is deleted" - void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> let TestCC {chatController = ChatController {config}} = bob in runExceptT $ createContact db (mkStoreCxt config) user profile + void $ withCCUser bob $ \user -> withCCTransaction bob $ \db -> runExceptT $ createContact db (storeCxt $ chatController bob) user profile bob @@@ [("@alice", "")] -- GUI api diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index f16b3ac090..305207fef6 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -23,7 +23,7 @@ import Data.List (isPrefixOf, isSuffixOf) import Data.Maybe (fromMaybe) import Data.String import qualified Data.Text as T -import Simplex.Chat.Controller (ChatConfig (..), ChatController (..), mkStoreCxt) +import Simplex.Chat.Controller (ChatConfig (..), ChatController (..), storeCxt) import Simplex.Chat.Library.Commands (maxProfileImageSize) import Simplex.Chat.Markdown (viewName) import Simplex.Chat.Messages.CIContent (e2eInfoNoPQText, e2eInfoPQText) @@ -709,10 +709,10 @@ getCtConn cc contactId = getTestCCContact cc contactId >>= maybe (fail "no conne getTestCCContact :: TestCC -> ContactId -> IO Contact getTestCCContact cc contactId = do - let TestCC {chatController = ChatController {config}} = cc + let TestCC {chatController} = cc withCCTransaction cc $ \db -> withCCUser cc $ \user -> - runExceptT (getContact db (mkStoreCxt config) user contactId) >>= either (fail . show) pure + runExceptT (getContact db (storeCxt chatController) user contactId) >>= either (fail . show) pure lastItemId :: HasCallStack => TestCC -> IO String lastItemId cc = do From 6f85f1d4f0ba96c7b9550eb58de201fc383913d0 Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Sat, 19 Sep 2026 07:13:05 +0000 Subject: [PATCH 05/28] android, desktop: offer key verification when member profile is opened from chat (#7486) In channels members are usually connected via relays, so they are memberCurrent but not memberActive, and #7255 widened the condition for requesting the member security code to cover them. It updated GroupChatInfoView and MemberSupportChatView, but not the same code in ChatView, so "Verify security code" is not offered when the profile is opened by tapping member avatar in the chat, while it is offered for the same member in the members list. --- .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index cb36d86230..7e43db2e98 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -502,7 +502,7 @@ fun ChatView( groupMembersJob = scope.launch(Dispatchers.Default) { val r = chatModel.controller.apiGroupMemberInfo(chatRh, groupInfo.groupId, member.groupMemberId) val stats = r?.second - val (updatedMember, code) = if (member.memberActive) { + val (updatedMember, code) = if ((member.memberActive || (groupInfo.useRelays && member.memberCurrent)) && member.memberRole != GroupMemberRole.Relay) { val memCode = chatModel.controller.apiGetGroupMemberCode(chatRh, groupInfo.apiId, member.groupMemberId) (memCode?.first ?: r?.first ?: member) to memCode?.second } else { From 463761cc8e883316392bcdfa19edeae8c3e4920f Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Sat, 19 Sep 2026 07:31:52 +0000 Subject: [PATCH 06/28] ui: use backward compatible Java api in stripFormattedTextLink (#7464) --- .../kotlin/chat/simplex/common/views/chat/item/TextItemView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt index 7e66c15937..da64862c03 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt @@ -622,7 +622,7 @@ fun stripFormattedTextLink(ft: List?, link: String): List= 0 && result[i].format == null && result[i].text.endsWith("\n")) { result[i] = FormattedText(result[i].text.dropLast(1), null) - if (result[i].text.isEmpty()) result.removeLast() + if (result[i].text.isEmpty()) result.removeAt(result.lastIndex) } return result.ifEmpty { null } } From edd44c5d54f6cae962e71196876b96d082f28282 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 19 Sep 2026 08:43:49 +0100 Subject: [PATCH 07/28] test: fix compilation in ghc8.10.7 (#7541) Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- tests/ChatTests/Files.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ChatTests/Files.hs b/tests/ChatTests/Files.hs index 55766e905a..14851444a7 100644 --- a/tests/ChatTests/Files.hs +++ b/tests/ChatTests/Files.hs @@ -920,8 +920,8 @@ testFileBadgeProofStatus ps = do withNewTestChatCfg ps (badgeFileCfg pk) "alice" aliceProfile $ \alice -> do now <- getCurrentTime let ph = PHFileInv {chatBinding = "Dalice-binding", fileSize = 272376} - otherBinding = (ph :: ProofPresHeader) {chatBinding = "Dbob-binding"} - otherSize = (ph :: ProofPresHeader) {fileSize = 1} + otherBinding = PHFileInv {chatBinding = "Dbob-binding", fileSize = 272376} + otherSize = PHFileInv {chatBinding = "Dalice-binding", fileSize = 1} proofFor expiry = do cred <- issueTestBadge sk expiry Right badge <- badgeProof pk cred ph From 000244f9a6e7ac1125a13557a01bba49d0694790 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 19 Sep 2026 09:26:01 +0100 Subject: [PATCH 08/28] docs: supporter badges technical overview (#7535) * docs: supporter badges * improve * update * update * improve * update * correction * update * simplify * revise * corrections --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- docs/protocol/badges-overview.md | 291 +++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 docs/protocol/badges-overview.md diff --git a/docs/protocol/badges-overview.md b/docs/protocol/badges-overview.md new file mode 100644 index 0000000000..7864c6fd0e --- /dev/null +++ b/docs/protocol/badges-overview.md @@ -0,0 +1,291 @@ +Revision 1, 2026-09-18 + +# SimpleX Supporter Badges + +## Table of contents + +- [Introduction](#introduction) + - [What is a badge](#what-is-a-badge) + - [What a badge grants](#what-a-badge-grants) + - [What a badge discloses](#what-a-badge-discloses) + - [Comparison with Signal badges](#comparison-with-signal-badges) + - [Non-goals](#non-goals) +- [Architecture](#architecture) + - [Participants](#participants) + - [Service requests](#service-requests) + - [Buying and redeeming](#buying-and-redeeming) + - [Monthly issuance](#monthly-issuance) + - [Presentation](#presentation) + - [Servers](#servers) +- [Cryptographic primitives](#cryptographic-primitives) +- [Security](#security) + - [Design objectives](#design-objectives) + - [Threat model](#threat-model) +- [Future work](#future-work) + + +## Introduction + +The goal is for SimpleX Chat to be partly funded by its users, who buy supporter badges. A badge is shown on the profile of the person who bought it, and it raises the limits that other users and servers apply to that person's files. This document describes what a badge is, what it grants, how it is issued and presented, and what it discloses about the holder. + +In an ordinary messenger a paid feature is attached to an account, and the operator sees in one record who paid and what they did with the feature. The SimpleX network has no accounts, so there is nothing to attach a purchase to, and introducing an account for this purpose would remove the privacy that the rest of the design provides. A badge is therefore designed so that the purchase, which the badge service necessarily records, cannot be connected with the profile, the conversations or the servers of the person who made it. + +### What is a badge + +A badge is a credential issued by the badge service, a bot operated by SimpleX Chat. The credential is a [BBS signature](https://datatracker.ietf.org/doc/draft-irtf-cfrg-bbs-signatures/) over four values: a master key generated by the app; the expiry date; the badge type, currently `supporter` or `legend`; and a reserved field that is currently empty. + +The holder of a BBS signature can prove that the issuer signed certain values, disclose some of those values, and keep the other values and the signature itself secret. The credential itself is therefore not sent to anyone. When the badge is to be shown or used, the app generates a proof that discloses the badge type, the expiry date and the reserved field, names the issuer key by its index, and hides the master key and the signature. Two proofs from the same credential cannot be linked to each other, by the issuer or by anyone else. Each proof is generated for one context, whether a conversation, a file or a session with a server, and is not accepted in any other. + +The transport protocols of the network call the same credential an entitlement: a name, an expiry and an extra string, disclosed in a proof. The chat application puts the badge type into the name, so a server that verifies an entitlement and a contact who sees a badge are looking at different zero-knowledge proofs of the same credential. + +### What a badge grants + +- A badge is shown on the profile to contacts, to the members of groups, and to the subscribers of channels. +- A badge allows larger files. The default limit is 1GB; a supporter can send files up to 2GB, and a legend up to 5GB. The limit is applied by the recipient, whose app verifies the sender's proof before it accepts a file above the default size. +- A badge extends the storage of files on servers. An XFTP server stores a file for 48 hours by default. It may be configured to store files for longer when they are uploaded by the holder of a badge of a given type; the example values in the server configuration file are 7 and 21 days for supporter and legend badge holders, respectively. + +Two other uses are planned and described under [Future work](#future-work): + +- A backup will be a link whose content the app replaces each time it makes a new backup, so that the same link restores the latest state. A badge will raise the size of the backup and the time it is stored, and the storage time is then the period the app can remain offline before the backup is lost. +- Servers that verify the proof will apply higher rate limits when creating messaging queues, file chunks and notification tokens. + +### What a badge discloses + +The badge service holds the purchase key, the number of months bought, and the payment record of the purchase. A card payment is linked to the purchase, as in any other service; a user who wants the payment itself to be private may pay with cryptocurrency. In either case the record is held by the service alone, and the service does not learn where the badge is later shown or used, because a zero-knowledge proof contains nothing that refers back to the credential or the purchase. + +A party that verifies a proof learns the badge type and the expiry date. Since all credentials expiring in the same week have the same expiry date, these two values place the holder among the supporters whose badges expire that week. + +### Comparison with Signal badges + +Signal sells donation badges using [receipt credentials](https://eprint.iacr.org/2019/1416.pdf). The client obtains a credential against a payment without revealing its account, and then presents the credential once to the account server, which records its serial number, level and expiry against the account and attaches the badge to the account. The payment is not linked to the account cryptographically. The same mechanism is used for Signal's paid backups. + +The differences follow from Signal having accounts and SimpleX not having them. + +In Signal: + +- The server holds the list of accounts that have badges. +- The credential can be verified only by the server that issued it. +- The credential is presented once, after which the badge is a property of the account. +- The client requests the credential and redeems it in a single sequence of jobs without delay, so the server can match the request made under the payment with the redemption made under the account by their times and by network address. +- The expiry of a credential is rounded up to the next day. + +In SimpleX: + +- A server verifies a proof for one session and cannot link that session to any other. +- A credential can be verified against the issuer's public key by contacts, channel relays and independently operated servers. +- A credential is presented every time the badge is shown or used, with a new proof each time. +- The request for a renewed credential and the profile update that presents it are made on different days. +- All credentials expiring in the same week have the same expiry. + +| Property | Signal badges | SimpleX badges | +|---|---|---| +| Account required | Yes | No | +| Operator holds the list of badge holders | Yes | No | +| Verified by | The issuing server | Any party with the issuer's public key | +| Presentations per credential | One | Unlimited | +| Proof bound to the context of presentation | No | Yes | +| Expiry rounded up to | The next day | The end of the following Monday | +| Issuance and presentation on different days | No | Yes | +| Usable on independently operated servers | No | Yes | + +### Non-goals + +- A badge does not restrict anything that is available today: the defaults are unchanged, and a badge only raises them. +- A badge does not create an identity: it has no persistent identifier, it is not linked across conversations, and an incognito profile does not show it. +- A badge cannot be transferred: a code can be redeemed once, and the credential obtained with it is usable only with the master key it was issued for. +- A badge does not exempt its holder from the limits a server applies: it lowers the cost of a resource without removing the limit on it. +- A badge cannot be revoked; credentials are issued for one month at a time instead. + +## Architecture + +``` + ┌─────────────────┐ code ┌──────────────┐ purchase ┌──────────┐ + │ Web purchase │ ────────> │ Holder │ ────────────> │ Issuer │ + └─────────────────┘ │ (the app) │ <──────────── └──────────┘ + └──────┬───────┘ credential + │ every month + │ a new proof each time + ┌─────────────────────────┼───────────────────────┐ + │ │ │ + ┌────▼─────┐ ┌─────▼──────┐ ┌─────▼──────┐ + │ Contacts,│ │ File │ │ The user's │ + │ groups, │ │ recipients │ │ own servers│ + │ channels │ └────────────┘ └────────────┘ + └──────────┘ +``` + +### Participants + +- The issuer is the badge service, a bot on the SimpleX network with a contact address. It holds the secret key with which credentials are signed. Apps and servers hold a list of eight issuer public keys, and every credential includes the index of the key that signed it, so the service can move to the next key without a release of apps or servers. +- The holder is the app. It keeps the credential in the user's profile, generates proofs on the device, and renews the credential every month. +- The verifiers are contacts, group members, channel relays, the recipients of files, and the user's own servers. A verifier holds the issuer public keys and no other information about badges. + +### Service requests + +The app and the badge service communicate through one-off service requests, a primitive of the SimpleX agent described in [One-off requests to service addresses](https://github.com/simplex-chat/simplexmq/blob/master/rfcs/2026-07-11-service-rpc.md). Although the service has a contact address, it is not a contact of the app, and no conversation with it exists. + +A request is a single message to the service's address. The app establishes a double ratchet, with post-quantum key agreement, from the keys published in the service's address link, encrypts the request with the double ratchet, and sends it to the address queue on the service's server in the same way as any message to a server chosen by another party, that is, through a proxy server when private routing is enabled (which is the default). With the request the app sends the address of a reply queue that it created for this request on one of its own servers. The service decrypts the request with a receiving ratchet initialised from its private keys, sends the reply to the reply queue under the same ratchet, and deletes its state; the app deletes the reply queue and the ratchet when it has the reply or when the request times out. + +This exchange has the following properties: + +- Unlike a request made directly to the service over HTTP, the app does not connect to the service, nor the service to the app. Each communicates only with SMP servers, so the service does not see the app's network address, and with private routing the service's server does not see it either. +- Unlike a chat connection, which is a persistent channel through which all requests made over it can be linked to each other, a service request does not create persistent state. Each request uses new keys and a new reply queue, so two requests from the same app cannot be linked by the service or by servers. +- A reply that decrypts proves that it came from the holder of the keys published in the service's link and signed by its root key, so a server cannot substitute a reply. +- The badge service answers a repeated request with the same result and does not execute the operation twice, so the app can repeat a request whose reply was lost. + +A purchase is identified by an Ed25519 key pair that the app generates for it and does not use for any other purpose. Every request concerning the purchase, the redemption and each monthly renewal, is signed with this key, and the signature covers the request together with a value derived from the ratchet of that exchange, so it is valid for that exchange only and cannot be replayed. The agent verifies the signature and delivers the verified public key to the service with the request, and the service accepts a request about a purchase only when the verified key is the purchase key. + +### Buying and redeeming + +A badge is bought for one or more months, either on the web or in the app. + +On the web the purchase produces a code, which is then redeemed in the app. The code is the only data passed from the web site to the app: the web site does not learn which app redeems a code, and the app does not see the payment. The code is generated in the buyer's browser, and the service stores only its hash; at redemption the app presents the code itself, and the service matches it against the stored hash. A badge issued without a sale, for example in compensation for a problem, is a code generated by the operator and redeemed in the same way. + +In the app, the user pays by card, in cryptocurrency, or through the app store. The app requests an invoice from the service, or presents the receipt of the app store, and the service issues the credential once the payment is confirmed. + +In both cases the app generates the master key and the purchase key pair before the purchase. To redeem a code, the app sends the code and the master key to the service, which issues the credential. A code redeemed a second time with the same purchase key returns the same credential; a code redeemed with a different purchase key is refused. + +### Monthly issuance + +A credential is issued for one month at a time, however many months were bought. The service keeps a count of the months remaining for each purchase key, and issues the next credential when the app asks for it. Unused months, e.g. if the app was offline, lapse at the next badge issuance. + +Credentials are issued monthly to limit what the expiry date discloses. If credentials were issued for the whole term, a user who bought a year would hold a credential expiring on a day a year ahead, when few other credentials expire, and this date would be disclosed in every proof for a year. Instead, every credential is issued for one month, and its expiry is rounded to the end of the Monday following the end of the paid month (UTC). For example, if the paid month ends on Wednesday 14 October 2026, the credential expires at the end of Monday 19 October, and so does every credential whose month ends between Monday 12 and Sunday 18 October. All credentials whose paid month ends in the same week thus expire at the same instant. + +The renewal is split over two days for the same reason. The app requests the next credential on the day before the current one expires, and when the current one expires, it switches to the new one and sends its updated profile to its contacts. In the example above, the app asks the service for the new credential on Monday 19 October and starts showing it on Tuesday 20 October, so an observer of both the request and the profile update cannot correlate them by time. + +The renewal runs in the background and does not require any action from the user. Recipients accept a badge for seven days after its expiry, and servers for one day, so a renewal delayed by a few days is not visible to contacts. + +### Presentation + +A BBS proof is generated over a string, called the presentation header, and is verified only against the same string. The string binds the proof to the context in which it is presented. Without it, a proof received in one conversation could be copied and presented in another. Between apps the string is sent with the proof, and the recipient checks that it is the string it expects; servers know the string already, so it is not sent to them. + +The context of a conversation is the same string over which message signatures are computed: + +- In a direct chat it is a hash derived from the state of the end-to-end encryption, which only the two sides hold. +- In a group it is the member's identifier together with the member's signing key. +- In a channel it is the channel's identifier together with the member's identifier, or the channel's identifier alone when a message is sent in the name of the channel. + +A session with a server is identified by the TLS session identifier, which both sides derive from the TLS handshake and which differs on every connection. + +Each time the app sends its profile, whether to a new contact, to a group it joins, or to everyone when the profile is updated, it generates a new proof and includes it. The proof is bound to the conversation in which the profile is sent: in a direct chat to the connection with the contact, in a group to the member's identity in that group, and in a channel to the member's identity established by the channel's roster. In a group the badge is accepted only from a message signed with the member's key, and in a channel it is verified against the key that the roster establishes for the member. + +A file larger than the default limit is sent with two proofs. The first is placed in the file invitation, the message that announces the file, and is bound to the conversation and to the size of the file; the recipient's app verifies it when the invitation arrives. The second is placed in the file description, the record of where the chunks of the file are stored and how they are decrypted, and is bound in addition to a hash of the description and to the storage time of the file; the app verifies it before the download begins. + +### Servers + +The client presents the entitlement proof in the transport handshake, bound to the TLS session identifier. The server verifies it once, when the session is established, and applies the result to every command in the session. + +The client presents the proof only to its own servers, that is, to those configured for the profile, which are identified by the certificate fingerprint pinned in TLS. It does not present the proof to a server whose address it received from a contact or found in a file description, because a file description names the servers on which the chunks are stored, and these are chosen by the sender. If the app presented its proof to every server it connected to, a sender could store a file on a server of their own and learn, when the file is downloaded, that the person downloading it holds a badge. + +On XFTP servers the proof extends the storage time of files. The server grants the smaller of the time requested by the client and the maximum configured for the badge type, and returns the resulting expiry. SMP servers and notification servers accept the same proof in their handshakes but do not yet make use of it. + +The exchange between the app and the badge service, that is, the commands, responses and errors, is described in the [badge service protocol](./badges-rpc.md). + + +## Cryptographic primitives + +Badges are built on [BBS signatures](https://datatracker.ietf.org/doc/draft-irtf-cfrg-bbs-signatures/), in the BLS12-381-SHA-256 suite, implemented by [libbbs](https://github.com/Fraunhofer-AISEC/libbbs) over [blst](https://github.com/supranational/blst). A credential is a signature over four values under the header `SimpleX badges v1`; a proof discloses three of them and is 304 bytes long. BBS was chosen for four properties that the design needs together: + +- A proof can be verified by anyone who holds the issuer's public key, so contacts and independently operated servers verify badges without consulting the issuer. +- A proof discloses only the values selected. +- A proof cannot be linked to any other proof of the same credential. +- A proof is generated over a presentation header, so it can be bound to the context in which it is presented. + +Credentials of the kind Signal uses can be verified only by their issuer, and a receipt credential discloses its serial number when presented, so it is presented once. Single-use tokens, such as blind signatures and the tokens of Privacy Pass, are likewise spent when presented and do not include values such as an expiry or a type. + +Service requests are protected by the double ratchet of the [SimpleX agent](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/agent-protocol.md), with X448 key agreement and the sntrup761 KEM, established from keys published in the service's link. The purchase keys with which requests are signed, and the member keys that form part of the conversation context in groups, are Ed25519 keys. Codes are hashed with SHA-256, and the file description in the context of a file proof with SHA-512. + + +## Security + +### Design objectives + +1. A proof discloses no value that links it to another proof or to the purchase. +2. A proof used in one context, whether a session, a conversation or a file, cannot be used in another context. +3. The timing of presentations does not identify the holder: all credentials expiring in the same week share the same expiry, and the renewal request and the profile update are made on different days. +4. Requests to the badge service cannot be linked to each other, to a profile or to a network address, and a request about a purchase can be made only by the holder of the purchase key. +5. A credential cannot be forged: the issuer keys are fixed in apps and servers, and the app verifies a credential before storing it. +6. A missing or failed proof leaves the default limit in place, and a server cannot be configured to grant a badge type less than the default. + +### Threat model + +This threat model assumes the [SimpleX network threat model](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/security.md) and addresses the threats specific to badges. + +**The badge service** + +*can:* + +- See the purchase key of every badge, the master key generated for it, the number of months bought, and the payment record. +- Issue any credential, or refuse to issue one, as it holds the issuer key. + +*cannot:* + +- Connect a purchase with a profile, a contact, a group or a session with a server - a proof contains nothing that refers back to the purchase. +- Learn where a badge is shown or used. +- Learn the network address of the app - requests reach the service through SMP servers, on connections created for the request. + +**A contact, a group member or a channel relay** + +*can:* + +- See the badge type and the expiry date. + +*cannot:* + +- Tell whether a badge seen in another conversation belongs to the same person. +- Reuse a profile proof or a file proof in another context. +- Distinguish the holder from the other supporters whose badges expire in the same week. + +**A server operator** + +*can:* + +- See the badge type and the expiry date once in each session. +- Group together the sessions of the supporters whose badges expire in the same week. + +*cannot:* + +- Reuse the proof on another connection. +- Link a session to the purchase, to a profile or to sessions on other servers, except through the week of expiry. +- Obtain a proof from a client that does not use the server. + +**The server that hosts the badge service's address** + +*can:* + +- See that requests arrive for the service. + +*cannot:* + +- See the content of requests. +- See the network address of the app when private routing is used. +- See the replies, which are sent to a queue on a server chosen by the app. + +**One badge on many machines** + +Since proofs are unlinkable, a server cannot count the sessions of a single credential, so the benefit granted by a badge must be limited without counting sessions. For this reason a badge lowers the cost of a resource without removing the limit on it, and limits per session remain in force. + +**Compromise of the user's device or backup** + +An attacker who obtains the credential and the purchase key can use the badge until it expires and renew it while months remain. There is no revocation, so the loss is limited to the months bought. + +**Interception of a code** + +A code is a bearer secret until it is redeemed; once redeemed, it is refused to any other purchase key. + +**A passive network observer** + +*can:* + +- Observe SimpleX traffic between clients and servers. + +*cannot:* + +- See a proof - proofs to servers are inside TLS, in a handshake block of fixed size, and proofs to other users and requests to the badge service are inside end-to-end encrypted messages. +- Distinguish a session in which a proof was presented from a session without one. + +## Future work + +- Backups will be stored on XFTP servers, and a badge will raise their size and their storage time, as described under [What a badge grants](#what-a-badge-grants). +- SMP servers and notification servers will verify the proof. A server that verifies it can charge the holder of a badge less for creating queues, file chunks and notification tokens (under the planned proof-of-work scheme, the required effort is divided by a factor configured for each badge type), and can apply higher rate limits and larger quotas. +- Subscriptions that renew automatically, the transfer of remaining months to a new device, and the pausing of a prepaid badge are planned. From 176e55895ac58af5292f49c3103388374148b84f Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 19 Sep 2026 10:10:10 +0100 Subject: [PATCH 09/28] blog: supporter badges (#7538) * blog: supporter badges * update post * update date, add video image * add image * update * update * update post, add to lists * update video * add preview * images * update post and overview * update --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- README.md | 2 + blog/20260919-simplex-supporter-badges.md | 64 ++++++++++++++++++ blog/README.md | 9 +++ blog/images/20260919-badge-screen.png | Bin 0 -> 320087 bytes blog/images/20260919-buy-badge.jpg | Bin 0 -> 91553 bytes .../images/20260919-phone-supporter-light.png | Bin 0 -> 324524 bytes blog/images/20260919-phone-supporter.png | Bin 0 -> 300721 bytes docs/protocol/badges-overview.md | 2 +- .../src/_includes/blog_previews/20260919.html | 5 ++ 9 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 blog/20260919-simplex-supporter-badges.md create mode 100644 blog/images/20260919-badge-screen.png create mode 100644 blog/images/20260919-buy-badge.jpg create mode 100644 blog/images/20260919-phone-supporter-light.png create mode 100644 blog/images/20260919-phone-supporter.png create mode 100644 website/src/_includes/blog_previews/20260919.html diff --git a/README.md b/README.md index f7c2ccd514..fa4247caf8 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,8 @@ You can use SimpleX with your own servers and still communicate with people usin Recent and important updates: +[Sep 19, 2026. SimpleX Supporter Badges — Send Larger Files That Stay Available Longer, Without Being Identified](./blog/20260919-simplex-supporter-badges.md) + [Aug 20, 2026. Equity Crowdfunding Launched - You Can Get a Stake in SimpleX Chat](./blog/20260819-simplex-chat-crowdfunding.md) [Jul 22, 2026. SimpleX Public Names — a Name Nobody Can Take From You](./blog/20260722-simplex-public-names.md) diff --git a/blog/20260919-simplex-supporter-badges.md b/blog/20260919-simplex-supporter-badges.md new file mode 100644 index 0000000000..bd2774404b --- /dev/null +++ b/blog/20260919-simplex-supporter-badges.md @@ -0,0 +1,64 @@ +--- +layout: layouts/article.html +title: "SimpleX Supporter Badges — Send Larger Files That Stay Available Longer, Without Being Identified" +date: 2026-09-19 +previewBody: blog_previews/20260919.html +image: images/20260919-badge-screen.png +permalink: "/blog/20260919-simplex-supporter-badges.html" +--- + +# SimpleX Supporter Badges — Send Larger Files That Stay Available Longer, Without Being Identified + +**Published:** Sep 19, 2026 + +You can now support SimpleX Chat and get a supporter badge, larger files and longer file storage — from v7.1 beta[^beta]. Watch how to buy a badge. + +## A paid feature that cannot identify you + + + + +A supporter badge is shown on your profile to your contacts, group members and channel subscribers. With a badge you can send files up to 2GB, or 5GB with a legend badge, instead of 1GB, and servers keep your files for longer — 7 days with a supporter badge and 21 days with a legend badge. + +A badge is a credential stored in your profile on your device. The credential itself is not sent to anyone: to show the badge to a contact or to present it to a server, the app generates a new zero-knowledge proof that reveals only the badge type and the expiry date, and no two proofs can be linked to each other or to the purchase, by the badge service, your contacts or servers. Credentials are issued for one month at a time, and all badges expire on the same day of the week, so a badge places you among all supporters of that week and nothing more. + +This is only possible because the network has no user identifiers — in other messengers a paid feature is attached to the account, so the operator knows who paid and what they do with the feature. + +Read more about badges in the [whitepaper](https://github.com/simplex-chat/simplex-chat/blob/master/docs/protocol/badges-overview.md): what they grant, how they are issued and presented, and their privacy and security model. + +## How to get a badge + + + +Buy a code on [simplex.chat/badges](https://simplex.chat/badges/), paying by card, Bitcoin or Monero, and redeem it in the app: open Settings, tap **Supporter perks**, and enter the code. The badge appears on your profile. The badge does not renew by itself, and no account is created. + +The v7.1 release will add purchases in the app: via the app store, or by card or cryptocurrency if you downloaded the app from GitHub or F-Droid. + +## What badges will do next + +The same mechanism will be used for other resources that cost the network more than the default. Two uses are coming: + +- **Backups.** A backup will be a link whose content the app updates in place, so the same link restores the latest state. A badge will extend how long the backup is kept on the servers — that is, how long the app can stay offline before the backup is lost. +- **Better limits on servers.** Servers that verify the badge will apply higher rate limits for creating messaging queues, uploading file chunks, and registering notification tokens. + +## Community Crowdfunding + + + +Investors in our [equity crowdfunding on Wefunder](https://wefunder.com/simplex.chat?utm_source=blog) receive badges as perks: + +| Investment | Badge | +|---|---| +| $100 | supporter, 1 month | +| $250 | supporter, 3 months | +| $1,000 | supporter, 12 months, or legend, 1 month | +| $2,500 | supporter, 12 months, or legend, 3 months | +| $10,000 | legend, 12 months | + +If you invest $500 or more by September 22, you will also receive [a public SimpleX name](https://simplex.domains?utm_source=blog) for 7 years[^name]. + +Learn more and invest on Wefunder: [https://wefunder.com/simplex.chat](https://wefunder.com/simplex.chat?utm_source=blog) + +[^name]: After September 22, investors of $500 or more receive a name for 5 years as early bird investors, and for 3 years after that — ahead of the public launch of names on December 12. + +[^beta]: v7.1 beta is available via [Play Store](https://play.google.com/store/apps/details?id=chat.simplex.app) (Android beta), [TestFlight](https://testflight.apple.com/join/DWuT2LQu) (iOS), our [F-Droid repo](https://simplex.chat/fdroid/) and [GitHub](https://github.com/simplex-chat/simplex-chat/releases) (Android and desktop). diff --git a/blog/README.md b/blog/README.md index 3a1c545b4f..b7940a370d 100644 --- a/blog/README.md +++ b/blog/README.md @@ -1,5 +1,14 @@ # Blog +Sep 19, 2026 [SimpleX Supporter Badges - Send Larger Files That Stay Available Longer, Without Being Identified](./20260919-simplex-supporter-badges.md) + +Supporter badges are available in v7.1 beta: a badge on your profile, larger files and longer file storage - and the purchase cannot be linked to your profile. + +Investors in our equity crowdfunding receive badges as perks. If you invest $500 or more by September 22, you will also receive a public SimpleX name for 7 years. + + +--- + Aug 20, 2026 [Equity Crowdfunding Launched - You Can Get a Stake in SimpleX Chat](./20260819-simplex-chat-crowdfunding.md) SimpleX is the first and the only messaging network without user identifiers of any kind. Our equity crowdfunding round is now launched on Wefunder, so network users, and anybody else, can get a stake in SimpleX Chat - the company that builds it. diff --git a/blog/images/20260919-badge-screen.png b/blog/images/20260919-badge-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a7994e957a152771e37c9a213d2cfe91d82973 GIT binary patch literal 320087 zcmeFY2UL?=*DeYQ(iB7lq&G!+0)!HJHFS{PF+c*5-a9Hq1f=)gdz0Ra^p5lnB29Wn zs-EcHZvFPz-#y>?&%I;Z|Bf3*$jVx4mNn;m=9=%D_4+F*K<;3ZVxyp-+>w@&P)0$y zv4(+ML{VI!MTE>BfnD{Nh!;tpt#bbpuF@!LAgM7z5I-V z;s8WJ*?fkA!WWBzLTsH__f!Bma17IwhRe&NFd^HRC>W^sP;MeysK`GQR8o}h+>k94 zLsYWA+RsrL{+x3IImnKJ{EzYw`L;#n_|d+PY)AVcP|%Q{-)Zxa@9(cE|e^4i4m6 zL(%?{@-Y?lm$s=leoDNtmU{DN8-4h@Xe1{fk_{hH06RM$h?|cSh{D!{M}!>0vX;`a zLqVb8{r*OkjAnm^f^shmp{i-GDKE!oWM#ny{jMsTvxW6{PACG-e8{E+%pOYZY+-I` z$LB0a`(p+lvi-dqKui5&ioKa2t){#ZwYZfnjGCJb$Ofbp!ltIC7O*vj^C?R_`I8*^ zO_0{q-rkxI0B~}0VsqkTv$8b-u!F&10FVQ~!NH20!D{DXX%BT~wX~!AgUL@m5->X> zTZFYe!pf5RJ71`wm4m$?E$w$ff4%&;i$}l@C2U{bUq$AQ;bpK>0J9}l=zfu05Ss|zY zBO~jdp!jFK{u=(n96w^}4_6Bq8}Y%dY%QSnLI?|}2@GIuX(9ml)%hzZ1dtZv6Ssvy z?X7H8t*p$2{sTA)0RB$&H-7TS;5UZaLnWa0Frn|*Wd*Xc0=ZOwVwV-j%LfGh!RBA) z{*BKMyJZf6VzCwY-%v0`BsY`tLgYDgD=+->APwCf|2In>&2R zlbR*MUWh{g@K4=;r&6>%{@);S~V<8zo)cChcz6r}x$ z&A(FPUzzVa%@2t4*;&EuouIZbQ4^%2{PXYKg{?i>7TuSCldgC-&M>J|E*kMWD2!3ff)+{ zelG53$KO}?D?I)u?{Ok)1wJm&|Ec$Yyj;dWpb{C}bEI5^qZf3M(v+W%j{_wT*%(@*~e$NfFg|J-c;tFSYKgJEDJ zq^Aryp>S4^5w8&|lpWcEazNog5T~&rJKX5!^8PzG?kDQ4EFEFC|7+a;LIyI=LXl-H z%+^i_Zfj*h4Yjs5M;QIs>Hve-$Ov_Eyxt6(4_?|2H0gcmDqq3FgnW8pCW6 z|7(=|<4TQwnu+?q%bNccVt+5^{yzjvBcLG~Ij6 zmmS8%!-=du{`dF8|9VFKBZU98UindH%FF*lee=EaMh+mWLlcB0)Lg>K$l?3-*PlDS z@qfJI|64Y{5ca1ii9c}gG%iyzDxTpi~g*A z{?jDRlReIfln7kK|!K>y+H-^hOx{KwdDk@U|iGzNj; z?Cf0ZtVTw>ysX?%5DzOD%E`&f&I9J+-~@rW;OyYP7V*nmzX|$ft)Id~k;Urw3f}Iw zrG9tm_c#-Sn*3|;&jDmP`Og~uXFm9+iu4Z*{;Na*z<;K%z^`dPu5yr9kT4<6->H9f z|D!Ra#l@9ut>6fAn2?<^M2uQmQkf-PK~{2?zPEp#98_c5K(1a45G{{LV9@3F>X z2(|5@af+)yHE_Wr)n@aiB(J-_$a2EQpO%gwd9~UXq*Xf-yL#`eaWR6xu7JG8WR?1D zNd36L<#zd6dCGO6Ab+25-rZ&b->8R)#WoAg5_k8#COSOQ+9qSH&py6ayw%kacAo_(4^S3G2=R3m^ru zqii27G^=PpA|-CyYdeRkungO^WSt-(lcq?Xc>C2XS-G3?0&GdNOG@)2_R$PmkNK@m z!HG|N%MWo620nqZ`>oG6-mQ&uw1PjT_-jnWw&Yur zk6x=_nK(02t($yG8v(VFMbN_M>-(V{@p(kay zE3JK%{vq8mETCM9gH|`oN8%yP^7^|mC@@?OH`B1xlO)ycQ=Y0K2cQHX9JL8xVIgM& z0Agq+-xg|>-}x*99 z-r5-mp(JA?=l0;t@Nd`cQ6US0$Yw<_L|gkxXTdEN$`G&LHo-<#@Aq;hCCJ2U3Rr$B zHD;m=ge(i34ol6o)8ga5-#}kcY`58XX&&;?-6@#^YXi+F`U#rjL0&qHx-c)B{HhId zNXEz_*|545F0ZR#?)P}L_F=-HqRi)c>2MZNUc>Nvc>K;s1YvxdO+Mc4kq8{3g)mGY z_GAC@aawapxjZhI_S#jhs+d{&Ju3n)=OySCU5=lWI4+Jnzlctk z1DB66@CBA_^cw4XRVAC=(%3gvC9hc(IiC6$ml*?>9)1*04D7k8dqC6n^nvuJTw$1| zP`ll}xX|9oQ^wMM6NLCHG(lUU;rqt-Onli4%`=Ux+Pvx&4!3JrW0gL72}}@J z?snQs-de4@RK%>H*5dUZbUc`o|=O81F@~%aztwj19Vem{@*-m9oG^&yk zl@rx;#K*4H(v4uLGql7^z`IAHhH=mJSnj@~6Q%8WVC?A2?;8GSU|uKDv?7`spNL>G z*%SmZJ*lnkrwR2g_UEhR4UBoEj;QI&^;ep%d+9H6m!JoKG3#EGkYbE@=7&&ItkkYr z0k*>C+I#QbKGJHfy8HYI%L(q`EyRq>q{OCJG6*AK=$iLy+^N!#Ko`~8tBmXDoJcbl z>4vswSMa(sX4D*>wi-mduBzu;)!?8v6D(A`8`*Y3$7aftY^5z~N^6sz{ z@{QaTR33D6U;5_MmX&q86?D(0p1vWT+S*#%mAJWv#7KKhM!xE~IdW+D^20ARpLq-q zBGr;)9~7a9)ka$IKjDK2=2kjpvat}RRb!(WPmXO1d9Ru2^4`YK<=q`@TmKn~cx*5KZRih*6$cuPB?&ePT<(Qi7Og|8>b$Q(8HZ@eJ zc;%%^sEF=VSUy|i6Px&lOUEbp%K7Po`cxfHIML99S!2lK+1s7v+#W7?Wz10|5i-3Q zk(n~qvAsog$T$)nl(?}T=&oHckZ>)Y&dfX@?vll+9Xw4kx*ptk40NSKTh$ue_>^>4 zj9y1CfuDh2uOTrc&nh%oEu4R#Smo4(PlYdZz{0$qf&>)cZ9BFJ4hVh5h;=%ldPB!U zT4T=q)geI>4>^Gb8r1nsOs9kklio~q|4tmMsLM<&HS2%`C!)ja$X=9m?|J_9ov1Rk z3A1M#k4i4ICt@!=Oqu~TG2z9l*JhT0XcPDlU z+CwMsMDmO$tS0x%vbS>Sd(($A^lH4k@iLW<2r~R$`w?8eetnOXc4Mz6Bx*;m%3OcF zH;OqVg5+UH0%HwMnwSUat(nz%Ux-LbG>!p*!OdcHv6>z6PVbDmy1GxMChH@KQY+f{ ztz>qF2h4^CQb7WlFheEfH(vO#a?GLZ+;`oPk&&^C9G3v*h>Ql^)+|OBJ#KA|ERdSA zE;%C;8#lVIZt*BgTNBU*(ALzP}`0?9_7)ISFM-|puy1LtO~ z#OxF-+<1tKl3oywMv{G^A&_#w*@kWMta*u}?f$g;v95<{+tR^cltC;T`NZ+T6~Q>O zoEuX^X9iZ6Zy#2dU)vIgA`$KpAIZEkA}8UC+-A;dQ&hvWK%|D_HRrn0$2TNfZ=j}Q z_gA^1pKoiuF6rc4JHB%qO9zQB%1(Ahv$zFhCEIaoVkm$Q<_?=H=SQ2_WiIb%QGZz0 zN~4$wMF}|-cqA}xeyf~?kuFM#x+3s{Ag$Nsekcj0s1)%FQ(i9M2SArdesjs>@#%4P zU41>Ro}S+Dpix)4UQ$xFN^o(p!szHc?Be25@+DPt&r3PXOw%~x+gO(hali^05;MPh zZT#VMJ(XdfK27e{pG;&do^|pZv%1w#Jip_UN@-~x+vzt%cf(aUxr^50De8>?K|FN4 zwpffOKAXMo-%F@?La#XR6N%e1O1D-!rj+qpWIqi@_6$X6SV}(1Zb+X~l}mb_txzN< zpTNzk2KI23X|)w1gbL7#IisQKp;?1g!pL3J{E`ANk48vpnLZrUXf-DsjDjD5uf}Pb521NTMyQSxOongP0U7hsbRUk%xwV(C{haW-| zjMe&B?tyHC8vf2hNud5l`l9_3IutX)fP zRC7xX1jt#k57H14tqY$L5>Y4%*HdeCxmjiOSsL#FI?Ko6QW=><2UPw`kaU7YT{dj0 z=Imuky_sJ62$hqdPe~TeJugEJ`S3T^lxIFec{f}bRwWQ0L^99G8wa2fBf_W|K&sUp znU^6P;o2BWsR^a#9LI>_g*T_w;$$ zE)zX=aYdPIls;<7@k0sF;Rr+LC;Z1XIkzq_Br+C_TwUu_lDha*D0U$7_2iHa&#&EK zbi=2or&18Ndho4PBeTsIrntVo_VbF) z?YjL&d==kUVYKlDhT4yyDC%m8Gxz%1BJr9qo8T9Gb6PH?- zz>Zzx=&7g<+f~$LWo6^+p;!cbpqPD}i_2fD+$4d7(?o(fM?OSVRgOzV0tIq289>iq zgWte-BcawODGZ~ee?^U?q(3(92-`x6Qro4HzTDvozckCPi=o_Q<96)oQ9f>p0;Q+@ zi2X|iDY!G1?g!>g@SWS~ETWDOFujg7@r;0|m;KY$1h0o;_dr3;4%&5{HpS=rdh5)k zModv`EeC6$wz)^IH*VVM;7L`A6KAvKwm!=auj=hpIVvbQ*d$QowO;xxr~5{PjxhGP z7Kh>1#^;wb4wbydrM-!8G3>YALgaWFeszY)Y+bi>aR*9T;AeMj^Lo|nrq0+OM~_|m z_=^vBq2J^yN+`-ZyzLHYwNe-3=6p2loWTBOtT3L4&k075HVBU-@E`SSp|6+Q)d&|~ z_1&Ab=cOJ_=+HwK9ObC!w{c%B@g$P2OH36DHu}6kbg{f!WKZ7TnJ1phayDv`Nh1|Q zKZ)4we#NTuUaxHdNQ0#yaODAvFd~i9NE*;j!eN59;IW#t`N7G29E6+)i_)@ks zj<-wZ5UaGFvUhHEqI~(9Aj|KQMMt?Ee1!94FgxtX<_JFQn}9ky>M#xaTzj!U%Aqh8 z7DP<7LdU$Ujc|#}D=wlxICPiDp{JFNoj54)@NM-1*zid}E#q3Iiy{1Zo6BH32tt&1cp4uL zj3K#K}AsM~Cwb8~0&U~uVlts$RsY>HX?O1tVnyv63`W<-!3X+)*N$?)_zS6DA%6!_GCrDuzK zIDHluWw!GDD^EK9{O$rkoV=40X9oB6VJfbFBdHfJ9-w6S!`l#&`rhH+(B}!3ViDeGhwesuL6v82dBkB5Pg@UMy zuD3aHF%}{bqf&5bgjF{()f&QHCIynCbTRwY|iv69Xpo6cRo95#;-0vfEeOpql)Tk3cP zt;x{TX0i^GRaD3QV?5#b7=#y3O^)0e#F_PQy_m=1j1F|FHsVPX;$vH>HgK8BdZdoWL2m4kL+|bCT%i5c) zNgY$tlk&l{at;g#lt|+e^sp%Flho{-s6Q78EV`k)*#FeAhW9h)2}uIKZt@*jeZq_R zS$K@r@_nhzJ+$*09V&WkUOCGENfHeftM~wrEt7td9>D{&gqpcms(HhJIi7`wu9rf=VAPP*^y0x!ont6EJS(TK@fSE zi*H_036H$pI{g}G(0_~zBw;c+7T??3D`nGjf137@CGo2_*Kq_5l4rY{0`T^){X))| zYb^B8Fihg8xVjndE%5P|pm%ZZ4<|YXKC8c`wfzq}{<&cxE$VWBrY2F4Zn+cu> z%vQU2T}>l$Y$=N&yoD~61Iy#`h*rGp`Z1+3=eMLaii6qZ3|xF+EarP9;;WfG64f` znWlZV(QucXM9{{)FY&TV&g1koSX(Q*1Or>gp41ya(jJ&za-|dqo5WR#W@Kl`fiOAQ zMEl}_3$erjFZDTK0pwYOcye0P`>0R~-=x_3Ok6H1klUAS>7D6D=32YU)2XILH#$gg zRowffr|d7JPXa=liVF(9On?2lL>Nds^ulE{TfR+nKKCncnSAJGWA$5+v#-v5{Q@@w zQFvHt@`Iw$aPp51!}kDejILHt(XVAUrdhaz0bTvELIeFtJi@ikJ>e@?=QxI34kuw7 zobYazn)Y@HvccyTL~a#*ZLPzsOZuf`WYNx-O19G#In`E6G8%{T;Ig2YXp0j!A4R)^7=gKMS6 z&d2XcMOiIk$$4kUi>q+z!?EgFXHwkR(O$`!m0<+~9+Ne1 zADQDWC(WM9QY;nkwmUp<8)6o0iry*qZ_`^oAhaT0XL}nRmxMv;up~rBzFrJltK*Ap zXKMLlAjh-1Yy?b<5X$tq1lr7-!BQ!F?VL?JLI zm=O0&Y>6n24?16b-kPkxa$_Q@^io@Tn4+`^4}r>0Vp;MII1ZgzJmp82V_nXe=ByLyE% z`)bpO4%R_W0UCNX%=5F@_Ea_M{(KwrUd9BA?ACJoPl=7S%Y75if}N;srN%!iRR~S% zxi|_`%&_~3-tp6uMR26a&9;H6ZsIAo9mLa-$504?2c`~LimquWb7~K4;?DY0(`_=D z^+cGZS+dJYxj&jJ`uO|4EDUdR_;4!W*^NPb!X-q&tXHe#)2BhIoH}~NwlMxMHH?6j zU)SsPxZl%U5;nVwI`oD@;$jG&Q|w2yrO`BB$yoh1=py0Gg{9N!sY2dBT&&xJ*$E*>L^`enKM&6>4zP(-se#Dq$BFDbclT9i9Ofj`P($3x0@oiQN zRk5&T|EJy58enH8#&EDuHzaBLNQ;^1ewBgM z=H73tZH#P_fHV?>hR?l;h6|G+1%$nD@3e;9IsB;^S;|@Ew9>h4|4il*>-mR;ImIvJ zwR9}2&|m9c4gzrk;CgB=tWsb-VoIN^&)&Apk#U<7c(qd}-6KhvPDx7YO}wsQ7@9JF z-{}w6xsNEkY2+U4zwx}-wCri|Dq4MN*lWY!jx@(G(|55TJ%ifC2jyUEzT{74BvoFg zP4*kn`kgilxf%A)+*Zm0usJO*ZgW=J)-gs|JS;WxQ*eC2j@)SFE#@1*kHlP`Z%qu8 zUSHzH?k4MVCQ1b#f58)+o}ND02@9LTW_Ox4V-{`WG)NyQz<=nnXOG`Krvs0lHB9GQ%K5gVF!i%X-7__Mw?dBz>! z#(KI)P6C9MM2S4hO7dB7B{3mqRc>Y2FIojsBin?EtK@W?m4u)>Sl;?ULN7gg*TM!_ zlGyHUD6n#qQD|Hgmy_sLRA^}3dr6f zO8EqN2lv0S^HyLGo5k2an-&3vwVz4|b5p8jyT7fXZPTP+)xG-qd0`}wuMU*p6) z2mO<;^MVl3;Mbrt#$tpvnWBeYyji*Iqnz98ULo=oVIP7zBzJEzQ6H#EoYynZwgqb@ z>dQj*X7Uhh6mV?=ALxL$6;7GMGKs3I^HUx&o4F9PlzR1E?>cz3ujhM@&$1~RT|k1p zUT-RelFA+8l|<97$#GJQd8o#+pSA+&8{EgN?juTKTO6*@EzY#&9T+~WD)goz zPCKc#=a%uzv_W-CFQSuP_DU3^7mHQxpOC*NJ?ZK-6zg1b7wWHj`KEQ6FZ9{y!&Wb{ zV*sjnAfvP~Ci(rbv9c&M){vL=cu~;MTaEh)qd3SLVeXe4h`7Ut3YZqP`&fs592Gg*%kp;-~x+UnWf?UsD7p4gFcUbas#8ksJ3-uY%Km{=-FA{*#y%SJ^i zV|Dz@_eBqeb_L#Qd_6q~k2*2qwkZl^L+JxM7Q_A7%d*2fb)^(~s~uTcS&O8p_=A?F zM)+3rK+lQUB>iO5fomdq)=jS^k#9;}rGtZA7Zaf=V4_d_c*Kb7+uE4HFBc$JS^;Yug=5r z%B(q=s7g$r@PfHHjMF_X3qQQsB<0*2%;hfK6*t$@Y?H|FguM6=#eiW9oF!7xdJXs) z=8|5L-dgu?M%g5ydb`T&!vF^ES-0lcOy1GQws!2k_hL$v3OSEr(9;i<2s(3a*IUpw zeV{%w%!rm2H+3p^{Ic0U9^+oM`^xJ4ZZ?1aF~MnKaE#RK3!lBtyA)GX4Ps__79mo^ z1h!nN9U~R)UVg(FOtB!6@Au7xe zM1nb5H9icTcuZ{vDqWqo9Ntyl0amR_H^|yLn~^s)QZ1zqP?UH+F7$?nUp-F8`b4o? zOvIhY=4?*T$zMK1KzMsnzK>w>RvQA9z++-WfJ>3j(EKB>Yj}@0&Y78BS-NjOyPsT1 zV4n> zNyjYFEJlhmf@`P$VLed#71=C(&>i>&Ztv$g20~Ens;h^ zq>XMrVeG0bow4azcOOZ-Eh0!#p7;1c2DQ<4){{b>z5$yX9&xcbaw+-RAswyfyJvB<-CgT=tyjHBLcDnL5pT2U|(IGRS?uNST3QE7BO{;8usbXpp0CN-jh7WbN@{oOKEq_ApR`-*!kf@- zm-(O#=PjOgn*FM`E-ts*5MS=c_z`y96f=?i)*_w}Z%xT?uKj?D449;+SN5?Sa%D;O zgc?G?R<6$OOHzuLk@QN(Q^4GwqwG=oR2E(@k-s^5M=@(-x}-2wuwyQcAJ^dJU&lgX z-(mvc%VWZ`7SBqV91j%4_3vWN9j;nL+GFk=c9HEtTXv*OYI zr(}zsLq2*s?e4b-DDGP?xz-`ecQ{e?T@m9 z^0-PG!rf2C$A>*Gzd&xa6E)^kTj^|toxWi1?z_xqxSeoQpyAdv$m;FeG5dHDfT%6} zg}Qi?^TDUN9i1xo!ospoqpPq-chYHi9Jsjh$Smu?E^R?PPu5v=@5gCBWlTAg4}dpJ zZ_hW%UU@r)q2q-Ubj~;S-fU&jG@0m+^k07enF#e_e~B(zEjW6jEuCcD2$jRF>PEwC zbEIFNC%fD!JIu;f&gk9KYI8-~unGaf=o8d|Q)rsaW2lqvNZblIxaZ+plp)#5ogCX* z0ihhPk@mEnT`GF9frVbdWA#G?pQ@B1KDqnkodsRaHYNr0%Li!!b2=N5kqk66D!@dlF zz&Bmv%fY1Kg(lHyKx0l(M&q)qq~xO)4%<_u#i@gsf(?dF<#F4u&yGMh^nr@vHmxET z@ci7|SlUZZA&^n$u_7VyI)EucD-UxcV{*~jXr-=t{%%sUbs8fRLm0r)p)Y^egEn*z zWC6jQ#dsSvd?AWL$xGhKUh*yz@~+h(26KFydB(9~9>h~k%Kq`*!0AiIP+wBZXnv;F z+Sr0O6Nw?1B0R||X$hbm^L;MzU@Aa!$kDIUN*`NkQd{dLTCn@yKNK5Ppl?u&>PS*y z&e3M&xlHJi(Db8R)l0_QS7DZsKiOvDltnv{Nn<96Ap9Ikl?Z002kh<$I*53_({@~X zN~?VqUw2DIMaRU+nIyXU(9LldSfJ6E=zic!tV}jp5=aqMeQ`+t?L!zHg@M9D+h#+# z3+4>OqnxUNOC$V!uX9a-R+GV|hvhGq+6>DMXH}Sc*NBMM;+WZ*4UeN&`{*k!wgKnzsE5jE>B$SskZ z$vYn+1F?$d!%2$xa4lS#Oh;vN?kCJ>pXWj?icBX=v?Cr!lNueS!+75d(#)K@b9%s| z@~jf+vf0WdK1k1Wq?_q`aGhM0Gea~=^eOhXcX+z^>Q`4^%o?yY!_HHBTm@M0LIp?R z@5kEeZzCgQ=vf*KP*m1(K)t;=udr|h&-h7gLqleFe~R!6`*VwGNlTB**^E2#c11yx zVRVrGQ`Ut3SB-8(MZ~SV@)ZkRD}+y*OgoMw8K{7V zGmwhy*y4(rs|(KLySwPtl3l;j(>^A{4JL_#5Py~gUY~jU^XOhV{K5`Wkt*5#YAQwv z5(fG@_y!C|QmKTCP^E9j5(uTCIKS1@&Eu{{uEAJe+n>}dvOQc-)OeY;c5|&`Jw;aN zq@5t|4jFelpTq%!I?7gX6~(0o&9~@*6=PPbg?lg4l8O5XvDWEAx03jIgn7Q<<--+U ze2e^aV{~ka*Yz^V>4{~NgNyxwm+u5xmLzDNzsf2q==@6`ksKX8L?6$l&98G^jN=Z{~2zgXpwu+pRY1l?wJ)p!3kx6sP3qk1hHG^t{I zw!O~UCoXpD@iNnbY#Q5R)5>5r9GM)&0$|V`2U}1q31_zdc7%~rktp}8ltZz=U=gsx zjQuDuN7{UNtMHo7Y+K)b>3l3AL|CW}akS2Ke*fe49 zT<%=z+-LGZ)sAUIWx$$STjv06C{JIsOl@>=Nr^_k{!IU168~uR{qs_ub+`spAnEhX zzc!oiM-m5VZ!qQ3m1|xiZ*E&F7-cNUu9!DVfn?e@r#bthVgQ8lu0hwpa4CU%d-ier ztx&PHK{gfU)xNbO;`ryK;t;U^y`zoC$q)1nGN>eR$@%VE?0x3Iz$L$EVDIysjOE%^ zjI$6jKi3No)(1M3D67hPio2Xg3P(-y^QcA=C2WniZ9Ot(g#8 zXwL2CxD&dABPky2A|pi&c?bWdTm_nYJaa%%e;RueLuY3@A}+_g$dub+j`}i;Z=9EN z;N9zavkpK9nUzRj;h=>yzZGEeZv_PrbEpn z)Yd%!+{Q?ByP0Bb+t!qVqPUYSLc*-D?9SK2P6GQPD?8PT_(eqskjG6Ab!wB&Nx+Py zqb3xZbE*752fub`%aE$cyf<_*+`L#URGKF3v?PH3onQo~=lSepI3^IGK zF+yYq^zyyHPPd<%1!uuv9WVF`@;9?LRQmemc@{Y?TDHBfLCi}cNEj3sX#%n)}fimXkSjoWecV-#2k7BPGXj>bff54xb4u0Bn zWVqI!1eoRNL|*lg_2V^N&aaFr3L~^}se*dHXggL_Qe2WS8c8Y*K0>&8GGebS;anGR zjjO!?7L^HDd5+Gt*L!ZipDMCy7UZydQdvkT^qjl+Mcejl`Rt5F-m@a^m2KuhuffVK zo;N+cLZ#(0y<&cE-0vcj<#gHjf{H6Ae*&{fQ#w!O7s21p^U4vSwR&+|UE3V34RDor z=%N$MOFe|G4dn4?=)2U$)~jmup{P9xpVY>FbH{bnp50fgp}jwvLYHrqP7)wcJ>tIp zttn2k-cr2bTC;k(+~k`9K&NVZ)NDd?_DFWHVpW--|Kx^ZPtU-47x+%)UI{~rp=Is) z+Ax*d;-yiHL8Y8|dj`C#swn-@i?-vw_1)p{tvkM{6vUj73r#}hHly&PnfMcWMfgjp z-OJM*PJYMjcRcyn2d?5XQs0(;<-C`WkF+8v5xT~7fE zU+1K3x&hkA1r}wfK4r62v01*|L%EW`ZN;uAbW}K9-`uf6yppiyjS*y?Zq+=sA*W-n zRyG-GfXx$amGRecT{bSXca$PGgWm;(E-WlS9rqS2s-@Z&u9VCYwxz0{8t3_JN3gl2 z5fkyL=;H?&#-3t7vnVs8Fn}P>hDQ5lVr~RxsN|@}p3?b2RGz9l4j4(<+}JTA8aY92 zVoEg_vo^r?s@0d;^@ijZ6f|jZ)<54=lZ|;Obm0$K{?d4)7Zz}cD05g+KkCI9N}w|g zxVI3JNESS=fg6DGHG@zwE~);sPyPWhXEb;D=4#B20<%7Kb8ZU$VvQ^&DoA9(<&X2? zEqOF|i9Uq+PGOUxHfmOBu>ew-47jbh$at(c9(72TIorqk_u@KWv77jJQ{CVrdrtmb z$n?n*NdNYxw$G82hlfW+bI#-8d5=O(A@^gWu3!h6uA<1BVBA{5Z|M%i_0JS83uz+d zHounTVS)6nT8z#xF zaSm|VIXTHLC~tc{loJ{G=IyFb`vXGlLrP0QW4=ce(55^@ntAEe{h$ElCi%!LbV>BS z`g*sRx6yBlf!=VDd>^ecPFvxQ3wipoKrP^UYpJjc!qaoNdVR?3A}?NRG-3}43>7N( z&vd1=wo9|fYETUzU~<|WlXthwh$CWo{5B8alErLw0+rC$O!vI<(UsNJ_&ZyZajZJk z+VxDPSLuU2_63)9uD_1$TeIOSp;D0e^Mqooh`)tMNR>nYULB4Pag~&C)fyTI*{$^- zJHCC6J32pZfm;nqAU{7eH4=|txvO`dF-h4_J06dI8GO*uHZT4K4;NRM{$ww7Ih}A2 zp#EN$*hRfh{SEUPH`l`0m{N@MSw@Hi)z!fl$sGA4gyY_{r9M$wgUTsomnV7G9pCBR zmX?<;Uww%OZ~#T@FxYB#Wo1Xh)ge>;=Lma1s7}pQ$X_5pK6LPE`L0OvCy|Y50LOT; zpqpG;VP685S=DrfgC7EH->vG;-6&D9&L9!x=-!~~Xed+$b)i;b}G+Ppn ziZ3#>hKb$V<%Pjw3y$(fR4|*&(v{);el><>*Ncig#j$a{6YMF12>DH?V3X`#$@H^#IMpHt#g)V zmXG6c^6mZYSq=pXR3FQJozRRA$?N`Et=rS%@as<2Y)F+xVM#&d1WsKMEyql0u;b|P z0=zdzJw6+JBrk5{QBjiPR&i~r6U;(>{Y*oH$4&L3xXwGqW?4u5bN!P- z63ITRMy`Y5kQV};9fXtdyUCVjicK2oI9=k|%(11%-G$~I5sC=|vyNm$j~XsE3mnzh zwQVhFEgAl<=iqJB6~;=1XEvtDpOY?MrBBdNycZkZ$W}cSgg~(=WS$~_Wg*ycDV>Vv z85`oXTjP=>X!Fh}(*!Ybkn&fNhs_j5dnf6zVLO##u9^1Y_fi!WC0)-?tBoG*HX`?& z5clon19Y6|0Igo=(TE*0Y}~4#{BcZzHyK*mm6B}W`QR5y&YRv?!vP_&IVqkq$6vlA zkk`^Yk&xZ}^_0aA)3!{DqQD-DeQ9Y)b&s{l$;*#N*dAf8Bmhg|@>KfTPu=0JtW@^i z-ri*l$Duude&PYwh&WCs1rV4oUZCcM!9yP5y|2Nz(}Nwc8Y?vnK1YF~K#e0p(CQ*l znt;lU=Csfg`pn*gqaz>^5-X{DxoQKt*+w_>h0uow}V;FYqN{1 zhCu@<%zO?J0?yA2B!q6clwhv!D2w_WNdqPoPH*KZc?!oLZsu=*@dWmRhy5r$AFAtc zc7b^I2#%smV5p)cdJTCzH#CmMH6~+ClHIgU#|nX46OB+43)2sfCr=t!&$T?R1UP?7 zxB@qf@Rd}c#sH$%$ZCikXAJ<e`^}{6S^qXly~sn z&MecY5_g}teT)}e`)&?%sL*|(aIvDz(|;2pd=a*>yIbnTFIMaHFQ^u{v5tW{?~_qd zq8ORU-~Xv2uspjCj7$xe*3e0q7&(h|*4 zd&E$z;HA!rSl0l7q5#dLe6~6V!7`Ws|D+c&YSgGw^6p%%3X$tX-`Djv$ET(q9z~2y zOl7v(uKbecO>z=K8~Pfv&q&um60iMU7itB%OCJj+CCyt&?NoQOGx{F&FvO~uAjuUI z)DPt39me0zMgtVxkB1@4cBI6yYvPwh=e?;cOd<>>^qsp*?x4??!e?QKy=^W!+SC%= z+L0N6O;{~W!=H8ks~&$8eqQU(se)jgC9@s;nhJaohINuBT6H>(9}*a;r~^9e2Gq|# zxf+SlfbGN)IjhZb2C1|EMoeM>3uPMGP&rJHfe5uw)_DwsaWT4);0PJNEP zK;A*Lg5^Y0TyNlNt5}O(?ELX39N3qri8en81_Q*!#l`3vGv?}c*F?VJ8tInjH!v+W$sk|`ont}cyCzFENH+?7-hSe z_^0#{&j!`rwcxIvyf7L}d_5b@q8)oS^;n3+z;V1XyKy;pJkkiD(DjyxJVmg#`KXa9 z_I+9=*s-v!Q2Qicr=@WtAa&ypO=FEQsm%+hgZG182YEXSs%~Ys@*Q~Q6iGX#c{l(N zXrW7*_gz1>psFY;0?-70S;~Gr)7~Y?(7Z8Goj^JL^6TolM*Qii z<1DnG=$@N_=ViSxFe9(#+Uq_Q?nsgb+Xnvv&%%$(Ryi@WyYDvI)X0kEsVV(R#Oktb zisS7|LZ7NO?BU0rVFKgUT#)yyQW=?8fLW_518V~b{fV8oR5UeBAI}ObnofsMg3V=^ zd*#KibydJcv~_M>r|loQt;b7^F4uda*B3)4Xd~-`4ZV0g$}rcaFrgY>l~h!&Q^p44 z!>&H~3EyknYPzJmQRA|jwQfvx2zNtOW1ylWhLWmRVHPsHAzN5JNP7aq%{eZ ze5ZDi^h>+u<^7Nr32_l$JJ31|rXoQNs0tKcA4*853KuzTlSwZ)ij4!CRpq5{c1gf+ zn?3sAS|X&)(p685aXO?+Rr(}|`*#c#<1SQH@2?3Wle*cOMfIZ4MVcQ~@IWm0tohvj z>uClmjPOS09S;eN{tlPjbK?FcZ-^Wd_<8b+C3LqXcZk3+C6@tJNK1zwidPEui(^U5 zS7*x|h#6<0i%sRht1Ept+s1rUCz*P@Ruexeu2<5pUSh9LB@QLB>uoC=8h$EU1Pvf6u34y@hK z!}E|kcTTGHY^Fc8w}p5L2)$T%{i3g?DBdAAX+0q)W>adC0SZw7ML6>P`;`;X-jONtBIbxOAgu!?X%V^{`Tm{z8|A6>X9B2YWD z(YK@|(6-)FMzH7`_p;TGtProq``rEzCe^z_B+pYCuC2mh_sV~LEv|{KUM{%dLVW=2 zFlyt??Xr%%vmi%__PO5Kb9&wV>(x2@+j}Ac;@Nv7*0n)OD&JUlKJIvy`1i{bhR(!_e6;~~qj5DIl&_udPW zN6?)XBtt?frcwRhGXMaSPYq-QC^YtqAV!Rs?sqSGl*p?$`aR{?r)zoaKA1x#np=B>TkM;*qN@e=`9N zu;7}Fgk+{!Sy@?~RE3SnwMJ;_?C7ZORo=|37}F6=Uu8C8Yr+;1ZXB*pGQ2u~xsP5p z*vxzzLGX!lB%rCief27U>Q?wcoLbBrWvcSkXd9MR)(+ociHbPi^rdn&_jP6McfP3@B z;!>8Ia&IV98-=~L>XRjP(A5tKhv{U~i40Zu-AGQ#Gp`}u{4c?Urn65jMc~QjbWqD+ z79tBk{*O3q7E7VYzUg{fBg-G8rQXoqf&X&aCbX$fzAi24$~zDMGY-NDyhg2uNxpv5ptyyOi&O+lISvX_>|NX4}zH8b7(`1G*$yc;4X*4#*sBgFzUBRe| zHAOFlwfGF(2_IY=U;QS({34Z<`U>ls&Z+A?_#N85O`XS@VM=L|kJc*{C6!}&=(7{n zN4Af2|K`}9WicU`!L~LY+Mv8fVSQ1p%7Ajq{%K0`mKmyPHBwY^0`fhw2Qqtd9P+(5 zSYg~;)kJu>jsf9vO_zD|cr_Ubb8-`X%D|q=KJJE#eS+Rp=OBfT^nH8cMpZA3Z!`@e z;eM63MGVpy%IMK@y3igYp=vTRk(hI-I3#o3m=HR_W|&jtb*qw=1&b6#x<LvA4ROX>&&L8y;&;gYMzobv!o-g zCg)&8bh*Q%e7XKS25zSxbi24&lSXdGNe$=uSFIW7&~q4&{@A4Wy-~s>bbBo7B|Y$w z@GFQEaJA++xx)5p!s$-X4vo`d_R5-=S!lp{N&;bg80fxo_?5lTB(@;$2Xel0AU@C0 zH{!4)LScN(%IbwM$L+zbVknaMPtdMMAM_sLlfy#Ojy`bp@!@%87@EjUY>86|A6C?D z#iNlavdk9@WU-m4pFEkwnz?yZb1%%AR*IqL_ZtFP4C4&Z5@HB76lXy0xpQX9W2!j4 zBFKFI%8v?iCE8}AW6;@+kTviMcv4!N-HXh$PV$tWx!RN}QVBaA5F9?1ruZ)K4C^^^tV-|@q3(@2y5CacLy{6gp% zp zQf0K<(&@FDmV6R?Vh{L8t&lmZyhWaRg`H;Uo5jxBo;Q>|ENW9Z8eilF2x^5iqrSPH zRJ=m=F~>qXsptS47f#An@s2IU&%F+Kck4|T()iomQrCGOf5v$6_x7-mK=q-^36KYV z4_j_=5W(xK=O-z^eg2pG0~K2Nd3|BQ6h`HV99k^{zJwZ1`QeMsH8qk0BJ~srPPtsi z6$wfxaJ!%L#H#f|C0A=ywM#P!er3wS`zONnY{yi|R+>yX6loV|ULv#!#o9h?F)L#` zdZGX6M1rBM(!6^q8ijJK2C+D7+IE&W@pKyASer00xQ;#2^eKS$J6AR9AgeLHD6U3` zm!=F|vHE}$=e9zYS-y|i5?%KA-?S(N_s8kwq@H%%S!4IAe<+*dMwlAsNBF^jjQF!c zy~nPY5>MgU+ItUFZJ`u{lytU2>)uqZNH$6tv%%hWm?D}f&6xVHva+IgF$;;@Rwb}r zt2!5M?(S2NuF!IY{EgX}5e=;tD>+|hn2FKppLzqw4-xE>s_M=D9X$X=KagVd%JSUY z7)p;R{6s*QpE`sf?>h?JWsiE1%nztV=6ax!F0)G=js^|iB{Ga*O}X+}_aXxQzJ(xUmb+OtkA^Uh68Y1<5s zkou!Uv#qZl=!^`QfDBY*M&y;je>wt8k7!#OVj^7z{U1H5#K*RqWb18TKdu%}NB?2% zHbFnk2LZKg!`9qqW%Bn;lnj-M5?*Zm{ARPX^|>hfPW*VLj5erQlNlGs(hP{6{*cEW zSGAMQtaWTMJbXv*%jp;DdE1NTe=9fvV6xkF)B=&s3;roE|B;jP4O|7>?2?XCRE(5h zu>Ayye@_`CYXB`2v;*9k`Ess;f0h$LA0r>GIVxZ~bPAE4Z7HW5RmNkAG$lToC+LyJ z*Ik|glC>jIl?rXIHzcDiCe+bkPJ;?zfV4%4<93m!C*0k7IaR+W-ZLZ82bbug=#A@P zq&ubfx0-4wN?O5EYIF+0a%rL5g6l|E*c3$&3F+mK=67me**oUsr~Tg?vBEy)TjHx7 z-(cCmVO*O4&OE!`Zd143`B1Um=GnDgUpM|V`|$zwRaLI}MsH?_9o&F@glSb+4&YrD z+db>qjd<&0dJWs%$WXdp3jbN5k<+ zZy~~0eb1)qm;<*WxIdl0JHzxxUPtN+Aoo(QGU*=81#Q#_O5C^r94o@v{-#<~wTj2zG(6=)ou;$@IE^^vgaR%2Df1^Ag>?rC3MGTi=~wSliYm3n;|9aWW2ohO zT)?;Slcly{ZLilz)5p_hFlxw?dm7A6>~`Fw(@kRYM$X-`WTuD1BPzsLpg$2YAUUs8 zob;+Hq0rTO8nvpVrt1_*_i)0I&RG$k&V2pE@`ZD{=MIvYqhwGRa+Cx>;tFZFa{BQsHzhzA&?D1TQ3W?#qb} zV8fN7R0B)VU$}6TwFX0O4F7!JpaBZJ4}A0Ux^kwVpSQOvICa)U?sa_e(Wkdf*88@D9( zeK89p*JD5Ovl=o1Avt9GN?*t!UtH}3@ zD}~7Wa3mn7I(q;4M&8re!|(4!%K{-uo**6(2xv?aS?>!*IK}ov(_F09vvV_^VS8Cw z(e$z-jBS1z+DtbXK@UxJE)yD7kBW^`F187 z2*GuNU1I14y14P^K)&OEQwE~PtIOibF?12RBYm^&hPkb#Px^_CkJL>e7}4c?f2Y>m zNa*!_;EC}EA=7Oa2_-JJB-6neUS)OlUb65>MSMQ zho2m7^R(dcP9i2K3{$XfQQA)5%Q5Wz0+l?6EaCmm?!C!lb#=p(mjRbYMFsm zn1_Lf9$FJKru(LlF%`_tw9NSF$^gyut>AT5@HPJNuDRPrmV$3qm`SKF+Mi*yRQ~<# zzIzjJlTX~3X6I@p6jL<&+}{1nd;NOuyXn)$>*bh}{VX>6hTnaO56bd7tIb5$Q=o{N zxH>G(=IFln>NX1(Ef??H(+@4&}%3g$cimkbM zjh&$dgwY0g;#%QbMsLVhURqkadjRex*))k0d(W+T-><7Kv%4HA(Do<&2P(5n2veFzANApy<`7<+I;WbPcYCc2aFs^TW@z;jXwt* z@PY`>-9tNZ!#;Gc+P07L-LE;hGKu`Ov9MqkyhIl?czcL`U-~`p8#MZs>-4G~# zQ1Gp3hGdI1T%6UfUm3O#==J$Ny&AAj3(5^8lC)xB6BKxncyG;q=GKBeMP$~> zRqF42*a>$H$b~A8M11YITd@M+F?;o0u1uq}klF*L$n9gvg#-t7l%TOcZrTgx8l1-C z(4vlP{^GbL3w8R&iISUW6)A!?aJ!e5KQEdi2F7NH^NkQ=2uK>C%U<+93{ph%MdcHXL%C+uwSU=A$>^0PudVRt`>rU%!m3^j7@=6-wZ@VFiu=iIbDmU+e9oiffw z8B+g6*BkT!hWHojN;D#KYG#wc;mjA)m77#kTcgI-;|boGdxZO$xe*Ic(yDFpuxj|@ z?4&otk3jj1s!A?+&-VRF16b|9IHprRrXV9HcR&FiP?Atx05yGl0Q0R zjjOtO9@@w>BrH^I;Mcd_B}P;i)i1M-6ZV3R`}I27jf$D*SpnmB{_bR zV8?mKSqZRHj&Ht1dhErDTl@Ghg>4&%*ZTvB=!YiXP9|5>%)9Tbx=n+9*=}i4y01oP zL7I;(7*V*qHU(#U;`x5<;4$^->j%OWuaCMm-n&oTU3EN{Cc@cKmPXp<`VD@%Aw>;J3Ao>dD9s0{a6ajPg-H~W7IL)X_ z0ux7h@eRfN!?)q=7m4fEN$-i5&G*-ALQdRfSq{=5&U>o2+eJM)DkAC`9P#bP(e9Vg zBHbXs1{W(gw}K9^d~( z^!AuD<@v0fIlcLeMT$YodLNaEq;l6h-6APWzVbJ=;ml{PdJsEnW$`;XJ^i{Ki|JO* z)^8*x4?V(+6EV2LL$;eUAaG^Qi>SrRdHlG1?@hK)*VDn|D7*WGv()$bNlo$n>HUrQ zR`307eva{FjY^4g9UvuX%J(5YZesBXLO$78J?Ja}ZolbN@9ipC>B>*zkDTF zKlZ7Ur0G_YY>?*h=pLmEZJ)a&^e!`wz~un?q4Pu6x%YYfVFDFl4AT2Ws9=N1Z`%F@ zXHyQ@lkEz|07v+)Bh?CZgWX%t;r=R#uZI{jr!lfKGu|N9Y>DF00kYd*Mu36z+xuho zd+p(jh30#*&tbB4oAZ*GiJ{`x@-3RNMEO2i-!n+vV>YcF>=|yXdcf2Bk`5;dSyG` zo{qmNU=)5wOZc2?w+1M9?H7CzX|q=NUf92Ui)zy;6VJI?DhJp>FKu-?SaDLwio_M4 zg~<&3aH`(!YI8)X5ThsvbY>Qo*`AXJ{#kQW0&n(5TAL5| zbDVF-$EEM!Y|!Wkil^<$#=|9)JzeQ!zpV`wOi^d*R#+i^$Fx9^HBohQCGuHsqB_XU zkw;V2($&?U=%WKEfm5E%1OgQM{O?#*4`>EibMSC zyd+#GD{>y1Jbn`_k$aD2PU`Eg7+ZnYL%HZ_B6HHE_0D6R^Sbmi^iYni=(j)7W7#jm z*-L8b9l*X}fvW}ED5kX2Xzvpv=)p6~w0XsxPu=$$UX@~5sV|H#knIS#<+s2g1_Cd8 z0+S7wMIDYYI)b5c9-X;iE7pc%F08h#t;#bnJ}T=GY+Nq0b92VWKRTo_PTp?IxP_de zXIW0e-Y@?}Y5Gfq`*p!|g1bZ!aQ$K!e0L<$1eDPom;&gbkML=RK!ycH9oJD`raY{%t?ww^h^g-`lQy#jEkV$yZQ z^J#V)b%PY*=%%wtgdw82+UQIY0|!&LyHvH1RM`6J)saytyUNNc2_3K3Rm0%NLDTay!UY0SJePQM+aNFoY&bdf z*O)==`xQf=p8y5igfkr9kCZIHReW~C-6rlxZ7ywf2g|y!^=i{N{C-NPzGXn`k4$T- zpy%`VxAO*jIU;ELF&%rlhJx#9o|+FIi<`E?O{(QxQrfoMd%nsAJL%4sDtYb)4kHjp z8Se9PcyU=Tg$;c~5%-!uB&%UPEl7<1559Ekh1^d+2$vkzfZ!JiK{_ncM^XYuR7&Kb zBG}?%oMz>)>#X~Zp`^gAv4>uN4Opw}BsvYlA!TXBg$fPUA{^*Tvn&tb%VG9gDdq~= zQuo_!_3B{GT=peesE`~k+*||wssc7Ux^T+S4aWVMTlZ>IHC)1!z4_}zQFRBJtOMZd zb+PYLaitBfg*28uPt$6=#8W?e&*^5j+yWzLG?ZrZ$0!$M&5w07D>0# zpeRhZYL)h*Px>XF)%awyzU{eRTwEWDRQ|Y%8l#k<*2e0l(OsDS?~S<9g!D$T5}Vc9 z)$b-*b+SQh)$}N~D3>?A;_(p|zj~hj3N&fU*bZY#@>+k_nF`%j9kam&pPA_Uet&?1 zs?}}{={tzC+hUJB6LSu&V;SaS=vEY#aIn|O5s~kULprbzFT-~CVJ}{;==7|{%B&VC z4bmDUc;SztE}Vtiky5!71|7hCJ1r~CYvVo>yTcGN(a$mPFV@Fj3L4_1ep%Y@Ej^IQ zq0C@`UG(OihteX00gj)r1ofNCF62osuABVX1@Q6jbB<%GX&ZR&hsBIBfG4RIZcs+z zHFn;|S|Bx_eYFUh#2VPY@z#1s5X=8)FQBDxShi7}Loq|frx2ujeNru4&Zy@dyWXpy#wVN|V zivcG?MwB28T$!9E*VyAB548RmwTDuK1qCHRO2f-?_G>DAvI9J;T*G<R|aEWmtf*%Y<1zM{9TgE{e&ogBf0T#73bGT93YB`ddnw=;0*`c(NswGi877mw+! zu8?Jy2mLc8>YNh`PofC&@V$a5n5QK&y{W(iWra13fE|pDVyQO{3^Q5OMlXNvy;suV ze_eEOb~cD^|AyR%*DpFKXIo_(ZrYyv=s;2#hMR z>2vEjucoJMk#+Fgiyb#Rp7_P}CfnPYBsnN?6TsVkUMi^2sKC%)i6` ziNP!%&hC~1Y_};ZHAjT_p7Rtnh3Gb9{MH+W2)F+MSu&A=u|(oRK;0L{_bbL()2I}_ zw;jeeL(h|`+AnKAFL(M5i$9yL?I2asd9v00Va|j>#~M?t`KmV5f|-SA{%C%G-hM9d z3{2)r@n<4J4@EeC%Ig4LClc@Ln>tb2K>~NZC>`K748$|Jl(|D+dLE?KjGg9EKLLR< z>C%nA5m(*LVkL$Wi?k~sW7u~b?%3@(bn+;&czyi~bTZc(&Fm@)3jRRx^LxXACO`*# zY%hS+x*U2rz+HWI*!7b++PHEZ~y-+^)9_I$)#(GviqogLYbAj27W%89P zA_U=wTrQLp=`=F;9A@-w0}s}Slt-i0NRn`r&L@15ZrGJVr6R844^MHc1*mbqJUX}Z;bNu2Y z7X`fkh!EFNf{|7c{5-m)BqJ#Uy{%DB5o#CuwUocej*tX_^lVqfI}HRYFnTuGPsM$^ z*3;(g)VzEKaNWxSS|&O_1S%`(^9TrHk!bET4KkZ%T=$Z^y-F zybXSxu5oZ%*Ny?=S90q?W>Q%Z zGio_{7*FR7=7&bRj{U~PYf~%8u9ncL+#hPKx_ZVkjJ}Z@vMXXyL|iP|G@|$;N0#FWTzRANi(RW)x}d8&!r>13>s_vlSDJ+l{Fltwo#(UZ$jS~( z3F4s&CcAZ!+3#GFWXb#OI$O}7lObqpXlXDdU@Fp2+S|ja;_PqdV}6g-m8DfkILI+P z(0j;&99apDaER?Z3}8cLSFhlCiG|xsAdC|)GvkuMhZbE=DA#T;jb)B7!oy?`(WRbH zz=O8Z>6M(KK+pPj{{;awDYcoe?<2oA`NS<_dZ?l{ShkNOYv%S|d3CmBxtzDd?hlKA zN>u~7z-@mZVkAp0W>h;c4&&jW;*^#aca2T=D~dw=1UA^P&W@Xt1f_54B4)YMtb0Ax z4V%vHg8W^7=4GB7F(@sNuWy24x>r`YK`LKVku%36sl z0ff%D9qQcl4r_Wbzq!eOBVEJ5hKl6P7S4;i>OvsSEwVNYeSJ+IL1RcAh!fiNG+(_! z4WxdAFM6EUdsS(#<{qIx3JC}&lzjM!itqz%#Dx%Rt7f%np<%_{A_N z@;bZiOQxBLVU9Z&_^HpW`&oxq)~R#u<<{`?hy|m~fq->vC0a6rOv*xk=N&yP3-W1{ zgl2ok?H?>YJUqPdeKqaarA9YBK1RkT-PCfDlzeM}V&vRMZQf~Le6+k@=M$p_*<-Zv z^YiRQGNvKot5NE#ShfOwmI6!GQ9p5|^s2RPaJxJvT)r^6zB%KZw2$OTm<~QX<$lC! zCsDtKM;;=>nYX{lB_^o;W1rGLWpLOi%mpmv9t8tCPq_u3RAjO2$OeuX=mD=vnKRc% zsJfPE-#XxToR#q?iPM~d9D)EZ^~(kponUzAzu%ZJ3-P-fF7q?sn`Rc>l^xI+!kXzf zC?sZ-o!uylR)mB39ImAB^a8%Rw|bY4;p-b?K&#IXdEY3skCWNOFfV`4;nm5_aP2|I z#v1b&^&^vHhLRe*u56OKrj-M%eAju~6@2SYtEgc`y0q+*B<$TWbo4~w_88g8@witT zIdMG1R0CdJ!|z`gSFfg$0q?kMPv}=&)mN+5dDl6-EU^qey-aF-%jxRc5O8+>K(qJu zcK+UVidsXf7FwBMi#bT!I0*o;a(uGkCMI|oQR^~va}qut_t{Hn+;VRJcIVuA+O%4c z6Se%Q`l)7cl`Ok|@Y4UI&OjK*UlvYW-Ruvb0795(sJy@XA-tOje2=!%6tP9$3ylir zo6{hs@!m=R{$~f8i5YFmhgZAZUYo0e?Jo>-`9eYd@Jw$h^ZjM=y@Sw7naE(xfUh5m za7b&16;pe@B7k$q{8+*Ca$5kn*!@)AUAKACGlyZr19`P<$-A#;hE+!9cm2_?bJYW? z=V5GV5+8cxJ4gEx!71!$BtBf4@esU{-+c%<&(N1NxM;;=fg%^Q#jlDwykUd&eSJ+q%=k=3cA& zR_l%&CFSQISJf#)BXQV*=b-YUz)YP#Tn~77$TFNLoX!=xLzGBP*aS@{&OC6JNJvPB zjDc}?jn&@cC+qEtpy&4!?@uWvDlTVbtz`!uSr$2|X&&-Dwh6+}u{nMYWO%o@yQsTT z5e{T>k#gwh=w^8yK4Fx<6cVUOXny*k{{a6lt;oVN>!7sg{@v=_<*e&qqpYgTtE|1v z^R&!sl4xPW>-1gvUDqws+a01Ndxnd7OEi$x19Tl}{n+C$jU8i0u+Iq5&~gpQGKFB= z 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

v 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

M#kd9ly( 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

I1f7Uv zdsk{xAZ0LRiontT$Pe-Pdh4>=lj{XuZ`NzxSSB#c=nwi zM>mfY*jr8!TpuCR4tlQ|N~Me*7ey5@lK9lh`FCRdD%G5%Cik$OgytDC&1GdGJeTL& zc>7_JzF_~2Hen=}bw#a$;1L1{rbn{h74K(F+;daE-#n}5f5J4$ih3vodxp%bu~t;v zBv0s#j#;Vm6A+Wi*Z!R|h6)*;Ui2W-nd(t$)bJnZ`G3Q8o$&HV=_~{7h&kbA2CcrN zymLnA554;~;(M8%hhUMBVqRuWRbKHA+2?;|{-|l#M`W6t?TQ_^IZC3etNbW!ORg6P zPQ1y4x&E9J8wwfR#V>lV8MlRKURu-MNnZHBga0#ks|DK<|0m7$ajk>givGB5dz?iu z*j19s@2R+4D?5B;xV4Z)q?g*z^Y0UyE@ z)XsDk{a{!Bb!neS7tfy>0?T`ZH&n2O3UrGzSJ+0)v=k2*>ryiW3zo1NWk9!9>*pb@ zGD@T7fKiQ3HTX2Y|8L!3C;+mIHVxTuSZeqHdDAP8UxN#*oG^qpUK{YZx8Dk@RH06c z?4uhMe*V)v_kX7xg?A;e*94zTAny90(^%MkLZMMXuJO(C*QKYv-%niwrrZHNCSTO6 zfFy#ocxd#KUoa4MRBKC@AQ*T~O$Y-K3#NER58apSUAb!t6>rqOQAkdB9vnQnF6`7c z8aXMC433!@8>fEDiQL)QscoJgy&dDRR#AbLDn0PkB_!Ar3ah6(H+wXSuYf=GA+dMs zrypni!Gz_CwLVgmJtGS(D){g30@9b-kU1cXK1<-PuEf5)IM>5H$J)X&RW@NXq5)at zWin%uaz}b)dTmhO2Qm`Ke}6;#(0O|9?j+Iq1JXX?U(FSgFx9a@N)0;Pf#=iyu4ype zu_?u7EjtbDdY4=*X78g*xDs=?|2wy+?i%#fk@58gp^438rE;|C3ANKKdrUw(MVB$Z zDc^vT&Piy)tWe^vCpcvLLe7S}_cvdsqy7iOU%UHN@OyV*{E@Kf7&v~;i8 z7j-%@y~eXNNHn$(v=trrYfchG2)8~At|XUuIy7zi@feHkt7&1iE#~gN$Zv}G&~gor zdd|2b-(tox|D6&%eHDi9hY5D{g*k*`^MHbH#WQKr2}z_z9F*--#waDqFdEfbx1s-8 zWl-xDD)qU=4H+r+w)`Qo@LbKhO|ZvBWmQY7LgyxC_|nUOUZ#}cpLyzH|2YlObW_M2 zO~h-ncF%Z}5AUkYQNHN&ycV+SO4vM4m<+ahI};_UA~5?Y<4w6Vg1PC9-EhRe2SNgw zC6*pl(5|er>M_Wvt6@F5+2LFtD$ zLF@5s&N)H21;eWU|dbLXBJyoR4n5*;sgHAAWOmYp<>M101HAEANUh@NWc2P z7fU(&AiDl(SUfdW61JG@IHcK8?f0W`=Hh6m5dZ#g=pl1zCFRY<%il<8j&@z0%&-(E zL`x^cqj-;~RyIt$F>-an8~mv8!Ti5pM#fYFy^~$z-bYUyz4fWfp^P%2(J-qL-ac`? zt#M2I2d*JVxb)HDIyoQm->Fc2<;isuYh19t=>xU%x(R5{Qj2CuVD} zUJj#`K#SmZhev}{i z_Mf#1@?Z##!SSw2Q5rIrv&m@A%}h*CJzYPPRaG4A1Z}mRsgnPF%vf-|aQEiB^@zQX+INk*T4Nl=GQT#`rkU(<5zogSB*JG;MM*Q-^hc6_xLR>yfBZ8Oz&Q!*ZwbgG^O8c~-#0i&TuxzmPLcG1g5YTO=V?gV~N^>A^fNIn->f9*hw zAOUjuNo-?kv7P?55bvjHa}>24caD~1*@R0JRcaa5De}4|3+jEnI-}B0?x$bOW&b`Z zKFC;oN4{OISV7|co6i{@Z3Iw27tGM^xJK*b@ZgW0XG8f$e~su7YK3v})MDuA^VzTQ zyu!$M(-d$pfh7m6B9UHblugTT!p%iWsqpN_o7p+izA=#84zIQrx`ffIc z>aRmHkVyAZ#H!6k-;)DgftJxR;;XRD-BP6!W{-9n71zrlEab-Xa`q?wQdDG2w9uI- zz=R3Tj;z#b9JDnQRRU*z46wc8Z|MI{J&5R=ieU5b5>>=*jgdnp@xQCAqVN^&O|;C> z8x2#;%e7^|RsROo#PrGM=S#*jiDr#)e`)-5&lf)u*%@Xrqj7dVUdoxkwx7b= zcT{v>6aSReHnApF@7n+5)Gvv@qrry#mxwr#qQVq6#^h^T;$lQ1=xOsar<5~vB_weW zcg0oAYOwepmf?SiQT+0s>*(`h&kD;$s8L)>Gc%Kr5*t0E!X$|fZP z^T3v%M-O2vcCz5FabXm`I0i)3h3>uLeW~En>S7M0@)s#=8SIC9%N$Z;q!Zxk`r$15MLCM>u5-&bBB1Q<8f~pg>`c>HoQJ5rP>#G=_y+DC*na z2ql}E_HhklBDwZC1nQ^zl$lCdi0(t`QjMzT)uM#{niK#j!dhrt7tgzymBuA*=-Zu) z2Xym{Dpnl4&m?3&t=S6u%XSJjqQ7UQ!!A796P_Y_t8oRt15%w746>%k&WJ@|j0>5% z(oZt3*_DXW`tL0B(mo#u636`nq&l(iYQ}a|LECRZl>N6ia<9UT>prYgMN(CnKv&*N zOU!%bjJy5k&iGzX=w`;Xjq_*c@^)D&oT!IHD&MGooo;)R#B^yaaIYr2DF48Adm4I}3o^mMPG87XIQkKO-B>L2%jaTk_B|8prrz_^t!9!$m zCSwYc<%s$|d;*HUwz?z)zv}mWNsAa$`?{gk!a(p727gUy z`Htk(Dr<2Vv+TZq4|Usf;jfYO=?%LF~X~Nk7gJhd66#gz=@~Xjqo!)TMy!zt_Wr12RV`Ukj05V_L;j713G9#}#~k zPY2TOq2#SNO#Fk7GYOl1wWkr4DzGU_{#TBke2ou$GP#^mrbTMoHV4*|IH%ee8(7-f zj+8rjWP%I48;;Ze=PI(33esqV*uQb7MuZaKwXLTbI6|WDKXqM1>qU>{O8g1OYo6Ht zhW|<}ZT9o}|COF#pI}=PmB|#DRk^?sT(rf!k^DiEGt6P)!s%=M|(N6p}d`9347 zr~-_?6oB%Jg#X9YR|iD3t#2a|BRO=pba!{Eq=9rd3@zQ=h;)|%N=tV$(kTqhFw)JC zQs124ch9-U`~Tj1X05lM^*-;~+6v7L&k;ngd$(gpNufHwl{{S`We*BJlwaN$6<+dI zAlWg{{xkMBKG$Sh+VQGtniBN!55U~l4fke+j|oy&ev{YAIo{h#)Z#(qn;0EG!EBQj)Af-C7O0$j5vn_i_ zf2x)%@?@1@0$grHPtm|C&bt%gv9Ejsd(5>>7?z;L-zR^)PMjC`sGsu3&J;)jG+nb% zn!@c;dh}8gNP#=64rb)wQSJ9Mi!?Dr#owP7`R{ma{yS7g$%q4^T7UM7o|oH0 zW}7IRrmP)b>BfySjb8PWQylXapZdD0rv90{CIL^j>C`?lw~FfuSfA5ccsqeAMpSV4 zKRY1G371h(1GD&8>0Rv_(+7=3zaQS3{|;d2MQC!Pq@NUDKT<1bhln1Qc;=% zauuv5sKvCSqG_EaNDQ+=|%>6sGTz)Oa-FOhutbKploJmHf0!XfmNz1L2o zr2O;HKWZ!!K(LRn>wRDTY0HZPtBsD%^N)L%A`IE!96X^=EP?9NC|LB|EMY|rSZi%x zCDumw4?P?FB=fDQ*v-4_x{SmHEr6739d_Mlt8amGeh`stX1R+Gu$klEcgS z-aZ3vQ*<(}Pikt`6~kz;tXTVBmtjOqw^T^wB_sRU?}%ppT^9ra;sk>Q&a+0|R;Ly( zRPG0J(PZuGD~nB(oE}0ade>!Rt$SX6>#A(yeGPy6rzH&r$rPFwS5)@ay?Ukk^~$Wd z|LsYdezx8ZrqS}^K9MF|Du8kQc-RM);T$^>&OarY4OCeJ6FikIdcXX(VqbS0{d#M{ zkJZ|+q{G%vK$2XS^Zly^#xp^s|51Q)ln9E&w%2toU%`VI)vo%IjtDEf67eO)&bgmb z_uxPAm63w$gE}w&jDXN*I)0)O6I-0twXQuDpti1?WF=zaHYjmUAKCy`K5n9n{vUQ^ z;sD4XSopwk&OYD`W#Goz7^L=fu~O&u9B;MB|3Vu31~Nv*f6`_5$#3f!6=%%9bhI8X zxNIoaHYfALRLf}G%aO*zzI;mKl|gR-ecrDQ2_ps?``Z zzmE;I%FtSlcbEqs)5h9c@A|3#_^5Q2hGZ=Eqcz+z8ug@+ZvmLHs1jl-C0wtMs% zizVDQG=BKcC?G_ux#yx3ie-;0WHnchsOLajAh?$99{Fp>>X&n=lmC;Q3O@Pa^8S~U zlgYHn+&m^7Ur7&d*6<#fCBdrc>+v9GR10PH7oC?Od)Z=T9)JGOD9VABhTWpv^y@ah zjpEnMQ!C3mNt4>DLrkN#3RqgF+6p&RV+jp zHj_Knf|HAInP0{|>x2hCy_dwy8Vx`d_6c8G zU@=p2za<&5jE(8d`X9x|vw7a|N-`my7a0Y|mSdZehZo@&@_5G0Krctwhv#IrV9Dat zrD8FE)+V$x!EE&X78UOf^wMy4bIio_4JpAnMN6xyc5Ll@oeFP$k<{_|zQ@GyUm&6a z{X6=T5+PUV+lSfj`3pI@`65(mcv{{#Kuyz|lgaINUZBdux47Z=WQLOE|I}-`&z_UF zPZvjj{IaEH-pEfWf$)2cSUTXI+}j3n$wtmgj`rNM2y2nhZ*u?I5L)&p@9Qq~8U`O# zWn;B;$@`-OK(B;M9Sb>jM0ipxCw*|W!rCk?ABzkMoHexnx8~p}K|v!cT+u0al~3{^ zHI@3PF@exf1lphok|bPWYG!9xSUM4U+p_w6><`%&zhu}mdp-6+YsgMO7*LPo>cxJ34|p?O(+siQ!X|reQYx;%?uSU9DTF9nsq3u7yxC7 zY`{JYop1k9eYagnR^9Q(&zZahG&^&$CDK8vhG99OjExBBhS=gLZGOCxj(7tf-tj__ z^-nOdpaY=UMyzgWw=iw*7$WHy<$aR^l1gmp`kkz@Vtxdt%YX}-sQeuMHvk3i{iOeAC$IsUU(<@wiN7~sJ(Q8` zk^OWZ{6^cXo6UM67gvn>P+-kEuun0Ac48UwhYOkoI-ly0O5Mdug=<&a&uCYx9`7W*w(tv%^0tgksfhMXySY1vgla?*Xd(4b~9bXfa4YS}1r% z4{qxPf@c)}`NE+*5-dabV?`<=H1>{}`f8hwYo=Yh?`fJ>y3BPKF1ZRQeE8EqagcdQ z#kID+`Za7e$8Y*jG#6$!&}H*jhs8^#ycB-}!yJ)_WAquNAhc;j{U6kt55M5`g{-P- z9}~GGS|A}AfQ0M^DK-KKSh9((sdYUqRtz8eN|LMlX_Ks)@(+~hV}8)HITkB_EcnYl z;#UBYA*Pb4kem8GaW9GV$ z{v|W?*i-5OpunX#68Vq^6Nu`yI@zD$y9A|d&@{+?j*m&)3R3@idx2wYi}$#c&zgc< zqL+NY$5aw5;7`EO=D3c{m3jvRCGfkDjeMU5+UO<9&VkXFgC27Nh5*p0S@ zBRKNzhOFDeBS>d_+w$PixwNF*w*2%z0-oGLVL^$(U9~p%8Q$*DISzG8$$z2w;dZ@l z?K2Q3FT`?G*Ae+r5Z!o6bp~DM=tJ<-)));x96=@1sXAa$M?=xpIPPZ??|Us|s;;aQ}Fh^wbn=Ys}186PT+EE9=7Q~7Ld3K3o6CIZA{ZU98b60LR5C$ zT^Y#II+PDrqOs7I+Wzm^3@kDT(`G*O!tI;m7Ozj?wM1Y((CUz;*AzX%dGQ>mo8RK`zygxzcI(+Ybndyt)|A0h>-3g z9+j*Pv#&R{<#vOG7T7-3=MTI)&b@qltV`Y-_{b3!Xb|Kv#gLF+P$KV66SjKfvA%?r zCVoPed^F={QD0)!TTW_^gX1Ii=w6*S8~6O zw!hTm#=I%~B%WFB`oLb!>jCf7hGT8ab?iAvw!6XMd2$dPI8Q1JKS?{UAO49mlSz2r zJaw+@tfJRG;lNdJNeld5ku}tw8URH#j$l!Kf2k5y&M`QcO1KFtfAL-W?@Yub2d`kR zV5{J=0IiU?kf~6}w8*H~YIiRsYA!4I6{RX+r*62ulIbc%;DgF|!4g&7^{2ue$>S~l z!|m%~Y|G<%PDXkrT-n$0B|_m-e^zGzS`C@w%qn z;_4Gw4Ufvk&~}BJX3=oIxBuDf))1t>zp0#19I>l3;XRhUHzoh|XSI$wnu3oyZ*CMQuZz(%&O3%Fv8STjbL6Z(2g1|w=_4H;k%?o zUssQax~0(#9bau6K)4K5Kko$ALHm=Ufe*6anbn=4Ckjoo$h(u;<+}fPC|GW{wjHqz zNoQ(~9uwm3Y8ZyvH>Z8U10)}I(Y3owwG4e0Odss2>!RC_QIqw`TKvSnn#BYe_~(4n zFtyjm^e{IlB;TJ7{|k8w7Gjne>upMU)2BJY)6y7ipDV6L1?A;vlhyy~>s$B2R$QiW zks}55ot}J5l_ELQ1jo!Si{?G$WI+;D%I5tieHz8$#t5D#WYe2e?jb)3|FiTR6XaQr zSuWF8fD+4^oyC&SY>=9{ct>SUTj;`>gWS6WW4r>trL(bofA`EcscoB$c6?N?6otrv zfygz)x&fu?5LXYS#&zZbdzwBBv?F7E=+3NF`G0YBDuwQPOlp)bX@w<)jk{=~eL`u6 z3dNC1z6zWpNu%t~)_zA%?DJkN4yVnM>1?HAen1to{&~wBdlIv>e*&L4k8Umy?^?)p zL;i{XkEzXY&GO9h%?hYixoqf_YOt=dJ+TH|y~{TL#M=q};!ganz8p*Ug`EX=vA&Pa zi#m|Y0Qsm;q%%;3e_8q8YLEHEj>L}Cj%-E%HgH1ek#%xZo1k(tY3-g;>=9#hXPp^m zCuaQa{;3s-FaBHtO4LA#zLnnxTXNq#!u>Ku^fqV4tnfxB@KE{ov=+9u`9GP7SOQW5 zrXZGLoGm#=>)>wl;GE!(evtuBs9__t%btFMZjoPFG9wklDzOmsyFY?AF&Qm;KQ{69 zLp@%h4pi#lAT&SdJZ-`yQ0XVq-(q@+Tw+>aS!P=XYLx@mW=7LCSuy_>vNICNxxp`r zV>JhL2z6RICbJ}zY0l4I~9SSU5My=@pvdN*bjMKzD@l*Fd^_Az9%z0 zlZb7c6)|salK+q7X5$B(@>#X0IMEL5W4|8**>><&U*&Z`7M# zfj*zPQecf9TB~g}o29>2wpdA3qh0UIIe6br084+9aZDMZh+eO)_D{8gP|m+s&GDhR zinr2EebWpnnSQaja{KT5WQQ>^`@q7Zov%qdLhayP5!jVy zF&qAQVDVqTe()5t47NO{yqfu<)j6){ma;SJe$iZmLr0_^uvSuZz+MDMk;Dl*Le z>mZXhL;bAd;b%eVO#PcM6s`?c{Htfq%uHcWuKke4>Cs2v*gah4`EY-&{n4!BGQeU$#*}Uj)UL*^aO7U|}%8uMC zuKROStT2L(3T8@64iu5kfhSh|)finuLX;$1E1#}U+SlS@AN-aCay_P`R(m}N-9}R` zKgu*2FZo8j7#Mu=WS*}CG#K1bnWdua+TmVq2sY**Xb^d=B;54KY4bCn%|#z``9~}H zLh;E7d@uZZf%wKJ}w>0rVmk1~1InEBat zyFcVKvLz8~rHz`aO*X7m_rd?ayFGk1@dm zoTQJ)I4PoP9Dx*QX>WhxF`h8^LO1LHYaICRJEazgudx@ zoe}@>+|5x8A_;R^{-QgFTv6)6`BU5J1$d(JCg}D0&h_QD;KLU|^E6Hr%tr*h!N9fm~7ytLy>wJYmKU9suQoM3DKc*Mq5v1go-Q z+v#^;LVj=)32Zw>xr~I3eE_6*5m?b z+1Q4XGd*OUO5?zBa7=|ja$+`oOd`SrgTp*^W`3%z_lwjt)-SY=Sf8}v60O}jdc&EQ z4z7&FM*N!JTu+i;VyU@I3}WISx?Q|&-&NlGJ$?G%}rfJU=3*_3Azno?5fFv(PbkAC>3I|F^#-KMh6TmqVW4OvR$-Y=?XgUISMLtwnn)S!NA}r|?O%TG zle?aykQX_`~+NepX7qW@k(8$b?3qxKj zaoj!&e2i+aRNTv~h>3t7OF`|{5w+o9CYn1NJfR{iFk4>KMT5&yV6kHcAlxh5>KgN z0O$O%C+#Jy1tvIbPk|>64KkC?d*#tg{zbbQl-HJIP#o`|nFlx^LcTW2XoU7$8xDGw zP`qXvmLv}wYr4EbWK}mZh_gw*mrc0BJmOk&wV)e9)eYOj5g8h1n$sQ z-N+h}H{#bF0SxlyWlB)p{HGu0RjxIgEBlj6DRdLMPT}M7Kfy9vvpf|-FUP3Uk>i_k zEdf)tFil&!W6}PGHlMX?P@vg&G>}mrvvp6;EZI_U zBXtnfHFB+WO>Ut~iKEt<7&WfjnU3~se2%2X`UUXa^TU2_Dl6X}N1VA1b;`xja}TaB zE2F=pM5JK7PeH-Cb*8tjkWZ_hSbE7s>vOh4D1JoV)>PI=;uyr;@I-^GQN};s+lnU$ zKLs21wi-TTNTkAXw6eQwAMBve*e-hbB0@58O8fR#^Qut6O8F2zDCbFNi>*Hf^1kDU zPoA<-F(m!=lnhW3Y9cPqY`=GDf3bM!)>JxgQ?K*}kCXwq{b9fJsky~a8BJQ#YmKjc zHh`eu05?sq1?}xS@f22UowyrdXzb$GpXg*^3E^C#rG14z`t^TC$-q%AOKBs-FI1ya zE`Vx;l!++QG8sxJXBno%Qcz}Oa8DM zazHQpu`=bY96&OvH=gB{6MynEl4hrTY4)%+Y4i^h-KVs9LNX`IcQyc;M=gl}4ny%T zdD$z!Tn?e)7^;-}$K&ABL^*K`mxd?wSA}2b+OJBryr?j;S;sv$g0|(p2JGSQ@GVo3 zB|g67X`xh=x<;FHza>|H3v{~YCSVMOpD-R?R6UawPmZx)m zAGclto^pZMdT-Zy0nXiXm>}|{;H(R}yNM3EyY0SrxfPed6yvdRys&F&LtyU$oHmU$ zh;=mSk@E8PQod&M$t)_ggIKX;trOzJ@35_ZC*|S@Afb+gKhtkA&o9-6wJ+oKhT70f zyz}39ILCMDf6ymC=pwv*e0FIZbl-)M7MHyi^ZoH88Ca!HO$I%)-Shd@#Auk0nw=K1 zlI>g-NOWKYrM)d4!%Ez^@BkCg-K`qBB-)B}aecoh_ua&!^IKPqI^T7XjyQGbZ@48m zx^g=}7vgsryRF8pG+JWlP+Hi1hab$#+)W`v^0_{9w&sF&t9hkAMN|U0sl?!GQ;axU zWo6~k_cqp&aBD%yx(1PYCS-G^ZnJPYG19El=Tdi$)R;Y|EDAr&qS#2bk}-~j6d~r2 zOKxs#s3CVmO~_993t$PiI2k?h#^%^O9c9o4A?h{!&h_95aaHbh@qG8bN}|IjE)i;m z0GXP{yG$GT??atpSfM(|vJIu++z8lfuW8H{jG{X)cb?7xi9y=0c378pgocN1piIx zv69Lqi3QTd@t}lmrB6j?p)BnY9QqNBAKIJDzY%$OxW*JA3QsF6zT_s69qj^a<9T1~ z`W;-g^2>RFh2^hz+1#C-Ie9Fs2e!7VKywqC*-1vl{8Pc_>ard2dL+Reas{#O*qs}` z8KlFXxCNU(2+&`Qba|K(Zr;VLwF!hBuaWd7=0_R5e~Y*3t_?5_Kvkd^o&Zal ziYlxq0tW)`7Ufdhls_|SPFzV*NwzvkqKBa0wnR#%1)0c&V})Mt<57BICydYm4xhX% z1KY2?j&_aUTW+Qeqmc+2NB6~6aid$7ehLk^q|-`)Qx9I7`6OjFnm#aB#}wU>jPP{c z{?5?Q@+A!bHD6T%u6jIT&d}3~;on;!2_E>{zO*$OK{iGaK0Af0$?o`J=cV1TU78#^ zWW93kdUsGwz5wBV7`VrQb&)^*!v@4ymck&VI{Zhwn+rhNk0mU!)+tz`ohu*U)lp2< z{@zVK)q_2hj^aScAp<8_3lJwVhZ}L8d%=VKqC3`eWJkZ}N89trHv#vY5L_zZMoUy3 zL0=G@gw1!$JZyf4Uwng`$RQHZ$k4rmf8tw8GXNW9$KGf3Vi->+zedX{Z^soD9dw=Q2%-JC&=MsG?Em^#PlF(K)kRVQs>Sv2%WZP}iW)ajpkG=X^T4_No-NEshIFYV_@w=b*;x^RLz6Sz zaD=!yWO_t%n_WHnMv~6lbRI2Ch-~1rG$A-vz?t>T{P|mP@KY2X?vYIWX>!iKwcnN7=|{^GGye zReeEvfAyXz#Ugbc^)bg7F9*6YF0;X(-$}A|Fa`9fP?+&CEfv*zNWs%O;@)2?kEACjxz>znwsm`AXP!wtiJq^hdX);)-e;TmmO3C5 z@$8N<45pIUMnDyZbm}S(mOf@po-Z7b@8cnaYk&T9)G)dZjNq_Ex1ywvP>!iVM?WUiz)fU=kYx4vg#JP{V;+( zZGdnDZvpG&V$Y#M#L1vv&(rMAITA>yb}0ju&c1xZ`?71fxy7k0)Ti6Jb2{<;UJn@T zK_?S@ZWopGexvWWB2a&q^r9ZEcQdi7k35V8GnW_KBmXg=&@=0(gb4gQYV6K?61_dvD1f4FT%6*AxVj$S6}@$)J;Pw6Ip zC#pyNNQ3)Q!Qn9ww-+85z~~qMWYPV%N_FXO8O`CTv87fxW7ZIq?%D3Oyg79#E@uzQ z_PPS32I-P#>eZvYbTA2xoUe4sT6(6*hu7cNkdM%{j&I4(>vzj>3#qu}l+lDn`=zQC z4Y4}1a9qX&rtN)s#~1c-C~gFQOBfVmn$qN-$~?*;&|nk7XV?A_ktdd`ZVuRFS|hHe zw55F#h^p+eiCNE}F$nuKgHmW9fL^JoC}zU6>aWnE16-d^UDJwT3C=(hHc;O z1EuddHj3$VSnHYO+xfI|I?e<{2sPsOcT+ypa4{tu^|X!1X1MV%F%3#dqn!@QWxH_P zHAQOZBHH<58wnL*7z)maa@fSo3ynZ=^ZhDbd7S9aStXesHt^xrlJG*^2@i3anJ+qR zkqzbH7gGJ`mae;wVI=$5hmTvuTVdtFcNVE$(rom{2_;sD__*cmUUrY z7a5c9us{stYeuk)MsZ(%0)C&=b-*+DYm$o^Ny_pZdQbYjtNI+U!baa`2QcyI)stjj z+Uxgn>z_=C`bV7?88tOTC?Rmgs zU`*_rU|E7^xU`IZxGrjUNp5Kk2|8Q<>pa?AuHgDNtQ?~Ma5!SBf}j{AwlO;Cd=<_? z&dGBn*uIYKmc}sPI`S4hcu$3RoZ)%*@$QF{`hZIkU@>r^n_u9INFk@IcI4VkA=5vUC{yBGp-!ejmYJL(ts_qN)WjNVHu zzTkl*fwvyC(Y5dB)QhkK%0MDbyDx7)%AYp{-zL0TzrHos$6JQ&3yOqO|nhQLL91x zoP>*w67|wjpKE<2RH4q4J@$-TCleCFaf`~bl6YHlP^WVuT=1Ps>R<$iBt28f9pr|7 z@ap(hrCJM@>J0Xs4RIQaK*PI_zwPQ$#$1JGYzX7A&GUaBMX=)B>L!KU5`V4=am0n| zDta8waU5zg{T6DBWNrFdK7X-PJ3u ziO5I^V}W})Arj@(n^z)0A9J&hjK-#z2gYYS+M8;3(T3Pe76SeZ;Uf93m`C^fx3Lg{{WJqjI&v=x^5x3c5J?zoDq*# zRbyrz%*;Y9HXh8vZ$K1*C`{AX0A3H|lo9PHw@&v>Y-@UIGTw@Ii!}t`07sqD|Ir-$ z4(ONXplTPjVoj?}&D9A9Y&PWo?ucWhUpBnfq&1%I(*z_qpPez#jRwY$uI_pv;o2qp zeBAACaWPW2Rj31p2l*3%S5WZWfc+%qAvfO(#PbIzJ)A8v?p-_^gwtLdd_tW@0Z^Bm zR}r~g9-W8DpPJD1AHaZt;69@w9e}uo7+@Q7DZ>WlKVcH$%1kq!LmG0X(X=jW;73Xm z09b4w-#+a1o(vu`Ch$&GcbPL4WOz| zdqiSNGuXD&fW3qenYr{s5gf9ZWL)f5%&t1YhFqbQ71f=GzkU^;&-KDq#ACst?euL^ z1K>FgVF0-9v(z$|k23@1sz81JGA5QKt6u8n50JsLT^!uc@!09Mx$51WF~BnYlfsA% z77F8Vlg6;>ZCf|F>o;Cw$6vfcO*-&HMm9jTzmcPA-{&D|b&|6aZb3Y;6$Yi-pNHjl zp!eST>qv1swqct=lvsM$X3&kpp0$^C1(g|~Kt0zG@Xv#sgx9m4U$qbp>m~r;hMh#n z#Xw-k5puacqx}X#BDW8#iLY*2L({i~D^dDVqui<;2aO%$K&?hKiks@CG4h+YSM&J} ztjN6rH;F`q9Q;YUtT_53jkYFeCzPocftMNyJ!#a624VDd0N93$t#2;BpWp4kseM%bP~b`s4@y zVdC!x7+*W#t|ciQ8vWz@gud9=)o9*vIvbENM4@iSzeMf5po`JGtPaiGIybTLr-1|$ zz3tsdSWfYZpR?!Bv}+SSvInVywgXCuc5fl-_Wln)_7Adg-_MgqcBx+JN9|`tJPu-( z?}xyCu3@Wt2G20C*LJ8dv@|C633`)M-6ODsQkWm?aLresH*x7p3&4W0o7*+?*mTak zUdxjBGzrqDpRq57Yf7fDOlwq|nPLY@>Wp)Uw))Z$+ibL)QOhZHK2*0zH6)?BGP8Un z@)cH-8qjtkn*EVW8rzhg#Ar(TUUbkpf>auhK7N;K0t_Gq8iVB&{7~tSo+cvZDnYJ` z3fQ@Dp>`=GmUZ-4AXsaj5G0x8p?E4N*x8hr?JJEY79XP78&7;2Z$JdkC7m{0sD@#ydZT&5SJ)LLr&`8;%UBe62LDIjfF#r?i({L&32Gq&d} z7`K1wwHJ-(g-Vn)z$j4W%EvwB=!=cQCe|x4Jj&?X$4-&^FX}qiw-pd4RPB*!y*!Yq5g+- z%{6qF+_P}yjvwYWbF4PEl^TWIB4n$NZ)&83kJ>S)Vy-rRXFPFyzpm#eEaf-#>Dbe* zb`1;i`}Z3L-=m@N-R;`^`{58Y!4DvFPlMlThQ(JK%Jf~#L>Ze^z^ySgNa9f^O2}`g!BQl$G@P9$;YPRyt#+3e`6zr#f_1Mg#mH`3 z$8jBbPXq4Xq9vIYdA4db?i9$ec>OX8p1eIf>i{-Hg5H%-tT#l+z%-*D6Wl!J`~a>s zW{`1ZIu)`<2i!=rEAB_iKIJ^>;|UK+N~Z#zE!?h1oKbGsg5Ia&?yFO$1oLv&O-nEp zZsxHVA>y`hYpqATTXR3J*)j8uM@FrFxZZkSp1w2P@(HccUf6Gv&Jla|Es+5J?bP|1 zHzL~pW^-s(>T%p6tyJ?YYtuvNh8?>O2KLuAGaJ!eq<&jWQReO(R)yHh$3@58Z8#nW zDXv{3G575q%jw{ortBVyT#OayRtrO0eh4ZgfrN`T$QKob7*A!d`m_ah_RD}l=i6@JN%s~3mh@x zz&AN4kXw{V_$O*dz~z>PK{g?U>PT%j$@HC|#4k_I!9z4lk-b62Qd5R7fqe*KV)VFi z*!&GwigBV(4Q@DfM{PDVyc0cdXzh-C_1cSKusPyKVU%7lRjGWCfd|NMVHD#)nNAs3 z6y|np5C;6j-4`35VMuZRbd&6H)R!`{M;yh>8@!c7mCn$0A`iV5Z|ZjQv8<05T2vt~ z^FZ#c#Wgn53CcZ6f}j6=+>-m&nL+#1zA4|{~CdQtCu-4-qAkkEK^XAm>K zhN$pB(m|K#=FxV~mZHYHjqe1)ydN=+#T~X@eUv)u0(|(5xGcTAmg*~IFzN>#7R;?k zVHYEc=rb=AfZOZ~?gu-s-o!_zu!d!-3GSs{`^@<}tNP=-FFR#W^84qF6N48I&l@%R z0`3O{FB|d)?6YrA^-O(R*0^idlzTFA-x|F~91N6+amcP9P6ur5@3S>>gSY5w-UHTG zH~RdJQepACvIY9~MBb*@v>Cuexa`9(9XLsmVDYKoM7mcUuemLId>olUt;K@QnRn7k zEk9hnuvVhl!Hp^*0n|i3CxueLjSO}w5xy4gjOHQq;&1s)s6d?GZZL?f_&py?SI-sx zQPTfqoU}C3CN3DqZ)&WkEVTEKbFH^(hPJZ=jQ%t~)MQ%(($xL*1(7&ONMvtDG`|%M z8s7E(JnSjn6_eKnGfae1_E(8@4IcRVcOT?2dgo^Y9XYh&Ga^M21B?)sFo<&52}0d| zJ)ygU$)Cc%%fm1Ycc%Qw!4JF+0XXnyHJ*W#p}7P;8e}AayVk{=gzlb&{`FJT62Gp< z8rxwbfR0H0(8Y5pfYqP~Jp9FE9kKj<+kEgCZiMxinQH7%Ae+&ayFK7BP96D}$UZaj zH&@?{7*X8K<=a(hYCQt;Gcvda(?sEckDrz4eHZn>wu}4c^;1c}p>ET&F1e4K4&u~# zTdy7@A81X?Gt6mxM!geo20GUUxY5=+=)=;-d%Z(ADJwVkenLp%3zcsqjlmf^Htb_Q zA3=)B_C(qVy@IX+musF(b5mN^-0tKD@6l_-2)ENgB50Ol?D6j!dz2Jb8k~ z3aC;}pO`o=L?xeD)nq5wpUc%`2Me9FZth6T7gwsfb=#0R@MPD}fC>SD>|#Wc=zSvr zD$9wvL`LlM)&1&_@%`NwqnRT5u^RmIm#&n_(Hnlx=XbKqx|*9x=xeS3Cv9frM3^O@ z%hf{gfy(JVacTULD%<*0Y_{HD%Dapu<2xH`fm)jvWWynsE-m_g+m~)4UOPrvr!nu| zF)+zId16R}T4Egcqu_n2*$6>{m~ydBu&R$LXRXAMC`TLd2v%Z7Ah1_M^ZFYjWGl58 z3pEC_v)L`@J0Sc=5-{pq)2N{yf_uv|=gq!n6!e=|^PJaoWl$l}o=GNKl*_X;s_6Qc z4TG?z!)p^FP*GG4dUoERm?9Se4v2avTNq-O)2+TmqR4R!KB-9~GwIc*YD#9-y$=DM zQjymTYQN%`sL8sWdbmx#JdQO#OFh1ViCo>bupC%M4jfuCvQG_WuK$4f`-*N2h(hJ7 zXJ}v2L^S)6_AcNjC_1HQHzHe>$|@X3x_J_WNv}QFl3*r$5J}LOI2mqjbPXfuyg&DL z1IC;R84#2u!wLfNp|pXXG?!q$YB~(~1mXaSdNdQ_eajTad$f4%^ zTn3zcb=Z~%FEpC1Bz%_MS&}%NDc2lgrN|n}2MJ^2;0Zr7eigt@)}`j;22E$Oe-(=ucM14wdA8G z_SK2oJ(>K8bP^TGU9U9@ZZUld!qxhJF7^70R0$rM=Cpih){NTDFmmxAhfrr&jNVtK zEhk1B>0rEhu;Y0`!;yteE!I2V#jtc{OCrx|1zisG=Z#n}zzCMY1uJH17{nOMkN119 z98p)$JjK0}@T!ztc-qt44beR@eyb;1ZRB*HGe1Glu4MW&lJS?|un_NBb<=PE=A*_F z-`=JySLrv` zDE;x~4Zg!KnmG}d(3{9$C!{gYjMLZ29nlHGS0S&S^BGm7=jJK}navv+cV@a2s%MXkD3E2&IU@JM4&v6o$uj3P$F`w52q-gd-> z!aN5u>>`|IOV3CJgx=USss|`nn2X5iM~H84HZ)~>q;4vCEw8*SAEW;mj>JgWfOTQ` zJ8gv{waJ#z!R>xN$@|?|1DbHdx5=n3*_@Gje&a*)$ES9aj$$5Gc@?8`MRj`^@s()T}q;bYKdAW zA(9EtxAR6fY_R*ys!EEmZHNbg`Uik9;*wVv#W6jmF}g9?A#CO_^5 z+>JB}2#lrJFcx^gLR=MC|4ZbCnmm;9FJ#F@DTsV9;6-=|FNlBqz-e$9!Ix|(jXh^$ z<{EGr^R637Mofl*W2EmTV{X2zCoBgfCAQogOvux@ajv>b{p#=5NC;auC$pAH`M;qB z!MqIJKr*RxX8?6gF2<8_5r>D{WG1%HOrQ?}~yMo{3xp6Kd zF(geBMgnDCVU=)dP!X#gvP%X;$)w|%xHAr1*^PQ)&vmzEFh8olj_7hl- z?Jqeji!9I&IUR2Pnji+ZTDCT~tBsuMmML=?IdXrOCy*i5Q5yY=RFCkV zi4T8`VIW7-i^wV|k9fsV@VaXe5Gv$3tu=XR5isV9AY)pkh2#thX|Kn-btL5q<|DN# zL)CmJB{E>b?Ej@mc6%}W|F1+Wmgv7ePXHUEa||w%8*%T{IGVrMD*S}a9k|7ExK}90 z{m#dhHQTJ^0>t*peH=MZ(1d@Y_mvRK=+%CRkmvZqn^*sIOy>mIlG>2jkOAIQw}wAMGvV;H{6Xrlp%$ewzorg*A6Q&EH1GJwvgu?F&z=ilH6Z$%-!%QmbU!$AZ<*ak z;r*DdBxO2IfO-KMKZ82-do2CR#m-y7QG2LABEm&AEHm~GwV8Ac zMYT-^(aWzn!_zW|=;jv{{F)VKwQ;&7h)>KOnz?qI_by`wqO>@ZXEC7rE7~G+P#W8P zHQMqT!@K=VMD^qqx=}#szbKTjh#*@M8$>s|UDla*uggrx7M7soQUUsg%eHno(cT!@ z(5JepV3yW}wu0a41a%*s7Uphi(mpeaxi0A6w0qO#xU(1u)Ia4WKO0SOs3rerveqOk z%3pMgzdT1qtJdJ`9$YVpLf*g*PXBeQgiLa)ghmTS$>vQnMt}m6` zHb6Ubr}%lv;m#*`lm1b)6k{0wR>TR)Mtup!u%q|af4KGC5WE8I!vCXg?Cx1m;gdK? zDf{74PCPxRbmo0C%rrVOg}<^&hi3MaNL*?K-&`H#K$nl&elZ0Bh0$BAGZ)(S@oiB5 zm;UzG^cK}}nL5oj%|3{mn_;Oji$N0Y7RU28r9NVwMUQ3$a-7WnN7h-#MYXkmo9-C8 zyOr+l5GfIr?(Xg!7-DDy=|;dHrIjAK5fG$@?vA0~@%)}R=Xw9*1I+Bb)?Rn5eSfdD z0?Ah>aUW^P!#v!{H%p(}SYBH+_Hx1qJtypObjE<%U0MB&z)?7g@v7w2*H`fG^%c|ASuJorR(M? zpzdC$Qpn_Sr!D%gBIplN4Xy_IBZtW}g7h?S=gN1aM`UJZa-n>;m(YxwYG<OZ-uVvvn1xDt~+Y7=hLc%}bG7DC>E@_$;R zKi~dc0K}3H2@s;%6!E<2qU_02iY49?IhvUlgj?lyj?7ZJN0-2t79nf0g|F}PntBR= ze!%fX9uQBv7)UL#FM)5xYjhqu`ar_5#s8%XfYxm9kn*$oYK%C+pfF9hhjIM zgzg^zXbs7_ad;aG;$2xoo#M#R! zVqum321dG>ou^^v(|`ML3)^6O)V=C&M^g|ripinv4|rSFo_?g~>n=^BCHBM>@+{!- z0I(c_Jm1a%V&c=>@j)=a)sr~ovsnTvRsP4{l3OE9n_VQ+g^x4G#IqGiAzch)z~z@Y z=W!YN`nU4t8_0HQnMT2u4=viUZ-_vuy^9jtDMqOeHV4-wD_Ud+YUV_c|C z68$enE^H{om3V9#3OG$YWoSEu9dsf|C{oYn7a-L-`*utB+x+MDfbN=|-lW@`=-A2V zS4B@gjK5A7%bZuxfG5P#3#&^DtF-MA3b1t@h2{ge|EBn9q^ zmW!6iudsn;$FQJ_3JRjGw7I}K=s`~GJtK!#uj)rn47M|n%A&;c#2;nEJv`dmFX3yp zp_t;}mqTAzz;6=nk#1?ZAtUG~P_@q$9iW!~Fj_icjI#Y~nkHLFivTI9o;dnTH8d>!?*`zW8fwzZBq z!8?tY{57I6O-pQILM%D@aD>MlbfAfrhEkge2m32$b&aGga<=`2-yGZFz=R3WG8lT* zi#%|K{o)f+4&dj%mFiv`h&zK9DjumAk;=*BE9Z{g$)$Lj3o`52h6?y z4Qf&Ad6R~}t5CzWoNuo2GfEj{FEXHnf9P)%4DmgW*xn-+g9{r%gwJE8Wi-@t`cs%M zV}%<;zif}LdpgBrDeALYHV9hR{|}W!nzc?fG&`fW`-*S@)3)?3u~w;n8}apM ztnig*URz$Ptuo|*8Z&$D7gPG_6!hwh4^ z_D%UVTYiZJ?5LpTo`4^(XFG%@SpBKAL)9z)aeuPUQH&~o#kj{gayTdfi%uCTsrlC9 zif)TWqCGpN99@uTa6d`zR8my^57`6WHo)%tfMtD@XoLOa)|-gjZ%&dLPntlXsg~4g zfRZ)ENd)yS`BuZfb#AIrZMmT`N&BB{^v@5xdnmoma$1?0St zn;nM(DaG?CX%wpTDVQIM#^13Kiu81dFAv$9C@u;16S9ThHV!1M2`>Qa;FwF4Z_Uup zH(SaoQO*jG*OU2`Bwt?qW2x~I#GFxe3lTI$N>@vTbL@)OniyIrI>IMaMsf>$SW57g z_O1WSK0CIZ+&?}ypMdZ|w0^%TZw+@dV2TTFqPu+f5S-E1s3RpRDb+fYUL_4B|9A)o z?`0K~@-f`SbDeimnO!qTjzTOOp@e~KSCNCMtm`qnV+ZR9{GW?nZFm)w>;GudV);+r z|K|s@5sb{BN_p9563HS2^G&Yu!eTVvX6pS;2?gpqIyxqnBh1Z`@j({SykYnuSe<`Y zaKb-6pN|0Yovy{P1=BegaAxfqnY4P*q~8pt8jx<$J;C~sW#}FTqPwBd8O*RE6%6JnwFFmgok>OT|f&zlrvu1|7Py6Ypq_2;kh)LmOgZmrPCrjAvW=3?Ak-xPXh9T)z z$VEw_6#N8Y0+lHJIvbEij!5UpBkyJ5=hE4rg27Zs$lal#@W}NPy#MTPDCc>wtgET% zT&*Q~{eFn~-ZV1QZP|QFJNH^+2b)Ty3V*7Mjyh2W+B~r!0MLl$#pl90cft=nn){Bd z?20epdjJB~8bmeVTrkC>(iuh#oBmDs`e)km5PHQRZ*Pfc)TD;Z4FUr1)E8V<8l{|~ zuSP$>ZJpApq`Hs|3f@n*rEsTkmU~^%BJig{?mstJ_<(`4ra!0%*Uh)JC66iDRE~{W zhMJh;kRjR1`TA-%Z_h;ynoZ-f}N?Ww|I?ukS5k|4$HS zUs{-dnmJ;xh)rf1V=MPr#PQzXhi|wUqP4EY30l&K3In`)`M5ifsS0j*T7X~R^7cOk z-Jc)`^kJ37U08^N65ItS&?%dXlJeGfe;R z*Oh=dFyF}alIu&ohP~f4R;N1V{bMx3ifdPg3n$%0mXJx$?MMliA1wDLcPsc>-1-jD z-@o1aOC7oi{kS|bOQn_v13Dw{wEx0V8UL3ag4Kgfkn@x zNKyISfA)~$5~A@QW0vQ-S~I(NM)q-Ca0_ui`E0b7 z!V?Ap-qv+@M4cx!mDIRJIXK!aP3aHHec}{_9b}v=bEb|lD?{8pIxIiej9K8!aDY82 z==}sRk&pp-CgDLr3QUA#=PigWTrK-=;m4qch1$brZK+UhB3HV*DTDAZ&G%~wx9I=S zWqBEqT65@I%0Hb@XLT!?7zT`#^n&e`;Hm^e98E3a&44@GkENe6ys#0MA?%=8xv-}x zTsZ7x+fEE6m4hv`67iVAO(N)lU@8J7KBm#V1nV8VTS746&TV6*kVtvL!OAOoEM=3CLG*D0~QYQI)mPRWre#NJeJN5 zvil!83pv|#n2+10gwhId%u_w=>w7jhjok(>-V>2lqe_6EGD+V1<_~dp=LM3F7UVjF zjr8&2yL_5fB>M_McZLZ~_j4`aj;7>{BmG$Di5W%*l6J^iJ)r#?J*cD_A4-&wF4Dn} zyGO@tjrb$WLR!%(M~)NFtt5I>S+hyeYTZ)ZEaEPsxcHkZ;}R#MHDsYZ?o84spyO*( ze_}M_rMXbTyj8!2_d9zdfjaDk;2+~t9!{?eIG2=j7RLhaTC0{ubL>?NY)h{2bZx&E z@XQ{&-W6-Z-x6x+K-P=!9vdoUWC9J!hu|JQ-V~|T_AEbhS;9F%ByPioVtphoIT>e^ zrpwuJR%Lzk`7(}wT#~ZqU}{rQBe4A~9Bd9uWPY`XQq?8`8kYui+n*%Me5VPAodK2~ zgFyF3WJ;$fi{$Kyw)B0uH!=a97}&3llmz5q8&W5BQ*{Z7h+E)mD%M!mWmERYL-W@g zzekDvP5Q7%Z;bkWjCbRug+|f7S!_L_6;umi2mCk`_J0so+3l(DFx{%Hs&{H3zz%UO zf8bQRyMcad`n()+WU8~m9j`GwL#EcGpQqH;Bgb72A7+WqiR3{QO~uN>_F==irRkVG z(|J~_kv;&r$c6y{Nn{cW>M5rnK@q#r#OO&D3y=#ZkA{ zQB_I=qQ(8<>m~6`cWfj=@wrrN@yA&g<6g1nj|)uvBBLg`-t@P%wbTvuy*FA+6!+s! zFT}l5$AF4@F^{WA*^Z-^pb1aFJBa|mG1jo^kPm)L--tcc%w5*w-u4>kcUQ9Mbo+r{ z_?%y`dxj27MQq;?)xxWPSzmw~Un`(^mldNYE0x!Z1~f)B&N-iShlr}3Z4}0Lth*{! zfbA}Vx#oT*4afwf5!DC*p@aG|Un)}&Ewt8|uQ(ELdk%iq;|Bfy z>CMo(A6k=miv*&R+TeYD59P`{=t1v3`q8nZm-*v!YAvLRezht9VbdJq>y|q!n_E6V zo^c#C7j!+Vjn{pBZ9?5`INs|~d#dtjoe*^G1OfH+P?pN?fC4tNo~>5=>Pi@v%XmK}!#T!q<7t`? z372aY1Ict>oqa9;bWKZ*j&Rn=L>CHHlHXbM&}GFqy2iEq z-Ie<4(sMQVRx^5Fz)3lQLLUy!Tqalw=V)Dn5G;kYJhBGz+4l>Zx=v3C+-04z4HGhf*w1n2Vt`ZEQ1j8U*Tl||F?W?;I;C1{tu=Pr3$2d1<$ zSX^amhbSbdh*F-qJn2UY6wyG38cES74j7*J{$^s_=fb|ojgk5=*&Sm%pgrb-`bY=? zC;i@U0a1L~<%~{&5ie}NC7>`h!el6vw0_&XMZ{{9sv1u;Oy&KF0`js&eaeddj&tq-CLYk3lfaH zBRyx(5jU)gg<*+MH5`wqoCuDjPTv`{6uBoIkI&3ecP}~}QBW`Tp($4T z&&N+s&!q{f48vV*o@!_0uq8m)oKYHss0E=relXJ5h)Vo2INAj)X4-*WOl`p-tKNYt zf8uI_F1Ky|eBg0Lh2G&wBr4PBHaPwwe0?l(LdFLz$};FV^-^ok+nM_3iA1pw0p*w;0>BtxhKe3drb85zBwIh){XI^3z5{9PtWL{93quy` zcpWdHK@yktf|m{t@s?N|tw2l$-i*a4h+3R%Pjpt*ECs^v(i!IG{DC9ShdW#=gV;QJ zd%Bk2pc89(Z8Do-d3Q4#MUz5x8V5O+p+mZ65v3*Po9@*qIq&>FU_;S!_O+d=Thh(6 zl?xOa!q;3vb5}wmd0|t(j_uT+WV!ITr(D0UJCVgMj%nH=5PSC9jw$-f{SX`?;h#t+ z23j#ebG;VfyB8hn|Bz%hppX{IqxbtX<(gca=lDAZNXJd{cqzt~U<~YhlDHxu%Jvi> zuy@1IdSyp8?l}Z34q_Q z>+q4YF8M>T6wi`vCFtQec6iYWUJb=}p&u#QqLDRmbv?#g$Txp|kLl3HO5R|d%mbhV z^;3fxmy91wBwWwlN+xbQz>g-F_>97immw#pZ-;awoEm-Fb7rEV-TD>3SMr!)TyAwL zZYa|`wz9*|nRt^p?V|5$6>^d^uFz8%CW-^-Zjy=@BXrda8c2ik8C~@>CGbzy&A&+Q zuRMjdQjLRbudb6+xLtb3iyu(|De7}pblg0O%d9b;>Hchz%R0MV%HKaURsh*oD7uex z$-7LVe^XFI}s+wB*S7@VGfTqax;PpG0Q} z$nq6pyTTUHNj44TJAv4UP7_HFD?bfP5PdIM%?*%i_hv zFl9H(QB%c*LikZ%vTTHfnI_1mRxAFo%imXa79(0vkd6~f!>{k+PS4+s-1wi9U{u49 zr1e6w8Ogx-GW_+x)1@c3cNpho`i;GDI`uaI|LTZ=Z<+QOqmFbD(oqv0lNvvMZum@Z zms%;*JBM2Zo)I5cs^#Ls<@C0z$vOKjgR2X)xz0o^OV~B@DL$dT335(_C& z^0A-Eg@=ShI`m9B_~c8;de^IG*Wq`cZ38<-J%Q&$6XrqKdo`e|Q}MNPboB$!!}f2z zPVbRgn7u^mEYYmspZY))srh#nf(ir{++WF{Y6N-3**uA3ft@SgthT92#Q(OfmihmZdLOc2(Atn2!`PR%A;QmsB3%QQRj|)WeTQr z2CWxAH!8&QIqM~1_DV};O7L#Sa4s;k-lGli8!dwuHsah478q6wdZkHA@}R%g`^EfS zFvbhO+HY6g+s@qmTA-uWI1)s34z2II34B`3eMtI#;^(ASH87gv$(wG`5oWYOI)zO0 zMUaa`0pFg#n*Awchd-~C)b7i;mOrXdiF+@A6iCt6rO0!h&pIz}KI-X7>?DcR$lr3< zu5OqlDjHHD%lCW4RNHNgV(a`HlbaLgw~D$_4x@67#mCL)6vRMyjq{O4^zqsK>#lVH z)(7%j^s?J^0oO-P^;b4*RT1@ICkT>#olfHp$YXec8uF1W^-D{0tN(yh%o zqJNRFapsMll_Q)vJ3)a0M{b&bUEGalCs+(YgCgu4Q&8_jE3g;zOGfiH2_P_?u3Kq6 zt#;Cb#BT9>X?`i_Haqyw{mNOEl32h0OahNExELp2rBl1{k>U%yxgGX~`1@c5rl{tq zwUz63a<{)yEdS#!*1o~;skg1k9m492I)6G34}d7&+nxbHv(dwMJd*2 zn`MJVq)}jB+2k@;!p!Lz8sTlc(L0vKx|ecTZuL+uc1Y26CVA{B1}X>Pii>z9;Eel4 z*75LE?IClFJeFsBGWhP7Oq%LDNSU!q#T6x(zTB=fxZWCZ0eD$rzTQP#`NAd8C~kj| zO(=4<=QWlwKTtH^Fqf!$;rh~h0WXo$_0Bv6s(ww)#=ijt#q2UElA zAF^$`UZo72A<^6N9wN$R-Kq_)C!+NX7|r_m-6FBeq~Cj@Vkx*V1g>+!@VXU*Yi$@h<36u0p;wPky{A zP6jUL%jrHzIA7(8Y)W7Ds*cOimpU$Aa3BBJSyu~*v-Al33ihu1PDT?k=nRvcTWV+~ z+>(KO^9M~@cA$_s<$dV#<^sxtMStR;b!9a4`K5Ple6(C` zs-XAY)A({A!kqVq?cyhnsjp?@cHaYPnTOxUEhg}>*5Yb*YplxCGc$k|i9H5?_#Yde z*|jVtw=RM}*Mz*}A~fX+7amY3hSzBWw~YaF-bdvv%Swv8Q#QId@3rYQgH_!xY( z{Po_k(lz7eSI5&OPc=a59SSi}DI9_B?fDC~FH&+X^E+hDb4HJ_EG(m zS+1+m9rIQjEG$$=CsE{|UrAT-^9ofXk6_3T*O<$XNh1|d;k4~^n~P1Ve<*Hjz`wC( zVi0*(gdFah_a)?tYL}*2%Y-$Nd5MA-1y2k{rHm4vopwGH(vQSG`$ZTIX`&) zVlmg1NN`g!4HH_fMIdqpFB6rg@WTB)Nd!M0Jr}`d9%?p4;aiy8+bDH) zZx=sQP9-OFKkmz2-phSIcKms*&3`TF=2^*p2Ygo+>-Ne69gV1Mhpkc9ZDi<3k+Pw+ zu>i5Yg>@xG5TV<@bxN#pSF)~Oor;M=sj#0o-MU7)<@fIZktGWo)9N&B6&=c^c#h0Y zx<+e%Ad?$l_JaH_&TPRY$sb>^h^9k47B_;Vs&z=VV{=OYp=wtk;Z;Rp+lb@BxYRhs zxR+;}T(N-vAwf91ZhAEG#;(eP%7Vs)>ZL$q6|T&H!X{ZyFVfvBTqBBnl>qGd!NB(> z!3V)sSL_>YNrYD_Q_~ePv0;qK^eBXyBMEAXt?@6qDX81QWJt=}(lVT~$u<>=BTnAO z3$7tjFMA~VTKC_lrn14o1%%nz{7g6@%wdO`;~kQayOIDOew$ukk-;^*BqJcF%&{nG*S*y!8Y8Mm~!7Y6JrV*S#ZLWiv9PZ#II zrym*hsTETf*dXygmZeY_$ij2xqxgt_XG=BVb2WUJxpeHG5Xs}Yj)&Z`=^II8au3K=fB1+vlSjfUB&$?W+}*?3D|ZSVQ(<3 z$}A;Fh2M$Hi9va=TD{0a&fR5}<3`oVmFllu7rbnwUcvuht%qc?APTsqh;WzSZp59P;A1%fLLACgMtvA6!{oq|1qm5mH;)t!nCHM_c(uU zQiajMN0}G4@UjVqk{D6R%$;HNTj2r^(M{^GoKca+a&jWrCkcGNua+qMVT;_SMER07 zxqylmn1zV3Vq(YF;lZ-F`&M*`kzxpy;O?0DmfpXG{Z2(DqD@S&j2UR7kbg@HD^R{? z3&qq8xQ38Y__t*{vP*mfeJrScU4O~}@O|IRfpPMEQDKiGBDm?Toaa58&_ER8z^q(Z z$78zZeMSSX&Y*X!Ks9!xQ4?0`tGHEm6oM6LG~aM7u`+sUQMY|LLyBvfk9=ALXW!y+ zH>ckq=gfRMK2?t9^x&hjc;OpQO%2C}4e#kA}XOeg;uDPm>yyERTtVwR!G#cj$Xy9?=KL(?O zKh98VPP!7*$dX=||$HLX!=(C+MOU^D1X3^>rtiJN`Yf$IGyct_V~qV6zRv zI7{;B3U4!v7R>|F`TlJU-393dOoCD5iM)M>VSj3260Kh4U$FpbH6rLI5vi!|dlNL8 zvAq%S#$D2}r_88PGU+!18W^+sn_f%`;~KuKtgKWBBpAx!Fk(JN_yURn;Y;*YraRiu zy0_lk1}dV?Kk>5jX%QDcQz3XkjT8hdwhV9ij2P zM2AuWD^IlK%3d^Q0Pm?$IG#`j77IGY?UN>7y{7LDoyV#SKz?yAU10>)?VP`p?S7tz zYSWy(j$Ao_;?G=W+DvmJw@0p*>+#~JJ?;6i#OkwZ@{jmE_mRq(a4Gyn+co4E#;*bi zX2lh6=pXUycSvz+z1nd;-zvk#7e znE2z_)@~QUmy9GQ;PYW+PT!=)a-f;(9mB!p zN4>1*w??kL4Z$eaI@0e#rNVIGJ+3Iy2fvcSN>)Q|$Ch}byMoVNG)>tKnbGGPRbFyj zKm)EA-fmnM^vj}OcfY#;ZakW?jTqHX#Cxm)w@dWA*dd=~Xmy6B3o+P{ws8?YLvq-#604WaSTI$qi!rk;pco>UEB)#Cu9Zhnf zZq4hBoPmMaId;MKxcTx{PQ1@QDa^}6B!}LLcmruzr_SgL1kVP@winaufz%{COQTp^UhKV%RE@BniV=5_jFRsrlV zbyGx&C$yiOu5ZVge`=I7{elipq7Nuug+Mjb^ia{n%=Q-Y4M)!C-F?5?GYqZhA+Rr1{cTR{vQHhe(P64`#HApc47^A6u$`gnt=1T-U zRJ%s!{1{g95eb_MPxiJ5YA57(kh^-94k2wD;Mn}o)kI+Wu|D`o0su)0U%V{ll!{X~ zlkF^Br5K9}`Ykzq76RC8PpC%JPF@`^(wMFoQ(jZ25L|`7o3sq26P>nHQcM1A$vliP zEXO`8Z~3F8&o~#;-&tz0j%WHJCRT|3zM}9e8PDyC(S4qcgg~v#+bSvfK54otp zL0#zAFidu>h5Zay)Fjk*nOMx!yuSsncPe}u=?uS^MIYyRf?0rIm zf2QGCh}-PT{k2;vEaY769NSmyj(9q{qnx!6GZA5c<5^S{1?RAQR85Ec#K{?N->k#y=-trr6VJ-+zIfRR zt_dGklz$eP3?evBOCxTLeb6D7BA=0NSo|DW@-VfGIb(z}w-qaIhWyOp(Z)9yR z22XAEL{TczKL|}+i#Dw^zt2WfTrE{eSE_!)?aI$1-zRo#l%9%v04=;6=cr*d zTzgsiRn+zT=&vZa`$PG^#63)Ks&CO@@{DNn^bo;kmcy?_?ht|j;p}ZI=`lJ!l zw|MqK^JL?@gdl`9+B#;94lJgj-`B@#O;`{J<>FhrRw1L~8y}~`YHGagV`ZIqWjDH8 zCyDWcdd#kY0h7k+K7KM_TrQkh>Rpe0l1f99zWZhw%J z$=Mot_sei)_tyJ+{qNg=vgY6O-I}?F-ZA}Qm!qVq`^X+lmX)S6LmN8RxaM?;BLXK zhK7ce#>R9^6onCURTpK-cl%w9ze!}oN`$n#97dv}qAZxQ6$jsm!3!Sv%z+S0f0(&f zQxo0nt&2v{2)$kO=8c5yx{9R=`O|9QX}vEY`0F3pkSyO{=P%0Ep(9H?&eXN#Az9SJTkI?yVq`3Y5`91{K;?X!~Izb-OD1|0q1wjBeGdzr+vkEenn;7$%_7Svw3QxzeRV~tA@z=4 zDBBaeLg&XLyaxZP95gZ>iRLXj(R7k*fCCpIc~fGeQ5y7m+5i06O`8dU$bl|5j2unl zTYk(cx+(7WGR}9bEL1E4Yi#D8-2*904MKxPYJpms zn!vnLOUp6Ml*}msHO2(^fo9+q)XO%tDZ;<5_t#Ya$pOibkkXI!A2V`t)B?{zf_Xz5 z2r*)9nBQm}ety<%>n!~D2Jili`p+u+Gk9!#U@c#NPfn0q zd(UF}H87bC0v?R_Pnpgv{|FZ(k2IF7XX;||FFcg;1cOTuzZ4tiB)3>*>RHexUV&;z z&j(IoK=L|vL9u+MwUrxo5rwA$3ePkQ2mzw8sz`1)UNiqU$^W_>qSES5xlVwU*Q_`~ zmgD%Kj_QbjfPmR16urai*GiG(u(eL7r9BD1xG*8hF$&YM+rFo>;+DY=9qytYNn+ef zrJ65j@PY2Eq?BQLP}uFdTd$BPmYycjtwkAHj&Y03wgrN(T1#`(V?{(GdT zvYndK_4i3{^)y8b_V@+ra6&bJ;bLWc=pRa*&UDY_pj`~?AT}1tM6Vy-EFc{=#hAk& zKYmFJH4nRy=v8GKB&Liv>%+NLONdwnsAhuW=F#q@G2x_do?CJUI_|72FH2{v87Tj4 za^a&zQbM5BS0A?5%!@Ho|0vh3gUjdZG-Cfr{+#q#9t4_<1KfX&NfR4YyXCniFAo-5 z-6?ema&wzV8poR4NVCd_k%+^o{ms1LmG#0`0E~5FYOknok&p4M;8Wvg>VJ-}hso^5 z#LzH@K(kn~z-+U$bkeA|_H1=Si%51_j3G^UtHRdKZGtRnOHz6dX(7X9QNeTpZu;OVxCUnq&oju zJ%6TFv>#)_A^bk6>zTv$Jj$@@pmB?Zl+YI6b+~BpzG9z-#c2NHBccqBd=FWIaLc8b zm2VaN5FWypBU4jT681ggq}Vzbw&|#w%ui@=F$%}WW}|$ ze8Py+e0f<(Z@9j~t>nKpQ$tQrBbh|RJNQJ-Ntf#w$i?Q}`T(qx_jEztFXC={nZ4ExuJVHrAsoum=FVHeL+S}j7}2-cydZw&5ukfdw2jS z&&`}zSR~fmC4|ap5+2Ua&r9p-bZ!xd6&N?hKJyv8_{Xv`llwF7)};F+Nw@Y?nM(C4 zdP+CluWSr#=C+i^ENDeSY~zQ=$ElyjMTqgpL^Y?0rWX{mzrl9RXy#AXsa4HTkfr?R zIN7blH-t0Qa({lxN4pR#Z=!v>HAOcxFf_!^7!VM!#q@IcuNd*iGyOH^M)VkZ%PO>@ zrkeI(F|lX5pUPFS*Kv|i<;uTh`D{fXBd2tAh4kFv`+6Nvs4~9+Gj2JhrjTGpQrRC* z%`Q-FGAh(aMDx6e2IZ*lRJbqVg`4QTA>Tg<61SEs!AZ;}KiJ0bEdH}e`JXGoT_P@0 z`nJ97TXQyh9`{{*Dd~S|rAz#pnaRTXM69VeFg#55UC!uzj%EE;dZvmwdUs?rBmMD`vGHUr z*gbPhu_D;N8|KxGf{0_ANtgm*m`n5Z_Ced>=fgG8->J)G!bL;M!sPl+;cpdQ_``k6 zj8?|dG7&u99(=duY$=#zW2gPkW#$=%;5;;VN6v|#>)4RKV{2_Y+yet`Y*;}KvSZyu z!a8iMw+B#+SbV(dZxjd$K&%Qr*267d_bP*Y3tm{bWQrVkTtQIpM3sr8VH)v2UrBRu zE!hn_mkSunYYLE|Q5`qhYf5n1Sq-_{R2gT_BzkNyzryDDn~DAP(t@*tX{C-<|IbZW za*>S=6rTA795HUzwwuwjQ`Er1eu~XcE)&FbU#}{P9>DDDhjv@w$C_loZ=k1}7QK!q zIAS6bf>w@CtM{ITMp*2CIhyFeh*g{v!%bhOU*;n!WUA^q=mnV=3k!?KY9}zW#6J+a zT*u4xw{-wt6*cSxHTQ|w*eTa3Pb@>xVwIA1rujLkmK72M+V-1W-u^pCK?o6u9*Z$B zHnZZ|PeNPD2`e)*LO4rLNA2wUaF(VP&~>#)oW3j$8Z%U$r8F z9n)Od!p2nc)8WP3f5H{K>}ti(Ygc*9z~COt_dpz}pSBtt^0K0|z)Q@+tmff>6WPH9 zxhmiZaJ`boh(;(3xd42Ohl{To7-%R+jZ0;b__?4@icv+3L+`;8)5&*WqpptTTKIe> zTc_$FzSee}Rv6N3C5V1o@^35qSK>u4>l=lWew^~8&vk1g@dDMg^H@OhrAMd6ZuR1j zm4S;(K1vYc?!gYP!MU60e7p5<`f|%J-!C4RBG%?gsq3j+sXFHNy=+mKVIOjS^oTmx zqPI+{sqq=H5DpY~Gfp+$5PD)!P`DeZ9?ds6E`OEDQr=DayWz!l7Au6Yj%)QzcVi$uNQTYj0PZWxXl|Hzibp$62|( zM5t_YQsM^WqkI7)?i`!K`-H%hZp8XBke6uIi@hl;45KB*Nd;A&xq4cKc5hgC4d~l$UvF4Hmn61z)Xo;!K*J|ET(V%N^d0!Taz(Yas+s)9Ui{_)vz(Jdu7k z+Mx7~bt$m?BeVIMZCQ%F=ySFZ8yhuB>I}CvTSvz_8REqFyZ7&xJ@yUnds>^Cd;t!R z-yeY?_7Ouej0_wIeA_6m(2&T(^88i#4u^wl%5}E ziBk}yg$!dhQ@~4?(g^1oCyZAluSiJJC>YK!$zNNu(7D)|EU|Ir*)ZC$|DPP-JSl9` zGkqoHIOTejO>a0h$j_pPG0T%48PQgnZJ$Y`RE4wx#&OxdZyn@;wXk8*G^UsXqAHUq zcpP~r-2Ea{@CJ8oHC{+W=%!Zwwcv-Z>~fB@eOQGD%qomxnU~r5=|~HC>P-FN0yz_P z2~06Q7gjQ!%;6^m&JWpI|HudEPcihQZEu!#c6M4T89A><1_qF1E`gcbz4e{R$*DI=r0EaRQ$tv)xhBC zNn+~}5S^A6mzJD7(-%@Xh&8Iq|FcN3uT_Pcy+=+~lsf!1g$YWRHWVp0i1hNtp!VlZ zxSy4|Eop2f`k%7;WWx$p`q+i|x%z9II*65-u5sgly=zk$@bZ+x0;zFlljH;1;#7)j zptgG7)VH)9){QwM5beih@tXMGt=Eyt?xkGQzOXY$+>(SXwSj zvWW$3)O1vrqsL)wQuqq^cy-6Kuqf3?^v5uZWR&woA8lDB%C!33w|0fS%^Fz_dE{mL zU-#ZcZ{}~rII34MQe13N!otROc~eF*P%p&8!4UzzsF|LjNj(K8$HynM9fqe*L`EJ& z>akn6IJvw>2I?|un?9Xd_TO`jvK3S8X1zwJ6vMs5M3W&Q?wperV8UfeBQDpVp8;b8 z2L~&U%(h<%U5>rSkbN8VcYn5xi1?MOTqM2YVWC5at47jQdbGADHxAv}Y|N52Hzhge zb?TUuE<)++mLFdQ416y>h4K@pOhUml=bz8jt;yhpXFzmx^pCQ#?z{Pgh0>!rzU0eK zY3Uhi#6+?bpTx9ORXAuYH=G-xamh5TY)cIr%RDC#gZveNz9+0|6VG_c4&0T&#M z%M*BhX-kL=_3}DMfSzKCdB6&B;1Sq<_q9S_+ZLy_H4AxO%w$=PvRsbzO6TN%$5!_WVg?6}ba=(Y26bJO~114pJcLu?y%Je?C~(skdxlQXCO@a?^Yz;%j; zKAnQ9J-o+13T6K6g|4oMx<2bN=(88q`%DHtR@#aIqOI{Tscsty(64(E2S^gN^xCnV zYl6-8#tRcUM8S22DR;t))>g^E!7<+UF%Ae4e@^Q)VL!I6wl)L4G^}v0)DV71!8N1W z`Txw2AquDKLX&F&9KCL0OHzGq58lj1UHvFn%gwmlE{#cln#wApMCAu1>rUc{H zN?q#?g2k!}32&neAZ;P>mecUCI)ljb{njw+nwXgXzx+Io6mfXrk6qPS1y?1o_Iov# zkv~uTSZIos@KcmAq)g5~H(Dvuqfp(Y59=x#j|Ky2tFQ2j>Ra~~DU}A1?v`$bR8m?(y1QdQI;2IKp&KcY?(XjHhM57Rn<3vh z=f3wGfA=rgdw3shrB(>A z{!7&SFOPA;gag+opXjt>7)r?lYhdv(7#uu1KTjA(dx*1`!oa{Vq>6pv=W)AI1R+wGvh!n3Pe9M8p6CO$FisaG9-f!*!qM=|uhJSN#<)%se!?tZgAM^Rbu%fo`o zldbL?I*v}|1OQsx!QLLn3%{p}Yyz+ERHtrl>x~9~8~qbj0jP`^jN==8x6lkZxLC5& zK_41oc}=NcN{Wi0z*bTwrYtuISvT#>&v@08>bIZN)Fdu910K6x-^!8_r!5};(BiNM zK-hUWi^_gmZN|9@`cXS)btz-QYK#dKZUWf5r@(-NV|5+`9gmmBvQA0es#dkUE({huG!yO z#Ub+2KrULYff@DsB&NQ$cKG%d{B(Yf+fs?$bQBm80tXn4XMmXvv4_iBb;)(#T{0HF zS=taS^WtBPy|=NnpJro|yJ9?zyKsj_N98=iR+jhHq`@=UPqn97baTuRD zQU+hBn(F(->q~!G0wMHyET|9ITKk`C79#QOV3I>!LxcDr3^s2zrZxPre?K^%Qf%N1 z<(0U@%w9`IdE3F3tkcQy+Q(+u48jQE?fJHx{EV*|Xi-g^mT^;4^8o?51owBS;I*|A zNtCd=C}Uq~3yaYLDiU>-_P3kg6Iy7~=-I;Gz^@MLx4g@K+Rq+#elZ@wVVEowZj(Oz zZ)Nu1sv%t1QkD7E8u<_@9OV;byH;CUON;bwgvr*{CfLVy>^Htsa>`+D+Q+ z&2-cF{4CJ!muB#zV_)kE%7)$66l>y`G<{v9W8(1F6s zkd99_{jk>o(d!XLv z<7j4HX81`~1adC_-b7^VvoCMxW8>j^xz@b%^~rt1O9(eQwBWZzYF<;QH*s{lfV>;8 zG{+0^Bz8mNWd|97qJzPuLKRyBeSKEL`{f02-GTvkpSrDI{hqbx-%I%p1z}`haAI&~ zaA9x-7w7N}kj|&?kP%?F+(>>6-VgOwMIgmglx6j>w2@0YT&ZF3+U$Jl?Cmuhm{tFA zMI4_p)kP%eQvMw*g+#~9s-(h z>w}XfsyIAqJ&uhVY9N|jPu!w5pxtO))dLJ*qG%IBaJHkZGW^T`_&5J4r57Lmch9ln1SApAZjkWVactYzzNcemhQ}>| z6HJU@Bg`dq1oZO*(WLPW8-62VTzpIt5;RyXR}zXo4&6<(P*Urh_Nn^zrzZxldsN8S zf?>?%v5VA+!7LGPSL(f{ zrj6Qnf3K(o<%em7z*hGYgPxJW31SiwOK|GMYjf^|#6)AR-BeX1avqbexvHD5-I|Q}>}V{opcvp)J9)Z}~+Q zpT3sukjHJFy)-wat+A0}{p6*^=eTaSjcaW?F4(w<-DCKCWmqB`@lpIATuH$Fm4~9% z-~i#^1a3iWLGhb~VeJ|(ULG)xwuUZ~l+?IfwrIYJu7Rq~dpgP^jDZ92+|i1;nGdc7 zkMHyLPwd{OjFhU%b{EA_>v3`5(}k>bOl*1zR07oLH)=`0?=(N}r=R1OIKAN0L~%mtm4?*p{IZF8|qn@P_WR zPi3U2mF0V_4Z9r>bGX%#kO-oJgl~F*Bf%gNKD|(>AYegZwZeS4zA4Wh?cr<^yS@%v zvSX7fG5o@#9;|f=fLm+VhU?GAlRpPB9Y2`G$Gyf!wLDNWY@+}NwK^9?s9~WE6k-M^ z{`U9Rr;ELnr8;fzI?V?xhR$bt{>(AcG1DOHTu>+R<_k~dH|6C?OixdP>sK5=&CP<` z%qjd4|3^USrTLI01yopR=XoqY@CICdj6ulWaDPAqjUeCUSXqau+!_4h)geIqSjjP>mqiBcA zCgOz z`3bBXsdvsHbibv!R61{(`Uw>zC_8F*7~V=_mMun6`-R1*?mqU?62tCQnaK;27^h?_mb62zDjq zp26R*E02H>4;(3KhmAR=g#-__{5d$lTlNJ?o)5r(6@zY$)F!V3`q<|;d2~fiXh9uMT&bAFSit>^he*Ol3x*4b$_igA8cBBgmTv() zzmQO?-;S3*f`++`qkU4`RvaN>-!Muzgh^ zZ&wlAmTK4Y_5UDa3#3-zKV7I42@`(THKC4E{lakpg@d#Zh!&RRQZ*zV{YTqTS_uc` z=|DnRSALG3?^=}f*?sSX|2tS8yC2Tp;U8=A$h)Uk<+{>SSrAO$y>)rG zbuJDi=~MRE#yej$jUgIJ%3!D@#xM8_&38)0d`nIMX~r4GS;jfi2`=(F&R29OGB86F&wBxu$8>vI&U=tLXO z;CQmkG$C?Ti;fvH1>ET{KHq;;JsH2#np#yEwX177&WHV?KF`_Ajz^4__3C%=S=H(9 zI@^aYiFK6gpy~N(JG(L2Q4k13M}fzEb1Y<}w>nEER8LtCwIgKbI7;{t5fKIT8B61> z_Ivc2%fKVW_%FGG=SyC~Uv`%|ngTW`Q<*ZMx)U!L=YV5>HP1B2+OW#fLqh``OH41Q zuI_dMNGvy{VC&I1G@aXws@Wx@o;>?`?CLtA>gWh&1q=1Di(}Tc?wWTO9U1oHOQ!O~O2=>n`M(2ZRo4i&q;uABOCPc3!FQ+J;7dPgo z@Qx1;pJ<6^BcpmBT5U#NkD5?JAAC4Cg@w7YQWHG~KKmQy|88FHD0M5y@BFeI-j7nh zQ1uDbE+hmQc)6$|D=W*db7ioYH?z6nSMJ2c08Q4p*xE8KE-sF{KW>?bJuA~~_<3y2 zo!&c}ullzh+~|Z;nV;cu)&6uxisw1*9Tg zt{?S@<4hB^%-wCqBQ^GlLbT&Bb3lF$od_WHGnl@!O4bxOIpM%!Sa%5^t)u!;M+nH z$6$;f%D2+5jwG@*gcrs3s8=jLu1r_`>l&n#hrlH{Jx%}eNLgyhrGi8)HaX zUS7HlF}@?;rj~qA??&sZ4S6%0F#~OFYSM0hJaR;12m$6XMZxR>N!0$8mi-U5BM^F- zlmK!UIUl3}uGlxcepRt0tEi}mHt%bz+3vi9!qnTH;Ag1i@Z4F(Sz|%Lb7MRzv+CNX z!NOB3he@`|eB*nQb-HCbfcRC0yOvj2C?r*I4xI7Wk)bsBD~}|2!Caf zQec(ov<#=zN^<_PMu3G%ulY1n60sTTprq#p#b<(S^|oA%zkI%{29H&L4&Yylr<13} zA~!j1yD`{5IZ2Kp;Wv>?vj43f*#3F2MDM>eL}25UR+a>-r>$+t!`Q|{)We+NV`3FG zCF+jkM97r+=|O@;Vg@*`CKep*Xoj+cAo`ilQtR0tklO@L~TPJ6y+6O%!V85@3h+->M9yt znMSoy@)@Mtdn{zXu))XgmAU5=BX3dJEhd`6aXdUy}SVzl52Akh5 zF4ble>p>QY<1{kSgi+1OloL34Gw*gVmGn-h}LdG^adwGu=Nq8g}TleGRf(t?W{` zuFYV_J{_4`SYzyyDyViDC;_s!R`T#P+{KUro^GrbI!tMv^WuU4o{BXe3?_fFDXfqrT^|R5-!dCzB;ey=TGt1w?Bc09-z{YF@8$~Z+7Ys zHg!rSF%)ec5~Ew8xO%poffEuknW@ zdhl_hh5vG1=maT-pXaEw^w%BIaueh0ralKwJeT^Z#V5E-^Yo_oMk04oed>14$^&Av zn4YXjVtF>E7*#bz;z%032%i?2-%=z7{TWvO2@McfV>I0)Vn4QD5VExuMv(+({42HL zM?av!s+8{P)%po5m#zWgtb}@?c(x2H}U!$GDvzn@|F$LvOArp)BieUr_}+u6aZxJ3+5zPh@mWk7xzmuRbTH#}lXi;L0I z;mOSwS<{I9+C!>O)!H$rc;q%Al~BiUqtb{uXgrj^Zr4uc%a_E%<+>3Tx!!P`f`S57 zJv}>VAC>`sglm&eZdPxL_{o# zjbF6#TFEqFupbr&%8U`%6SbK)(eLcF`)TDy-O_0Yt?S*08 zS2h<_>`RU?O#WP`WR+_Hvg^RVuBMFB`=YCB3(wlR*xkLpPO@f8&>8j{za3Wrg^Y|S zH0DBy@Kz`S>r72XQL(PJo(Jt=L?TF^8UtfDDdR#q_d3H3N(=s%$-L?^Au>HT7xG0O zZLEKa!qH3g1-jfM2KwKhwo8b>PC!KwpgMa?yZa|I`|;2clIgzAX~AswjsUxQxG%(k zUKUVyrK$gw?p+cKXsb)K>AuGuo_j1L;)%Ub>|!+$t-Z-OOpS}9Vi$SNSiNaG2~n=C zMa85jzDHTUWnUchB&Z`ot7^sm4p@<$<63EMX=o4=5~1kb*c6`aB8FPC~$sQnk2cO0mg$id= z{_C~e3=A@jXD*R+5V`5LWc`@`{UUgBxBb&)`)|U92iYiHA&I(Vs_V$APbBU{Co0=ynvmTebEZ_4etUhWq=+u^YjK8S6Jzw$XsF z&z;gA*Abl}JP;EqM+(j)Gku=3yt`K#I&kd-5n>=Bz70VM?m0)`<_NcHOW}F~VorY0 zNAu700}S-p7$Myh0luEcpPxVc^3tyB@UgC=+RY?8I;9i+fhJT2s6e19Qk>meq;+VN zr%;i5!}A4=P<_bW~qqK7*2 z)hbKeJ<>B}55O^LI;#0;xR{B-(NyduLbhJrk)U?F9lR>=4@qov@ISyUAY`3oA%^8; zK}U&|8x!42kjM_FTZU-=0NazxON_?`Jq;b52XQG+=Pvt(cCm;32_O2;YHg~^LOPJT zWJ8|b{Gy1r^jL6Ma_I#mr3>#Q@=J;o$(v8w2Tfx{ z|2V>_duTrt>tnCKQH@?4HG7IvF0RW(Gik6bt=EhQ6ITw<&dQQ{|NjMhzRn{M_K+Y$~QOZy-6i;GYuZ_ ztCCw`&~yuGhTS?(2{?PA+8LGawuN|KWQ>^FDvt}EwC-RMWv9fCM$*FSRvfwYz9XUl z1r)#u-!>RD9a`R@y($A`wJX8Su*iQ1KLmw6l##7DK^AYFzk9q&hkSqQ`7s17H3iQK z?V&$7&1f}r3EI7-vcTsok2k9M~;H>m5|;fntU11}hc zgiQ=NJUtgp%8Qgm@a(gZbB$@DD?43GwcC%wdeqixOh&rz*kuP9OXnXUE_E9YFL-#{ zr>qL+jZo=psMuW9QO%n7MdmTx=2+3dUmMyBN$JM@+U|KhenP9l5sb_uvX#Nx%#%-$ z_;`OaVTI(0kmx&`<)Vvjw#pYP9CnmzyU$$Fs_M0AT+#efYu$ZhEEG}2+NN$_wvuhp z>xxf1;EPC$w-7ik%pV)J)q@59afhl*F)rKB?d@jO*}NLQ*FT@#qruy!SW?D@hKkDF zNI^m0N1Ji6r{WDX^)GA#$j1o_4bO6dTe}$q8)@FLzp^{6&WDP!lOsp%_Qmg_$%N3I z-KEVVPSU1VL-=+x2<1QocZBxV*5Mt6@tK*d3kKe0oW9!icBxgyMf`;E-i6LPoQ|&7 ziRphKYk}uiu|-aK*Xgurm^6)NDYm&zKns2SOio2lNTQ~Kk55U{vH^w1Iy7Ji9STiEr;5pF2^z zpJAYEbQZ&U>AS5RpMisw0*GV{(#P>!Tz;LixA0@ug@5)f4LkEEnO0vIdv1jgpnqDQ zc+Zeq|B3ojDPS?jB11BBfb`=)SDZsm! zUdaiH=S|f9!q&Euu(WeA39+Vc*maS#U;-8->C zl0o#Uc=PTmd1P>}vbApKE5Hr>oi@OZ>$GcYtSkLCimV0P*<}jniL7B*WWo0CzM~N8 z3w_3b;3Zru(OUYWQM1A??658g`fTU?~GxYEN%y^DACzy;JXKg8-&p}ai$L}Vn%U?X)0 z-;FWVH_=@@C}9c8atN(eu?YnDNphw$oSwH`_dOjCeRv3I6{KS8mjJWJ=Tx#4WaZ(h zu!tYH{upd=Jc$ju-~5Q0{mEkr@RK$b z5(PY+r1Crt(WGM+!zyGYOM%~3&xKJ{$NwX|@rC~_M`cHS#bJdAy>r9vXiwNm^!d?X z*7cF_{9mm8gbV@KZrM|};N3Hd%g%;niE$B1rcaRf6B%@!+>jA`uRa)SS;>x`&S&3E z%w3m)wn$g^r2u%L$p7IW+v3ilqgy$^MZFVmEs+ue&~5_0ia-_d*znyVFz_JHZ$-6W zAEOBR6;`Ex3T5u?4ULdBb+|Vhf+cltKV+-3v6g9dSSar8WIvdl-laPr3@OD)pk5Cj zH@Fe~93ttn>4is#0R2qLui4~=mNMMXtjj~5tDA%qD}>*P&aceZA0%X53}+ycg; zK(4fR6*@IaeD>?_nTm(1Z3jrsCm(OZ4E%SZD3dVLtQ;KfS>N6v^NqmRh+nb834Vkr zySk@?1C$-^+VRb6XatL1hsU6<``=f|BowLlr=~~pZH_LVbt;SlFa$&HN`CG61g#A)|U0X>iPE)T+`#p0BhjWeQ zn~UmPx(!t}WEIEC>@zb(+$C1i z7g-kaZX@VFKl*c`5Qkg@Ud6;Hiwg4yG`_}R#v)rJz))6_l21yyZIrW;)n>9wmoC7{ z=ji|_ZVrG{aFLZP|v$s@C( zsDxSXbHYi*uitS$hHYFBzkaQkw|f7!B~_eq4_3)*Sk;O`q19b$9$$S9tofzP;1jB} ziBg?ysqU@R$on5f>qlonX8b8?^EpVW=Tg&thv zrQt;2SRKD{yk+?897R$Xg$L#NPMAN~*2ey7fvn7*g;1f11Z1!ha3Uo??0KR$+MDsX zgRal5Mu4geKT*gp^K(i_aCzlr)Yq?6i-NFZ6UgZBIq}e#E;XWW8&}}cjNd9F?HcJm za**upr7GK(MEL>?hga}eK-KcB+|bw%r)aP2u%{_!2d=Al`Cr}z8y(VMz+lK=`ls5a zJt_jR;D9$gTc*Gf#TD@HGTl+|LP`>;x%gztj2J*slWoI`&Titd+IIKg{L%aPwaCTg z%w_Ag5DfXVY<`wB7jTZCT~o{P97P)XP8`l<|0WC<9G3LW4+5u1RI zk-q>BV4wLt)8!ZS**CIYw8U{)$84*5TGw-ALn_`%&+8+}b0*=7>I&HQAVvj4xXl}J z;krwTlnG^hpw0X1_1^|WkOg>%w`Y~aIj+4QVk+js}1k-gw<{HGXU)?``R>rZz(HQsR!$GUw-2_nD!6 z+QYg(8?uRm3f0Hm-I&m+sk4)tYm8Zw@k?`fyzcaCeO-u4GWd3c`F#N{ly#{Ikn&dU z2=;v{_=0}hl4$)~0bO5c4l1H(jrbP_gMiXN6cPNV?v<65u`vrr^|>6~y}vCw0>qbY zsth;LsEOZG!(_6-o}RFNJM+2o_f1zx>1F^u>S;tYSwIuc$Y;~6_zYT-ibZPOigkMJ zC2cJ+i|mKZfO{G-uUlio$MB>Nz7jjOl?)vi9&Le9!5IO<$3L->aXH};Ww+g(I4AJb zaaOyE-U-R_iY_RcT$u2ObWi(3_e(=_K<#cKK6Kl~gi$l|O>@L$Y!3V^DKdT7{Ji?` zEg=Es9v6t%YCAqP)%ca5qXvr2RALSZIB#PQ$}E^JwTu7c*Xy7G_-WAE%}F+;JSUsGyFg)-6?+|LsZKu0%s21XFDqRGr9wTIE8g6j4L|SG-?sHb z@vGuQy$s2wVOT-=6tP>m#x)#qWEiR`5|dJQcXv^busG9!DjTb8GqXbZ7yQ;(wR0{gBWYOBB>B(_uvpnG7~X$f5Em*Nq1S zG`aDrs_D}qYf*mBI%Emp<>HBvN=IH&%^rfjsfE+k_}!|74}bZID}8lxV%(*E^@A zNV&P$3(M{6jStQj5vW^Y;VY_}+xS%`PIopT=gMW5{s(7k>!}TVF#FJZw!s+qNsxQ$ zhP9`z&a|%wbRxX+cX!^WuPtJDX6J@(dj$r+svf#vpt&RrP4JKc>O1?k{j8?ab%kgF z0DMnG4o4#Vv}RHOa1m@wgknp)lb0f z3v=RK0z5oC)s$?SgN2HK`@J`dF-2+YPcu-~=n<>o*GLcW468WYDgHP-{NC)nFw?&h zTLf9Yd=H~)%CIzDoyRp_MBvYYD}OogkB)#I;olH4{Cm31uOWolY>b@Q;nAAj?bN&g zSV@7ryq}N|_m`vv7PJlEN?H4XW9v`{a85^7RxWP5+-=n^te~nL6GSc@wf{yIz`L>9 z*lLF>9Z9<^A|f*RGdni45YOo~&x?zc?`La7{bth!`E&fUBiOa4d``1NQNUj+mY<`V zrDSgYqL1~jVtu${HBVDoyMbu^YTO2DYRt&U$WC8VsNu5jWGq@Kay7C=JLOIyV%%CRWsajED*;@v_nyHg&ra*apI>4Io~x-&!a@mpA#aFt{%_ulxv%uh< zmxG4~Qm~$Z<=QKQV@R)FcZb}la{Fy>Fn{=C0#M(z+1W5eptI_sj2*-G#z0Fq-H5R!BBdnm#aUqQlRHCf8ppaU0jRSau2{ zSr-=*Rw;Fl78nW&2^Hk#p5-TbnxB9C{L>Ftk~sH&4Kls+S6b5w)Z-j0$sS(G%&bfy z5qo-#>RZUH@1}jfMaL8^}L^qCfj=PhVm)HIJ(ea;qu6PQ|bnL-8Hf>#CP$!ERZ7#8e z4CPbJFatdO`Q)g8sUMe^^*)`?;mwBAgy=`hOcV6H_ApIJ`+}tyxaXYhe@dx?&-^`5J z^kCDfOzej5r79VeL#kuBTB|cEZfW<_CR4)TVw3zZbIBH5`P|8+!;Qy_x~invAXEJqva#(3bNw`=_~*1vzQ2`pD>*Pr9}>vlK$~WvmQl zxOt!NKHk{0YM0T?3qvg_)2c78u4LVnD{AZOdXjuUOG^*X5rIVkbh4Y?WYzuVMourx z+LU#SJIDdZ2n?_WtTNvZO$`I3Gv1>YA((a(P311R_xb|cz5JPx08TzERj}%fC}{lk84mUp+TW&Ber`{W zoS{vA*svJ@_?K7ylKh>_n*8JU`=O!X#PDM0Vj(w4xArsXU<+pNo5R3r_`-tlzFwF2jz!-94C62A}RNCJnn#2luj`+CRMgTLPEk~uB@uc8Fb<* zRxf&=v(jo8LpSN>IMbNTI-XuW0M`~<`_FFrLN=I>{--_cz6-d$`E`>quo$%CUz&(K(Ec`Hhebi1P z6LUMHc840;vL$+FI6cGN@p@*>uK~-Ze*2|!VJ7YcHx&hf%!byVjBi2V>(W z2A68?hC*6YGp555KEo=y)~nylj|cOPr(ZNQ<#pr=r+&KEH^`$MmM8BR1~ma)!zGi;~6|Aq&3Ikg@1Q z<)zMY09fveqxI0pKjCN2U=k2#LazUnv4YmzU&KBFEkNC>q6U3S3B+@Ypd9itHtTaE z=8p?0(pCi00C4KV3-p(8X%1C6uD14V>=jGw3F*+#P||7!si~Xz#oI8oQ63d%6x4iv zOh*o47j#Un%6Lx|+0+D0^}xvFkJ8a+mEFh$Sce-VzTN}lgX5V(4^fH?KBiVZlaqr~ zR)Z9Q(8u+vs;YMcD!9Pqc|jd1epUA(=?~$s;wpgt8|Mf`?6&>F^uWsW=GV&?V&lWZ zjU*Oq?Q|ZD@US?}QmeWA+jRfF-*fHV-PEsd11b0OrkAE1?5dV^bT{#Q2eGZi^w6FA zSniN`V+L6y*M#CBJra0?&4#2~C_fdqmDC7r#wCn}eLSo(>70F`0hq*^(UqRNh_9kr zxCuA+GO%c+2S};XxpEiRVWlChq+fQ7F~W>H-qAd1pbVRub+)olZ1u;zB$rV`#mphu zEZ!&SG8Z=Fy8LQ`OSq2$HKjEqe31L#?VZs(eBL=2gx)Waq88toswd!{X9wWkgJ1Bh zjWMlckPe+UJy#>%!HE=@?Qz-O4Nmquqw7cIl!LPi8VCEI$^r!y-E~R95IsiH zsp#2MpuI>vW;%nPf3vHL{%59(&4Eqpk@Ws%GG}-Cq5a;`RwZYe9-e8aJEXc}{1Ghm zBUJ%~W`3V^ob_q_j#ad<_tJYrW9Q9xS?-fJ4VipV-t*7|=MxN<ULO1F>4^xWvV*(!)Q*7+8M{Au+5vian<0RtDN?g_Jv@Owv8SYERkPuI0 z_pe{IZ-BL2Ib~5HG26Tu$S8&_Xv;>!RjH{;u5~aM&eeBTPfwRI|wEI4v ziEf?7JaSLFAc+0Rh~#!CqGp&?m=YjS<4^aD;HaM3kmHzNoD?DbKBPKs@m}%QOtIFu z_T)hpB-9E-K1`FLnby##-hq*I&f~m(w`vSN4)$kGn!MD0bv)CH)M~~sH)Z35vHD)x z#RnhGX5{_*Om^bywP6$A8j6;yCdgQ7`jj<+eA;}|QE&K+o@N$k=`x(lB)~r-Q%n#_ z%t7+_S!sM)H9^XQ$fA- z!S#9ciu+2@(u_2y>&+C@?+5Q9Z7K!yMwTPTmNjgi; z&U|YowjpWfVB3oueO4K`<-e^**-ksp9+Vrb5n^)yCh%?aJ>lE7bzF9{< z1+~I#g7hwXJ#?PlJlq+S2Fw+4RHuw4E>C}1 z(H9|KChe?e{d%H|iEAO&m3T!re9gSHu)^yVn+fftBj*I$=<3KL&V|?Bg-h4m(f%9O zKfB%NB+#-kq6G27`U=cL6I{%duLGkQ($a`4|G>Hiv*0JS*4NsE79*SNO?T8b+3?yP zeIJ#(qaRuZAE^0A)Fm9^Qg+r|R>o8U-_gA6jT=o-ZindwX-`P?^q4lh14DcmMYthB zrzhdE6UE)yQ*h*iSoUg^SkRy zJW-|;8e7qCZW0Ner-wZQE-3fdKt~EKGajy#g|x=cc=qIf6R zTCL$a2sJ~qs!u7>^PDZ$N|DRu$Fd}|zb?9hHfjR_aj3MS1fr@nz-p&ax0W;P;d*Yd z6=iQ&`?{ZtLcV3|t4wON+YxCTU;fIt!%I6VHs+co(XpgQb!TUj3_Iyqg!!fwJG^b~ z>~i0t-;;QbCuGX%hm-0MH=AZ1zFXx*km7Z^Hg;dIdLH3KJ00GUD!OJF=-cNw3<4t&snv-{vdo!pJLe^ zgr@TnH-uFvjsVtfCA` zv`0?$)uU48dsn4>#CfCint3+Lc>_;L)RC#5WAq&Xfuplb?Tw#B`TqI1h>eZAkiZ)G zF8O)=Xo5uWn6jgdG$5q<;rC(d1ewt-3+VHTJN-;yOs2=vBlTJRvQwej&KST1!H3LJ zI8*#IgV+HVNMbpnGwq-gaqcsq^!(U2^X+2Mn_$1R2PJ(0+pSr!w}W;udq%SGn-H+frs(o(Tavn)6ibaaG4oAa;v@<+K#c8bFw;)O;Q&YT&s~e05SDW{z zk%JyVx&+L0RGJt~XoEg(Gn!7Ksf+G5YtYyMZ>6a3OMd%Er5t6vCXoE-UoAh2S|y;;aOvuvifZwST-&I{+$U^W zJs69b!l*<$`|NY|mt%<$)Y;bdNv`yPq?laWt!CN2jxE zq4um)$hO+9pQw9N;ZfSu1$rGyE>*9bQ-9j@CvzF+X(j0QxH3MN$_5oR2*<3)4@`QqLy(Yd<*N7nv5tY_IIk?&h!T za$HB|nmDd;U;I?iyK`kN5=$$KQd*mt5TO%j1Z4;;i}ri27)>;ZJ@T4FF9mfW%FZ;D zOGsKw9QCGgIs4uWb2eEVfcJx`?fIH&@T-0{S$=EKeK6`-C-q_@cD`ySP_|(}&UjDg zdF$MDHf)SDEJ${Iw!iK&qomvhFCxs-PCyei)8>dg<{d2s76!wQa;+*Z^%gs#QT^YK zdLPl2T`3s!XpuMBaIkO`Rrkt5kbJR09{}MA0~w>Tc!V{jY#Y=bc(-S$30NG8(zn~G zekuCf+tv*i+W=U|=8(zreDC#oEz!VX)BV8UefLfkhA`$wZo`-Eigf05HMlO&g6nU+ ztyS$)v99-lwZQG02wyU-%+e$L)x%M1{BkZ<=zSFDP% zC&NZ9dKP!aZ#KvKMJ{ox3qd-|r)8d&n?kN=s`ewkioS7Zjd|vSaQbn&VvVQ0kRqG1 z|IUoPetqlMM4M(P{~Gy9b@XWJO(p*r^8gsx>N-s|Y0NhItf!X9+2P(kV~ty^r+A!b zVsn$%cT|9W$#%enAtg=uPXjZGHYrin>f23}mC&U>X73_C`iSbTgFjB3^$skP7>0V5 z`hfhC?uaNT?1(Cap;f!|V$Bu@^^l#FKVyzFb_U07SG`5Lt!=PYbEcIfPHzIV+W2_o z?%t%juji{n)@m7##mk4Ykc4V3I|GI>`Rh_}BVV&UpQ;C|hqn{IZ_jAwV*fyX)5663 zZtY@HjCU646n#Wu59pSUd%SRTb@D->{_(9?Q5aZ5iwT^Io3rbJ(rOR z3X`LJg-lC;rpe%4Ir?|f`D-57#CJ|ScDIOceWx@8a;-`$V&)epVrI!ih`-$k7&5%N zyM5acKf=-2+k%ML(?Lv@>0`0h{H5Y#qk{skO~DA!a*NO5_c1i;TN?qC^%HW&JA`f0 zbQT+z?#ItVv+Cgf(bC!#RnZ$fzmOwTQCB?o0Yj6IeyF-N_{BtjI59WQM@It6_A z@Z#z>ILUv`f0AOl#egc`Kto(SF}4vw$7+V&T6~AT3bYt~RFn`!Cp=6fhG`75^- z72$^nL`oAlOEmPg31&X!#z)(Y-^(u_1r3nN7i@r+fs)1nObMc$CZMRgA4OI z$+#~VO-BsGx0-8=3fMr(;UHJJEyi+so{?fU_Kx#-lwAXq>U!mL(iE4m>xl~AT&_C0 zpeWyJ#0b9H)C%o*{0==kS*xqwvb^`f?@JUUu&NPcD(sy5G=hJmY*QK%CT3ja>Z?T3 zAhli}XXhg~afl&_fUL%)uyR2+VvgpUTLAAmjx=)C^ruP`XLXgp=lK_61K*t)@D zX^<&|S+5LSfBkE=b=_GTJ;m_1y~d8}$Y9Xx{?=CuXS%^C_?qEET*eHQN$7mgDg%b0 zz|R+Rv*N$@=Slvc-}tVH{uv~n{LT5>wALpbYda3Z0ZQ91qx&_ZUgGRsw$mq7Zx*bt z-SJ4#wKBd9h8QK|Bm=k@(q#gBd%5>d~^#jQc>nPFR8{y1xOve*R$1C zkX(A-pWHM&I;0*Q{}hHe~$(r&Z634P9k438e20&&|bblm^YN z`=kB+kA})g{T=!uHRto^=hMngZ0&+X|F50v{$>O4_N7W&yY`5*Mq9ONwDu~kS*xhp z#0pWH*i>t8wZ$ez&5{%$2+~@uQ9`WRp|y&L`R#e+FToxnj%UPCc@FITXvo2rYWvI8 zMML;Rg6P(8aXm%;mgF13;}|O6Z8qLjL*b`@lIarG<_eL;Q^KSJy~#2BLa(iLjP$t+ zB*Y+08!Ga`>yOz9R$6uVDWTM;HzsBpoooIkB_z_X1^$BX7=> z;CEB?koVMTP4E9ajK7UoxgDpZ&wlSN&;n7bQ$n8f_3WvP!ELlV#dYPLR;)|5+cGT$ z>PkS(y64?dp-Vqg=cI*V%`@bH%<8Foc?90_EOu&;Q@!{W$hB-uHGRmOVfjFHQ8+tZ zJR>9xOqxQL?h9)--}~i4KZy~e))YY-<5+VKUU2>-^pFwUu=E)bv6(zds%`PCC*FBG zDk8Rzd1uDU_{tC}9YSITLw{xH@Ve~*rcXjG;Uqvt3^cu~txa}?IzJ~*;%w{q58>sf zQ~!$uG1j-1=!Lo7V7Gi|dsl+$Nl)UCu%5@Cot+DJXXmq&6rSC1s1xa*fO`HkdPiDU znptc4hII#|`}>xpO0m*PI1$y)4N(IvN2sE zCu^qs2ypEht*(~3s&ynyOQtjD7PYFR99rkZ#aLp1lZa@u1~suoqQ8mMHGrT^u(sS#Vlv^E=*Rtw&d#_{BXiCiwL8ny9&ahK0e%uitK+E&eB`aHh_aoV*9 z)Alsxvf+64KRwHz@EWzw_YU|C&a>q3J?e_vhri=yHvDY0e{#{*t(ASbbDd)LEy3{` zT^{9%{fcXi96V{@ZowTiB}E7HkZ$aYD9A1j#5)I{p>n4bD5QY9 z`p&=|g;|nNCH&kG3_cGKZauHSTYJ;pKH1oh9RtKV9=+i;plfv|@VXZtboD}+vrF96C&B7_Ex4bPeBan9Ee2`qqE5-`Qv7D}L8GiVCR?bxE zjao9v$@%-})btd+X&T62aZktEEIw|+o>Ph3!rXkk8_>p+`|@#vRn*Cc578d!0f1Zb z89B(&h>A>?g@XRNWi%lyilj6&PkiqzH$ zx}y4{)uUG$ahjWBtjp}p@5KpNNUmtF%HUy_G&05*|2br@H>i)n2nM-35y*>eGRM^2 zZP1DF`&wIV*D-Okqg5T7U{o|+BK0w$owRO_mn8^)*O{s#G1}O)SGN70ORt{}tw}@D z`23^lH27(yG!uXAH^nF+TW?G)fBn5HKP{KvnspKF|6nD(l|Hz(Gr;Jr#pXm1f01OC zRA6Zv`t{Xe2Xb)%y4y)qSb9n`9O#oOxEoJJw|I(>=R_YF zNJNm4&q<&Eb^oIlbri4==zPA@v0FI5uz*&`OU*;G9lD5mGJlRnzE{hD8%kXuI3l_s9VU-n2qt|FmWm(X zTRI~mUr2j|RSQ)3D*mWsr+#)4dE{>ktY6|`D;NhGMfHz{S)TfRzC{!8HLEP{mqAoZ zakPlX%U0S!Uj?kTpbxVagLz)-1i6 z@^i9CE->$HTAQJBT{@`vy5y-LRdYqT2M6QWmg`kogB*2hI>sgL={OstzckHJhr=`E zL5hjM@4(a*XtSccAM700IogA>BYgt4kC-+q=IN_D5r%YGHwA7wSW@@B5huAA#Dz!K?_f9e}zYpbOo5_iFue z<-)Dw?97HYR-cV^N~yzpP2-N>{BDM*x|DrJ9zx0q&GlLFNc z@*37TjIu%3MGC#H7q$-GTbexCnP)-iT}XsgUNPv8ccqMx-Xub8B9>$ipEZ;cQSX66 zZZcM{4Xk?u<5S|FFv;X}b8K`j@dANH2F?QsO3Y7o)+q&fR{ZWAP({dTvD;C(Cs*0( zG28^UUMy#$IXm~)xwiV+lkZH;P%o$0m~{AUA8!(O(aPp%_Uq6CR94$6q~Ouv?U=5+ zdm7zUs#h4%*tLfd%9*r-f5km8hPrX%Y!n37JUv{6K0WFouw6Lo1vxsE2*dFB|O+K9fEQg8%$7Kq=~ChA><=Sjj@##v3xQiTHg4sl3z$y7=(&E zehNCRdy{?{rY>w?R4y1ZO97tZ{`!9n(xL4{Nm^hu` z^bJ!45qBcORwDzkDPLx!?e+vNc4QoMxt#-Tx^2AJLnHpE^>xJpBP(1XW-40>>HQ#Z z^al!G$VZ&7IvLZEk9Qy6wRH!v*-waIn}}~9l~4x7?hk`s?9>=ZREB3p=Q79kK(9}+ z>{Z6cZL7c1Ho9qis=)c78oyVX!vjNNyyR3$%Urn1k`#N}310zXkS33E1%daE>@!9_}b54~i7e6M>St;p1Fkbg4;=kg*45?k@Ji>XV*z-Iu znuyQX>Btxy@$%v)yutmJ4JN14wit}8U(uML6za%~}wX#mBQ!MvpyH#F7asJ^SvS|Jm~7T~nt z{YSfysGE~#*=wiYqln}EAyL*7#=NOF`N`u{{<(AbP0#KTyCy0)A)ZA{%g$tNB?JB_QI39(PV>j6pQyTupig{nbvbX_4;SF@BRa-IIWBT literal 0 HcmV?d00001 diff --git a/blog/images/20260919-buy-badge.jpg b/blog/images/20260919-buy-badge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da7625aee9597b8e54cd5a5ee9f323aa64fc2761 GIT binary patch literal 91553 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

LI3r- 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 B6ORA@ literal 0 HcmV?d00001 diff --git a/blog/images/20260919-phone-supporter-light.png b/blog/images/20260919-phone-supporter-light.png new file mode 100644 index 0000000000000000000000000000000000000000..07362c870d6d3ef97dbc81554050c48498ee801f GIT binary patch literal 324524 zcmZsCb980R@^)<7ww+9PV%syZGs(oZZQGjIb~3ST+cv)W-I@2j_m6L_ea=~HuR42I zcRyWKPgQlOf}A)!3=Rws5D>higoqLl5Gc{_&jl33?>kpy=8@bvJ8}kBz-O5Rd2&%ZOoOM9flMlOYKB_uyX6R&O^i5dm zSauuO0|r3IfJtIdutXJ;BtluDjbRVKs{5rUr5B|aoz4)_0hy_nP0hC(r>jk~9hcj$kC-1KP{2@r zM1QVLSSlS5FhQjMTnava??U4k=HMqzW1Itilv zfz0)IciES_4mZ^MZEMY5*Y_ipvG)eWzoBju#B3e-)j68zs1tsorLBp^5h=8gsw}Ha4}r| z6S+LweaHRI{0q$a1=!2#q;`GwHFkF4<=Cavs}9op=bnd+?n@)X8P_MxBOlkt{72c8 zM#|&C{>B;6v)k_YRNFNL5@IK!n!0n}Mu)q;>!;4sx%?+WeJlO5yLPY}X#i6KBC!A= zGbnSa5N}$y4U^Bu1k}dW0p!+LD!a>eAm-K>?BUkN;wGfL=c%pBPP%-zw(~l;?(4wf zwrbNReDudL=2l{r2f4>ZxNZQW$A|rTn-;B9D@0vX>(B9G?JDWT}EnjMRtIl5Pq%S4|mRt!w)kvrS3@71jPuwA# z{F+beSq)wl3%(;e?^Bx|cuw@c06fk^pP-k!fg*n(_8T;XM`uADurd~qlb;av*8cvl z+|>>DWD(92f(@>4dZv&#=TLruWraY`bULbk_X;@FPB?;UCy|U(e&;EqZ&`hLNcia& zhsQ2hu|8@C%p`r5^*E5d@--QvYcUAR+^Yfa#tCq0!c$ z5ooMN{n>B7v2Lg0z9^XA0CfF?sK0sbp0lA9V9h7FhYAZQqbKrhFQ5s}WyL-Le+Als z!D~AK4xvZ~g!s5{2OR9s>b;(+U;F*lE*YIG=y6r#3L1)n&`+?fiO_9y5Qu^lX%<=J z0r}Sf^6?>n;gp^*@$@pj>d;LoW(DEz=GL;(gV-yCL0*6)u%-`hc08J!r;GwLG@;Gd z0GlmIE`(5a7xOUVTHhY`#`A8t2L1YGx_A0Qw=n=4^6wxH`tq=_cHIMsnie10Pcc@O z9JSFnqBvH^Arv-<0@MIkdub?J0U=mmB0|-`>2Q#VD@JSORqswqs~;4HSA({A0@$L{ zSXFd?RRRH%M7~A|^vl`+N z6~`R{_?{3Wl;8L`5=8_m7i1xw`A!&_BpwZ{`wB{cNU$h-`i~_9*^3ju??oF_5RDyi zp{qxDo5RhuKca7V*eNrYN%DzjI^IqxEwV%KQy>!JOhGLal3=k-F16lQXCO&L@->pH zI_d|)Z_$(2SaxU9(8QM;;L$x-llvq%&Ul{FL;C!=#yGJl`VTy{+D%=xyouL$r+g^& zxXyv@y0$8bzrsT1G})17;Fm$St`aTf*xk(yxAkqD@R+@y@L;1-7R#v6UW1tt-9t#G z4ev{bq7Y)_{R-YFKqKhoFYF{<$Wizl1&i2623Bb+sCAdGYxIzIf1XQ!nrPzZ)4=mE zs=YPUr9l_{?|_XFj>&aTAc@h^m4NAh*Khl#GQ5yqc124VwTNlXq^C~s0}fxA>G0lL zPH9Jjz3b;!9}%Qz-2<^Wxr~*xzyM{EPX6|}ZoFoCVU;Qe!mh4hf>1K4NMG@V=IjJR zlJG%53Tae^F~CcJ;$cW3Xo>(SN62DURUC-A%I0V8gL1n^!Gkp}x_E=prR>Q6Y{DT? ze@QYZ!zapu6f=Tgm}hCAMi{}@g71AmJ&=%5_ilOAgH9m zNf`_J0}0_E{otl*5-nsxwk&^)0Q`kuB^Tb4OrDWv+3edC)Kh<&x)QF)M|d<8j}_RuI3IgyaFQ zH2rnGzs-vf6rrlR6XQB^{fTw7AE>}mb~T>|8&q?QfsaUQhwx7b63~wV@4f^z>U9)( zADMZ35!g_epOVBgL1G;c4d3BG<}(@QgWWV|UWk>pa~sjYe9;KkLQu1YaOjmvRtiP} zN>&(pC9C0jDw`O}88$bf7B95T3EVebZl^aXmm&VUIHNcNMm~tec^ej+f@!Z_VZz4N zct6-xOoYSXwE?QWB2ZU*raMOXDqj*qKUHh}e}NPkz^R1A^>76c!R6{$#Hdvei%P=x z0)7M^Tf$7o*M#r}EFp}>8T=}R&a2Ma8p#u^DjCp^Bh_Q6s`Pc%;P^-1F zNQy|(1%k##A3MP8ejv=@%9<^%DwNR(<|n|;p2h+~VRKo?i!l2yYrIC9yq1aL=h=OD;1>XFo-uoq`^~~u+|_|I_YWPQYsN5aPj(Z@3w?#_Yn2p=*{L% z0IAia9*&jd)T4ePHcWLQj=m)k(2`Qk4t1?G@XCXvc{)gJm(~tdElCTAo!pk|H$BY{ zF z<-<`g`X_wV`3rW+#a)Q)zC^!J2E>Dji&fhE6_{wuoFMf4Xzl`uWOUHC990^Txkn{Y zD%U;(glRokv3O#(uRo4P#HoZl;k1@yAel>rY2aE&Rii|IDzZLs%|?Xq2gTSrF_k!Y zJJ~*VaH^(>e;RsI5k%x2F-{Bo7bV)H@gN1RH0VTvh4W_)xZc)E>#v-#*@4AW))AfY5uhJo z@gm}ABPI_yo=g#a;dXuM+ zf*~qqwzR%FtZ~BB2XGA|(~K+7T))tA%#8RR5syoA&qs;jwCPM}p5et+$$P(bu<|my zoKe-a(jfK+(=nrxJ|Qyz&HlXg%5|F3Hg6!VvVsqS!_eFYCZu+UmL}I#P$d$B43^57 zAA5BqZrPzcxk+LqQNBMadt5Ypb=n~B-IS?mTEvSG`MmG^c(9SBYaX5WvNlw zmmh_q&of8F*|7UUeodtz_ONTEAPod;X481rHI9q_2U#=PbDLiwVAR zFEtQFS2)7nEoS>B?nA?IX8Tv$qYOQ8v#kjKLjZ@!NdR9t-2@sjAF>SeZ@qdnH85Td zS+T4xgV7O<4an@J7^7A*DaA$>=xHZwH(~dqDhZf_GkXwZ#6ZspXDpn3z;abIYB=as z3e_K6nuk4%G?CIWlIa&&(9P`P(Of*OH8wwY%U%&XO^lywKCSCIK0ZDklDihPT4BC- zsQ28E_-Bq66Il{~FS!6GsYP|av{23%TC){!nQy|BNuzO0yklEdW&$f|2CAh4Uux4w zCkr|2gZW3A0lh9g>I*&|J zl670yAAHY3CWR(De|q9KYgq5Khl%lU-oj@_@Hu40>lzTdZ(2Cvdmc%dxXWEaS~A}T zr1YeM)6{*kqY@TxN@R%_N8;aG{n@N_7=eNPy)|V^`Fv@@HKI%Vj|&?jCj<2A+_38; zN7o(iNL_~U71Z9jVRHr>6MN}=F-nD+Z4(??D;Fz5km?Uep=V%;6^cwHmaIc_jg6b^ zrusy>59@J(yJm|sFakMul7;aP!dWb9N`@k(Qj?Z|qi<{zSD0#fj` zj<}6ejsp&-tO`g^x|A%S!z6x0Rs-v38Y12pFmxk^HJlk4@1KB3%utcoAa`0A-rvC*gwkIJ;TK0*fv{U zD*-I3Pz=yuJikkpR9S7$YMB^hE!lvFQYt`EYhTE<)lRk;6v`YGY~oVdw`HWtMA#9M zWfZ64a^?#)ApJb?jKB&W*28ro*(aO{lX7|e%<{{l@l+$b8B@7|!m4B0QT z7ND`FWI@2QTt?Sby3+hXYP*{%Z;HL$)X#hl%WzPS(_Mrx9`Nno3j)ZoGi0eV!>Vh9qB% zqH3Cn%jKwOhf|PWtylvttITDNhnU^ zka0H99>>s-g~8r^2!pNeF{P3;h9Pxaz);*TJ@hUUaD#{~lr5V(k0o5Z?*AR@`=aBz zb>2d8KNdQ~*H$nS0Xabon-(uXe4*Vu(}6#qAYgOjYv(gf34XKTm-g-0@$vIXV3lcX z{6CY_!V4zBc8n=sw8D!9tZN5)=Yg$~nlm*jS~H!oT1yi*YJ}AFNs5dkYAD2)ggGHV zK4NWxX)XW-%+jO_9^%da-MdskBvJReheKwN^yuUxhU5RZnKAp!Z30OccL!0wK;B-O zk+i{p1)z*`E-hH@>;kXD)b)9i;9$3ye`NQAbFa;}OY)x`NDm;=8e#kyYV*tmg@H0V zm)U>R2%RA;S)dKIrA@4~aI2`MW*pel#z8MN;q7Hn)1S_-b6$rAqwSA?1( zF%cvW!Qu*iyVSBC_` z!$a$ud4lp;C}ZhC?6BGh2bPn3Nw?7W@><};R6N}-ECEymy$(|Wg=&bUi7@?a)D0{z z!>ELzSlb60cR{`o-&3q>o#zQjz(-J2)HatiHCv5yo%b{S#|56YesdxLAofqJf6&Yh z43g+%48 z<}3bjQv`O?HXBWS=ty-kkg%f%Wa4LR6}1Eju*7@}Rn!}nt1m8Q)~MSdaI38o($T57 z%(*x-%X+vJ@yrhCKg@<9*;i-5EsDr!p-LuVj>e!S`^595&tx$SZLch0R zeupG5nqK6e*!|djq7C}9y|hq30y5u?P|B-12ZFZXu?ZQQN&L}7#87%yi8{&^`MzbR z4Qq7XI(H_NQaPh+6WL9i=p3V8i+^BHeEour=I#;dD1MN0!QD*jD!6_q?I9;YQ>3Da z0b2AbY;YuQXvW@pqX?R(8piyCZO5NW6H#4Slky%QJDW$-hcapy(grAVo@=F)iyR!S z`o`t(wt0THOsRo(-$nl(xQzOTB%l#7a`x}Zpj4>2v6v8)kjr8>a@Z?%i`35@0|U!j zl6}&e1JtXiTlNL25=Ic8!aZ>=K5jOME1{Hj0&utEA5n)1DbZL6ewE9m#nyZff5)c@ z3|X7dWAia%^OMYnhdpNq5QGvb#r~FL{43ZS9`NW-#&E0j#*|i>kF!Qer;)oog4;Gq z%X!zz*lAMZdH3!=&iHPMab7(F-rj(D2V9aFG!G7OxR3?p%kVpG`G50D1?V&t+IvO> zUB9Qe#|LLTLafz+;z5VaVZvxCr(SalNq|PZWG|ep2=gKVM>a@0j6_r(CUfbjXM+6* zA3bB9AYdLdwL_IdF zstKH`#k~u9E=D_^IB&}140^F5Sif8yEKI1|5w^jOxXfW(_{@`o;F@+p2p;MzZMYzu zL~2B%3^+jlaYQgNm*^@H*@u!ubRfAe03uYJerin`u$x1CTj}@)JKy*A>z29))lN?( zs{IjDZU(Yi28+_{rb!lmQO9=!SGp1Q%*Q4og2 zNHTMc8(CN`gaY4!8R2Wyw{zhtZTz?8*W&jj)FwELpHfv^_M`ZkE%Mmor+O(Oj zJxvaz)i-{RtKDzA3zT5qrJH8JmOuC*1>b@2xScTXnzDVX=|u-#iqHf>OYSOtE6(MC z4<$7-wlwSl|ELVI_euuvTeo%qlbDXAi=^8YqyNVUax);9F9oa{SW#w^SN4H^u zjx1c_#;Ad3Cr*KY7uBhji+Cq(@j!8- zas*NVZR2x9)>Z)#SD$_pmZWtdy#eC%3RHJKf53f!#xEhFDC~W|3uuei zjh6P)t#!WZ@!+J>V1BlZ=Mlo)D(Zh%tdL9*G^6}jucmw`dnEyJO&Z*n%UeLGQ|7x) zRS=_xUusd1aR=eXk*=K=GwUVSEjFebF{b+Gs4otu_6 zU2w{V_fJNR+)Q2Qgz`mUD1$jXRf`)*)zWxjeU~lk`-h4(0xQDjD;GFKQN=rY1ys*} z^DB&`Ah?#re%;tTv<}u{P<3z|H`vi0_Dz^WhYRV4VHaUObXSLg`*kcBm@9}Zr|gBR zXrWLby@xR5-s!_#$4=Dq!cNN$AhTv5v9p9i!p~Z0z}bc-aR?-=CyM0xRPl>`wjp1B z0N3lNUh24tmSJzs{v`A=;&plJTO#~3AAY~Bfe3LkhDgxdGfH{EqHhrhs2xAv21G!* zD^lHq{f1@m>g{%=fV{*Q3e8ut1g_L%_MtYCQl=Ts#dsl^Nw3r=MNeiyq>=U7JJYlj zzO?(=durJQ=@(%NrZ7@7Nx>O&=Nz1%6;rZvZ{)9aK!!?h3ibpd1;zPt@r96iQZ3D2 zn?-uJ;3Esutx)C-9~t7~FW1*hx?p2fI6qo+WAeHG)w2+}KEBE_CFnWsyDO8xCNs~b zfM9p4TXJ~fZ6Z%7?A^gtf9UmgN<+o1vG`hTr6#%d1;=PD_i>7jkb{7@n`{Up_u9EV z2IXYgq6BkKg7shyV!SQkN+gHFSH2vj5He4uk=ed5vdg8AX;Kj^SPULTS|}=}33EJE z=ir9-%dg9Ahou`c%3T6Sc<5@2}`#dSqQO| zIIi6Sg4+HuQ6!0CW7`U;1ZI5|{frHbpXWRs)t~IvOIF(Nj2LC|yevy60`6N!^wk~D z<$N?SHU#s3O~-F9=7eO3Y8eFYeAtnA87UPBaV?yCU>O;lVgG(W_m*NO;-F*h6VU0)0gj6AIhl%d2Eb4 z3w&A9zu{bS$k_pEh&v~~?ehair~1cWzg~4PaU55Aksqk($gWdS~0HknCYUKe( zSx+W^oF)hbBZ)&1sq<}DIi^ukb2F0Q-X-hRqj)H#fe#py>h5q6DVC*d4!&%z>Ls8- z2b^Rwnl($uotTAln2neWWzp$^LR%t^f*7f4$l?`Xe_dplztYK*jHvy7HNo_PR(&X1 zp&0D;NVBxUO{weqPt(P3pg@p_O)h`?cqwXw{}$N!$=|iTnq*>3@~dMsTeMxKKeQ=u zwm%D#Ahn#i6LSEO^b1zok96{(#_Y@OY8)vj0cHIrxwUNBO^KB@{q<38TVfB$yW7z4 z+epNTa5P$ehq^BGuUXi{l3}|EOmVIH#hbxqTz+D8(3w_z=4`T zPJGWSIJYCJ`nOZp+V`ZKjPhMxgHESckd2F7Z;n01K>H*JxC{T9b}|u$61dwFV%RrL zhL9kYDkE(;uj=zOpt#l#=1`?S7M z55cfOxdXX%yQ=UMX6#WI7+}@`#P|$z{g1Wz$$-;3tZJwMe|jttVY8;zDf4$XgxGt(C46c`WLl*-gQ}2fjX7|5E11(kIfk=UZ^|D8-Y#r=h~kQO1~UR6 zQ!B4Pa1)-wA5WMdFqilz{~BLRK=o_nMYOFZkySB+CUUG1zf5)rXJFU_+@7}Yj#PBJ z!?53lWog1@u;Q6ujp6su3vVb{2y&LuGbsJa(Z(DRygf>@7K&gib5)&`W>0!!($L$; zYYyo?X)(Cu^Wth*p>71As6wI$O68Dz$B;qPBQ_p|3e|=aBsyACSiI|4BfgLp3cAdK zU$WyEyITBy41m{@8$d~wAFer{1 z(*HzAIY89GYzU)E%#Ch2+kB>=GNk;?SD;7ztA3MaYR}=$o{XdYDez(puXOrm?nMdTzw+fXk`y+Z0OLs8}T z#?pNfqqEoT$HI}*Q-{?K!GRSQ1nfIMV#+fj+(#>pq~jD zWdYhYeAL=NeObN~jPL{$FUBZ6rnzI1#7CJ>G9Tt{&G+fQcW*9xnr-4s=MQ?hPjTPm z_Ow*-HoEOm>g}E_KA+5BWqH5Q{?lfp;4>C%?ZuBwQdZ@NDPQq)MIj8%=6F8=VjT+; zC4vX2Z1PLn(j6PJds41qIkexV&8gp`o|f1bqHq`8N|3)sxkPz1?dmUIvfqKBlb6AY zMx>P*VZk&Oq7jfCW#_M-gsmollLAktKZg;Ci=D{_*>iGGOl%J#T_Uow_yjZ!-yq`$hjm{!Qi<>3_c;rQj*c4(CCvABFP_u*N(N-)$ zTxq@aD?V8?qot~-Jq7^B;L+=n>w%7!xc zK|OfV7PPHKtF>%nz@Is2yAN?L$@xj?v>8V;j;3(pt~*726)7xDj5$a8d$bgjvW>_` zGB>n$dv_X8Hg2srM6=6~ExZoM84vV|reFfRvwW+w=oT17J3!I-m@Q~F(~e!B-d##F z=TyZC2q0R?q|bxwx5JU=QHAQtDm+Cs;`E6FhJ_RD#QS|cmM^LspM=lnSEFKII$zD( zUp^|%hYx`f!Z(!Q{==cU}}n^ z%?kC`kLxs+vM&as>q+kGqATIO=b^_nCd~0d)~3>7vCIy*@Meu^HeYG225}zK zm(7y>8nJOYnu#Kz%}V4Arxq2v>T`M?hGn&{sH>T{1jp81AL;WG)TDql`4vH;H*@zW z;~h}ZKRJLQV*trKKTa)`N%PHaI<8Q91noNB{hsDq^t&R(_f&ol924CH0sS=T%YPGFaSrlr!KaUMkZ< z(KxH}6jy1N5Vq5wWjrl8dEeD=g)PMYoG`r2YkY?*+z3%i1Dt5wsOLE0=-oKJg$Mix zS1>WjZ9ul303$st7*tpc(4#dMx_jTv{Bo7yaqg$r8c&ou>rhOc_#}4Vgf9iK zto$xI5$TM}wb(hDsi>UF!cy&$Z^NoPesD0_lZl#sMKVz1qYniWmt@%6W%dNS%p$YE zG8VE&j_O2kptl>gv)OrLFosYd_vm-(10t2Se6-kx5sG58(jXWcYwP!6%9#_(ZJ6K0 z`J12DR*G}ooq2KK?i$@;U-d0+H3bhswvyqrySv2xI+PYH8xH_lEbdclkOv7SlE2}Q z>H2W|;TnLTw&?p6E3j3zNG)Mf=K>5&6BbPaE8F0nY$Z$KS69u1(7*yRxS19$gUXVc zK~8yzL_X_4$(^BzunuBlV-5165Z7&HT7RX7m$#R(412w*HWU&iLzz8yjL2f9h)F=* zbbwVG>AWeFO7yuZYMmMPx{S5p2kMkah{6u~p7{?_u6Ra$bd*q9$!44OI=4el{oOtH z*Z37-o^QG@EY(n@4IFfYZplkrk67glqSamxk|C7u*r-4t=jV3YIhVx$;Sp2-orMB^ zqWU5+JoLO~kC;qndS}n^_pQZqSYIJ|G0m%TkO#WaUg^HGJKfmGk4*MJ+S{3{^c_?1 zW7cBLeXYq`p*)B7$}Rg>S(DJLyc&{hTCS0YZCEk)_WlqNQ``Y&9qoJMbii74AyP<= zvbA8os${LGlT$EtCI;*;?| zZ99Zmga`7>6a!7AkfC<9g)$!fPt+ll*nsXRNwIz@mxuy8r1O=`TOc7#W;0#G{j7OpPh5!nbTj4pV9Snjjyt6zD!)u-mI-^;iP;@{u3X`~g&F&eXS1zeh%twlt#Al-o{4%=NBB=wu1-C)CH-98U-#veAZmgTOa zQ@G)$v!Ey-2~LnAAach(XfKr|DFB zev_CQo2_9+;APW%dvsZ2 zHW+av%c~C-UH_D(y75mM9E6W3MwVDfmsEi4ffXY`g?I2q#mvRG;dq>g1_gfRCetG) z6E1|^&@_|6nG?{o>L?vvi^9Y+w#Wb*2Uti=W2YsJeUmTP^&Z9TkJo{8SJwsKe&L!c z97)tn42ApDlKgp9U8sHG1sbdUYzfDbN~~^1<9@U1jQi5VcBc&7slc2{5;w6*-uh@T z1||dHc_csZJJ|le(mx*@ag?Fw`Py~+iSlj+Cvwp;-+7N>2kA<_c1vfqu%O{RB~L?J zWqxFS_L``*myxIad0BV9YqmVzWcYtfpb?(eiXaR!!_QXm}FvZLKnJS{N zR+q-`hjk(eHh#D5ddQmi%I4VW9J%4>V+6NCG^|cw^r|@`TjT?AYBs5c1;aq=Tv;IM zAH@00cPrW@i|GL2%!MfuVQRMAlO{hh_&C=_@4Bpc^=Bj<3{<7 zI+nMYzSGR{U?+~QD}%x-{$sH_lxzJ(Ek6@?7{Nn=rDYFONWwteMR3o=wJ4&^NzxUhOg5kC3avA|h*19#D|@$-dK|M4l5g~&|z!L2l0 zH$m?-`W$fJ?eKKHqLg7%LlfC%yK(gQppRv84M3P*QMHvhL=fhjQLTqn1Zi%0wzd(Go}J{>XP37@Gzeck_XSAK^aJi`YF|E=BXT zWLaI!Or#vUl8rl*1 zrl;6YtAjaBbb8!wYMl>1&yIdv{z)`L{T?4EJ3Ot1r#8y?{u;c z2OhEJCO&5wx@)0hGO9&g$uncUT8)Lv4vEZh$)xQeH)^8wN&$u?O!!W{nn@$sP2>2Q z5vgVmW+E6qh6{@y10`@(zUywKA#WcewR|yLBk8W{&lM)0VHu~qvbVbWZuB7Q`m82! zc|8a!#fE0T+cUp6Bf>nlt2X2MRsckK8a;9Jzjdw;n7}U;S!8ubr zv6O^+CI-IoyLu5yY?cILkcvNd%L^% zU-+s|QD+HzeScTwMUf+dg^wECr^*-aJF%l@Er#MH&4$tRo-wA!hGJ4uCnt2i^xIAm z6}*?K9gfiAgo|HBadzHGu)PcnYP8p3>}=xv^>ji$M(b0OJ#fP!-MqmFO`_{Bo+-7S zdQnr=-!LW~{EVo5g$!L692mM^0+!ltV_4B-(tDMY9pmuvp&jGfPP-8%?#h+OoqTug zCcOnSS*RIHAW4t>gr)>6yeov$5xuwnnhfzgOCNhJ|Os;6}`zym?nz@X*@`55WRq`-uK zt$k^d-I7~Q>}0(xOYOF-qPvg^8NGBUmwhAm&sG!(E{7~qGS7&jP^`#UxFH#h&CK&sdRwedD?!Bi# zbG!E^Ek;pv7vjLAS43S;wnECyNbfmQ&w%}Z7D>TJ%Y%%MsHy?k3kL^9C=}N&j13Dz z2i29EI$S0$8(h-gX;D#|@v$)(G2y+M>sXsA3~Y6d4#rp%Zsd*G5@KLup7HiLgw<5sIC^jf}D6Y7Sv$+q9F~KqnaIbbA2B&`Pr*hIXFsDu*y-kmNs=N77w83epT|PEib#mW zX(B-d2xk))ogOaSjJ~>WgW{e}@N>!!5bYdae!v4b znF>5t8Y~=$1u(^<*X;97h|rmypmU{0)lxhd;H56gSanbEQVUDWh-Atx&>%kDdf_@@ z_NK!nf}K_}>wmCcENOEt$%DZUYbz^#&(Ltncs6!=vr6?DhK(&(k=rXENL>cHO!P?% zVetMU`7XTV0HVknWX2m{WiJ>Ot7bROW#9ON#gMJ$#fJ7S;!E3b+Rsj8V?H5w0C$z; z-3lcl9e$VN;sGIF`^Vb~W#d9;ZR#!J^|;;`OA8}In0e0a%(oTDRouy4UGBdN=MijU z#bcT|)%Z4;>9rrVO&%i_JW;YdX5D*#Lu5WFo&Y}9Sd)QdeUixINlj>pIg&bqQiIK~ zJMc-etosX9R#OEhfh{BX*_8|%ZZT>4mWi4z;E+#XY&yI)$%AK_{rAL+@ypG%FmKGf5XLHk;NJ(d z&=N1o^c<;!4zr%(*ACZ`tDbfDb3FOV8APf(9}3<+OqLoX^r~;sJ`#ohlT`klm5tNe zPm_&iv zkBnN`PAbiW-4Zjo#gs~lmEy%!%D1Lj&rbsfJUJxh_C7ITz5CIfcPya#)+M9aPjHNx zYK$=dW2B{Y5|rj3oFuo%X}C%zG-w;4Kc2b%RMt$I7zF}-y`&N>gnpRi1@6p&Zd;4Z zz`=&)2p~TLgI#tGTUyc8dD?w)A1*Eb_L_My9W3^{HsN@G)b{H^j&LQDnr%gz>7>d% z+3P_yHhX%6!K{I@y5$~37?wm>Hj&+`QqjQWn&$ayo8HDs%WrIL(Gy=v4{@PIhOwyToW<71`Zb;rXb zzx9$w=VC#J0w{o|qM*2?Mp^muv)n1*jiKpPWL#;t-MyK3> zY-W)#Fi0j3jtpr^^^YTY@u}~Qcl~q?{EBKpGDg_!JC@wVm?5OGs$!9KB^2Q2vPyIr zT1#y<&Qo0XQ#LA}F7*$o#VslEnPmpenB-(@X=11b05N+N~Web*(Za9 zD!;)7|E24fYz9wYMusl>abSg#5X4YI_%T2AIH8P|hAZx~v7^hp^3bvEF^buJ7d5P2 zdApA@se<~93ni?+sLwRZL_i@2z8At@%P~R>0cO6*b)zyoyw=*48{wA9`yL_Ja%@3T zJ-(-4ZYBR{a(K=-M~8>LC3Vczt2Gma+DqG#)XxCGZ6&Nd$5(|#ofaCHn{Yp zjVwFB*^>PlvMEoW!)++4;W9c#GGk5RthiHl^MMGU$`!&hkK-LA4)bTo&3yeDzNkBE zp6U9d$?NHT_G9tG5buXICr0$ptN?7o?~K4FFO;R=pK{6X7JU3B=)Qhu6Fk~O^Qnmz zc)J$ND;SJI=c@N2yDN9GjBcJ53u||_upM&qoyOUuIXB+ZZ%8DV5tJJ^WRwPHz#%At z3j9TlmNe>i44Ni=?22TYNn0u8YVVK?WLv8AtY2WGnI^6!so6Nj>kH>~fjWpvbf}}z)#IG;$?ulGf-&$8b%2;p zig)@Z9TK$i1!UrJ?2&D~zOKGD3t!?a{n5hwN?fyW4=;$|qv|?gPgR97 z^qc#aAze0q^M8)zQm&fPr7mJ1DM}0M$D3m`y>sf6j}so>3Wqsu58WxKG#$w%!LBm_ z>o#%{6SY~_8}6hu{?@^Bt6~)g~PCyMWn%sK(Y^FVQP_yA3yqT zPfx3v@qrM9_{w}x^gV=XD;-EYFz?wwDdK>qBoP&40#exa4-br%_^%O@A38rikIubc zy&F891|Ry3kRR|nvCT9BrG#M+XMDd__ftz4>tnb(0m=cFF#aj|!d zLMQrl+w`dqLQSQwh-e8!YeEi~j_uOi8p*RI4tuA_1bPby&^DBE335z=IBr|>u^yx9 zeCuc-i3%Y3Vyhns9PWv1&M4(AJ}|*7^YOeH_;jI+#Ne3w@%TXwux_gJdhjY(4qB_P zGJq)d$WzlS8tlye3Aj$X3t!~Y{eHkciwZQE{HuUAKu@f_^)m4XH)d;e$nZHFg>uM_ zJrcb5)EP&P@(++%Ls#s*bLn#8La(lI4-hMi738i`YjLJl72=LXXSK=}bN%C|jy6vI z*AH`nkGYl9b3vtpK|wvke;Q>vok7T!-o+?u)fGtsHBsYL^6grVwKw!L(#!o*lSIOL zEY;G4^^yb~lfT}T_O03J!raYtr_30_` z%LhZivNBlWg+F#pLjT*1NLVM`&whIu8rCKkC7Z;ixbY|f1|Ep_c@B38W)ypn)qG+& z!)G(OoY@mWawuOrW1}J1ef3t;U&qqK0~X{&P6dpha#-YAXCO+R-`wvXR-H;I1v=r1 zH=F9dJj0a`6iMeL{wI)*84V0?1{+NvW=G(GRoNbWZfCM|>i1k|XdD%R;*ve?r4_B! zM4{z3Gq*XhXs5FmvO9$ZZZRa)vHvoLMVi4FeN!w1y(=DTEUtC^OSI+{M2R}dJIGX> zD-Fo?nmS~|i7?`$Dm&om_rWJakyBdaAg1U2Cg8L7BiYXpclV{LF}4#-sS3Pn!&kvD zY$&P(tCpSLO)u=fCjHO}Q-Rp>28Sy{W=>&Pf1xpFQ{U^9ay&_*^({Q7XzM*Xf;YN6X`U zVpEjT%Hcx7&090LmeC#=Iu%l}hd?Y9)%XvRAX4FiQe2HgtVSA(LKj-vQoc}eEWYLk z;}aJ!oSA_cv;)WMKAVSZ*wBY0LUb=J*LdLWe2WGZZ~_}zhWE+&TJKnYF9u{UgPW;? zGn-AEA$IqcvMUttS!py%pDUgC`%KQTYgGcF^m9UWxzX6&9ug^&Xbxc54DT_6!o@Y+H^k4A1k0rvwG)kX zls=r;V~TH{Wl^F55QCHzi{jbi{4!#uSYLEhul%^rFTQY_JXRLhVO*-7*vafwT-|ik zE=qR)Q`qugY*`8)48;=IUBI{17gI*oFT#et01MgT^0%MdnjAMVx>(c9NlpEhK0|?= zGK#t1s~8v6)8Kp_YP4ZY}d7PLF+Os)}gA7P+V#aOVC2kh+xm&oOY4nQu0|0~k%DoRv7PDyqJ z+#0p(vA2!?{}J^K?3ry#x3Qgc(6MdXb~+vBjcwbuZ6_VuR>!t&+c#(L@0?q|U_JHJ zoO9F|Rbw&B(8uFp0#=oE$Q-5k6$Y+~YF85U4Lt2P{d>l(JeCpy8Ft`y_3)j^K#vpR{V8A9r!A{3 z>z}^DUGzi_+mkU8~G}d>CJMPh9p9xQ{EC!>ec&l~It{%l( zm~(_Pq+PHc`>`zzVXa#UJ(gU^awzEcu4v4%7eq1tmt5-m>Y5+!TGst6^Ofy~OW(R> z&U-aKm|;zFG8^=EG^p2%SBDH(603I#bP=pqr-zjZXD{r|TWrfx6UFpjwEAg55!iuPP59BH0tEFlK-2Lia6S}R_7>E&*Z za&khG_><4m$@~|1>Ebbbi)kWH`S6(&)x)FI_}D{-7*^7Rh{JPd%!Nue=VebKSH{y$ zOi;Gdq{&coKicZ{o#Nc3*OUy`wa>IXCPMK%ANun8uMQqCd`#}v_s*hJfUq-SsB@4h zrFKc?`ibAE|Me<>iG}S?WMD-o3wLeL-Gw}~u1RArK$SZ`AB`hm#iZ#TM4T+Iy9#S2 zV>i+m*U~QmqsTfn9IHEDL*lHSNHHRny(wlU!bpu+XKWQ@mSu(mSwGQ~Lkxw^o}t z(`+kBwj;lGi6P{dbIE?DK;^q+gFP_U@B&NQ9)Tuoo}ZvT@*htDAI}AQsH)#Vh%ELB zJ+(S!ZAVg}b_ZkG<3T0r%R)KyybPt5ibu=cj%2{2fo#;aIc;>t1!!Sz)pz#cXIg%~ z;McldD-9bZO{M?4>Da0TCXxPvREte8QwO999?YZdS4`}jkURZoIZy^n@XQuyMjwnD zl@69zi)xuHvO_eTh7$Mcv;T?&<^W))mB^$4YATX$nD6Z{9P<{)4!S;ZdvlpfYlZRK z4AJFA>b_WD_{eYp=5I+n&ZofepG3iH1t58wVu-kG!R#D$7uOT4*cl&20-%#kh>nd> z>&(f z57ufpae7Rdf{hEHF8~-+qYk3pU6hI|@NwaA@$OlMeZ*$py_#rZL>|w81p!>llkiOX-Dn+$C1g6hsd9nSB`+L(XUjTI=Q)mEmk@cfqq@r~Pp+qGsEEOkvNh6GCy zwyGqK-mEj?UABgdYd{1Z_u_&vosc}{Ggf+q8Z6AP{*x+W*6=TRSYM1yGM8m$42KL# zU9;HCXYK3wAxmPZJ|MEMjWYoj2V&<9P^Tb>ab(h4w34qqY(mcs{PIf^uicWu>caJ7Wt50hu*C4F<(* zLo*S-C^fXQ0D$ zSonHg(wV*)Ek!~`4$b?FBEO*c-$+DUvgpdW0)(72)F1mlXCJm0{P;h{L&Pe~_Irk1217XF%S6YCP>X z&Yg~aMA)8#YI2`9i=aiRJOL<8&k&XYUl5UtKK#{o5$P?;=LSLO{|L=TNBLR)q(f7u zkYKb=TBqIw5}r1;iYjf1E=!XGAsf-Q#m22`$lHmVq3X3iB?m*a#grU)*s+CRkUN}~ zCjHe*$VJpv1UpCM2JT3q?SJ*u1v}~u{62)%PhT;EH}Ag9Gkm|SsF_pcIT*u5X8N$v zp>AdeMk=Z#a0nWzko!UezAC0R(}W+QpY>jX|bo>lex=SKheOxNYjvYCN;a-ea} zpL>52JSHg)|4|J^N|8c}pOFwXT{lFQ*4d!wcZM41(+z0UHWVk`=$#f;QVsbWWXP~C z;13%%+G?FA>%9s&v@ELXPMp0qwy0WK@;{lCXNk)G8u`p-%ps!;G1(!VY1NDu2_< zf|>z*L{lA{x5I>)ORtUcVF{cg;Dd*e65BE_b-(roEm|ziE7QIK|h#$e}+r03ezx)o{yW4wxR?bYK_ME^& zmi7Tk{s%VA6vnsS^l2oH;}}8wArsoHxQ?GHQemjtCbO3L^!JoSJT> zfsc1*u6A9$EyTZ3v_jh6DyN-u&namCfRHgU-|=>S8+W>R?tU#V`Slv>WWB5mEW5Ev z5xrrqnu1Yjza$yyTV|9dN9v5e{i@;4-WqT58m%12Xx$nz|1gRX`MCV1d#M`#b)?oi zX>XWb`W?cy_mF5z<*x-FU{kH_h3ph~MJviqbeXLW2ukx;AR{kK(gGW=+HGUzQ6{yO zmuz{S%&Bn(di}A$FekIAFB9;*3~;Vf?pL2rG`Q|h z8TltIAc|n+?bS$vjR*@x9^2b-Yk5j>Tg}ntcKM?Sno}Ya3D+ONvjB*wExoDd55M-1q_L)Z%XMBHNewA64qkZt zJdXUU3{&-K3UstMdHjt!IRXVmpF$`s#YDnldN9dX#rZr8-Xt(hdIP~d`d2qyXfIk% za`5>&o_x6NUXLpu%!6zxl}xSp9osx+dj18bV_Lo}2%t$fiJqUG`VJoV3OK6 z??4!tM5LEcKszFfT~DCETayZq-u^#84q13ejk3VK#qu$`hd1TJs-d2e6XrpToR5T7 zQ{m>JS9>`fb|vxhF5}0v=Qr=ne95%b9t|EPNz`MFar3)BKm~#|)1L3Nb|tBx%I5Hi zW-Aob5kp2F!8V;9w^X}%yIpzX9hwAP$vi833tJ5yf+U;h75{c5K4zva6&30A;loz& zTG;QFQxvv*dQxJshZC#e-|wt6V(59bfFh4PgitsL5q;n0`g|KBSCPmKmnDjBhmqz& zBI13kmpR(YcdI%!7j8@ZYJBg%#0yR&xc^VY)k+2_Y0TdY9hLSH6k)X4k-~7%Phv$J2jPYp#1VhY^rEGVI&*M2%JTl<0jXWM7jTya z84H{0CP)0->t0tyiCW%B@IH?ZP zkJFT=PA-7Pf|4T+^YZ$7;6puqpW0Ihm_U+`#HLbE;by4+8z0fS2lavcUYV&#hqr3E z$8HKjcFPlc6^Gk1IT*f^Ylnm6*8IP2gy0gCH-|?L2CwhJJET@h%7po zWnww(N|;TL(#}2x_UMSM5>)FioEG_9?x>##xOw+0z5q+N?2ckF!u*?Jb?^Pv7gCSz z1VmSx4NEFfplAiYnE-!DZ6^)!PPkM?rxf`w=%aLw=p&()D^x8t;+;fZ_HBNGTi;m6%(HF9hCzuXD;f;I{K;mD6m&?YboRLvb z<%Xo~VQs7*tG>vS4&J_2cH?qfwQ+`J7x49=*QzPrz!IhC|9wSl=ro9h_}rO(DM~Wn z#rg}^KQ!C!`(OTblCB8vjl)L^&pZOGBo>n7qh=Fx6{2Q@!qsp_%+{9H<8HnO+w(W? za+e5Kaq>A0$ptv^KhrVyIn)!R?Rn@MrdFw12|ttT_+L-yz@J}R|9#;|#zvlW|5n&L zUbsr%bEpN#Ytit3AZaDx4R$Txjn3lK3+9?_g*&mjjBOvj_#}egS4~N5)=bMmIe=$z z_ft*ajWa;d--o!;g>}5I9s&5L9yW5;N#m!|+6E%O^=HtG$UIFO!TJT@pTV~VQ;wX; zjj@Wu)jwx{cS9W+GoX)TOY^OU;T&W_DiK`4|9tygwLiOV92<-Aa<6av^y?i;=`M|c zFE6jLxLT<3zSI;_mg^Vtz*TeYT>tvn@!XdqjB_4fTm!zAF}16s{h#!;j<=$XlFl!a zEi~j3F()IQY-~d8Cei@!histR9B>bE0x+OBx^NYU$Yu|%^_zNwpdB}EYKh>v>VuuS zNocsE_516y{F5rhvd)2NAAQl>VcrFn;C(yGa|g6@$D#Q_@)iH2zh6y#KRU0)N`5C_ z*DAhQti-FSHWX@9Q5UC`>0-y|=S;c47-LK;a6I6Mx&Nb$yxK z(z@FZ{lt4C#4|VCv42y&L-X{&gv==Ic<`pY{;=_xI)4UQccSv>Q1Wi3?6*o1t?OWc zyEujQh4kT8oc)VSa=s2wEE>is7zc&MD-i9F&={vv!f55N*;dkN`|#Ca;dH}Z#p87! z#j^^Xc8aKId746Q6f?`I3R`lbY@Y^R@+75qq<_q6U@4twtdV%L*znZR{b zSov5t391NSd;?`mKSqhSSAshdN7UFfl8+c(#QEV2O)8at0}F(u+CF8li_kb(vmcr02zN|b zk}3336DFJu)usg1@=Bc67gsHaga=oSU`|?A_O4vOW7bkmOT~s#Z@|XSL#`@zYIq{G zcN-=rf39czC=ES`hu-1QfTo7Ev7z61jLGoWy4|A3^IY2D=tJ)Ohk({<10lh`ty4#? zz4m9fmDwd=mso-b^h2P!7%0%6k>dj;l+qwrr$fM2fIRW8Z@-@BX1jg_E^Cn-?g<}n z-FOsQZk!7Pa1x3cYi#*l;{F9OaiYnyu`O-FUnFq7G=uuOGf}>o)cN%T})({ z)EQ+PP(gOvA7<4eWKf=x`NdMQS$yz1uKQlBbjq}?WPUH)YiZYnC)!@DQmk9eib#+r zcHpGF=3QXa>QmYQ%!g1oKc1xo1%$GoB_ThlHh!H5JS^c!WjyP|U)z>16<()(-Xemo z@STAlu(deB-`x^hjBOh5$GU6)B0by~+Hoc>hDUO~XHsTGx(5G#h!P2!onVg00_yqj z)uDep0a7qKKAle|w<^Py}PVtzGvGsW1P$7Yyt(jE;{% z(YtMF(A^#JmO1Q)L6#U>CHjEUg;Kuv2vpfz)bu*wH@ot_lV={%cqT{x2gysz`U08Z zI8TvY2VBuyJ6x?B3zjfUj1RVO+VGf^D7A`tcL808@V5dRs+Y;49RC=8{c~}mn@rO9 z8OCu955MvDl-5Jw@TNIS@cw0T#SKJDIa(qA`$?8wPOfL1f!ORXXK1)DNgRXjB;8?X zF7;(y@WKyObsyEGn$ptpb_g)ZHVQGVIeoPsKazMrWwKMYI-A>1uTD=-tG>OGuex@C zucDk9(p;`C)U=;EukN3+t`xSoOpJNQkA9}y$<(&#_%&N$Q?Y;iv@@EjLPBJw6Kk=S z4-CP<8LX+~Ks5ln4s`55FZhLi)EdV!%=U_3Fy!pUAM^h4_p*6Y00?~8 zLK}Ws=V?U<0q*JoN{39lO^(~nTk;0Z~UVxiv(MnPHXGl`xcG)-YaU14~EMS&#rV)C%c zp_hfSxfWnDz>N=uI^eN^B=SWOOn5IfI6?Ab^|zHR6y%n|^cc)J-}jsRbTpJ;Y~r@5 zd&(=ppD%Y@32q9qpL2wyH)V<}TXuARpBFiN8`n0|4?|y^Tg^t$6$@lo3dBCFMV|OF zsE0VHcVnltT*cH?$@6t1#yO|nTvCf{4~zp|l1IR?P+X^tu9a@|oK=1iIqmuATSA3d z3GmEt(zacyuw3>hSXr)eMppJ~PNO~bJ{kC+JK-jVdx4L5sJm&LugbAZz(N-+$^NWa ztkWh;e6zUjSg#;GQ68p^QEK}!}&K3!QMGNFGZbyiYX7z3S{`3 zB5V_t-X=czD-&aD7s&73hVbKB;#h(R%XA1QPnsAU6;* z&2Fs;=*U;|&>7s+4ypy}VI~M3h@-Giq1=(Q_xo!r>|D(5?(kICJ-3dj(rL~walh_Z zVY7KJRbK_XL_F{<>@xQ6&A8AdGGHal=$1iJ0) z8wb5FGwM>rtb$g-wsjL3I)46FdFq7oPi|Y*F@viV96U(uy7)n(5Dj0UOX{dZK-C^} zg*{L9v#!XKn7FHOpfxMT^MBjAbsSz>pAUeJ0CcQuRLbkfA~;Q(+>e@wJg|noSe; z4dlD)79KgK;waP4?3L#0V;49&?lY_l)2+r=0;-3ik?sfsA0&+|$Zn;Wq4s85yZ!#& ze*!snMM|Q@&2IEwHr(4tEYR%7eL6Q+u2a&fEz%@2Q=b`RcU+yP*ry}BYzPs#-Po`2 zI9%?T%*<(jGi%2Kr6uySuZNP2>_W|Sy*%%v`1o4?OPw+y9t@HaLh6UWRvC4A7PvV{gEF3EKxft=P2fjg<`*{*W2?`?l3mJY zcvNTx1|Do8L;u>I>&n5*@;D3o)uB**I3Y{cgy~{Yo`|T0ALTzXH?MD`IsZcOlAvyz z3=6Zf+-kxyASS+f&2G7}TZ}Ej;uDOF&)Fl95P6rZfZRFt5JL{GK)HTJJ)-B_ulr4% z!ov+Wv|AvQ;VZHw$hoY97`NXf&Bq%zayWMr3MoQlws2_17YN`8{qEYMSG& zB@#Q-sM1@E4=K;fbITPS9hke{xx5qLIw%&T0OlBNd%PJ5~{ zC`KLTq&rRC|L{_Sca} zeTlw6Cfu~hWSvA`#zGQUU9adA-%rpFUf0*Mvzp<$qHVoc*g=Cz=rS`w zv(&`KW%=>?y*Q9z>x~vVEWyN9g+fAyM*Pnh9|-p;HZ&DMS$1p`ZNS+?iAV|qU3H!U zb+2@2(TOpFY`=bJzk#5SY0LQV8QCTo2~6FJ|4*{dy-L$853px{JY6N^LcxYf5A%C> z8bU^mLn&q%mMcWc7KlQ>uGev-7z^BH!y~$135Fi+hHH0Plq!G(q6e06Afv+|n#t6n zqY>8jjQ9Dkxs=1s_fMYdmdL zi|tcIoe|lO=L~RRZ>;D49#^QpnZ8LM3dp4?;N}1gWhEJbTRkVf*djCMUbIK|m2?tn zKcb%pGwp~)m9}Lt_bhAuEslR9_Uhw8@Oy5C&tvelzBG6qp1l+*N6CyDHNf#dO70jL zI|gA$5{NLZ%}I7krd51l4B)fCQvvAi+ZtStCy4ry7NwnU5Z8G7?OH1V+`rp5DHad! z-e%giSz<@@O2fGph?>XmXA0At!_p6y;E&^qRH$Gw$ee zZCeBXJF&p2D~LZZEOzo|?G*NyjEeYW7YJ+YG0Hx0;^YJOj;;eWy%99R(4QL4g_^F)68FkxP!)7R+JMVWNo==CfgFY7NCbTb4$S-2N9s$sJkQQO}9vw>q zwVj}4b(sW_u^X5I`g5f`CpG*#3tSyrU+AAUZ0Yr8s#0|XSGs47^2oA70;xGw1Ry(yi}#+yS=RFmSYSV_QxZQG>zSP%y{o$ZKG-$i1ncg zvN!*QprHag>q>Fzr?N!0G-5L>ORK`&h1j7Y<_=Ua$RTR)3v zpCKWzBd3YSD8Nof$W}x%c7$hId+f`lV}YIe-I0{MT3P|MAQ!0X=?K-p8CdQ8`0yOE z#1B4}f`ATCE85-prOJnjDy-=@uS>^`ua6v7CN+7VbBnOu04h%)R)eh*za((csWS$% z-8SRtIPHJkh1a0t$o99;aXK2*D1h%|HH0QXm{nGE5=vp}(srSV{nhP_?0OT1jL!#J z0|O7dD;I;PH;+;I&J$eF{UL0IH6p!&U|}s*OH(In6#ChWA*bnPAri?cE4C72r17fp z9zPAMz{Ju96?vm@dR_j}4f(}Sa9*+^42I~InTyRYF3$=X(PGSAq>9Uu@|F;N25l_H z2VI?yES-{sL?qD~yuyC|yC3+}`?fL6?CFDk!e05`1qWULtFoF!?oG`iAy(0|oo<$k zi~$J|lUIfjgd3M0D2h=H>#8*};kMfy&0-okrjq{^W4RI7nKIRnSmndKm}7_Z`gV#- zf89c?x|bX91ZpuB8Dd*x-0@eK$j$unU~8&@f+0Y4uT6&iYPVO;UQi$B18>^n%I|Bg zoylU%ng!qJsyUzIYjD_aNu+0WwgE~6`zg{D>9~uEbaIbmYzNAL7i`8oB5b*}+HaA13VbMpH3Tc(xiVgRx>OJr%LcgBAs>Qs8ajaYap2V5 z*k_0p!|{#pWa7tsSJ;B_3SNERq^8OuS>z-8I+3fZa-#AK$sG9;K1o`?X|ANFu&A+! zIwh8CZnLNU40XD;Jjk4b?cqDi5ifu^QFQHI%C{4U#ZPHgHYEr!Ynp8FnN+xxf>zs8Kz~k=T}6NijZ*9!Jf`=^0xcjFjg0M`xIy( zW2ldy|65p)-<3sZKTg2*kl{`mWoc-U$ZAc+S91y82a^`(szIZ1jBE_0rs*$rGZfmIn+d0?Jz@0I;Vk);h2K5P9M3r;>qt{fH*X8q!Y9K?B(}o;oy&E zJ_*uI#G_k?KP^t=Q&!R|a#W-}G3cCnLO+XAj{_cIo3-#Jb2f2Y+m5mOzQ|JEsuDGQ z91**-ho%7>>=lRP6PC!GM+cU!qoc{a95xFn-U_c$8^#Q&w6Pu-dCAEOq~5f2`JGOU zF5nARefeHt(|M)w(&?X0(iY56rDsgM#VSByV5f{CYDa&eP(Q*@X{St!Y<64W&Q}a_ zHt(ur0jD2&_#y@$@I{vC+1FM2`$M~H+G~+!aD*H;z}W(gVNxV0a@@3o+MoBdtnSY) zbp!VDsrRm#B>KIznmV*1)t~5S!H^-v&cl=g|9fkRuwrm%Ic_M+n_0E%i3ajRb>|^V z3%D^azDtqCNaqFvP>mEG#EGX$NL1}1AwyEtIZ`Ppv0o8TvqndLkyarxZ_f;C*ciwn zMS~2o1d@`qnu^mo0nrlFn1R7I~S}l~KkJZyOZ_T`r7RtK_13pj81uapC^i{k4A2p{S zu{P5AKIjqVDj$2al3!zYaFH3!4Q^3wgx+4reQB{`hx{!uCP%z+Z`QWwouE=^qv{E` z2!HXhkleV3(TCg#`70T!l)C8s@@8Z!tC21VHR_P4U>YDgaxFY6ak&|7A5NJXj075l z$IIW7Wf7K%L>R8DD55MLzqCz`gGWCT&DVpSput9jh6eSP`08NApjYRy>F(MDo~JID zS#I>ptTbKOjcu3r7U3(UHgfosPi@c@f<} zL*>}OnpCGi!z?u**Dvl(mPxQSRXwN!O(t@10E#N73*PixKepP3td4;E60yntH`+#1 zg$&vZ3q6@|#FX(^02JaT25OEM=qfo55TIJ>_C{h#(qqC4f5N2_QmiR;K;FWQdaTUw ziP>o~&Ch6aLCa)5{M={)VxDI~^XnGprbfD^&TG`IC;mM4Hj$DH15G_R>JTdI+oVa| zg$YI9M4>m@*v2tZBeU03^e*S*BF=zVd?qe0s{;Xbmb5E}7BMq>mD_c?+zgHL*KG9P zu@<@YP-22PBZ40-191WW31Wg61mHA^a9k&$9$0C^mLK;&61$Kz#blVf;YeAhv!~bc z6a=VUch0)w!y`;U@I9umw)5d4$U$_fw8=}74cHomp2or3X%3V1@RE+hC8fs7@13yN*Tga6qU)>zD7JBJns#S}8J|b7L!fD+srU_Mg|!{0!t05`_()z; zngeo&%&zLuX^wr+O=y4GoYTv79lrWSz>(p8yDk2cmG87LBQ6LxGcfF^fUeL0%{79) z{7pc^d>$cXdFN%C?VY<$C~1X2*t)ARJ44rcn&37*_fMh48o0~xg8BB){EH)}j8WAC zgDiXu5pH))r46R|KEEvOhz{eO{=(26fjm*f1MSO;&vLEsa^38=8UJk3CiuBij(pzC z26LOikc31sfsx(YobRQ?jjp8HUT+M5gyvUf~Fv6bX7t1}l$@Ui!zfj%%9SW`&o zFUH3)b8O8wH&AJTwn-Y#VBE!2_a3H}MyEEE!Uj?b!lkEDfUj!QkqETuY)kI`D?n>T zzYB-v5gOVY)1(uMau=n-wUZ%sj|lL~j!titRhkruv=%XWZWT~n^?>i>XbDH;DfV6@ z&|CXo_Rkh<{|2a;*bE?nBO^6CA!lT(f@Xa~xwph(fC3({kj>X|a#bacG_HldAKsi5 z8D9EJpNhH{#^4M`b8fxij*pN*=Es2t+MjN^Bd(oMEOsSBjADq+c@#-{mBRBS(FEP=4tCCs?U zVd@-%y8>gQx6nJ`Dkh-FG%HQr+4ic`+P=g+9gUstP&R7wEq=p8t^)H`*yuh`LmWNO zUYmR5?aJmWm2uVW{I~tx1FB}%taDw4N-f<*l&k%vOHrD+?7)X-Oir7{QJ;uZCWBF7rH4z-U+u(I)m|+9M{wHOp+OTl z55@nM1hr3jkkr+MDAErS<0IZq*ujETJ1*ziiY?_ zP8Y(aK-%y^1<7>%^)>PGuw z^d+!L5AlQ?@-cg6o5X+N#iaNWjXdm|B4060en&!f&cIa^ab_l3ejC{Ouiua`>Orkt z2wQZP>!_UYn)Q z#vt~bwVQF1Q~P#x5r>p*&r2iq{AnjWV%x+^PmxmJ{>LZ{QnbO$eV8d<-SNq7xJqS( z3(ig6Mbue%Fa4n+>~C#jfyX>df2t=ViO@aCU0&unDd9{#kyhhzr9!pc<@Wo5$slv8 zvS26P6ZZOloA+UG9t>=Z;0b5ro{BtG?Mexyl>q-L5iQsszlVf7i|g`YoWUSemM2vW z!Fk~1n{J{Jzifvf@|sJ+U9_DM(hIob>np_sGi)M7kk#XRt5RMAC~oRL2DA`uTPrC- z*AVXp*7{&Ff|>|m&@8UHRoWV2#WDBAO9qo^`r zsmi4JYeWVbdMe2;>}4kW@Br#eu;&cfO{yxX8I>r*@lh&NQYAbom9*~AUPJRysrxAQ z_YZ#GtLB-xW(I&1p49*6ejF&K0Sr;3`vBUlVXiAT8bf$%u~$yNW(C1Ik$@bM{Fi;(GM92zRg?t z=E-HX`Lo|zFEJSU_O9H9oRODCN<1iuhC4>;^JJR0qt@c;0-5Kuv}Y%}R^%)YNp7Xy z*JCrl>UJ~hj{crTRLeu-u%jmWKFH8!pBHoaC#>1bpbb|6nVNvrMyfNCB+eoegYns0 z8Ydek`D7kK$;@$BYZytW5~eAVp_zUmCa`4$8m=8PQGT!!&xAC%^1qC1MrbR-!ICO5 zEqk859J@@63y+*|>ClvlB9w%b&}E2NWgbaG%$?azkPdZ7s0Nj;d7rs&Rsb#zEs~N`_XO)KVRClS7|QJqiqL->K9YThS&?SsAVR&0iRm`&1B1bV z00A&Nk(961w8#n;YMN7+LhyAq(%Kw^48K%oGUey}7uSicEhYm{rOMamfp02G-!#Gw z&}655;wx0Wp&BsG#UM~WFOARNh!KxAc=HNmj^9q#CT+D(HGo%+@+WQChkdO<6n&q? zRuN^`D7LbL%~2Lo-h9-OSlmb>)rg#G#=9eNdW9@d^gvF6g~aYKJShEzgr0@mP!d*m zZhU&&yYNl6U8~H-f8LiNdi_Z#DIS{LrO^5kPXpO3^?RF5gev}dpq-?QLfe=hg^suh zc94r`Y_^JN)(4^N%E3_!AXW&pDG2XI3V0WbA;$l2CMfPCJ}YTBe}OL%sX!-8mw^Hc zn(0P^aP>Oe=Ue)`2y}70vMQE6Y%gAIM0?;Zvl$pT%-&ekZlS6KLXdjdEJBgqdA z8_|+bPSQbm@AP7faMouj7=B_4Kfv;X|71qmpF%TRUiffX4u+lLow*5{Eli^GJx+HZh3R<{)_;J0JXxWuo8A52t0slpl90PDBM{O1nI&C6emVNCC-6L&cG4aBgRxX#Ho-5U|# z$+=ApEe8U>i$uIECxJgL$FtZbmReL@A>~yaKofZr!GxKDxl&+znL)?vC{$M%@my}$ znz0p*)X>&@E*5v&UrQ4N1*nJT8M36xbEIsG?BP=pm%Ytjkwf2UVZsYdPxX&o7w!^d zsqL_^taYDxo?C}LZ4jN({|hGrK#fmQo)KayXx3U>mfBS=<0>t?%89-DlR02W1kPYKB;Q(fFg=FIzCZ6s^4z6madUo?e{8TcEBau`{kne5CxZX| zWd{p8(*RK?N*I9;sbWJWKpEWvINmog7Ux1L*e)EH9u{zyvxca34u*Zk(kk7*A)G%<>smZL_raZ|r?Y?IUdDu(B!9#^P+e^2Yg zsiHT^5z8N27W(hy?7Gw3S}O;hg}HDupKz z01w%s7;NrmUb);vi%+VUp0KxsP}Xf6y{-Sb-1^T$_(P_$s2B4Fhv%bF=X@!cyCf*W zN$8Xt5lGje>gQ@AN#bTz7Vl1ffw4@K5m-JuHD)M6#p0O;wagJ;cQXx){u;h3tq%p&&X7~q_z5HFHQgIz`Igm7cP9B(<^h`8+ zzS6MGRSRnObN8Fwejc@np(Vnq54ar1rS1A>yT`Vwhy6hAI4T35PM=g2JuxK{M}z3G z3@k?k3$dc@#S4L7$ZGexf7lZ*s^PsN0sKaMsJN72z6}yS7}ZucWFz7_ko%PIwtj_0 z5=-vX5E$nUyX0uSYy8NsG-Ofq`5h5-QKQOT8FWIkJA;+QGy*tvDh+vQDCn>y)wO=2 zL!-dnj;$t2@+jz1Z9vi0+T@|(fcDtXfP=(+|80*1Dc2H%h6pJ$=BB;O zia%_JIZMZ7ABjjdaDUqiVoKn#oS6sYuE#%q{6m4II;771M6x--VzAJqpr@`1&q|Xd z(v3P>NZ6)22@aw>IF(l0O3LI`;xyzXjixh8kSgL)dB0O+(`7w0Bo3CD^V-u2 zH6$L$r9%w+CpsGqW|(;^jELJ-REZ0twurd@&e%;TqNn30nRUnamWiem)`0;)h&9U! zOyp?EeSr1zK)h7@lXSWrFA{(ldjE@RGzANa760AeF0sFpb4 z#B5q-(Vu;3OAJJDd(=Qc7<0_*=$tvP#nPY|#b%0*n#Yq?%m1DXo zF)6qW-E#Ie9%GGFCG_l!MI^v7Do4H`IND;m5!OWGLu{P<_#4o zzKW#6j9X~TP_T2Z;E?T|k9K4Vz>z3gORFDXu$L7kNG^1(#+@DEb13e(n}V2YH$$%Y za#NkZ_7izl1GfoG>&4)&+hQbuwK1NiU0V6jGux)Ve2T>3u*i>}yzEnq+*bkNaa~?Q zK{A-3Gh`g4Px@EF_>`D&&AwZ_(ym^^hwPIXHfcI1N0}0q2rRt1e=-SbQ54)16MpRz zq++`P8f{K|Z~gbrTA#>vgiWJQ#x^dSJN^NU|Dp2G)Yw(lfYVBy$|!^wS%GWc^kwaM zXgz12_wCLpm4&yr6aWaG|rtnJoMip5&2 z2HIaD1?A3IVXeFqAn@w`ux{Vc&$OEbE?uI&abDujgV;R$h3YFuvRiAqL@ibI>bLrB zt@SY01@%?+R`8V1-XVoUNquA;FgcQ*7wE_!?2&i{GYH=q%I95^IYx?nJv-G(W-i~! z-?A=82H)X260y19Mn#`;uIg{Pld%*S+oyv|V%A>4H)XS?-a@wq9syYNma#?#w6qol5du zsj(>~Bi1s5WGxCn?kZN`#yMR!Yz8cSUM%J3dL5c~@c%!et|>gyc3Vy+*2J3Fc4lJR z6Wg|J+qP{xnb_#qwyh3MHvWC?`{sLk;a#<=YTZ`P@dt?4)@H4)-)QQVW&7UwS5Q-R z@XsQR{zwjET&ICzY=6=2JUuYk39iub1%1-6wscs|4SDY~b`dH-p>#uCdl(w>PoSOO zbc8R@`9wcX)~n5SlXp(!8pTM1C~wOmX1p5@#jQ(6wKbS9G$u6LpJ=F7lpv4C_L-#k z69*ZvjhK)0vv(Slm@}d2qX-KcAT)Wpe&_wgD7!rb);YMXma~4kk(o^cvqv6;HMH^b zTA(8D2gRk!-o@acv1FME1A_oFlHe)N^gE4PPmogrPLl#FQJe!fH4OjTKcO=rdWg?r zHCBwLua0(dcG*99oI6`VoT}8Ct;u-43~fy4=`5ti}83tC}tUshG_+kA1LC2xf z5uv%{gBYQUakpIUOzR=#m zXY`m=3uu*Tq`Q0Nw&ri_Kgi(uNLmj+q$9tzk&Q%)X1o3rms2Bk`YC0M4yAj>5ou2! zU^$~Xs?eQ)#s}k|(KsNdg;Cpo46QN`5|QG>Hy3S@tUDSE&d3|?GK~4T`UWto{GX>eO$toOs>u*QHqlicac$N z>5b6sb3y9**cPH++au?04SaNCTeUH2hG^)$(Nt7^09}~gjDFSVf%=?A5W0HsS2Rzn zk#hI>+MD5gCnc3(!p?W|HO+r#krZHxf){`Ixqb}}kSq^ec<9`%X_T*$pB@U?}pxZ}sdD2huT$p-( zTGR~LiB<<+$y!0UOr}#Y;BhhSf=oztY%c2)@?FHA{du34&dqT4fBG`up;6@~gt3E0 zmTW?7hR)%kPBPsZVKO~X&ypsXbWup)&Hwl{8c=n?FrBGh6)#?P*?;~qWIw#vfbafW zbOKg5b;9nZiCuJdLb?<3)XyXPkYH@D7-e>Z!OTSZ9*Zi7u5i}XzU%Y?sSzLS0mz~( zT)Rg5zhY2rK}k(05s*885m-2dXGC;&3+F3jhe6u`H@GSLk!0SSZU#dY<>q>Xwq&56 z|H~l2am7N0&n9ZnF^a@WKa8o1*jP`R(P*q)Z-vMkNvfHgoUzUewEB4%W0x794Z%X0 z_VjgK`8S13S%~p7CrW$ti6y9-z3^uzR+NhO&m{a097B1;c!*r~)FWAm4E{27f9wI` zGnB)$J!ScIk;s?5qJ2Jd;ZWfp^Nd_r%V!NVw9~uAq1@~-QohwFu$1aY>f>4+9vF42 z3>hTEjKZi!3KRBIJ5-V@Q!QpPOt=EDebf;JSEjQftcxABhL-&#XT3#!291C0KDf34 zotx7(G@R){{)Q^Kj7;kBnVAI<4qX3fq+o`>`Aoj!LWRDQY>^R=`K7Ir7D^dvYkr%f zEYR&Kp6?%VMZs@9^)a@L{bI;Gud!wYEk4Tx*fLI)FdCIQC+lT;A`5H-^0G{Y0I!pu z4`iJ?q{9X`ecfg`TNq11{Cl<@#uBBzC(!d=;ymR#ucSY1UT`{jKfr~!gliNFFN8*+ zQO)S=FBvi|O8W9zHfa5=W~W?}?T#HQr1C*%vE>TSMnV-Oc-js>)OzU@2t*raXb3=&QTLD-hI#*5P=fb;o}o$ zujCOJb24q8mB-e5{Hclwd!C(pq&jp6vX7rk09-) zB9g2}#ZJJIw!`N-?dL3)*Xhp30yBjqi3=V)K|V*1Ai!Vj`lng!-vp?j=OlM{J1%vZ zyK`5!pAjYXpuMc|mxk0ChmL=4#e9W@`%fiJyBD`qoE0^Dyk^r)I43vxQ{rr)5UXf_ zH1>753Tn&p2HG32Jhb!NlKXe`(e8n+6B>2Ij#IXLB z+no+(LjbBLtXQvf9^PbBg0_5evR~NE^_${V?pU<|dj7R97bE4qszS{JE;?9Ms4vSn z`=_Rs{_T!L?SJ8jG+Kfe)A@4&BNK)(yqL9(`g-CK+~Z#Mt9(^z>J75`h?oaxac0<; z_va|@w_zVoNR5`5sbxOytM&d`&l`d3S}Sno;<$oVjvBtAzv9>l27*vScmpQ9A26CX z$-C$s9sb}-{wlP@YUulMh%qvxYT1szYBWDN=jq?!zKDvHKhJ-<28}(|l;?pUL~)Wz zKi+Efg&*QZeLq%ol8Xf&l_>5^ydJRvEl4b*Xq@(BDOKt&X`VKbsJ~N4gZ9{Lm`9Xz zI*`XB#d_HeIx@h-E#4Eoo6j*L9=?$J5d~@~v;Qlw5Hgbvod@5ZXU4FH3Olzu=;Sg; zfFx6t`Y!sZD`>%#@_B<{X=fzl-~ED^paD8b#;3mI&cvgghj4>|xIRJ@RV{YZcU$`E zbukh?(U$P@+T*KUx?1eGEhmO!>SdbNbwH0FvR-$c(e>UD$&!EXBma7ONN8H1?j$Q6u9mKaK8~#!C?=?`Nj)ja7^-BvARsJY~YW zghTm##53Rh=)%a88WCeN^fTXD#dZZLs_^Biexom#2Xv^+U$S5P?=vr_9e8F^#}NGX z1#*|+ViR2Jmg<{GjfO{=aE)(LTq6?R?AnUSD8m!qvLUSBhGc7Z@^G1dtIF~k@m6ZL zk-Mfo{gg{1(vL%sduRG$$+7Lt7u>vCXh)z#uVW|Csh`VWyz}&~J>A3EBx2cdiOSnI znL#})X-AE<*nnce`fh&E#2zZbrrtfVPezu0%P~CQFONt_c4+u+mEDwnpa*h8%~?Js zR0;x}pTk^YKgEQ?Z|%6|e_(Bm4I@EhI3X0TRd(r`oxEvAs=`hm|J{%0$Q1Df?*@e&m__7cLY+S?MQE@5A-7w?*Clj1Z zcac)m4gGY<)0v_|_0;<{(;*2_FHCuBUOP05Eo;ls@N=GzU>O)2%}(#a=?Z?W^bIt_ zyIyhX_)crJ;aMotdn?);u037Lt#B|pL>~#o$DGpo2)*xC{CT;+C!9a(l$RdAJ@<7# ztyHSV8)ZVYODJ}PH?FE0E55bfaTleOxFri1FqbD_W*oRh9c{NbnL0keiAIH*YN)Hl z7F$_Tm}nQJo=i?lKvas4u>@k=^DGh@s)P42G@1geenQMi=uE+QMc0+G;^)D5E_RFW5@etg?!A0r{iOJ4SH0xo zu5Sjgh&+jXio6?debeJGF&q4dWK@D-oIUuP$hd}nr_B^^mM$9mnrnJ>p{A?$b(DWu zFcJG?*lYIjh07%KBTdQughjAG^RAWBAtAy0*9mapNsV}DzhoqU&}p5Dn4`)2D`7Tk zjmXJgVxQ>$>Q26dCypbca{GGN2&-U*<|g+Osy~kR9eKE$#K^xBWnV&+exW68dP5LZ zy9%0K2kufoY(mtoNMr*=dpAc8A?-#$sBikQ>3Y-1@qI-KZc{hrQ|KQ6%RGQIUB?P= zq!iW~hDriJ5_>P$9`l{tYMyj_Tz{t zps!e3Xsq34l#eb@$6_0!=MB{RX&BPPGVlklD?N_$@&{DF%{f;A0i7iz=0+nDz0V4k zUBpJflg3TzR+qV>22Xd7%g!-f zu?wNi6HXt0BGuwVQxJCX4t+}d+_6dyx%oc;vRzjwp z?f0MjFN2e$3IuhxPQreTqM%6~?CDkW(;(|3hh55jkZ40^7kB}kI`1c$Q^0Sy!lysR z+f1XZ6|5aoaj-$L*TSd0-q4=^t{GPkURH1W58^?%M1xv}W2>X;pVkD~XmtfIR!l<< zIqzQ*OKJ=!%Ti1=r3r>EbcGjt<4d6kyQG(z}Zi?xk% za=DRknO2h*kJw)R`-g^XfOgCg|AOeys6;Q_r`-s*ShK35ISJk<3{kN-_17~Flq`(3 zM-2(R=_sd>04`UsTmw0;2Bv+S@T1v17b4*{+r3iu2FUUJaz0=2B1QKNYK&lSl4P|5 z3w~%pf65)(|H4(wxA?pTQOc~7Gmmtbh)s+|kY^Z3-~&eX|7m;8xF*a0n`C|+*f*i&n z-eEBaMn=~}Bo5Rs91w}W;tAA7BQZ5EvQ#$1P^p355s2J_KbJh=%83nU5zgz)d@Vx1 zy@>Yw&sO<6(|E5O@>Bw)X+RfVgSHD90f{JySoE=@q+z=+)GSrk7pA_n9et(EL<~y) zeOR{VQ?ru$eu3>BYx?i-=AC1uT9@hK`mzGXtLkeBv?aPXai^~?YFvE&6KQ}T(CKWa z>y9ed$8HB~j6;l6&->^8EKYA!6ttTz03<$qR&F;sJ08#2c(YZh)JT9MwV?m!VV$FT zAB#YBXg!bMulJBy^?mghW1+& z7er6F6D8CaM4*YdxR%JdYo!^{fR5J98F$s8U_bK{xF;Mx?#n+A;cvk}^o8A)$(dOa zm`dVbwS#{L0ravFR-x$GWwwCz&9_dPy?6*6(x2a_Ew(p3e(!SfzM{ym+ihWC@d1>d zPAlk#(`2;+iXvW37ADd3uA6`=Hv=98an;Ckww>qAvGGqDeAoN$y~#D-aLxTa@N_qN zX`YKlIyrA00t(#`q=$7g-JzlMmu9~fW zOgGU7?c{JL6%Q-qBT9%cNKnl@tVr?%k5L=f4A1pw7F#_ z1lPCLrtnt*?gX0=QKB}LXp?2SNReUk5QA$Iy1h#o7p9Ukhw+GNqEr=H-xDbypINCM z#^aIms4k|nuIjQsn8Pw+%t2M3{kvE9TZgx0fZVtr^z2|x%+zzC3h=9@*)fnt!`t`9 zwB_tZ!qkN~)i;?!Ka7TS9X{G~E{I1ge_ZBI6sh+Hhp_IQZGGTQ@m}Qid{LwJ+NplD zQNwt9#rNROjRuF(j38McRja|ayNR;ol&gi}n;^^^8ygFn2`Z8iT9u*mjy@3)$we^# zTv23kfM=l-B@!2KxWVq`Ho1k?ncJmZe`z>z^_VOVhc<;o8b=>=JZqP04z#&RacWue% zF}pC|(D0S*>OZ~97`qR$CXUPSB#i=!zXT*ds6`A^FdU|R(hC(SnF-*51W)Ci)kFzC zrl8cg8N;gSOgqJHq_sY2?lRm9inmxN{^mE|LEm4`tH8?~zNoQOa8pkG7xHQ3`>`Q* zI#jt6?w8p1WaCIpJl^qOYB7nw>6b!lNgM)as|ji03YU|7t%y6`Oh>I53*qDN3^(_D z`oxILK9`t1q{2`z8tNL#tm1U9BsMpRk=4m_c_e&XcWg33n4_4im^5l4imWw#O`6d_ zfQ6`(WZkpwea=CZuE9WEUmG*v|FiVbPu4n-H&iNg!auZUagL&QH)tRrH@Oo(aRySO zK~Ev1^04RGK_gMSm|Hv)lAhD1E$c|7)(GhAx$~;CH+UBFT#?$y%TXUa=o2Zz!IvHQ zZNo$`{~`eNF+3S`XQPEZysQG8-%EGXONUg3?$^_14?2L#qfLKp&JcnMA>0 zLdZPLdqc~}Or=&V`vm{+=1@K9V{IsO{@UWmn@L#XF7J+$ z&}j&+@7)OJ9|sR83Oidc!wSm)3AHHFggyxq6?3vfv;<$hV8733n|^n)|5r^~wqiWO zPpgm;v!~suhUYi7E{5A4Tfi^Y(@QfLQCy9)=B01R8t>bZF!<&JoI0DaZ2qJoyNJU7 zL^`f=840;I0$m+N5UQfyor}$XX?`Hs({Na`wHQ_tPu?7rxa-|c3)Fn= zg#6M}k_?;7@-bW(35V0LC>aw;p*I*ZB+HU$l_xF=@J2Ifll-)stqF0#an;9ZnQIpY zhgoe5XU6E85*<|vm@vkN@t5;17J9M*!p0^o{y>^Y$Uuee(FhyQ z$KaaF+32cuh-)u)b-xCWJ9D{;PRawsP^ukHfj)JR=t@ zVTd zy%cvJWavmaM(yJG&rIZOaxP=#D!d@9JDhHW=j5!I9v1O}x;}v(wKhx~l+({dmMKvw z@W+{S@JiVo;zm|wGcbks2peG7E$dYx4>V(ablayhb^sSz|u!#m<}6ms~` zzoQUbu7#MuwEIExp6d!1z?z?3p8Eh7e3BBEqwsj-evs0&Cx$UT`p9f^lC&w z6xWt$Vwgq(5h!$4D2%cv$POok&TJT(CTn|t3n?cb?b^X-b$Z1!CTc}h{UnH_x zeMX`ZHIB83p6aZRZ5kRd_q&gX7{$YYq)1!BB0H5noaWCgE*l|%zGMwAkpa&QFr&dM zyCpCO&JGLlU$5wp4Qz*Zdac#a(2?hWQxHONVyR*y+)yObAV4r-ouqu|FQLXg=+ar7 zc;?W#h|>KJ;Zb+7iN9l(3g-A*)}Lc@-xgIP+%eNkcfw^qrmb1UYdQ{oWZw8sf4#du zVE(xhuURpF?Z!@Jp$=zOSArxT8U(G+*W_&oAKFNCJxwYv1z6`@!5gJR>I z$BG7BB^WlF9Z9(+5&y{A*sT$k3^{$51CP(mAzy(lgB*P%i9!=JoFXP!(oIK=L}WEz zyI*>}SsRT1$2>tAAadX_;j$XX&XK-vNbDK7S`dVZ z0isPDg6sd|V(?{RfM7EiBrdthrg?X(*P%9R7-E*M9uP;=cP$1jc9UK{)3@2Ji4y;m zLopZp90lTep3tIeYHHb%mTTj-)pGONq7%`9_eJN^;iZrsN_{2h?=RK-q*en6I{UdE z=Lj>}ok^Pre`19PC}(_M6%z2FALrU{p%ior(-PqwgMyjPcM(?zUAk!v2Fo<5DiO~I z-}$nME3+e@=PZ8Y@TpW)EJ(w+oxS4c@D`e;U@S9Y-lGDZ+_8zRF98K z^i#@LNhJUNywcv--}3`L<=+!=eI)}V1nytsP9;5 zDV)SnY{R+h3E<1q1WDWdqu*WN4hoT%0w65msl%2}v9OPPlFo1G~d;WU%H8TPKw+@OKDlz!^Sj+}N8 zz+bIHh^Bpnar2+TrUu31ontyGneeBCL+d+}Qb=AsA6-t^@f5QcRoSJY$BAoqerJS& z=ZyoauD<;xkM#SN&Q?qb&)MAbWsFaVGpeJq1!+2Z95@!X=s^W9L3^@6^D+;w3706mH3sT`a*hvu7vsgeM}onuQnFpJvE|$%@nwdqeS^qK0JT zi(QD>u}LfKU^{_8i~WDk`A{R8dxXlCQ)7b89pj2vlMGwpB`&)7F#pmOS;F!~LkY>m%>rqt3$~+u@wwe`_B6+_gv9 zNF=TBsC3$}3_WL2)33tONg}m>+!uH~&iRhUWj6O6mnU2Fk4r-Nw{Zg&Rb)Hoa@jv> z<~?oyLQUQ!YzWF#d?&Fgq#V`ID@SH3Yxo0-Byklf6c85&jd_%O5n{GQn5Ah1q&{6u zE`5ikh+l;iO-|$I;8E+)YPu?1pR6F&cUNZPEfulag{f}MxjEMq6Dr0;Sl1!`XXHoj zEHWwAk2KbUTNY;H)!K?avDRtsnTo%oBY=_{VQ4<_&b&<&yneUP2}sC!4rD(H$7>Yq zyoO)e=~D3q#r};@u(`CAg_k1I>(~%AhVcP;TxUJt*hDZ2XRhUloQh8(;-&!43*g8> zvRFFAC0kXQnn^&E&%KrVoJ@HvvsP_B6zj@)8ey1TB7qlUhA&4+mI+H!hA1xmUDy13 znx}C@)xK+>6C|GC;9VYWR|uI3sfD$9$X9XpX3~rwm758iw87adWN+?$@qb((*8mn} z!nmc^^7YLrF)7l=%gvMm=Df7ue#f^`Fdc@%pDY=)k=ARzE}9=)Z$}~Y1FH)WN9*q$ zK6}nwFDp4iOV%%xBI;mG*_(7C${t$SzCLrT{DIHe>R<-#>an2?*WKD+M>!x&?13_* zu3*IqtSyoEu6i<)jxbB0#`3mVi7fdlQT~#gZv$7)?%y;}!H@ zd(a>ptaWsB4`Wa&yJx+$Rgg!@C;E#LYy}eD`Otc0cTvcr)Dpvc*{Ve2y+*y*N29+Y zoSWnMn9Lg{RvHEzMvVT4UwFKM-r(EP{aVM>AJ_WgHQc=r2ia|o_6~)F{4qgky@9nE z(4gZ0kwkx(Zp(1#uj&~-neO??``N=ApyDo9ruc2DBeQ+<9<40ix3}k1ITzzazVgJB zUuc2@q*2?I$W^IP43>6PaMGi%%{Y{`32NOt#&o9{?s+nvc`7XLnxWo0^I!_vcc&t5 zDb98;Rfrh*&@C?70ZD7Zd8M3X&z!sT_N7A<586Tyo|+&VrJHnbS$ zqIc{0Kj^Xpyn7b-UZKMfk%ta=t&!~Vcq8_KtS4ts*5i@U?t?uqVqtHytvlYzEx}^d z1}Jamj_$Yo9JKWOTgqIgH7G%~J(oIpV?NdM-USWgo7Sor8Y zf=&fw__!GInw6dde(O0VWqStn@mrb!!k-WkvaiL6iq~bwG80RfyNwNh>dJ)}716fv z{ha6p@fO6ZWd3DYXvoJ3$qdgGMeT5ecMC?DPNl8X%{T0D`8NA?+5k;3eG zQf3QP2jLstEPX>UC1AYnk5CQPc$Ss3wlcQ%u9*;F2l`wlfP{}MZU#E~WY_wsZ&p4f^Lz#C z2pnGqBP9k$x07H7E9Tc>M?*2BVEO*WvL~k+o_G<1Wo3TH9EZuQsUT;kg)gwX*g23Z z>PMPCtzi{@mZ%T3}KZzgw5Oo1}p>S>)HOd0CBk52QHC*cSNfx z^hy|+*Q${4L@p*Fh^f@~SXGbTAH7_DtWsrC?X6nU4nNBAVLOC>oM;0+0H)t@roEd? z>pXbh-0`^z2CYlt0Fn*2D*^Yoa@j*)tZI>51cjD^tb900#{rmZXNKkcLBLtAZZ$)I zA*vSim96j!Pbk0dUR##qki5Rt_b!J-B@S@qRS|V^ih4~N=vi1#nMTcU{d2+El2E)L+$n|+oq<219vuus#lxA>j9 zsIzMWZB-)THG-@Jif5zfou{kJ@qI?{=sC1o&?)c#z;l=RxwkQ5`%r0Iei&0fKNT=!B1L0iQp^;@ zpd7Yf{vm%7;IeeJ^LYr8%LLwgJb;&k4u+?0)BX)}L;gdUh$r0M+UN(%fv^|Lq~b9M zTT8pmjsG^!f@x_a7~^!vKGSdQyyCE>@mzZ2DN;Ly+mqSz+U%1l|Dc@f$`}NVpMGK`;NhTrrqmsftqjHfL?(H z{s2GZc>ulleHxqV59c;y*EO`3-3T2Z^lvNd2+8X9Q5z{2&xdbouK9FC+%;cxTb+=b zicJEiwN736>+e&1l}{)x_uI9W4I7_{uUg(-uk7o<# zlDg=owR-Hp7GP2nG&MH!AB4}=Ck`@YJ}Z*ZJxPsy^e7}DNDTtCgNsH&?a5iMGThz^ z?|&P;_lkwwO-jt8^26v4avL-dgY<2C{>~-Zwdu-`_?j=BP8)$?8_h@;6}W$O9425x8WC2WWLkM3qgT~T;akt;%Ey4K;4z% zDTQB#??=D+pIHB9^vDe6rrHU5vtdaQk@zOF(YOab?)f1)-<6H=2`)4@TU(6|ekPmS zR_f%EYGK|z=W4CX`NrX^XNz)2A0m&$RIy-yM4-stohyCzvCv`tf5a9)96DeZ>zS)! z4a~nYS@{Qub|gxwqp}Q>A;Q@Vn((|zcwS%0_G?ogPPYMXBDT1EzbZOvH?Uw!XvYt!sh{ zEhd+$CFC|F*4Z5arra( zOGr2ksw^=Tix{iwsWZZ8iQ#C$Q&^;{PF*)_2i+(BPZ0KNk`qKJxqCSUnJ&$Bp%*Nh z+LmA2y{gCfUnDe_7p%4Dj^>73X?rkg*M2}v_7`b_$ItF$jk`pbQSio%`3VwcA$X78QPYni9I+A3N`3`t!MyIWHB>lAcfo+ySYf6j z!*^~+g3HY+X7w#e){~Zlgn1I0lN~BKF5c9+Zb1?W$5~NGgiNAGzH|STBSq+@dNV~m z&yb$;x1X?~(``XYzSCjcHg^{iG&^kSdN$8JJrOQDxig*czHqZ|^QM1Fd{5zBVt$w= zeV%0VygF=(S!3(MP>UFl=*h>LYN8rYlZtCGbsz*Im0)li9J#+)YixzQJ zeb7JXP_iup!`gG3(~VHFtNKqMoqJb@))88`HC{V%s}U~27J&fwS-aHdkqQGp&&njs2odK4WUyfzjI2H(JyA+jun$H;-AWST5sp|>eMA&G z76!%}IWI6U2i{xZfjJX!8Hw^!hMh&J0PDh{xx&!CF@^0_l|w?%UTGw z6QT%bITzn8MO}^QSQ33Q^K_zgd56+_eMGT6hy!z5gj1aQWdCC}K%3PO zwtXw)Yq5&x=Dp!X-#}Clndw^UI?wl zjntDdesu87Vr*w2Yf9D z)gC18#C5&6Ii$$2l$ME(vaxAd&2Wy6w9yq5#9r$c%pemLAtM(N?cm6oTjGV?dOc*d zXKpy#n%P|c>^l9|un#q28Bl_?8e}kB2I`)1#g1UC%vo0JlxJ*Y8<12$dJ-;O>=U~WB%KwaE}xa<&~eCKmx2A|l;6ConW zA8r}40ay_h4k2(hpcz{+hrq4K?c4>Vy4!=MW6nrdb`2){i-a7oPtg|9vk7Lw8@isK zg@LWtbQE4C&F!82tWt95Q)?nfsuD6`i$#*hoI;~$HNw0hM8kP6eam+wQxjZtG5vez z@~cMYb|Rb{2)yYj7tWbjfiJj4P=dkAENuv!@$@{q6!YGXD9z`&0d_$AE7WeGaSwX0 zqq>Ix1h(S(t?~dj9jh%PZtkvMTQy7EHDi=-&MbXSp*nqB+mSaPu}x%bIh8TLheIxX zu6IbE);~*xpSB!^yRq@wy*w?4b%utA@sU>&n9iH*oz}5ppS@ia{v45eEAd$V^Uxtf z;&GK85>C!evxSoD;jg7`9xfc;wp4)@!+a;i-MamzeV^ZOoh>Poo}g7-EKs05m~^EU zgVFUkXF8!V8^^Ppb1va(%zdyZu>->dLj-$UbcV$B&S0xP`C23$;(E;g@#bclV-G{c z`>fV@#d9sto^(ttM#e{mp4P-Ee;|=9G=n=Bn! znuV0LW(BZ=glQm{1KA2Xw0EvclB-sVg{Qpb+`+}iu$6YjJ3IvUZA6vwlo{FUzYnl| zeD-fEC-$i*YbP5b)TP#aBuc_Vm)&0GrZ~LhYj%n^KSR>^*%aZ zEM&Nk-k4u=JZDdO>mYGuUQh2R`Eyc{G~xjm@3=xbY&$P)1a7q6+NiXW@lUUdm8&J6 zVWM~uSqTLwE}ISSc{*?VE-v(HH{-xZO}Dj?>+70f(O{RuAv#lot6v^_*_@xK7qvv8 zp)1`4P$X%{vS6lyPyjw4#^r71e;AEmhNrov_6Bk!8Do)Q4=O!(cXwqu9kMB=YNTnrJLw;>HDyppx>2=+GcnyD&>*B?QQpz#=j_F@pXh2I5 zkn?9{79F5K;}jQ;r<{+ny^=_xP};Kpm$fAaZqjG;R1Ht9^3u z5kXD{n@uh*mQE~Sjw`CO<#OOJ;AH^N+4^XbmXpyZhTBi)9VUU(g=X{UYRhZWI|R>l zY85Ra=Hl#3<5-2Tv}1RhanzLbK4!EgFqUvI2Yl3Im-|Mk0thgDZlXGE0{7f(2fzQa zuYu@$9QClo>#^Nma(VMU!T)@oj00Y^TX}k(L#; zwPlN~_qwIAu6&=Ezga!cNXpfkVHrIS7yB;N#03AMZAbfZt@<1_Y!l53uu6saO3_nf zXtVUI?>&!7r)=kfDo?G@scht{Kiu3r>G(G2JR{vt=xl<6tO$Qk53VXCwqv~^f6P|b1XrN5dxI_p00micSEGB zXh&Yh{@QM$*v~kQrw|6{oc$sf1>5gnwW# zg!`c;ub(t+OQ{Z0g@P%Kia)r-Z=fJFg`Y&pMry2aM2(in46r5mnfM}!u5S-yNUlR{EiG;Dk8oKa$9g*xIFHmOeUC4su{L++f;Cy!hh2^D0^1=ruG#K6jC@9Y&k z!b#ai#EHjeJ5guaeRHB)k!%!`3LupWcOHgx2XtT4DE7EZqS8){TP<6a>1!*}ue}Sv!oDCr*geU}**k^WurO1Z@c>B6f>uf-qDz;~m3` z3}li-g8(5L8afG^=6DJvj^@5>t9a6ML;unn{r+H(-@zN^>w>&{b(g#I_*11KXLFx- z3Ov3mw2(|)A8g+5vKt~6`#>B2b9?m|*)d$elqq!r@3i%_G@&8#$hJ2@T2+FF{qfrE zknOx(Q{!_St>fcmX=!PI2zKK}r`-u=u~<1+EUi&%zhJ)Z@T9ZrVAGO*^HjNE-O=-J zYvZqY|Lt?6w|F`+c9xgKLD&9V(F#2B!2r^pUm^;fDd4-4W!qmu%IVbV!~DE~N+qB6 z2y%So@|Jz}_dHuO`gV!Khjf7TZ)u8}J1o`JMeY8A<*B31Tv~u@rMkD!utj2UMWW^=DD88U4W+|^vNgfX~C#e=M0EC@z6o# zn{Cpz{sd@oxlG>q=f-C>mhYJ=7kRRL)A zs`~>44l?I!1B<)U$}4*4dvyu*gzNGbE7HioAVb%nKFT5f>(`Z;d&OZJTA$@V=6-Q= zcQkYmtMT=`CK)@oceJ;+mjk^{;bni}+HjSF$0>asp~c+l0jhPLv@3j4K`h=5D%9Eb ziZ8c1@rIV`o#%$vebDtVSA)tly^Em@u8u_-i2dn#LA=H9TKyWyOQn_+E8?f`Cw8Mu z_})jS`CLzDk^hn?i7!ykFxS-t!Qq2P$?x-eVBZfi^S3D{!?Wco=MGd6Fhay`I+7A? zwMF<9CC~CF^AmhQT|j9P+Cq>U+5>#0wUgabpvt1HQYvScpYL=F9Y9N@`_J@#q|#1z%T=i~uAb)$XA?^7VC7fB z+!140Kg=j++YPCa)2iFfO&FDAWl5Ek6cVQ=>TVOGhY_I15Sk~k{hViGAtDyH#G6*n z5_=gXntDnF6?-PH5p-(C$V4M%4b`&$2D23++Mz%zl1y&EoK%h0wNhN{kS$*5-Fh)o z{cB|>&t&Lxf&fK48dHKIFA!M*im$x$n2p#So~GXbyeOv0r)pSfEyg5}gNZHF=W~nP zZcSr~ZRgd_lp+LH8|dZvqJW`0I7{hNmT;FzqtlH!UAZxZ8Xj6Bs`-~-0qVv7GP1Q@ zdbl+~z)LERs5o$>=M%0?wr6V5-9Pb7o!P*SdPFHAZ`}^RFyD+aLP(dV%rYiRbVMR% z+zlhxInQ=3O4+t^Wz!T`Jo9r(3--@$yStR&P8J-2*NqRKJZ{0GV$tdq4^iab8?Bd& zlQTE9T6e`uT6KMzYE(Ty-;$zL(~?8F;`CS+ zSWIOs0!$u%nx$FDA4|8bcC>^=)#+XKSkcyNQIrnF09;7ty~Ob;UZWGUk}l`P%#))M z?4L)XC;%}9B50)r#0X);u%TGPqZl))pN3(6;LtaA-(vVQ!KbO>?YkY&OISK-)cPM; z>L;)jTSG6nNT?`jg({SPELjpNQXy_Y6kPT?obP@F#cLvKM)!C0UYQd{gA8o zC4YvuXoieneB#g5izwWNHIz>(9uNk5Dnh^bw8Ou~t0j{bO&pXbJ1l)qw3jOD+DE1M zywausPoTV*Ej3u|a?yOrp~>k}EevdK>c7w0n#wX9zD^XKRE$JFf?T@Y=~d&TZaENu zIB111XjSVR;?^OWVkS%rHaDid{3&dbGkbhjU^uxO_xO8-Ajt5^Oi+|M+Il6-(V*UD zVd7wEit{Yfg0sUzCQ3BXkOU8s*N6*Ul;x)|3A!LxHlKuEPUTo|m_ga!y1_HRAD)Ha ztPXm0!Az;yj`ZLSb{6x zc|NOnGa25WuXtT?SUc|^UG@5Zl#Uu(uGZuB_;@;OoaX%M!ad4rz;S1!zHeBbGe-Ny zw3vl>l}Y(V2Ml(yh5M$`M+wOFde@#&M8iQf)Xam5o|b@IUYAMi@jR4-mn*maF;zOmVL=+J1}A&wt*;P8)J*Ek@!}o-I9f5xLbP z99^m$14>Akcbuaxw3Qfx0}QdG2?4l9@)LC;nfnt{CE(4`HV~CWS-P)U5*K}Q`}Qt0 zZZiON!i z;r%|+NQg2uGZ)q!qJ-JRm=?sLg^;$L7=53gsk%8g1+&M=t z)pZ=w$Nvji_C8-`^);>U{VpaHv6uW*Q-=SC1Z?XyWn9k~f>t;@IzLqAR!ShwykkoO zZcLJ%Z>3f=(hjdD{%Xh{5&XqPYq+s8pm#5E}>)*chB2(vc-=ih{YIN!kq45C=Csi zD3U%55yz$m8~Yh&i_Hx0h#y`se-K9>Ui|pw`)i4;iZU&)!NaYRiTCA11pV_waKa&Sz8i5>ch9C4HfYc3aqpa?ZJYcH?v8FmL~CQO4A3ZUn? zzmmcFMV!ql>)}T7Yx4Zyq(xV z8PiRB-1R(GmPCIG&~t^Xem}oKR)YsWMJbdekMRjJ_%<#`sG|qy(T)MvYc;V`O|Xar zsI)VbXQEm28du+)%}dOM@0*sX*51eZx(1MN&h#~Sqy4I#N?apAhbxfSpN zi!o=&5`FS@I&{KNLNGM}CmpKcpZ^O4P~KNn)Uz4=yf!EEDZnPiHxun1z48K@|-Lqk!ov z7u&64k;0gbLr~CLwxnp0m+c3PQFMk-zd&YwIO0S`pZft8g3nVnV|G_y`3o2|fccnf zLFL+uh{YBslE!~Cc_M)2i8=W&TCNvwUh_K;gi4n(GpsNv@0#l^sN_uQhb+5=y6BH~ zVNma|(9ZTWlD0IkqJqN{uXU$HERN3lL*)+q#yJz#Bnn#(L{W{!fSJvq!=$j_V8y3f z=HxB+8>JL4F923aS5H@qi=Bm}U}X`ZU$kR*GufW0cu6m+V`K480FE4BfP?&!;glU>aV|!zBgDbYN zv28oq*tTuk$;P&A+qUhK=YGHQ7p7;XtE;NJTewM93xhc(qu`e_UB!7A-`h@x`apnGk8DY2>h8WJ(m+pXUJ7ARCQCXu!#*+pWp&C+q-qW zkOIMjZ9-~v@u}J*k`n9c22A*LOwWh@9rZv8^(z*>>wW>K@K9cQ%E-b=P7d2(5%AK z5D&dMZYE51Wzm{|YDY~@u}^Z_MD=7iUK_3En>>Pk9Xz18m>#^2otHIdXV*$O7iai9 zaC#El@b(s@TEq_%t?02= zR74IV@BJc71V&g=PEI1~9rCI}0LTR+N*#CtkwVhp4>zgEoe(gSsqf%{Z->tst0<7>z>rfh9Iz7^@NA#P5l0HisedkJdMXibPJY?-upH zMrHtSbBz{ulD?z8zSaHaqj!gOY2#CFQ9#L#(_a7TGBRh(&KlC)^}-YsS7dz`9#$ap zJZcGsPr?jOoVV@Ss9AmTKj-7NY6UotBaHz^w3^O_%Nrc3r^Q>XS49{Neg&dL76Dv_Z|<>X*Zg&q`mOAX7K_73J^TVMnl8a@IIspil1CS8OW>2T4Ahc; zUK=K0kB{E*op>9e1UTd6QpkTfJWNHn$M8Oc7@sBuJi8R`xpZ_mt&3MFR13F^PZ6Y3lvD~-1!WJs^MQquzlr_ z&+s@t#iP{YIMOGDrJJXijTp$T=OM!-lIg0=FiqZ%UmY#_TwA+W8-Cdu3CZBHZ(Mjn`G+{$B~KW($uq3t>9;3F^5stPk- zpE4)guUwk#SdwJ~@XSBSP=pQUSO;`}Y%sac26@z21Q@@-FWB7|<#s+X_IrdytmBml z4%I2;Qg$3yd&em8E_IBuoqe1oJUM5q_Lh&fbY9k=@c7CGruGlSflvvq-l%s_-q%}gue>VDD=QI-jI&GdD9M=o2 z5jh<%6_m2v-tS#0*_|#%MhCI_t{tq3?(emR(=rv@-^3rcv!efW93%~4Hod%3dGC!j z9ImndhbMkO1qjm0H6F1lD9|vBuO1wW>%vsb!0o$e&fvHvZC{1?rPFn+&Gr`LqNu`8(nsrkfHSoghJlC0O2&W7hEW$0p9^TGAEGg{ZDE@GY;whF(u6VM;g%h}p@ z)jQzWT5AZ!6@;shyAX`L9OwAT%}5NOPzi7OKf8Ds0Zjwk@d2Z4a?w8C-S21!jTX~MPD?q1jMvzb~GprsKdL!&>Cx|%zP-D8h`|?=P;4;*%B)HVvz@2m1zPtJ;6)nI8redAZzPURv5tkof zKz3|Lp(v^R%3U3pT~*+bV^cw(kZq{8RndSV&ff-i30)$jiwfAWW`~X(j&owBwt{e! zPW^wUeN88OwR@*vVbvvrwI~O+n>sl?0~NNJvtozk78Rk*n@%9Gg#4Gbx;21^Va+2V zk$aji)XO8LjDloreYmhl{fLBZ$04r=ZI(9_nptmmZkxRibT+iQ}b`f|-zBWyli>ywK;0W3-?LF`AE!5gIK&~PgAP#UMDg^HqnU=Cpyq6V1 zJuToLlpSb*kj=Qult+)T4CWbRf8oF~FMwG7hWUZk)NBm?A0btLK8j`4Xw3)ZRE<4H* zL@?X2_>!%;<578uG!oV00BB7f$^SvtS7}X-sQ~5Fvg8T1Z!X6j`{mKnFN5yuk8{5Z zf`E0nTKYM}wXCtXL;_LV-cv-_&>Kbbvq>@(>CZ8X^FgtWkKl7MEJg$O`@|LpaH`I?thHHmj-ZX?Yj(OL`%iVlfjA| zIN>jFYHJTvn&6TgFJ!uk?I`g3HgfInDjw0>x91N`S>A5wHq=JNi@7jO-$Yj!-LD}~ z*Xs;fQ7WuTNrI1@4B27T?`zpOh6uO=vxGp$()?Q4TzqkGEOwAbjOhZ`Ez0ci1)-!5 z4a`MyYzszpxjsjV`V#oJ@Fclxjq$_^q1-V(9YR74{vA+ER*JX^%(%Lr4Y2*2Eu>9| z&==UN??AkXY;L zqLPX#w8qAmb-%+i@reW61XA6qxDxlcR2o8+nC_Hu%xR&J0~X3|c3dins+@w^mpvA& zWD|2q(iM(M6z-Fzo+v|b-c`7BqQ4H30^YBt;1I2L9~+t*^}n-u5{KO;bX;NH-rsNL z-X1UNF*J4E$QCgFFBWUSP?MMci_K%)7gG#)= zniI|vAieKVcppaJYs}wuN@tmw)$c;rhAKz6hQ%2f)j_{s8n^cV1ns4?&$RgSH)%1t zF)ls_kfFuvLyP!yta+YA87c#wFV}*vcoj;XnQz3DX4~yJgATGy_t!HFzP)A=U$ypm z=~5=tP#VPZb1==?Fo#joD*~v-lvdg)R2q4xb3nGc>I_neMRQI=EzRA??B}G!>xDre zHldgs)~hNjwF5*L6(%*%W5FU7+!DhOM7WASPbVf0u+<{R^?nh9o?jLbb95i&c&x*G z#R0V6yDX*qmaZO=wLuSvF?H=#4UKMY>F<1#N>3CG`Di6JoZT zBG=%Pa!p2O3#uNkvUas9w8Yu(eRp$OmnexyB*Bw zr$?aGX+vc)nd*O{$(UK556D_?$}8{W0VDjcc6CBMrQ5@%cA+LlxmfaQoS&wnU&8ii zycFmntiv9Z#9`ZwBX5>!@%nx#(%sJ@_+rr6@&?lAK#r%D4nGz`Wl0|L`FsvwcWv?R zAhYQ(Vc<;95Qqx9{jD^oj|9dLsnm{`G|Z(16c57440o7KZbeh9f`FiBa1iup!cBk} z0+m5Cbn*K{5`Fy@XUw*?l5?(hCpQ4BgSpFb;j{dfMvlr28fgsWWDH~mnKRc&p7Izt zj+!fM`%#j2Xeq|ZA%!hpk^&h<^aG>GcJ>jS5AX#d}Jc)>pma$ z_z*byF3LB}idh)h*%*!|rO>uMG^%PnwgOTr-}Zt4s#>w(W_J@DIC9dH2iAFAF_u1$K=<2T zcH_8pzMCy>+J~2k#v35A4Vn$Wu@|-H{3$wt z+^jYG;M5i)L|Pf%-Fmn>E_ZoX(j@zVQ6v=6#6bvodlE#BC;QrC)P@cC_dL6FYM1`b zzykbD8Bz6td_BYi?rq+Bt4jr!yxKzNdmn?zlN_`8(-~ ztLPBJ^v!kcvO9d(NPaI>oeu^axAUX1oNKykXFtx>-syKn(qkSlDIzZTYB$bXmtgEu z+K7XKV;b-g1X`N;r`&NCi20Xz=#-@&Y9pHc6yeq$sM2o&E2f}~UZ(@S*8bvtvdJM?Ng z^{*^yx^g{8lh>7P$!Y@uTbw`2RcF=^IQBLiTY4`$hc{fCfD?m9JId*FA3)0v{n?qd z!lwqN2>e?aBkkbJ7;Y;bE`D6_bC!gn!;VGJZ5WtYs^JS7R}f1iDcS`2b!Ag-sj?Yl zuJZ6MoB?M*iTCZL+T; z{xu0`GURIrbdyyebfp_Ne*WQ!lLe6k(7i)lxn5y6Qs|VlureMnyg($cKvVk1Oz4WU z=!%W2k|?lIRoUi{`0loDj0vx&O@i%L6L5%EaLPgdkIn%*CkXVw`I&SW6%dUGq=$-k zrAE;qz$K=Eef_c%Q~N4QfOGGAz41l*b%@j5_p}*eRct7ZE!bNn?N>pS*_j2O()~Fw zZTsA;qneUYTn5wiI*4O?YtiNJ>M+f&v?j5Yq<6RqNiEX)gOHL@vBd@5b}(kDdEko^ zp-gD`mU8p(dqg&d;2|gBq&WaU~VUGxJ#%uVnYn1-yyV zRD#*KWCoi2?fwV?imLUrYuzNM4EWEe(9hkxHtoeUP02UsISK^3U#$p|6=;rQ4q#x& zlT_%{en)9s9oEO!o8>5r#^mnb!tpz-T_-FP@xYcEBk z`KR%OJ+_3Th|OY^gs^PQ6b&Ud|vn(@7Zj`RlbGm|MCN3Jb10};kD0F9`v z2Rzlj3RtGl&7KKlTGaUkmkx~;b(ifVD_{AOEpN(7uo|6g&Y!h~qL7#res@IJ6ytqj zoCW7$#rM%8C_XwsOjx21UJ%ZI)aRyAOKFP|qxfZpg5p`yK0WkZn1L;V0s4HQ&8KA= zF1JA!arp@>95^TWg9oAoH^x|tDX?Lr(v~pA62#z0llY@2`^BhXnljJ?`_wPVOyxz5 z$tXFnN<*z)F;T9HaQKKJg5T#6Mu1)9z<&MyXNm%SXO_5o>npTld>kKW>YJK1fG3cz zJRrTDVYd|?=9oz>TTrxncc^OAR!qH(lrm)=A?)2^H@&re|IcJHGblw@Lzb&VX7J1F zT~M0%f0^j88p&4My|GG>bk zZiB_ERKDMZO$fwjLLm!#;PT$jIH=W{z)YJ;GRxffdi3%$awTfNuIz<_??b)MtVgD+ zK}YLh!&sC~b0pSv-5feU`g*UFzB&vr8^3Z_kY^|VP2fe$)k%^qMB&+mlpOmD2Pq*Z zo-J(YbZ6p-d@B+1jy5a^_p(I#`Svo==^$&@zE!%3o3qwojU)mik|2)aLg3*B$1{|2 z78BaWaKo27p`6LTAfytqRs*!JI=#vmrB3 z1xal&9<@>SJ}PhY$Th7l#mX%@JlE1^H1s)jbmx0eMfj zGE~M57f<*8D=K?+z_!J0xPMsU#Pj&T6Hwi8XDFS_mg&+P)9i|&!kV>SL;6&g8@WT=MO3xv(vrI9iXXG-|+BG=iLr`{k9{~aL$}L~#22cs40JDSe71IPLcwNS3%wu9R*0?;&r;5HZ2+m0V zB9S6uU147eGmk^Vc7rf_07)bf&4Z89Q)xpkm*GI;sZBMWOznR-F7AiRHL8dEII)DG z7^!u@qMBYRQIl04J6%}arqaFJ)m7#SqyVf|spGoZ1`vg`xB*Lz+-PN^?p|TtXcdxvZHC#<8`Q- zou)VLW&}-Hj1V^)-*57AI_Q~OTvo@D9Ph_*W(WCq)=IL$P{ci2958qgBwTl=S$Ih4 z;r?g$c&&#d1bNMUsha(*p-2DdVvYcP0Nsgvw7|5biL?uSvuBXq<_@aZACB1e#aU}Z{I9E zlwVieG+^1{HfFZ{MMIBfP}%SduvG+kyQP=glFO64VT&Z7_*mr2w-TX=7FNJBHIHU8izNl^P)uqZQ3 za|`~4YQ!)xu9IkeT>ac#3Y=z7UgR`Ch_D1+M*2QKFi^t8lF@_~CnGR<71^!Al?oQ3 z#hf8`QI776sElG2|HL#Q#PzMAx9R}%y-se$WC7|4G*j$0^OYc75SQ`2uxK~dN}+)% z^BF>4Xz!$eE+WkbdV6Tg7QNomi#*0>N@<{90H;vIUA04Vs-P7#M&U-M`fWM56RB-{4)(S})b=O1o*7 zxqW0XRI0eqWVyS+>(FuPjUT7(lp#RahyD8;Lu0-OFe6O-{~~MRxF!9h&aA`m{YX#b z+3s%0v3fe-RS+|7?eM5n%V(s>WM>!0AuONY<+%$ThtObJ#ZbEW#@LynqfY(#3*&o- z7g~Hb43sK(@)wWK=AD<7t3@T-sj`J!p`&i(mXoV(2x1E(#?XsSn5(!-S%36>iT@ap zW+;X>v#usbfeLbWqQNN(3()8q5_<2xYTSQ7O-# zpQoWBr%I#&&w{Ma8DRbzBGM$8PH#%%cbP!U*F>MaY(W}ikcH#w32^b20YV@ivCXN^ zUq=NQN`~Su1+s<%Haejor>J=1wq4J4o%Y-k7BaG3?sP_8E{a^nQq~v2*_-4){SrEf?v;rHlN68ad5IR;55VqyrzVPxWX3y{Qp6B zyf(3@y`MiXiWV7$@B4V~N@O;iC7?5qkS$W9GS_?>Ntp?YhR`QhjiWyJZPJ@e3VtnF z=*yfoLCSf<0omr$XLG4nB|3TJdc9hYtT)?#BNL)DE|louBPiT^xmdv}`JN?#oe!0! z^FD${wp-77Czeh zdI18gS!Hi2Orv1@W%X{D_zAXHljOpWmX z&`o(XgT4wNCx$+<#$sfX5~QZ{5f0PDs||i3iH+KIEt6#o2254=D@bfKbaYty2dyJ= zf*j?oKAdJ0riyGqpWre5b@EpE+?J9RvQ&H_#;>+mJ5D92Rujr~#~eX7+w75qcIpYq zvbwRFb4-R?YYwVU+@B9IkgT1KA;jX<4~|ay>&Z09?OJi50wD`E5OH!ml6L>k6{h1< zyE6TXQ(OoadR=&1I=>G>xcEe}Utx2x92+RL6*!Q1I}5dOhRFZdG8<*^sB-=Gh9txG zDm=}pwTP*>X}|AYbx$>>A^?g{Mc|;m`at%i=yWKz}qo5O6RR)(>UH_j+Y=(Yc%DX;qY99V)S1L;)hrt zVXEcYiMc_87bD}q%J%L&E(_+&Sy6rl$2AKOY@4ZjN{Ma2)2QlAk}kO<0RQS!Htj;> z3T<}~cf}V4iFW7h=w^9&)OphH^Ug@`)(u0Y{`Ij19W1L!`$9Nkxuv7%oPk$KG_;?)ld% zNjA|d4X0B~y-a1$b3fuJhIy)z1f1}tHs2$Sp|j?_lR3X9%k5$E&*cekUDxx-}1Bl%w?LIy@y9Y3={dki0MUqQHWqI-&|Lx=XY z2t-I;r*@W;uYY{?`En|FZhHt$zFf4GUG-bbTJzhQsAUymJ>+n&Tfw}@a@y==k6lAEUogjJW z01K-B5$hP%xZAT`ZeP9T<*o#Wg()9^8>Kqtd_<6yO?L=7eW!#e%R&LyAR05X>V;o=CNartnI?KR6G%|&11 z6JQ;bE|>q&UP!)~^adBNc?rnl;UpDYH|#3DM}eS@zb@b?(}z6x+8|PL*bpBzjK7v; zwE{h^-+3&QI{u*rM!V^XtOl^ts)Dx5x189cR&$Lzw~pnz*Gz{Exn8wtZ9d{Ia1jJH z*bpFzuX-~kF46m&XNgX{WMYKXt6ch_FBeJb@rI0W5sSR0HuWmXCGj*S(|>n=&Uh#_FE)D!P=y1`NSQ(xfz?pxDzMGQ0u1PI%H0{mpA@GBytm*|g@WV9 zdyUq^4($iu3-n$gRzE0;oo+>BnpMV)vjk8fSoP#iq*{}tVS*Nk&S4lS73`($4M_%8 z;OsB~H(CU*chfu-AL&V~!EUCtQBfDUt0eqP&AzBs5m4RI=xO>(_~{)e);)iXawtdZ zDO#2wQ=~T$1H*as@<~?mcl|;A#|WK~T`Bsu_Y}u-D3&i%Fgw`Mysg$`Qfb2nF@>;VNRCp^?Bk)0D_W|+wdfR#ZFTFg|dr`}o8Y!IX8j7y{ z(il74Hs3T0uKk4z+haH*PZJ2WFe0%&)0Onelg8}iSFKvWJl8CpO(;^PBi_N*+U0~jsDp~Wwj)Wgo3#&{2KWPPuUq&vkD&Bwz ze||>rY!Oqamig;S(Pe)~5`z$>4Dr{EDW5BXb@!(}zyl7tredKhn$8V|LN_0G1+kzU z=e665JhH5_DLnxT)GC`l@;G_?2VR7FzRHYbu&)1;YHWK!nj!TsFeGNl`=@d zC71;i%6PqCZh{M2vFLR*bWjuZYwS9As!i~ZiYk8uRV1uzf8G)4f#nbkZ3*`xtt{K% z{1f&dBf2Zj%&Amw$&%PkPOw0wD^h?T_UJ*GTS0PqmBium=(RuTYfmUnNNNt1o;9kzC0dwVICVi%%Ge7}8_CgHRapw6woi zSDhDkQ+TG6QM~nE8^LAWt%mn+PTeZ2QR%D}=*6-bVOG_ae^f;=bXL12r?SydFoOT{ zZ*tfLHE17nMZ@L(TS6PF?SPbuVCQBJwAuP1-SW7{aw@AYWAJn7-dFH^-S$DCS!EXo z+B0cgi|RX*l)O1CX#k%prP~Tv ziXC)#pjImY#>C-F)J8xCeGdqO>%4ln1`IifUHBAe2{23RdW3~iNvwCEb|hsYqq7s+ zd#P}1oSB%%ueq1dVlE)l_@ZtiOG>D~mFeXNm8@N!_v*!IP&#co4k{h<=kG)! zjUmBmf^BLrQFu3jgnsD#lC{^~CYP4F!vgmCYdpNpxnk4^Hb zz%{T*TD@>U2jEF*reO9QbBlPw-2*uxFiV+A`?4jKTpvP@QLECB^9E}E37>LX0E#8N z^KDtzYNqnx4n@AHfEp_h@#63A)LDfb(bCKBt&eP}G71O%v*C`&r94bRcq{ftCsAsG zh{sCtuJV*jmaXY4p9J}{7r^CGc^DX^$!Zm79SD5%e=p~YT1aN9VcS5YcqEY_;4E<% zBcTmxK1ku6KfLHRjczNVxzhyNfT5Ds$@@XO{ATjo9SOXOU)-J$jL1*`i5JCQ(9#oE z_{+*h@b=*~7yfpwUMmYK@)%lkJk0Y8xHN_bo{=7I0NYEIk9S|!>1J1#qzdA3;6tFa zcTXNc$N#C=@6`XYDLHhiazb-KJeX=lUjiLSK>||B)3=;ah{|EosKIg615}uM{s{34gF?kv!BL4xp6pedcUxU0u>8$boFz9s=!hg#|9Z7 zmz98|@j(UWnYv-WXS7^D_b8EVaM@jc_(8knEHCduL-J4Y1vaSqZ5x40B+zv1ECR^N zayX46m%|1WF$F(9fKH>qP{cKZOhuf^0Pz)j6+_N{A7K$qh#0&Z>vcxAY>zT;Kdkmc@yP^uM` zsC6J_wqej=py^T)+DZzIgRE@g9Ef6_Kw=e@1u`%FQX{8BI_FfGKl3}yX6r1;N)7b< z9!06cjYM$}Fr*~)*;?LFzw_nJ+li6KjU(>7IHa3}xldZk)tgYCvQky}?k+S${MK%X z5%L{=QDga|5De6kfSa{4-(0N`>cT58suXzeOu5o&fz9GZ-pXdTqcoCGcZNU?1Ou`59 z7w(ptvx(20V%Up*aPDP@&F5!r$ssc{^8$I$Rb@3Fe9re6C}vrWe`LPg9k3oMKZJ9> z>l--5h9mIA6Z$$^A0{YfBm{9Z`F^WGeR?^fjqlUvJJIFVFf&ew+6|^KXX}*Wp~G+m zh^)UAo#R4VrwwV3v#~mZr%F^E2_CFyYtg_uZSAc-*(HmYwbl|-9irE*W%Hksr<5F_noO8km1YJjGmX=nN(R6~8h zyPGGJsk93}WOMk91C{VPRUZwJXU34XR1M61JY>9}8R;(xg0BTQY z%VduCGOA8|l|>59h7MHf8ghwtIxJ)6zWvm78<13;j2FpAZtG}r9;K@8V(tE1k@Pf= zm+pRI8lUIkt113&$aE?%YzA9J33^;O^)Em@Q2X=@vrVYxDr^TTnBR_J=00D(@XXwb zzqw+uX5`g>whSVmvV088L4)LUqZN(Q0IaQ5RRMN>%u(!@6%3z_mZm

!8n(?GF`HRcbJ4@&NV8m=xGW*9yRraKFY`l; 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 z z!=lfJI^|S-cj(X%9fb9<5DkL3m_lAJbKkw6#(5{O*mI~kVG;3);{+T$%p&L~_5|+P z(ke@xTubFO-7)9n{uOTPPeHu$niJR&xLcKs6fPlM&gZVS z)lpw9UALkn#XX*)@U~6N4qZ;KjU4W%@C<54QEFJ0JPgwPzfi7BK5}w#X}SsfBefX} z4E*l~L=%*%prIB{sRbSa^9zUTs2vL2%*fE% z4L9mZ=7i2Ej!divYU~S12H^5c;k4@q!!FJSmHD;N#SNP3qv~BjI>ZPybKsm@8x-(W zsY4kus8e>fJ{#NjfO#RNz;3bi<%~{afV?s7^Q-Caxq}O9{^<+*D-qcORpt^Taw?^n z;8u2J9lk8CSYPGy2X2sEWX6T*@kBB8AvI*k<#B71qhbK*IyiI-3z&#cDB<9UtTQ)9 zxIzfr#wtHK@fJ>=5($LznK-ZJHsN}V(Jy8FC>K5RoY3TIK-FPWs+IGbf+%vBkW)X6 zT4I!yLXj9uK;Vz**XbZC6r>23h26;OZ>Gccv8tu<&9_hS|I_;HXY&rhUDD8lWzY9G zzw79|Mzgb3b(AnNF)=W)fRVsNu_R!L?JI*PQ(>v(1`(Yi!$AT8``NQ&7NhhV4s6cA zNW)p0hm{gn%Y!04P6SQuiLyfAJA;dzA&WRG??%k1ba=ik3{3G}_eXaB89h|{S`D>p zz1`F4a1jM|kX41~ZC zG>@hL-4vhVIcC-XXsSDKeMw7Hg^;PkyXD8E%Mbr}^CB;aNjf)GW+cC&v6VVy#rQoW zG32X?7Fk;~CO=kiQ<%}0V{~xtK9V%`aMLCnfWGNMvj=sjH18(Og#I0Raz}e`mUJWD zXp`|&LAh$OX%k=s5D>yWO{Ce;cpXbuTK;@_1u2YOtp_|bE^E3!XFSsKFuEnO=>~o= zCN{pyt|zps5^BNk)^|GWf&vj*D=-T{?Ee-j`66jtj7YsugCQOB0S(O$Ks;<{-IkXh zPAG;?*ylUwZyW|01!~Y z15;5v{3op|9m)YgIjIl=@a&VWT;Yu*rwE;2vWpgzl0vHTF~iD^l^k(Ev^;#W)qOTFUc-PI=&j z4OlaXOr>c%5+;0|!L0cn3GM##sG^1+2skL{xsi0AU>qL!Vb%w6+(59$lL5)nvGV@L zrG%H77*9`mu@r%Zut~5Xfg2`2bX8%^(V)IaQ5`+o&*CbSTPHv>N6U062&ExA&zT%H z4xKhlg~3oGgf&QeH9WqV5|R`Jgbs|gC@{gv4w|$1aIjbxywHUDroK1oO$X`E{&Qcd zijeuDsjFJr_L{PJcs>vOk#})amLL!uyodA5Sm(8X=S`m!h*QrYWZ+y7*c_{BR4p

}|h(!pi@qi2%;s@CAPDWQY8%FbTZ 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 o^!o3s{wvgfHEAK^Ydz2De^H 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�)i&v4GO=A=fYrRNF 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�Q0C_aRcmlel0ZBmICnv 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 literal 0 HcmV?d00001 diff --git a/docs/protocol/badges-overview.md b/docs/protocol/badges-overview.md index 7864c6fd0e..41ed3c5eaa 100644 --- a/docs/protocol/badges-overview.md +++ b/docs/protocol/badges-overview.md @@ -28,7 +28,7 @@ Revision 1, 2026-09-18 The goal is for SimpleX Chat to be partly funded by its users, who buy supporter badges. A badge is shown on the profile of the person who bought it, and it raises the limits that other users and servers apply to that person's files. This document describes what a badge is, what it grants, how it is issued and presented, and what it discloses about the holder. -In an ordinary messenger a paid feature is attached to an account, and the operator sees in one record who paid and what they did with the feature. The SimpleX network has no accounts, so there is nothing to attach a purchase to, and introducing an account for this purpose would remove the privacy that the rest of the design provides. A badge is therefore designed so that the purchase, which the badge service necessarily records, cannot be connected with the profile, the conversations or the servers of the person who made it. +A badge is stored in the user's profile on the device, and it is presented as proofs that cannot be linked to each other or to the purchase. The SimpleX network has no accounts, and a paid feature must not introduce one: in other messengers a paid feature is attached to an account, and the operator sees in one record who paid and what they did with the feature. ### What is a badge diff --git a/website/src/_includes/blog_previews/20260919.html b/website/src/_includes/blog_previews/20260919.html new file mode 100644 index 0000000000..d6333c3c62 --- /dev/null +++ b/website/src/_includes/blog_previews/20260919.html @@ -0,0 +1,5 @@ +

Supporter badges are available in v7.1 beta: a badge on your profile, larger files and longer file storage — and the purchase cannot be linked to your profile.

+ +

Investors in our equity crowdfunding receive badges as perks.

+ +

If you invest $500 or more by September 22, you will also receive a public SimpleX name for 7 years. Learn more and invest on Wefunder.

From ecb9d8715792c8dc915ecb00f4bda1d32f4d1e0e Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Sat, 19 Sep 2026 09:13:52 +0000 Subject: [PATCH 10/28] android, desktop: fix Submit button not visible in passcode view in split screen (#7497) Co-authored-by: Evgeny Poberezkin --- .../common/views/localauth/PasscodeView.kt | 8 +- .../common/views/localauth/PasswordEntry.kt | 3 +- ...-09-12-fix-passcode-submit-split-screen.md | 147 ++++++++++++++++++ 3 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 plans/2026-09-12-fix-passcode-submit-split-screen.md diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt index 9b25e9b5e0..669847c3a9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt @@ -64,7 +64,7 @@ fun PasscodeView( @Composable fun VerticalLayout() { Column( - Modifier.handleKeyboard().focusRequester(focusRequester), + Modifier.systemBarsPadding().handleKeyboard().focusRequester(focusRequester), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.SpaceEvenly ) { @@ -74,7 +74,7 @@ fun PasscodeView( Text(reason, Modifier.padding(top = 5.dp), style = MaterialTheme.typography.subtitle1) } } - PasscodeEntry(passcode, true) + PasscodeEntry(passcode, true, Modifier.weight(1f, fill = false)) Row(Modifier.heightIn(min = 70.dp), verticalAlignment = Alignment.CenterVertically) { SimpleButton(generalGetString(MR.strings.cancel_verb), icon = painterResource(MR.images.ic_close), disabled = !buttonsEnabled.value, click = cancel) Spacer(Modifier.size(20.dp)) @@ -85,9 +85,9 @@ fun PasscodeView( @Composable fun HorizontalLayout() { - Row(Modifier.padding(horizontal = DEFAULT_PADDING).handleKeyboard().focusRequester(focusRequester), horizontalArrangement = Arrangement.Center) { + Row(Modifier.systemBarsPadding().padding(horizontal = DEFAULT_PADDING).handleKeyboard().focusRequester(focusRequester), horizontalArrangement = Arrangement.Center) { Column( - Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, top = DEFAULT_PADDING), + Modifier.weight(1f, fill = false).padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, top = DEFAULT_PADDING), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.SpaceBetween ) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt index f76b82c31e..d16f0a2a38 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt @@ -22,8 +22,9 @@ import chat.simplex.res.MR fun PasscodeEntry( password: MutableState, vertical: Boolean, + modifier: Modifier = Modifier, ) { - Column(horizontalAlignment = Alignment.CenterHorizontally) { + Column(modifier, horizontalAlignment = Alignment.CenterHorizontally) { PasscodeView(password) BoxWithConstraints { if (vertical) { diff --git a/plans/2026-09-12-fix-passcode-submit-split-screen.md b/plans/2026-09-12-fix-passcode-submit-split-screen.md new file mode 100644 index 0000000000..f5051e6721 --- /dev/null +++ b/plans/2026-09-12-fix-passcode-submit-split-screen.md @@ -0,0 +1,147 @@ +# Fix Submit button not visible in passcode view in split screen + +## Problem + +On Android in **split screen**, the "Enter Passcode" view shows the title and the +keypad but **no Cancel/Submit buttons** — the app cannot be unlocked with a passcode +without leaving split screen. + +The same `PasscodeView` also backs `SetAppPasscodeView`, so "New Passcode" / +"Confirm passcode" (Privacy & security → passcode, and the passcode onboarding in +`AppLock.setPasscode`) are affected identically. + +Desktop is affected too whenever the window is short (below ~590dp of height at a +typical width), since desktop always uses the vertical layout. + +## Cause + +Two independent defects, both invisible at full screen. + +### 1. The keypad consumes the space the buttons need + +`PasscodeView.VerticalLayout` is a `Column` of three children — title, keypad, +buttons `Row` — and the keypad's size is derived from the constraints it is offered +(`PasswordEntry.kt`): + +```kotlin +val s = if (appPlatform.isAndroid) minOf(maxWidth, maxHeight) / 4 - 1.dp else ... +``` + +`Column` measures unweighted children in order, each with `maxHeight` reduced by what +the previous ones took, so the keypad — the **second** child — is offered *all* +remaining height and a 4-row grid then occupies exactly that. The buttons `Row` is +measured last, from what is left, and `Modifier.heightIn(min = 70.dp)` cannot rescue +it: `heightIn` constrains its target into the incoming constraints, so a 70dp minimum +against a 1dp maximum yields 1dp. + +At full screen the bug is dormant because `maxWidth` is the smaller term there — the +keypad is sized by width and the leftover height goes to the buttons. It appears as +soon as the remaining height drops below the width, which every split-screen half does. + +Measured with a Compose harness that renders these composables at fixed window sizes +(411dp wide, density 1, `Surface(Modifier.fillMaxSize())` as in `LocalAuthentication.kt`): + +| window | keypad `maxHeight` | key size | buttons Row height | Submit | +|---|---|---|---|---| +| 411×914 (full screen) | 805 | 101.75 | 70 @ y=763 | 108×40 ✓ | +| 411×520 | 411 | 101.75 | **0** | 108×0 | +| 411×480 | 371 | 91.75 | **0** | 108×0 | +| 411×445 (split half) | 336 | 83.0 | **1** @ y=444 | 108×**1** | +| 411×400 | 291 | 71.75 | **0** | 108×0 | + +`HorizontalLayout` has the same defect in the width axis: its keypad is 4 keys wide +and sized `minOf(maxWidth, maxHeight) / 3.5f`, so the keypad's *width* grows with the +available *height*, and the Cancel/Submit `Column` — the **second** child of the `Row` +— gets the remainder. At 411×365 it is offered `maxWidth = 24dp` and Submit measures +**0×0**; at 411×445 it is offered **0dp** and Submit is placed at **x=441**, outside a +411dp-wide window. + +This branch matters in split screen because `windowOrientation()` reads +`Configuration.orientation`, which is computed from the *activity window* bounds, not +the device: a split half of a tall phone is `PORTRAIT` (~411×445) while a half of a +16:9 phone is `LANDSCAPE` (~411×365). Both layouts are reachable, and both were broken. + +### 2. No window insets + +`MainActivity` calls `enableEdgeToEdge()`, and this screen never applied insets — at +full screen `SpaceEvenly` happened to leave the buttons ~80dp clear of the navigation +bar. Once the buttons are laid out correctly in a split half, they land at the window +edge: with fix 1 alone, Submit occupies y=390…430 of a 445dp window, and a 48dp +3-button navigation bar covers y=397…445 — **33 of its 40dp**, so the button is drawn +but not reliably tappable in the bottom split window. + +## Fix + +`Modifier.weight(1f, fill = false)` on the keypad in the vertical layout and on the +keypad column in the horizontal layout (`PasscodeView.kt`), which requires a `modifier` +parameter on `PasscodeEntry` (`PasswordEntry.kt`): + +```kotlin +PasscodeEntry(passcode, true, Modifier.weight(1f, fill = false)) +``` + +`Column`/`Row` measure **weighted children after all unweighted ones**, so the title +and the buttons are measured first at their natural size and the keypad receives what +is left — the inverse of the current order, with no size constant to keep in sync. +`fill = false` keeps the keypad at its own size rather than stretching it, and because +a weighted child makes the container expand to the incoming bounded maximum, the +`SpaceEvenly` / `SpaceBetween` distribution at full screen is unchanged. + +Plus `Modifier.systemBarsPadding()` on both layout roots. + +Measured after the fix: + +| window | branch | key size | Submit | +|---|---|---|---| +| 411×445, 24dp status bar (top split half) | vertical | 59.5 | 108×40 @ y=390…430 ✓ | +| 411×445, 48dp nav bar (bottom split half) | vertical | 53.5 | 108×40 @ y=342…382, clear of the bar ✓ | +| 411×365, 48dp nav bar | horizontal | 29.3 | 108×40 @ x=263…371 ✓ | +| 411×914 (full screen) | vertical | **101.75 (unchanged)** | 108×40, column y=24…866 | + +The insets go on the `Column`/`Row` themselves rather than a wrapping `Box`: Material +`Surface` lays its content out with `propagateMinConstraints = true`, so the layout root +receives the window size as a *minimum*. A plain `Box` in between drops that minimum +(its own default is `false`), the `Column` becomes wrap-content, `SpaceEvenly` has no +slack left to distribute, and the whole screen top-aligns — measured as the buttons +moving from y=763 to y=544 at full screen. Keeping the padding on the root preserves +the propagation. + +## Scope / non-goals + +- Both files are `commonMain`, so the fix covers Android and desktop; on desktop + `systemBarsPadding()` resolves to zero insets and only the `weight` change has an + effect (short desktop windows). +- The keypad necessarily gets smaller in a small window: 53.5–59.5dp keys in a portrait + split half, 29.3dp in the 411×365 horizontal case, where the title, reason and + passcode text consume ~170dp before the keypad is measured. Making the passcode + screen itself more compact below some height (smaller title, dropping the reason + line) is a separate design change and is not attempted here. +- `systemBarsPadding()` also shrinks the keypad in full-screen landscape (79.6 → 59.0dp). + That is the same 72dp the bars always occupied — previously the keypad's bottom row + extended ~8dp under the navigation bar — but it is a visible change on a screen that + did not show the reported bug. +- Not changed: `windowOrientation()` branching on `Configuration.orientation`. Selecting + the layout from the measured aspect ratio (as iOS does) would be a better fit for + resizable windows, but it changes behaviour on every device rather than fixing this bug. + +## iOS + +Not affected, and for a structural reason worth recording: iOS picks its layout from the +*measured* geometry rather than an orientation flag — +`if g.size.width < g.size.height * 2 / 3` (`PasscodeView.swift`) — so a short, wide +window (the geometry that breaks Android's vertical layout) selects iOS's horizontal +layout, whose keypad is sized from height (`s = height / 5`) with the buttons column +explicitly bounded to `height / 5 * 3 * 0.97`. The vertical layout's width-driven keypad +(`s = width / 3`) is only ever used when the window is at least 1.5× taller than wide, +where it fits by construction. No iOS change required. + +## Verification + +- Compose measurement harness at the window sizes tabulated above, before and after, + for both layout branches and for 24dp/48dp/72dp inset combinations. +- Android arm64 debug APK (`bash ~/build/android.sh`) — manual check of Submit in both + the top and the bottom split-screen half, and no visual change at full screen. +- Linux x86_64 AppImage (`bash ~/build/linux.sh`) — manual check with the window resized + short, confirming the desktop vertical layout keeps Cancel/Submit visible. +- Also exercise "New Passcode" / "Confirm passcode" (`SetAppPasscodeView`) in split + screen, which share `PasscodeView`. From c8f20bcc9150e5f7883b210c53d5c9838c06ae0c Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Sat, 19 Sep 2026 15:18:46 +0400 Subject: [PATCH 11/28] core, libs: configurable queue size, library fixes (#7542) * core: add chat_migrate_init_queue FFI export * bots: fix BadgeServiceErrorCode API type * nodejs: pass required command fields * nodejs: fix migration error types * nodejs: install libsimplex from SIMPLEX_LIBS_DIR * nodejs: add queue size option * nodejs: regenerate docs * python: add queue size option * bots: pass incognito in APIConnect * nodejs: accept documented success responses * python: accept documented success responses * nodejs: dispatch each bot message once * nodejs: fix startChat events loop lifecycle * nodejs, python: parse multi-line bot commands * nodejs: fix file buffer handling in addon * nodejs: keep events loop when chat stop fails * python: fix send_and_wait race, load lib off loop * python: make queue size export optional * nodejs: receive events on a dedicated thread * nodejs: release haskell thread after receive * python: receive on a dedicated thread per chat * python: test receive shutdown order * nodejs: one receive thread per chat controller * nodejs: harden receiver shutdown and tests * nodejs: stop chat before closing store * python: stop chat before closing store * nodejs, python: harden close regression and retry * python: free results with ucrt on windows * nodejs: enable c++ exceptions on mac and windows --- bots/api/COMMANDS.md | 6 +- bots/api/TYPES.md | 74 ++--- bots/src/API/Docs/Commands.hs | 2 +- bots/src/API/Docs/Types.hs | 2 +- flake.nix | 2 + libsimplex.dll.def | 2 + .../types/typescript/src/commands.ts | 2 +- .../types/typescript/src/types.ts | 135 ++------ packages/simplex-chat-nodejs/binding.gyp | 2 + packages/simplex-chat-nodejs/cpp/simplex.cc | 292 ++++++++++++++++-- packages/simplex-chat-nodejs/cpp/simplex.h | 2 + .../simplex-chat-nodejs/docs/Namespace.bot.md | 1 + .../docs/api.Class.ChatApi.md | 200 +++++++----- .../docs/bot.Function.run.md | 2 +- .../docs/bot.Function.subscribeChatItems.md | 27 ++ .../docs/bot.Interface.BotConfig.md | 14 +- .../docs/bot.Interface.BotOptions.md | 20 +- .../docs/bot.TypeAlias.BotDbOpts.md | 4 + .../docs/core.Class.ChatAPIError.md | 8 +- .../docs/core.Class.ChatInitError.md | 8 +- ...MigrationError.Interface.ErrorMigration.md | 8 +- ...rationError.Interface.ErrorNotADatabase.md | 6 +- ...ore.DBMigrationError.Interface.ErrorSQL.md | 8 +- ...tionError.Interface.InvalidConfirmation.md | 4 +- ...grationError.Interface.InvalidQueueSize.md | 25 ++ .../core.DBMigrationError.TypeAlias.Tag.md | 4 +- .../core.Enumeration.MigrationConfirmation.md | 10 +- .../docs/core.Function.chatCloseStore.md | 2 +- .../docs/core.Function.chatDecryptFile.md | 2 +- .../docs/core.Function.chatEncryptFile.md | 2 +- .../docs/core.Function.chatMigrateInit.md | 10 +- .../docs/core.Function.chatReadFile.md | 6 +- .../docs/core.Function.chatRecvMsgWait.md | 2 +- .../docs/core.Function.chatSendCmd.md | 2 +- .../docs/core.Function.chatWriteFile.md | 4 +- .../docs/core.Interface.APIResult.md | 6 +- .../docs/core.Interface.CryptoArgs.md | 6 +- .../docs/core.Interface.UpMigration.md | 6 +- .../core.MTRError.Interface.MTREDifferent.md | 6 +- .../core.MTRError.Interface.MTRENoDown.md | 20 +- .../docs/core.MTRError.TypeAlias.Tag.md | 2 +- ...re.MigrationError.Interface.MEDowngrade.md | 6 +- ...core.MigrationError.Interface.MEUpgrade.md | 8 +- ...MigrationError.Interface.MigrationError.md | 6 +- .../docs/core.MigrationError.TypeAlias.Tag.md | 2 +- .../docs/core.Namespace.DBMigrationError.md | 1 + .../docs/core.TypeAlias.DBMigrationError.md | 4 +- .../docs/core.TypeAlias.MTRError.md | 2 +- .../docs/core.TypeAlias.MigrationError.md | 2 +- packages/simplex-chat-nodejs/src/api.ts | 62 ++-- packages/simplex-chat-nodejs/src/bot.ts | 47 +-- packages/simplex-chat-nodejs/src/core.ts | 22 +- .../simplex-chat-nodejs/src/download-libs.js | 27 ++ packages/simplex-chat-nodejs/src/simplex.d.ts | 5 +- packages/simplex-chat-nodejs/src/util.ts | 2 +- .../simplex-chat-nodejs/tests/api.test.ts | 4 +- .../tests/api.unit.test.ts | 102 ++++++ .../tests/bot.unit.test.ts | 50 +++ .../tests/commands.test.ts | 13 + .../simplex-chat-nodejs/tests/core.test.ts | 158 +++++++++- .../simplex-chat-nodejs/tests/util.test.ts | 4 + .../src/simplex_chat/_native.py | 21 +- .../src/simplex_chat/api.py | 43 ++- .../src/simplex_chat/bot.py | 2 + .../src/simplex_chat/client.py | 20 +- .../src/simplex_chat/core.py | 38 ++- .../src/simplex_chat/types/_commands.py | 2 +- .../src/simplex_chat/types/_types.py | 78 +---- .../src/simplex_chat/util.py | 2 +- .../simplex-chat-python/tests/test_api.py | 44 +++ .../tests/test_client_and_waiters.py | 110 ++++++- .../simplex-chat-python/tests/test_codegen.py | 6 + .../tests/test_core_migrate_init.py | 123 ++++++++ .../tests/test_native_cache.py | 10 + .../tests/test_recv_executor.py | 207 +++++++++++++ .../simplex-chat-python/tests/test_util.py | 5 + src/Simplex/Chat/Mobile.hs | 34 +- tests/MobileTests.hs | 23 +- 78 files changed, 1670 insertions(+), 571 deletions(-) create mode 100644 packages/simplex-chat-nodejs/docs/bot.Function.subscribeChatItems.md create mode 100644 packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidQueueSize.md create mode 100644 packages/simplex-chat-nodejs/tests/api.unit.test.ts create mode 100644 packages/simplex-chat-nodejs/tests/bot.unit.test.ts create mode 100644 packages/simplex-chat-nodejs/tests/commands.test.ts create mode 100644 packages/simplex-chat-python/tests/test_core_migrate_init.py create mode 100644 packages/simplex-chat-python/tests/test_recv_executor.py diff --git a/bots/api/COMMANDS.md b/bots/api/COMMANDS.md index 5f49b26653..f90e8e08da 100644 --- a/bots/api/COMMANDS.md +++ b/bots/api/COMMANDS.md @@ -1537,15 +1537,15 @@ Connect via prepared SimpleX link. The link can be 1-time invitation link, conta **Syntax**: ``` -/_connect [ ] +/_connect [ incognito=on][ ] ``` ```javascript -'/_connect ' + userId + (preparedLink_ ? ' ' + CreatedConnLink.cmdString(preparedLink_) : '') // JavaScript +'/_connect ' + userId + (incognito ? ' incognito=on' : '') + (preparedLink_ ? ' ' + CreatedConnLink.cmdString(preparedLink_) : '') // JavaScript ``` ```python -'/_connect ' + str(userId) + ((' ' + CreatedConnLink_cmd_string(preparedLink_)) if preparedLink_ is not None else '') # Python +'/_connect ' + str(userId) + (' incognito=on' if incognito else '') + ((' ' + CreatedConnLink_cmd_string(preparedLink_)) if preparedLink_ is not None else '') # Python ``` **Responses**: diff --git a/bots/api/TYPES.md b/bots/api/TYPES.md index 14ff04b08c..f1122979a9 100644 --- a/bots/api/TYPES.md +++ b/bots/api/TYPES.md @@ -466,62 +466,24 @@ CredentialNotVerified: ## BadgeServiceErrorCode -**Discriminated union type**: - -BadRequest: -- type: "badRequest" - -UnsupportedVersion: -- type: "unsupportedVersion" - -UnknownPurchaseKey: -- type: "unknownPurchaseKey" - -UnknownOfferId: -- type: "unknownOfferId" - -OfferDisabled: -- type: "offerDisabled" - -OfferMismatch: -- type: "offerMismatch" - -ProductUnavailable: -- type: "productUnavailable" - -PaymentNotEntitled: -- type: "paymentNotEntitled" - -PaymentPending: -- type: "paymentPending" - -ProviderUnavailable: -- type: "providerUnavailable" - -RateLimited: -- type: "rateLimited" - -CodeInvalid: -- type: "codeInvalid" - -CodeUsed: -- type: "codeUsed" - -CodeExpired: -- type: "codeExpired" - -ReceiptInvalid: -- type: "receiptInvalid" - -ReceiptUsed: -- type: "receiptUsed" - -Internal: -- type: "internal" - -Unknown: -- type: "unknown" -- : string +**Enum type**: +- "bad_request" +- "unsupported_version" +- "unknown_purchase_key" +- "unknown_offer_id" +- "offer_disabled" +- "offer_mismatch" +- "product_unavailable" +- "payment_not_entitled" +- "payment_pending" +- "provider_unavailable" +- "rate_limited" +- "code_invalid" +- "code_used" +- "code_expired" +- "receipt_invalid" +- "receipt_used" +- "internal" --- diff --git a/bots/src/API/Docs/Commands.hs b/bots/src/API/Docs/Commands.hs index eb4804fa45..4ffba7bfbe 100644 --- a/bots/src/API/Docs/Commands.hs +++ b/bots/src/API/Docs/Commands.hs @@ -140,7 +140,7 @@ chatCommandsDocsData = [ ("APIAddContact", [], "Create 1-time invitation link.", ["CRInvitation", "CRChatCmdError"], [], Just UNInteractive, "/_connect " <> Param "userId" <> OnOffParam "incognito" "incognito" (Just False)), -- `Maybe` in `connectTarget :: Maybe ConnectTarget` is used to signal parse failure to the runtime (the handler returns CEInvalidConnReq on Nothing); it is NOT API-level optionality. The parameter is required from callers. ("APIConnectPlan", [], "Determine SimpleX link type and if the bot is already connected via this link or name.", ["CRConnectionPlan", "CRChatCmdError"], [], Just UNInteractive, "/_connect plan " <> Param "userId" <> " " <> Param "connectTarget"), - ("APIConnect", [], "Connect via prepared SimpleX link. The link can be 1-time invitation link, contact address or group link.", ["CRSentConfirmation", "CRContactAlreadyExists", "CRSentInvitation", "CRChatCmdError"], [], Just UNInteractive, "/_connect " <> Param "userId" <> Optional "" (" " <> Param "$0") "preparedLink_"), + ("APIConnect", [], "Connect via prepared SimpleX link. The link can be 1-time invitation link, contact address or group link.", ["CRSentConfirmation", "CRContactAlreadyExists", "CRSentInvitation", "CRChatCmdError"], [], Just UNInteractive, "/_connect " <> Param "userId" <> OnOffParam "incognito" "incognito" (Just False) <> Optional "" (" " <> Param "$0") "preparedLink_"), ("Connect", [], "Connect via SimpleX link or name as string in the active user profile.", ["CRSentConfirmation", "CRContactAlreadyExists", "CRSentInvitation", "CRConnectionPlan", "CRSentInvitationToContact", "CRStartedConnectionToContact", "CRStartedConnectionToGroup", "CRChatCmdError"], [], Just UNInteractive, "/connect" <> Optional "" (" " <> Param "$0") "connTarget_"), ("APIAcceptContact", ["incognito"], "Accept contact request.", ["CRAcceptingContactRequest", "CRChatCmdError"], [], Just UNInteractive, "/_accept " <> Param "contactReqId"), ("APIRejectContact", [], "Reject contact request. The user who sent the request is **not notified**.", ["CRContactRequestRejected", "CRChatCmdError"], [], Nothing, "/_reject " <> Param "contactReqId") diff --git a/bots/src/API/Docs/Types.hs b/bots/src/API/Docs/Types.hs index 58298c44fb..792f3e6fd5 100644 --- a/bots/src/API/Docs/Types.hs +++ b/bots/src/API/Docs/Types.hs @@ -217,7 +217,7 @@ chatTypesDocsData = (sti @AutoAccept, STRecord, "", [], "", ""), (sti @BadgeProof, STRecord, "", [], "", ""), (sti @BadgeRedeemError, STUnion, "BRE", [], "", ""), - (sti @BadgeServiceErrorCode, STUnion, "BSE", [], "", ""), + (sti @BadgeServiceErrorCode, STEnum' (consSep "BSE" '_'), "", ["BSEUnknown"], "", ""), (sti @BlockingInfo, STRecord, "", [], "", ""), (sti @BlockingReason, STEnum, "BR", [], "", ""), (sti @BrokerErrorType, STUnion, "", [], "", ""), diff --git a/flake.nix b/flake.nix index 0863222c92..84f84c34ec 100644 --- a/flake.nix +++ b/flake.nix @@ -393,6 +393,7 @@ "chat_encrypt_file" "chat_encrypt_media" "chat_migrate_init" + "chat_migrate_init_queue" "chat_parse_markdown" "chat_parse_server" "chat_parse_uri" @@ -515,6 +516,7 @@ "chat_encrypt_file" "chat_encrypt_media" "chat_migrate_init" + "chat_migrate_init_queue" "chat_parse_markdown" "chat_parse_server" "chat_parse_uri" diff --git a/libsimplex.dll.def b/libsimplex.dll.def index a7a66992a6..79b88dc782 100644 --- a/libsimplex.dll.def +++ b/libsimplex.dll.def @@ -2,7 +2,9 @@ LIBRARY libsimplex EXPORTS hs_init hs_init_with_rtsopts + hs_thread_done chat_migrate_init + chat_migrate_init_queue chat_close_store chat_send_cmd chat_send_cmd_retry diff --git a/packages/simplex-chat-client/types/typescript/src/commands.ts b/packages/simplex-chat-client/types/typescript/src/commands.ts index fbde8ce9ac..c217ef944c 100644 --- a/packages/simplex-chat-client/types/typescript/src/commands.ts +++ b/packages/simplex-chat-client/types/typescript/src/commands.ts @@ -570,7 +570,7 @@ export namespace APIConnect { export type Response = CR.SentConfirmation | CR.ContactAlreadyExists | CR.SentInvitation | CR.ChatCmdError export function cmdString(self: APIConnect): string { - return '/_connect ' + self.userId + (self.preparedLink_ ? ' ' + T.CreatedConnLink.cmdString(self.preparedLink_) : '') + return '/_connect ' + self.userId + (self.incognito ? ' incognito=on' : '') + (self.preparedLink_ ? ' ' + T.CreatedConnLink.cmdString(self.preparedLink_) : '') } } diff --git a/packages/simplex-chat-client/types/typescript/src/types.ts b/packages/simplex-chat-client/types/typescript/src/types.ts index 3bf3fdc831..d7db7f259f 100644 --- a/packages/simplex-chat-client/types/typescript/src/types.ts +++ b/packages/simplex-chat-client/types/typescript/src/types.ts @@ -301,123 +301,24 @@ export namespace BadgeRedeemError { } } -export type BadgeServiceErrorCode = - | BadgeServiceErrorCode.BadRequest - | BadgeServiceErrorCode.UnsupportedVersion - | BadgeServiceErrorCode.UnknownPurchaseKey - | BadgeServiceErrorCode.UnknownOfferId - | BadgeServiceErrorCode.OfferDisabled - | BadgeServiceErrorCode.OfferMismatch - | BadgeServiceErrorCode.ProductUnavailable - | BadgeServiceErrorCode.PaymentNotEntitled - | BadgeServiceErrorCode.PaymentPending - | BadgeServiceErrorCode.ProviderUnavailable - | BadgeServiceErrorCode.RateLimited - | BadgeServiceErrorCode.CodeInvalid - | BadgeServiceErrorCode.CodeUsed - | BadgeServiceErrorCode.CodeExpired - | BadgeServiceErrorCode.ReceiptInvalid - | BadgeServiceErrorCode.ReceiptUsed - | BadgeServiceErrorCode.Internal - | BadgeServiceErrorCode.Unknown - -export namespace BadgeServiceErrorCode { - export type Tag = - | "badRequest" - | "unsupportedVersion" - | "unknownPurchaseKey" - | "unknownOfferId" - | "offerDisabled" - | "offerMismatch" - | "productUnavailable" - | "paymentNotEntitled" - | "paymentPending" - | "providerUnavailable" - | "rateLimited" - | "codeInvalid" - | "codeUsed" - | "codeExpired" - | "receiptInvalid" - | "receiptUsed" - | "internal" - | "unknown" - - interface Interface { - type: Tag - } - - export interface BadRequest extends Interface { - type: "badRequest" - } - - export interface UnsupportedVersion extends Interface { - type: "unsupportedVersion" - } - - export interface UnknownPurchaseKey extends Interface { - type: "unknownPurchaseKey" - } - - export interface UnknownOfferId extends Interface { - type: "unknownOfferId" - } - - export interface OfferDisabled extends Interface { - type: "offerDisabled" - } - - export interface OfferMismatch extends Interface { - type: "offerMismatch" - } - - export interface ProductUnavailable extends Interface { - type: "productUnavailable" - } - - export interface PaymentNotEntitled extends Interface { - type: "paymentNotEntitled" - } - - export interface PaymentPending extends Interface { - type: "paymentPending" - } - - export interface ProviderUnavailable extends Interface { - type: "providerUnavailable" - } - - export interface RateLimited extends Interface { - type: "rateLimited" - } - - export interface CodeInvalid extends Interface { - type: "codeInvalid" - } - - export interface CodeUsed extends Interface { - type: "codeUsed" - } - - export interface CodeExpired extends Interface { - type: "codeExpired" - } - - export interface ReceiptInvalid extends Interface { - type: "receiptInvalid" - } - - export interface ReceiptUsed extends Interface { - type: "receiptUsed" - } - - export interface Internal extends Interface { - type: "internal" - } - - export interface Unknown extends Interface { - type: "unknown" - : string - } +export enum BadgeServiceErrorCode { + Bad_request = "bad_request", + Unsupported_version = "unsupported_version", + Unknown_purchase_key = "unknown_purchase_key", + Unknown_offer_id = "unknown_offer_id", + Offer_disabled = "offer_disabled", + Offer_mismatch = "offer_mismatch", + Product_unavailable = "product_unavailable", + Payment_not_entitled = "payment_not_entitled", + Payment_pending = "payment_pending", + Provider_unavailable = "provider_unavailable", + Rate_limited = "rate_limited", + Code_invalid = "code_invalid", + Code_used = "code_used", + Code_expired = "code_expired", + Receipt_invalid = "receipt_invalid", + Receipt_used = "receipt_used", + Internal = "internal", } export enum BadgeStatus { diff --git a/packages/simplex-chat-nodejs/binding.gyp b/packages/simplex-chat-nodejs/binding.gyp index 09c63cecba..cfa6d61039 100644 --- a/packages/simplex-chat-nodejs/binding.gyp +++ b/packages/simplex-chat-nodejs/binding.gyp @@ -11,6 +11,8 @@ ], "cflags!": [ "-fno-exceptions" ], "cflags_cc!": [ "-fno-exceptions" ], + "xcode_settings": { "GCC_ENABLE_CPP_EXCEPTIONS": "YES" }, + "msvs_settings": { "VCCLCompilerTool": { "ExceptionHandling": 1 } }, "defines": [ "NAPI_DISABLE_CPP_EXCEPTIONS" ], "conditions": [ ["OS=='mac'", { diff --git a/packages/simplex-chat-nodejs/cpp/simplex.cc b/packages/simplex-chat-nodejs/cpp/simplex.cc index 97233eff6f..bcca2b994a 100644 --- a/packages/simplex-chat-nodejs/cpp/simplex.cc +++ b/packages/simplex-chat-nodejs/cpp/simplex.cc @@ -3,6 +3,14 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include "simplex.h" namespace simplex { @@ -81,6 +89,11 @@ class ResultAsyncWorker : public AsyncWorker { return ctrl_; } + // the worker thread reads this object's memory until the worker completes + void KeepAlive(Object obj) { + keep_alive_ = Persistent(obj); + } + protected: std::string result_; uintptr_t ctrl_ = 0; @@ -88,6 +101,7 @@ class ResultAsyncWorker : public AsyncWorker { private: ExecuteFn execute_fn_; ResultProcessor result_processor_; + ObjectReference keep_alive_; }; class BinaryAsyncWorker : public AsyncWorker { @@ -97,21 +111,25 @@ class BinaryAsyncWorker : public AsyncWorker { BinaryAsyncWorker(Function& callback, ExecuteFn execute_fn) : AsyncWorker(callback), execute_fn_(std::move(execute_fn)) {} + ~BinaryAsyncWorker() { + free(original_buf); + } + void Execute() override { execute_fn_(this); } void OnOK() override { HandleScope scope(Env()); - if (original_buf == nullptr || binary_len == 0) { - Callback().Call({Env().Null(), Env().Undefined()}); + char* buf = original_buf; + original_buf = nullptr; + if (binary_len == 0) { + free(buf); + Callback().Call({Env().Null(), Buffer::New(Env(), 0)}); return; } - char* data_ptr = original_buf + 5; - auto finalizer = [](Napi::Env env, char* finalize_data, char* orig) { - free(orig); - }; - Napi::Buffer buffer = Napi::Buffer::New(Env(), data_ptr, binary_len, finalizer, original_buf); + // Copies when the runtime forbids external buffers (Electron); the finalizer then runs immediately. + Buffer buffer = Buffer::NewOrCopy(Env(), buf + 5, binary_len, [](Napi::Env, char*, char* orig) { free(orig); }, buf); Callback().Call({Env().Null(), buffer}); } @@ -176,6 +194,159 @@ Napi::Promise CreatePromiseAndCallback(Env env, Function& cb_out) { return deferred.Promise(); } +const char* const RECEIVER_STOPPED = "chat receiver stopped"; + +struct RecvRequest { + int wait = 0; + std::shared_ptr deferred; +}; + +// Holds the event loop open only while receives are pending; used only on the JS main thread. +class PendingReceives { + public: + explicit PendingReceives(ThreadSafeFunction tsfn) : tsfn_(tsfn) {} + + const ThreadSafeFunction& Tsfn() const { + return tsfn_; + } + + void Add(Napi::Env env) { + if (count_++ == 0) tsfn_.Ref(env); + } + + void Remove(Napi::Env env) { + if (--count_ == 0) tsfn_.Unref(env); + } + + private: + ThreadSafeFunction tsfn_; + size_t count_ = 0; +}; + +// A blocking receive would hold a libuv pool thread for up to `wait`, stalling fs, dns and crypto. +class Receiver { + public: + // Returns nullptr with a pending JS exception if the TSFN cannot be created, throws std::system_error if the thread cannot start. + static std::shared_ptr Start(Napi::Env env, chat_ctrl ctrl) { + ThreadSafeFunction tsfn = ThreadSafeFunction::New(env, Function::New(env, [](const CallbackInfo&) {}), "chat_recv_msg_wait", 0, 1); + if (env.IsExceptionPending()) { + return nullptr; + } + auto receiver = std::make_shared(ctrl, tsfn); + try { + receiver->thread_ = std::thread(&Receiver::Run, receiver.get()); + } catch (const std::system_error&) { + tsfn.Release(); + throw; + } + return receiver; + } + + Receiver(chat_ctrl ctrl, ThreadSafeFunction tsfn) : ctrl_(ctrl), pending_(std::make_shared(tsfn)) {} + + Receiver(const Receiver&) = delete; + Receiver& operator=(const Receiver&) = delete; + + ~Receiver() { + Stop(); + } + + void Enqueue(Napi::Env env, RecvRequest request) { + pending_->Add(env); + { + std::lock_guard lock(mutex_); + queue_.push_back(std::move(request)); + } + cv_.notify_one(); + } + + void RequestStop() { + { + std::lock_guard lock(mutex_); + stop_ = true; + } + cv_.notify_one(); + } + + // Waits for the receive in progress, so it must not run on the JS main thread outside env teardown. + void Stop() { + RequestStop(); + if (thread_.joinable()) { + thread_.join(); + } + } + + private: + void Run() { + for (;;) { + RecvRequest request; + { + std::unique_lock lock(mutex_); + cv_.wait(lock, [this] { return stop_ || !queue_.empty(); }); + if (stop_) break; + request = std::move(queue_.front()); + queue_.pop_front(); + } + char* c_res = chat_recv_msg_wait(ctrl_, request.wait); + napi_status status = Settle(request.deferred, [c_res](Napi::Env env, Promise::Deferred& deferred) { + if (c_res == nullptr) { + deferred.Reject(Error::New(env, "chat_recv_msg_wait failed").Value()); + } else { + deferred.Resolve(String::New(env, c_res)); + free(c_res); + } + }); + if (status != napi_ok) { + free(c_res); + } + } + std::deque unserved; + { + std::lock_guard lock(mutex_); + unserved.swap(queue_); + } + for (RecvRequest& request : unserved) { + Settle(request.deferred, [](Napi::Env env, Promise::Deferred& deferred) { + deferred.Reject(Error::New(env, RECEIVER_STOPPED).Value()); + }); + } + pending_->Tsfn().Release(); + // Each OS thread that enters Haskell keeps an RTS task record until it calls hs_thread_done. + hs_thread_done(); + } + + template + napi_status Settle(std::shared_ptr deferred, SettleFn settle) { + // The callback may run after this Receiver is destroyed, so it owns the pending count. + std::shared_ptr pending = pending_; + return pending->Tsfn().BlockingCall([pending, deferred, settle](Napi::Env env, Function) { + settle(env, *deferred); + pending->Remove(env); + }); + } + + const chat_ctrl ctrl_; + const std::shared_ptr pending_; + std::mutex mutex_; + std::condition_variable cv_; + std::deque queue_; + bool stop_ = false; + std::thread thread_; +}; + +// Keyed by chat_ctrl, accessed only on the JS main thread. +using Receivers = std::unordered_map>; + +std::shared_ptr TakeReceiver(Receivers& receivers, chat_ctrl ctrl) { + auto it = receivers.find(reinterpret_cast(ctrl)); + if (it == receivers.end()) { + return nullptr; + } + std::shared_ptr receiver = std::move(it->second); + receivers.erase(it); + return receiver; +} + // Common result processors ResultAsyncWorker::ResultProcessor MigrateResultProcessor() { return [](ResultAsyncWorker* worker, Napi::Env env) { @@ -215,6 +386,39 @@ Value ChatMigrateInit(const CallbackInfo& args) { return promise; } +Value ChatMigrateInitQueue(const CallbackInfo& args) { + Env env = args.Env(); + if (args.Length() < 4 || !args[0].IsString() || !args[1].IsString() || !args[2].IsString() || !args[3].IsNumber()) { + TypeError::New(env, "Expected three string arguments and number").ThrowAsJavaScriptException(); + return env.Undefined(); + } + + std::string path = args[0].As().Utf8Value(); + std::string key = args[1].As().Utf8Value(); + std::string confirm = args[2].As().Utf8Value(); + Number queue_size_arg = args[3].As(); + int queue_size = queue_size_arg.Int32Value(); + if (static_cast(queue_size) != queue_size_arg.DoubleValue()) { + RangeError::New(env, "Expected 32-bit integer queue size").ThrowAsJavaScriptException(); + return env.Undefined(); + } + + Function cb; + Promise promise = CreatePromiseAndCallback(env, cb); + + auto execute_fn = [path, key, confirm, queue_size](ResultAsyncWorker* worker) { + chat_ctrl ctrl = nullptr; + char* c_res = chat_migrate_init_queue(path.c_str(), key.c_str(), confirm.c_str(), queue_size, &ctrl); + worker->SetCtrl(reinterpret_cast(ctrl)); + HandleCResult(worker, c_res, "chat_migrate_init_queue"); + }; + + ResultAsyncWorker* worker = new ResultAsyncWorker(cb, std::move(execute_fn), MigrateResultProcessor()); + worker->Queue(); + + return promise; +} + Value ChatCloseStore(const CallbackInfo& args) { Env env = args.Env(); if (args.Length() < 1 || !args[0].IsBigInt()) { @@ -223,11 +427,15 @@ Value ChatCloseStore(const CallbackInfo& args) { } chat_ctrl ctrl = FromChatCtrlBigInt(args[0]); + std::shared_ptr receiver = TakeReceiver(*static_cast(args.Data()), ctrl); Function cb; Promise promise = CreatePromiseAndCallback(env, cb); - auto execute_fn = [ctrl](ResultAsyncWorker* worker) { + auto execute_fn = [ctrl, receiver](ResultAsyncWorker* worker) { + if (receiver) { + receiver->Stop(); + } char* c_res = chat_close_store(ctrl); HandleCResult(worker, c_res, "chat_close_store"); }; @@ -271,44 +479,63 @@ Value ChatRecvMsgWait(const CallbackInfo& args) { chat_ctrl ctrl = FromChatCtrlBigInt(args[0]); int wait = static_cast(args[1].As().Int32Value()); + Receivers& receivers = *static_cast(args.Data()); - Function cb; - Promise promise = CreatePromiseAndCallback(env, cb); + auto deferred = std::make_shared(Promise::Deferred::New(env)); + auto it = receivers.find(reinterpret_cast(ctrl)); + if (it == receivers.end()) { + std::shared_ptr receiver; + try { + receiver = Receiver::Start(env, ctrl); + } catch (const std::system_error& e) { + deferred->Reject(Error::New(env, e.what()).Value()); + return deferred->Promise(); + } + if (!receiver) { + return env.Undefined(); + } + it = receivers.emplace(reinterpret_cast(ctrl), std::move(receiver)).first; + } + it->second->Enqueue(env, {wait, deferred}); - auto execute_fn = [ctrl, wait](ResultAsyncWorker* worker) { - char* c_res = chat_recv_msg_wait(ctrl, wait); - HandleCResult(worker, c_res, "chat_recv_msg_wait"); - }; - - ResultAsyncWorker* worker = new ResultAsyncWorker(cb, std::move(execute_fn)); - worker->Queue(); - - return promise; + return deferred->Promise(); } Value ChatWriteFile(const CallbackInfo& args) { Env env = args.Env(); - if (args.Length() < 3 || !args[0].IsBigInt() || !args[1].IsString() || !args[2].IsArrayBuffer()) { - TypeError::New(env, "Expected bigint (ctrl), string (path), ArrayBuffer").ThrowAsJavaScriptException(); + if (args.Length() < 3 || !args[0].IsBigInt() || !args[1].IsString() || !(args[2].IsArrayBuffer() || args[2].IsTypedArray())) { + TypeError::New(env, "Expected bigint (ctrl), string (path), ArrayBuffer or Uint8Array").ThrowAsJavaScriptException(); return env.Undefined(); } chat_ctrl ctrl = FromChatCtrlBigInt(args[0]); std::string path = args[1].As().Utf8Value(); - ArrayBuffer ab = args[2].As(); - char* data = static_cast(ab.Data()); - size_t len = ab.ByteLength(); + char* data; + size_t len; + if (args[2].IsArrayBuffer()) { + ArrayBuffer ab = args[2].As(); + data = static_cast(ab.Data()); + len = ab.ByteLength(); + } else { + TypedArray view = args[2].As(); + data = static_cast(view.ArrayBuffer().Data()) + view.ByteOffset(); + len = view.ByteLength(); + } + if (len > static_cast(INT_MAX)) { + RangeError::New(env, "Buffer is too large").ThrowAsJavaScriptException(); + return env.Undefined(); + } Function cb; Promise promise = CreatePromiseAndCallback(env, cb); - auto execute_fn = [ctrl, path, ab, data, len](ResultAsyncWorker* worker) { - (void)ab; // to keep ArrayBuffer alive + auto execute_fn = [ctrl, path, data, len](ResultAsyncWorker* worker) { char* c_res = chat_write_file(ctrl, path.c_str(), data, static_cast(len)); HandleCResult(worker, c_res, "chat_write_file"); }; ResultAsyncWorker* worker = new ResultAsyncWorker(cb, std::move(execute_fn)); + worker->KeepAlive(args[2].As()); worker->Queue(); return promise; @@ -410,10 +637,19 @@ Value ChatDecryptFile(const CallbackInfo& args) { Object Init(Env env, Object exports) { haskell_init(); + auto* receivers = new Receivers(); + // Stopping all receivers before joining any bounds teardown by the longest in-flight receive. + env.AddCleanupHook([receivers]() { + for (auto& entry : *receivers) { + entry.second->RequestStop(); + } + delete receivers; + }); exports.Set("chat_migrate_init", Function::New(env, ChatMigrateInit)); - exports.Set("chat_close_store", Function::New(env, ChatCloseStore)); + exports.Set("chat_migrate_init_queue", Function::New(env, ChatMigrateInitQueue)); + exports.Set("chat_close_store", Function::New(env, ChatCloseStore, "chat_close_store", receivers)); exports.Set("chat_send_cmd", Function::New(env, ChatSendCmd)); - exports.Set("chat_recv_msg_wait", Function::New(env, ChatRecvMsgWait)); + exports.Set("chat_recv_msg_wait", Function::New(env, ChatRecvMsgWait, "chat_recv_msg_wait", receivers)); exports.Set("chat_write_file", Function::New(env, ChatWriteFile)); exports.Set("chat_read_file", Function::New(env, ChatReadFile)); exports.Set("chat_encrypt_file", Function::New(env, ChatEncryptFile)); diff --git a/packages/simplex-chat-nodejs/cpp/simplex.h b/packages/simplex-chat-nodejs/cpp/simplex.h index 8e579626ed..ddc052946a 100644 --- a/packages/simplex-chat-nodejs/cpp/simplex.h +++ b/packages/simplex-chat-nodejs/cpp/simplex.h @@ -11,11 +11,13 @@ extern "C" void hs_init(int argc, char **argv[]); extern "C" void hs_init_with_rtsopts(int * argc, char **argv[]); +extern "C" void hs_thread_done(void); typedef long* chat_ctrl; // the last parameter is used to return the pointer to chat controller extern "C" char *chat_migrate_init(const char *path, const char *key, const char *confirm, chat_ctrl *ctrl); +extern "C" char *chat_migrate_init_queue(const char *path, const char *key, const char *confirm, const int queueSize, chat_ctrl *ctrl); extern "C" char *chat_close_store(chat_ctrl ctrl); extern "C" char *chat_reopen_store(chat_ctrl ctrl); extern "C" char *chat_send_cmd(chat_ctrl ctrl, const char *cmd); diff --git a/packages/simplex-chat-nodejs/docs/Namespace.bot.md b/packages/simplex-chat-nodejs/docs/Namespace.bot.md index 4b9171d0f7..7adeeec0c7 100644 --- a/packages/simplex-chat-nodejs/docs/Namespace.bot.md +++ b/packages/simplex-chat-nodejs/docs/Namespace.bot.md @@ -21,3 +21,4 @@ It automates creating and updating of the bot profile, address and bot commands ## Functions - [run](bot.Function.run.md) +- [subscribeChatItems](bot.Function.subscribeChatItems.md) diff --git a/packages/simplex-chat-nodejs/docs/api.Class.ChatApi.md b/packages/simplex-chat-nodejs/docs/api.Class.ChatApi.md index b81677b976..287099906b 100644 --- a/packages/simplex-chat-nodejs/docs/api.Class.ChatApi.md +++ b/packages/simplex-chat-nodejs/docs/api.Class.ChatApi.md @@ -26,7 +26,7 @@ Defined in: [src/api.ts:103](../src/api.ts#L103) > **get** **ctrl**(): `bigint` -Defined in: [src/api.ts:329](../src/api.ts#L329) +Defined in: [src/api.ts:344](../src/api.ts#L344) Chat controller reference @@ -42,7 +42,7 @@ Chat controller reference > **get** **initialized**(): `boolean` -Defined in: [src/api.ts:315](../src/api.ts#L315) +Defined in: [src/api.ts:330](../src/api.ts#L330) Chat controller is initialized @@ -58,7 +58,7 @@ Chat controller is initialized > **get** **started**(): `boolean` -Defined in: [src/api.ts:322](../src/api.ts#L322) +Defined in: [src/api.ts:337](../src/api.ts#L337) Chat controller is started @@ -72,7 +72,7 @@ Chat controller is started > **apiAcceptContactRequest**(`contactReqId`): `Promise`\<`Contact`\> -Defined in: [src/api.ts:731](../src/api.ts#L731) +Defined in: [src/api.ts:750](../src/api.ts#L750) Accept contact request. Network usage: interactive. @@ -93,7 +93,7 @@ Network usage: interactive. > **apiAcceptMember**(`groupId`, `groupMemberId`, `memberRole`): `Promise`\<`GroupMember`\> -Defined in: [src/api.ts:551](../src/api.ts#L551) +Defined in: [src/api.ts:570](../src/api.ts#L570) Accept group member. Requires Admin role. Network usage: background. @@ -122,7 +122,7 @@ Network usage: background. > **apiAddMember**(`groupId`, `contactId`, `memberRole`): `Promise`\<`GroupMember`\> -Defined in: [src/api.ts:531](../src/api.ts#L531) +Defined in: [src/api.ts:550](../src/api.ts#L550) Add contact to group. Requires bot to have Admin role. Network usage: interactive. @@ -151,7 +151,7 @@ Network usage: interactive. > **apiBlockMembersForAll**(`groupId`, `groupMemberIds`, `blocked`): `Promise`\<`void`\> -Defined in: [src/api.ts:571](../src/api.ts#L571) +Defined in: [src/api.ts:590](../src/api.ts#L590) Block members. Requires Moderator role. Network usage: background. @@ -180,7 +180,7 @@ Network usage: background. > **apiCancelFile**(`fileId`): `Promise`\<`void`\> -Defined in: [src/api.ts:521](../src/api.ts#L521) +Defined in: [src/api.ts:540](../src/api.ts#L540) Cancel file. Network usage: background. @@ -199,9 +199,9 @@ Network usage: background. ### apiChatItemReaction() -> **apiChatItemReaction**(`chatType`, `chatId`, `chatItemId`, `add`, `reaction`): `Promise`\<`ChatItemDeletion`[]\> +> **apiChatItemReaction**(`chatType`, `chatId`, `chatItemId`, `add`, `reaction`): `Promise`\<`ACIReaction`\> -Defined in: [src/api.ts:495](../src/api.ts#L495) +Defined in: [src/api.ts:513](../src/api.ts#L513) Add/remove message reaction. Network usage: background. @@ -230,15 +230,15 @@ Network usage: background. #### Returns -`Promise`\<`ChatItemDeletion`[]\> +`Promise`\<`ACIReaction`\> *** ### apiConnect() -> **apiConnect**(`userId`, `incognito`, `preparedLink?`): `Promise`\<[`ConnReqType`](api.Enumeration.ConnReqType.md)\> +> **apiConnect**(`userId`, `incognito`, `preparedLink`): `Promise`\<[`ConnReqType`](api.Enumeration.ConnReqType.md)\> -Defined in: [src/api.ts:700](../src/api.ts#L700) +Defined in: [src/api.ts:719](../src/api.ts#L719) Connect via prepared SimpleX link. The link can be 1-time invitation link, contact address or group link Network usage: interactive. @@ -253,7 +253,7 @@ Network usage: interactive. `boolean` -##### preparedLink? +##### preparedLink `CreatedConnLink` @@ -267,7 +267,7 @@ Network usage: interactive. > **apiConnectActiveUser**(`connLink`): `Promise`\<[`ConnReqType`](api.Enumeration.ConnReqType.md)\> -Defined in: [src/api.ts:709](../src/api.ts#L709) +Defined in: [src/api.ts:728](../src/api.ts#L728) Connect via SimpleX link as string in the active user profile. Network usage: interactive. @@ -288,7 +288,7 @@ Network usage: interactive. > **apiConnectPlan**(`userId`, `connectionLink`): `Promise`\<\[`ConnectionPlan`, `CreatedConnLink`\]\> -Defined in: [src/api.ts:690](../src/api.ts#L690) +Defined in: [src/api.ts:709](../src/api.ts#L709) Determine SimpleX link type and if the bot is already connected via this link. Network usage: interactive. @@ -313,7 +313,7 @@ Network usage: interactive. > **apiCreateActiveUser**(`profile?`): `Promise`\<`User`\> -Defined in: [src/api.ts:849](../src/api.ts#L849) +Defined in: [src/api.ts:887](../src/api.ts#L887) Create new user profile Network usage: no. @@ -334,7 +334,7 @@ Network usage: no. > **apiCreateGroupLink**(`groupId`, `memberRole`): `Promise`\<`string`\> -Defined in: [src/api.ts:631](../src/api.ts#L631) +Defined in: [src/api.ts:650](../src/api.ts#L650) Create group link. Network usage: interactive. @@ -359,7 +359,7 @@ Network usage: interactive. > **apiCreateLink**(`userId`): `Promise`\<`string`\> -Defined in: [src/api.ts:677](../src/api.ts#L677) +Defined in: [src/api.ts:696](../src/api.ts#L696) Create 1-time invitation link. Network usage: interactive. @@ -380,7 +380,7 @@ Network usage: interactive. > **apiCreateMemberContact**(`groupId`, `groupMemberId`): `Promise`\<`Contact`\> -Defined in: [src/api.ts:915](../src/api.ts#L915) +Defined in: [src/api.ts:953](../src/api.ts#L953) Create a direct message contact with a group member. Returns the created contact. @@ -406,7 +406,7 @@ Network usage: interactive. > **apiCreateUserAddress**(`userId`): `Promise`\<`CreatedConnLink`\> -Defined in: [src/api.ts:346](../src/api.ts#L346) +Defined in: [src/api.ts:361](../src/api.ts#L361) Create bot address. Network usage: interactive. @@ -427,7 +427,7 @@ Network usage: interactive. > **apiDeleteChat**(`chatType`, `chatId`, `deleteMode?`): `Promise`\<`void`\> -Defined in: [src/api.ts:771](../src/api.ts#L771) +Defined in: [src/api.ts:809](../src/api.ts#L809) Delete chat. Network usage: background. @@ -456,7 +456,7 @@ Network usage: background. > **apiDeleteChatItems**(`chatType`, `chatId`, `chatItemIds`, `deleteMode`): `Promise`\<`ChatItemDeletion`[]\> -Defined in: [src/api.ts:470](../src/api.ts#L470) +Defined in: [src/api.ts:488](../src/api.ts#L488) Delete message. Network usage: background. @@ -489,7 +489,7 @@ Network usage: background. > **apiDeleteGroupLink**(`groupId`): `Promise`\<`void`\> -Defined in: [src/api.ts:653](../src/api.ts#L653) +Defined in: [src/api.ts:672](../src/api.ts#L672) Delete group link. Network usage: background. @@ -510,7 +510,7 @@ Network usage: background. > **apiDeleteMemberChatItem**(`groupId`, `chatItemIds`): `Promise`\<`ChatItemDeletion`[]\> -Defined in: [src/api.ts:485](../src/api.ts#L485) +Defined in: [src/api.ts:503](../src/api.ts#L503) Moderate message. Requires Moderator role (and higher than message author's). Network usage: background. @@ -535,7 +535,7 @@ Network usage: background. > **apiDeleteUser**(`userId`, `delSMPQueues`, `viewPwd?`): `Promise`\<`void`\> -Defined in: [src/api.ts:879](../src/api.ts#L879) +Defined in: [src/api.ts:917](../src/api.ts#L917) Delete user profile. Network usage: background. @@ -564,7 +564,7 @@ Network usage: background. > **apiDeleteUserAddress**(`userId`): `Promise`\<`void`\> -Defined in: [src/api.ts:356](../src/api.ts#L356) +Defined in: [src/api.ts:371](../src/api.ts#L371) Deletes a user address. Network usage: background. @@ -585,7 +585,7 @@ Network usage: background. > **apiGetActiveUser**(): `Promise`\<`User` \| `undefined`\> -Defined in: [src/api.ts:829](../src/api.ts#L829) +Defined in: [src/api.ts:867](../src/api.ts#L867) Get active user profile Network usage: no. @@ -600,7 +600,7 @@ Network usage: no. > **apiGetChat**(`chatType`, `chatId`, `count`): `Promise`\<`any`\> -Defined in: [src/api.ts:819](../src/api.ts#L819) +Defined in: [src/api.ts:857](../src/api.ts#L857) Get chat items. Network usage: no. @@ -625,11 +625,48 @@ Network usage: no. *** +### apiGetChats() + +> **apiGetChats**(`userId`, `pagination`, `query?`, `pendingConnections?`): `Promise`\<`AChat`[]\> + +Defined in: [src/api.ts:794](../src/api.ts#L794) + +Get chat previews (paginated). +Network usage: no. + +Prefer this over apiListContacts / apiListGroups for any scan: those +methods load every record into memory in a single response and will fail +on large databases. + +#### Parameters + +##### userId + +`number` + +##### pagination + +`Last` + +##### query? + +`ChatListQuery` = `...` + +##### pendingConnections? + +`boolean` = `false` + +#### Returns + +`Promise`\<`AChat`[]\> + +*** + ### apiGetGroupLink() > **apiGetGroupLink**(`groupId`): `Promise`\<`GroupLink`\> -Defined in: [src/api.ts:662](../src/api.ts#L662) +Defined in: [src/api.ts:681](../src/api.ts#L681) Get group link. Network usage: no. @@ -650,7 +687,7 @@ Network usage: no. > **apiGetGroupLinkStr**(`groupId`): `Promise`\<`string`\> -Defined in: [src/api.ts:668](../src/api.ts#L668) +Defined in: [src/api.ts:687](../src/api.ts#L687) #### Parameters @@ -668,7 +705,7 @@ Defined in: [src/api.ts:668](../src/api.ts#L668) > **apiGetUserAddress**(`userId`): `Promise`\<`UserContactLink` \| `undefined`\> -Defined in: [src/api.ts:366](../src/api.ts#L366) +Defined in: [src/api.ts:381](../src/api.ts#L381) Get bot address and settings. Network usage: no. @@ -689,7 +726,7 @@ Network usage: no. > **apiJoinGroup**(`groupId`): `Promise`\<`GroupInfo`\> -Defined in: [src/api.ts:541](../src/api.ts#L541) +Defined in: [src/api.ts:560](../src/api.ts#L560) Join group. Network usage: interactive. @@ -710,7 +747,7 @@ Network usage: interactive. > **apiLeaveGroup**(`groupId`): `Promise`\<`GroupInfo`\> -Defined in: [src/api.ts:591](../src/api.ts#L591) +Defined in: [src/api.ts:610](../src/api.ts#L610) Leave group. Network usage: background. @@ -731,7 +768,7 @@ Network usage: background. > **apiListContacts**(`userId`): `Promise`\<`Contact`[]\> -Defined in: [src/api.ts:751](../src/api.ts#L751) +Defined in: [src/api.ts:770](../src/api.ts#L770) Get contacts. Network usage: no. @@ -752,7 +789,7 @@ Network usage: no. > **apiListGroups**(`userId`, `contactId?`, `search?`): `Promise`\<`GroupInfo`[]\> -Defined in: [src/api.ts:761](../src/api.ts#L761) +Defined in: [src/api.ts:780](../src/api.ts#L780) Get groups. Network usage: no. @@ -781,7 +818,7 @@ Network usage: no. > **apiListMembers**(`groupId`): `Promise`\<`GroupMember`[]\> -Defined in: [src/api.ts:601](../src/api.ts#L601) +Defined in: [src/api.ts:620](../src/api.ts#L620) Get group members. Network usage: no. @@ -802,7 +839,7 @@ Network usage: no. > **apiListUsers**(): `Promise`\<`UserInfo`[]\> -Defined in: [src/api.ts:859](../src/api.ts#L859) +Defined in: [src/api.ts:897](../src/api.ts#L897) Get all user profiles Network usage: no. @@ -817,7 +854,7 @@ Network usage: no. > **apiNewGroup**(`userId`, `groupProfile`): `Promise`\<`GroupInfo`\> -Defined in: [src/api.ts:611](../src/api.ts#L611) +Defined in: [src/api.ts:630](../src/api.ts#L630) Create group. Network usage: no. @@ -842,7 +879,7 @@ Network usage: no. > **apiReceiveFile**(`fileId`): `Promise`\<`AChatItem`\> -Defined in: [src/api.ts:511](../src/api.ts#L511) +Defined in: [src/api.ts:529](../src/api.ts#L529) Receive file. Network usage: no. @@ -863,7 +900,7 @@ Network usage: no. > **apiRejectContactRequest**(`contactReqId`): `Promise`\<`void`\> -Defined in: [src/api.ts:741](../src/api.ts#L741) +Defined in: [src/api.ts:760](../src/api.ts#L760) Reject contact request. The user who sent the request is **not notified**. Network usage: no. @@ -884,7 +921,7 @@ Network usage: no. > **apiRemoveMembers**(`groupId`, `memberIds`, `withMessages?`): `Promise`\<`GroupMember`[]\> -Defined in: [src/api.ts:581](../src/api.ts#L581) +Defined in: [src/api.ts:600](../src/api.ts#L600) Remove members. Requires Admin role. Network usage: background. @@ -913,7 +950,7 @@ Network usage: background. > **apiSendMemberContactInvitation**(`contactId`, `message?`): `Promise`\<`Contact`\> -Defined in: [src/api.ts:926](../src/api.ts#L926) +Defined in: [src/api.ts:964](../src/api.ts#L964) Send a direct message invitation to a group member contact. The contact must have been created with [apiCreateMemberContact](#apicreatemembercontact). @@ -939,7 +976,7 @@ Network usage: interactive. > **apiSendMessages**(`chat`, `messages`, `liveMessage?`): `Promise`\<`AChatItem`[]\> -Defined in: [src/api.ts:415](../src/api.ts#L415) +Defined in: [src/api.ts:432](../src/api.ts#L432) Send messages. Network usage: background. @@ -968,7 +1005,7 @@ Network usage: background. > **apiSendTextMessage**(`chat`, `text`, `inReplyTo?`): `Promise`\<`AChatItem`[]\> -Defined in: [src/api.ts:437](../src/api.ts#L437) +Defined in: [src/api.ts:455](../src/api.ts#L455) Send text message. Network usage: background. @@ -997,7 +1034,7 @@ Network usage: background. > **apiSendTextReply**(`chatItem`, `text`): `Promise`\<`AChatItem`[]\> -Defined in: [src/api.ts:445](../src/api.ts#L445) +Defined in: [src/api.ts:463](../src/api.ts#L463) Send text message in reply to received message. Network usage: background. @@ -1022,7 +1059,7 @@ Network usage: background. > **apiSetActiveUser**(`userId`, `viewPwd?`): `Promise`\<`User`\> -Defined in: [src/api.ts:869](../src/api.ts#L869) +Defined in: [src/api.ts:907](../src/api.ts#L907) Set active user profile Network usage: no. @@ -1047,7 +1084,7 @@ Network usage: no. > **apiSetAddressSettings**(`userId`, `__namedParameters`): `Promise`\<`void`\> -Defined in: [src/api.ts:398](../src/api.ts#L398) +Defined in: [src/api.ts:415](../src/api.ts#L415) Set bot address settings. Network usage: interactive. @@ -1072,7 +1109,7 @@ Network usage: interactive. > **apiSetAutoAcceptMemberContacts**(`userId`, `onOff`): `Promise`\<`void`\> -Defined in: [src/api.ts:808](../src/api.ts#L808) +Defined in: [src/api.ts:846](../src/api.ts#L846) Set auto-accept member contacts. Network usage: no. @@ -1097,7 +1134,7 @@ Network usage: no. > **apiSetContactCustomData**(`contactId`, `customData?`): `Promise`\<`void`\> -Defined in: [src/api.ts:798](../src/api.ts#L798) +Defined in: [src/api.ts:836](../src/api.ts#L836) Set contact custom data. Network usage: no. @@ -1122,7 +1159,7 @@ Network usage: no. > **apiSetContactPrefs**(`contactId`, `preferences`): `Promise`\<`void`\> -Defined in: [src/api.ts:905](../src/api.ts#L905) +Defined in: [src/api.ts:943](../src/api.ts#L943) Configure chat preference overrides for the contact. Network usage: background. @@ -1147,7 +1184,7 @@ Network usage: background. > **apiSetGroupCustomData**(`groupId`, `customData?`): `Promise`\<`void`\> -Defined in: [src/api.ts:788](../src/api.ts#L788) +Defined in: [src/api.ts:826](../src/api.ts#L826) Set group custom data. Network usage: no. @@ -1172,7 +1209,7 @@ Network usage: no. > **apiSetGroupLinkMemberRole**(`groupId`, `memberRole`): `Promise`\<`void`\> -Defined in: [src/api.ts:644](../src/api.ts#L644) +Defined in: [src/api.ts:663](../src/api.ts#L663) Set member role for group link. Network usage: no. @@ -1197,7 +1234,7 @@ Network usage: no. > **apiSetMembersRole**(`groupId`, `groupMemberIds`, `memberRole`): `Promise`\<`void`\> -Defined in: [src/api.ts:561](../src/api.ts#L561) +Defined in: [src/api.ts:580](../src/api.ts#L580) Set members role. Requires Admin role. Network usage: background. @@ -1226,7 +1263,7 @@ Network usage: background. > **apiSetProfileAddress**(`userId`, `enable`): `Promise`\<`UserProfileUpdateSummary`\> -Defined in: [src/api.ts:384](../src/api.ts#L384) +Defined in: [src/api.ts:399](../src/api.ts#L399) Add address to bot profile. Network usage: interactive. @@ -1251,7 +1288,7 @@ Network usage: interactive. > **apiUpdateChatItem**(`chatType`, `chatId`, `chatItemId`, `msgContent`, `liveMessage`): `Promise`\<`ChatItem`\> -Defined in: [src/api.ts:453](../src/api.ts#L453) +Defined in: [src/api.ts:471](../src/api.ts#L471) Update message. Network usage: background. @@ -1288,7 +1325,7 @@ Network usage: background. > **apiUpdateGroupProfile**(`groupId`, `groupProfile`): `Promise`\<`GroupInfo`\> -Defined in: [src/api.ts:621](../src/api.ts#L621) +Defined in: [src/api.ts:640](../src/api.ts#L640) Update group profile. Network usage: background. @@ -1313,7 +1350,7 @@ Network usage: background. > **apiUpdateProfile**(`userId`, `profile`): `Promise`\<`UserProfileUpdateSummary` \| `undefined`\> -Defined in: [src/api.ts:889](../src/api.ts#L889) +Defined in: [src/api.ts:927](../src/api.ts#L927) Update user profile. Network usage: background. @@ -1338,9 +1375,10 @@ Network usage: background. > **close**(): `Promise`\<`void`\> -Defined in: [src/api.ts:148](../src/api.ts#L148) +Defined in: [src/api.ts:158](../src/api.ts#L158) -Close chat database. +Stop chat controller and close chat database. +The database is not closed if stopping fails. Usually doesn't need to be called in chat bots. #### Returns @@ -1353,7 +1391,7 @@ Usually doesn't need to be called in chat bots. > **off**\<`K`\>(`event`, `subscriber?`): `void` -Defined in: [src/api.ts:287](../src/api.ts#L287) +Defined in: [src/api.ts:302](../src/api.ts#L302) Unsubscribe all or a specific handler from a specific event. @@ -1387,7 +1425,7 @@ An optional subscriber function for the event. > **offAny**(`receiver?`): `void` -Defined in: [src/api.ts:303](../src/api.ts#L303) +Defined in: [src/api.ts:318](../src/api.ts#L318) Unsubscribe all or a specific handler from any events. @@ -1411,7 +1449,7 @@ An optional subscriber function for the event. > **on**\<`K`\>(`subscribers`): `void` -Defined in: [src/api.ts:197](../src/api.ts#L197) +Defined in: [src/api.ts:212](../src/api.ts#L212) Subscribe multiple event handlers at once. @@ -1441,7 +1479,7 @@ If the same function is subscribed to event. > **on**\<`K`\>(`event`, `subscriber`): `void` -Defined in: [src/api.ts:205](../src/api.ts#L205) +Defined in: [src/api.ts:220](../src/api.ts#L220) Subscribe a handler to a specific event. @@ -1479,7 +1517,7 @@ If the same function is subscribed to event. > **onAny**(`receiver`): `void` -Defined in: [src/api.ts:228](../src/api.ts#L228) +Defined in: [src/api.ts:243](../src/api.ts#L243) Subscribe a handler to any event. @@ -1505,7 +1543,7 @@ If the same function is subscribed to event. > **once**\<`K`\>(`event`, `subscriber`): `void` -Defined in: [src/api.ts:239](../src/api.ts#L239) +Defined in: [src/api.ts:254](../src/api.ts#L254) Subscribe a handler to a specific event to be delivered one time. @@ -1543,13 +1581,13 @@ If the same function is subscribed to event. > **recvChatEvent**(`wait?`): `Promise`\<`ChatEvent` \| `undefined`\> -Defined in: [src/api.ts:338](../src/api.ts#L338) +Defined in: [src/api.ts:353](../src/api.ts#L353) #### Parameters ##### wait? -`number` = `5_000_000` +`number` = `500_000` #### Returns @@ -1561,7 +1599,7 @@ Defined in: [src/api.ts:338](../src/api.ts#L338) > **sendChatCmd**(`cmd`): `Promise`\<`ChatResponse`\> -Defined in: [src/api.ts:334](../src/api.ts#L334) +Defined in: [src/api.ts:349](../src/api.ts#L349) #### Parameters @@ -1579,7 +1617,7 @@ Defined in: [src/api.ts:334](../src/api.ts#L334) > **startChat**(): `Promise`\<`void`\> -Defined in: [src/api.ts:122](../src/api.ts#L122) +Defined in: [src/api.ts:124](../src/api.ts#L124) Start chat controller. Must be called with the existing user profile. @@ -1593,10 +1631,10 @@ Start chat controller. Must be called with the existing user profile. > **stopChat**(): `Promise`\<`void`\> -Defined in: [src/api.ts:136](../src/api.ts#L136) +Defined in: [src/api.ts:147](../src/api.ts#L147) Stop chat controller. -Must be called before closing the database. +`close` calls it before closing the database. Usually doesn't need to be called in chat bots. #### Returns @@ -1611,7 +1649,7 @@ Usually doesn't need to be called in chat bots. > **wait**\<`K`\>(`event`): `Promise`\<`ChatEvent` & `object`\> -Defined in: [src/api.ts:247](../src/api.ts#L247) +Defined in: [src/api.ts:262](../src/api.ts#L262) Waits for specific event, with an optional predicate. Returns `undefined` on timeout if specified. @@ -1636,7 +1674,7 @@ Returns `undefined` on timeout if specified. > **wait**\<`K`\>(`event`, `predicate`): `Promise`\<`ChatEvent` & `object`\> -Defined in: [src/api.ts:248](../src/api.ts#L248) +Defined in: [src/api.ts:263](../src/api.ts#L263) Waits for specific event, with an optional predicate. Returns `undefined` on timeout if specified. @@ -1665,7 +1703,7 @@ Returns `undefined` on timeout if specified. > **wait**\<`K`\>(`event`, `timeout`): `Promise`\ -Defined in: [src/api.ts:249](../src/api.ts#L249) +Defined in: [src/api.ts:264](../src/api.ts#L264) Waits for specific event, with an optional predicate. Returns `undefined` on timeout if specified. @@ -1694,7 +1732,7 @@ Returns `undefined` on timeout if specified. > **wait**\<`K`\>(`event`, `predicate`, `timeout`): `Promise`\ -Defined in: [src/api.ts:250](../src/api.ts#L250) +Defined in: [src/api.ts:265](../src/api.ts#L265) Waits for specific event, with an optional predicate. Returns `undefined` on timeout if specified. @@ -1727,9 +1765,9 @@ Returns `undefined` on timeout if specified. ### init() -> `static` **init**(`db`, `confirm?`): `Promise`\<`ChatApi`\> +> `static` **init**(`db`, `confirm?`, `queueSize?`): `Promise`\<`ChatApi`\> -Defined in: [src/api.ts:110](../src/api.ts#L110) +Defined in: [src/api.ts:111](../src/api.ts#L111) Initializes the ChatApi. @@ -1747,6 +1785,12 @@ Database configuration (sqlite or postgres). Migration confirmation mode. +##### queueSize? + +`number` + +Size of internal queues, the core default is used when omitted. + #### Returns `Promise`\<`ChatApi`\> diff --git a/packages/simplex-chat-nodejs/docs/bot.Function.run.md b/packages/simplex-chat-nodejs/docs/bot.Function.run.md index 3c33e6c7d4..0af2644bc2 100644 --- a/packages/simplex-chat-nodejs/docs/bot.Function.run.md +++ b/packages/simplex-chat-nodejs/docs/bot.Function.run.md @@ -8,7 +8,7 @@ > **run**(`__namedParameters`): `Promise`\<\[[`ChatApi`](api.Class.ChatApi.md), `User`, `UserContactLink` \| `undefined`\]\> -Defined in: [src/bot.ts:47](../src/bot.ts#L47) +Defined in: [src/bot.ts:48](../src/bot.ts#L48) ## Parameters diff --git a/packages/simplex-chat-nodejs/docs/bot.Function.subscribeChatItems.md b/packages/simplex-chat-nodejs/docs/bot.Function.subscribeChatItems.md new file mode 100644 index 0000000000..5397cf3aeb --- /dev/null +++ b/packages/simplex-chat-nodejs/docs/bot.Function.subscribeChatItems.md @@ -0,0 +1,27 @@ +[**simplex-chat**](README.md) + +*** + +[simplex-chat](README.md) / [bot](Namespace.bot.md) / subscribeChatItems + +# Function: subscribeChatItems() + +> **subscribeChatItems**(`bot`, `onMessage`, `commands`): `void` + +Defined in: [src/bot.ts:108](../src/bot.ts#L108) + +## Parameters + +### bot + +[`ChatApi`](api.Class.ChatApi.md) + +### onMessage + +((`chatItem`, `content`) => `void` \| `Promise`\<`void`\>) \| `undefined` + +### commands + +## Returns + +`void` diff --git a/packages/simplex-chat-nodejs/docs/bot.Interface.BotConfig.md b/packages/simplex-chat-nodejs/docs/bot.Interface.BotConfig.md index 4624b1608b..f763f414da 100644 --- a/packages/simplex-chat-nodejs/docs/bot.Interface.BotConfig.md +++ b/packages/simplex-chat-nodejs/docs/bot.Interface.BotConfig.md @@ -6,7 +6,7 @@ # Interface: BotConfig -Defined in: [src/bot.ts:35](../src/bot.ts#L35) +Defined in: [src/bot.ts:36](../src/bot.ts#L36) ## Properties @@ -14,7 +14,7 @@ Defined in: [src/bot.ts:35](../src/bot.ts#L35) > **dbOpts**: [`BotDbOpts`](bot.TypeAlias.BotDbOpts.md) -Defined in: [src/bot.ts:37](../src/bot.ts#L37) +Defined in: [src/bot.ts:38](../src/bot.ts#L38) *** @@ -22,7 +22,7 @@ Defined in: [src/bot.ts:37](../src/bot.ts#L37) > `optional` **events?**: [`EventSubscribers`](api.TypeAlias.EventSubscribers.md) -Defined in: [src/bot.ts:44](../src/bot.ts#L44) +Defined in: [src/bot.ts:45](../src/bot.ts#L45) *** @@ -30,7 +30,7 @@ Defined in: [src/bot.ts:44](../src/bot.ts#L44) > `optional` **onCommands?**: `object` -Defined in: [src/bot.ts:41](../src/bot.ts#L41) +Defined in: [src/bot.ts:42](../src/bot.ts#L42) #### Index Signature @@ -42,7 +42,7 @@ Defined in: [src/bot.ts:41](../src/bot.ts#L41) > `optional` **onMessage?**: (`chatItem`, `content`) => `void` \| `Promise`\<`void`\> -Defined in: [src/bot.ts:39](../src/bot.ts#L39) +Defined in: [src/bot.ts:40](../src/bot.ts#L40) #### Parameters @@ -64,7 +64,7 @@ Defined in: [src/bot.ts:39](../src/bot.ts#L39) > **options**: [`BotOptions`](bot.Interface.BotOptions.md) -Defined in: [src/bot.ts:38](../src/bot.ts#L38) +Defined in: [src/bot.ts:39](../src/bot.ts#L39) *** @@ -72,4 +72,4 @@ Defined in: [src/bot.ts:38](../src/bot.ts#L38) > **profile**: `Profile` -Defined in: [src/bot.ts:36](../src/bot.ts#L36) +Defined in: [src/bot.ts:37](../src/bot.ts#L37) diff --git a/packages/simplex-chat-nodejs/docs/bot.Interface.BotOptions.md b/packages/simplex-chat-nodejs/docs/bot.Interface.BotOptions.md index eee56b879a..c5d5df5193 100644 --- a/packages/simplex-chat-nodejs/docs/bot.Interface.BotOptions.md +++ b/packages/simplex-chat-nodejs/docs/bot.Interface.BotOptions.md @@ -6,7 +6,7 @@ # Interface: BotOptions -Defined in: [src/bot.ts:11](../src/bot.ts#L11) +Defined in: [src/bot.ts:12](../src/bot.ts#L12) ## Properties @@ -14,7 +14,7 @@ Defined in: [src/bot.ts:11](../src/bot.ts#L11) > `optional` **addressSettings?**: [`BotAddressSettings`](api.Interface.BotAddressSettings.md) -Defined in: [src/bot.ts:15](../src/bot.ts#L15) +Defined in: [src/bot.ts:16](../src/bot.ts#L16) *** @@ -22,7 +22,7 @@ Defined in: [src/bot.ts:15](../src/bot.ts#L15) > `optional` **allowFiles?**: `boolean` -Defined in: [src/bot.ts:16](../src/bot.ts#L16) +Defined in: [src/bot.ts:17](../src/bot.ts#L17) *** @@ -30,7 +30,7 @@ Defined in: [src/bot.ts:16](../src/bot.ts#L16) > `optional` **commands?**: `ChatBotCommand`[] -Defined in: [src/bot.ts:17](../src/bot.ts#L17) +Defined in: [src/bot.ts:18](../src/bot.ts#L18) *** @@ -38,7 +38,7 @@ Defined in: [src/bot.ts:17](../src/bot.ts#L17) > `optional` **createAddress?**: `boolean` -Defined in: [src/bot.ts:12](../src/bot.ts#L12) +Defined in: [src/bot.ts:13](../src/bot.ts#L13) *** @@ -46,7 +46,7 @@ Defined in: [src/bot.ts:12](../src/bot.ts#L12) > `optional` **logContacts?**: `boolean` -Defined in: [src/bot.ts:19](../src/bot.ts#L19) +Defined in: [src/bot.ts:20](../src/bot.ts#L20) *** @@ -54,7 +54,7 @@ Defined in: [src/bot.ts:19](../src/bot.ts#L19) > `optional` **logNetwork?**: `boolean` -Defined in: [src/bot.ts:20](../src/bot.ts#L20) +Defined in: [src/bot.ts:21](../src/bot.ts#L21) *** @@ -62,7 +62,7 @@ Defined in: [src/bot.ts:20](../src/bot.ts#L20) > `optional` **updateAddress?**: `boolean` -Defined in: [src/bot.ts:13](../src/bot.ts#L13) +Defined in: [src/bot.ts:14](../src/bot.ts#L14) *** @@ -70,7 +70,7 @@ Defined in: [src/bot.ts:13](../src/bot.ts#L13) > `optional` **updateProfile?**: `boolean` -Defined in: [src/bot.ts:14](../src/bot.ts#L14) +Defined in: [src/bot.ts:15](../src/bot.ts#L15) *** @@ -78,4 +78,4 @@ Defined in: [src/bot.ts:14](../src/bot.ts#L14) > `optional` **useBotProfile?**: `boolean` -Defined in: [src/bot.ts:18](../src/bot.ts#L18) +Defined in: [src/bot.ts:19](../src/bot.ts#L19) diff --git a/packages/simplex-chat-nodejs/docs/bot.TypeAlias.BotDbOpts.md b/packages/simplex-chat-nodejs/docs/bot.TypeAlias.BotDbOpts.md index b035f41355..5aeb298a09 100644 --- a/packages/simplex-chat-nodejs/docs/bot.TypeAlias.BotDbOpts.md +++ b/packages/simplex-chat-nodejs/docs/bot.TypeAlias.BotDbOpts.md @@ -15,3 +15,7 @@ Defined in: [src/bot.ts:7](../src/bot.ts#L7) ### confirmMigrations? > `optional` **confirmMigrations?**: [`MigrationConfirmation`](core.Enumeration.MigrationConfirmation.md) + +### queueSize? + +> `optional` **queueSize?**: `number` diff --git a/packages/simplex-chat-nodejs/docs/core.Class.ChatAPIError.md b/packages/simplex-chat-nodejs/docs/core.Class.ChatAPIError.md index 5bd0722f0c..3953d777da 100644 --- a/packages/simplex-chat-nodejs/docs/core.Class.ChatAPIError.md +++ b/packages/simplex-chat-nodejs/docs/core.Class.ChatAPIError.md @@ -6,7 +6,7 @@ # Class: ChatAPIError -Defined in: [src/core.ts:92](../src/core.ts#L92) +Defined in: [src/core.ts:95](../src/core.ts#L95) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:92](../src/core.ts#L92) > **new ChatAPIError**(`message`, `chatError?`): `ChatAPIError` -Defined in: [src/core.ts:93](../src/core.ts#L93) +Defined in: [src/core.ts:96](../src/core.ts#L96) #### Parameters @@ -44,7 +44,7 @@ Defined in: [src/core.ts:93](../src/core.ts#L93) > **chatError**: `ChatError` \| `undefined` = `undefined` -Defined in: [src/core.ts:93](../src/core.ts#L93) +Defined in: [src/core.ts:96](../src/core.ts#L96) *** @@ -52,7 +52,7 @@ Defined in: [src/core.ts:93](../src/core.ts#L93) > **message**: `string` -Defined in: [src/core.ts:93](../src/core.ts#L93) +Defined in: [src/core.ts:96](../src/core.ts#L96) #### Inherited from diff --git a/packages/simplex-chat-nodejs/docs/core.Class.ChatInitError.md b/packages/simplex-chat-nodejs/docs/core.Class.ChatInitError.md index 0feceae4fd..649090e3ac 100644 --- a/packages/simplex-chat-nodejs/docs/core.Class.ChatInitError.md +++ b/packages/simplex-chat-nodejs/docs/core.Class.ChatInitError.md @@ -6,7 +6,7 @@ # Class: ChatInitError -Defined in: [src/core.ts:116](../src/core.ts#L116) +Defined in: [src/core.ts:119](../src/core.ts#L119) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:116](../src/core.ts#L116) > **new ChatInitError**(`message`, `dbMigrationError`): `ChatInitError` -Defined in: [src/core.ts:117](../src/core.ts#L117) +Defined in: [src/core.ts:120](../src/core.ts#L120) #### Parameters @@ -44,7 +44,7 @@ Defined in: [src/core.ts:117](../src/core.ts#L117) > **dbMigrationError**: [`DBMigrationError`](core.TypeAlias.DBMigrationError.md) -Defined in: [src/core.ts:117](../src/core.ts#L117) +Defined in: [src/core.ts:120](../src/core.ts#L120) *** @@ -52,7 +52,7 @@ Defined in: [src/core.ts:117](../src/core.ts#L117) > **message**: `string` -Defined in: [src/core.ts:117](../src/core.ts#L117) +Defined in: [src/core.ts:120](../src/core.ts#L120) #### Inherited from diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorMigration.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorMigration.md index 02cf84b763..fea7bfb531 100644 --- a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorMigration.md +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorMigration.md @@ -6,7 +6,7 @@ # Interface: ErrorMigration -Defined in: [src/core.ts:144](../src/core.ts#L144) +Defined in: [src/core.ts:152](../src/core.ts#L152) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:144](../src/core.ts#L144) > **dbFile**: `string` -Defined in: [src/core.ts:146](../src/core.ts#L146) +Defined in: [src/core.ts:154](../src/core.ts#L154) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:146](../src/core.ts#L146) > **migrationError**: [`MigrationError`](core.TypeAlias.MigrationError.md) -Defined in: [src/core.ts:147](../src/core.ts#L147) +Defined in: [src/core.ts:155](../src/core.ts#L155) *** @@ -34,7 +34,7 @@ Defined in: [src/core.ts:147](../src/core.ts#L147) > **type**: `"errorMigration"` -Defined in: [src/core.ts:145](../src/core.ts#L145) +Defined in: [src/core.ts:153](../src/core.ts#L153) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorNotADatabase.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorNotADatabase.md index 18e2429081..eb0bfb11cb 100644 --- a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorNotADatabase.md +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorNotADatabase.md @@ -6,7 +6,7 @@ # Interface: ErrorNotADatabase -Defined in: [src/core.ts:139](../src/core.ts#L139) +Defined in: [src/core.ts:147](../src/core.ts#L147) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:139](../src/core.ts#L139) > **dbFile**: `string` -Defined in: [src/core.ts:141](../src/core.ts#L141) +Defined in: [src/core.ts:149](../src/core.ts#L149) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:141](../src/core.ts#L141) > **type**: `"errorNotADatabase"` -Defined in: [src/core.ts:140](../src/core.ts#L140) +Defined in: [src/core.ts:148](../src/core.ts#L148) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorSQL.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorSQL.md index 4d85b04197..ffaa364f9b 100644 --- a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorSQL.md +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.ErrorSQL.md @@ -6,7 +6,7 @@ # Interface: ErrorSQL -Defined in: [src/core.ts:150](../src/core.ts#L150) +Defined in: [src/core.ts:158](../src/core.ts#L158) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:150](../src/core.ts#L150) > **dbFile**: `string` -Defined in: [src/core.ts:152](../src/core.ts#L152) +Defined in: [src/core.ts:160](../src/core.ts#L160) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:152](../src/core.ts#L152) > **migrationSQLError**: `string` -Defined in: [src/core.ts:153](../src/core.ts#L153) +Defined in: [src/core.ts:161](../src/core.ts#L161) *** @@ -34,7 +34,7 @@ Defined in: [src/core.ts:153](../src/core.ts#L153) > **type**: `"errorSQL"` -Defined in: [src/core.ts:151](../src/core.ts#L151) +Defined in: [src/core.ts:159](../src/core.ts#L159) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidConfirmation.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidConfirmation.md index 34dea63aed..67711030da 100644 --- a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidConfirmation.md +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidConfirmation.md @@ -6,7 +6,7 @@ # Interface: InvalidConfirmation -Defined in: [src/core.ts:135](../src/core.ts#L135) +Defined in: [src/core.ts:139](../src/core.ts#L139) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:135](../src/core.ts#L135) > **type**: `"invalidConfirmation"` -Defined in: [src/core.ts:136](../src/core.ts#L136) +Defined in: [src/core.ts:140](../src/core.ts#L140) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidQueueSize.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidQueueSize.md new file mode 100644 index 0000000000..9093b5e9b1 --- /dev/null +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.Interface.InvalidQueueSize.md @@ -0,0 +1,25 @@ +[**simplex-chat**](README.md) + +*** + +[simplex-chat](README.md) / [core](Namespace.core.md) / [DBMigrationError](core.Namespace.DBMigrationError.md) / InvalidQueueSize + +# Interface: InvalidQueueSize + +Defined in: [src/core.ts:143](../src/core.ts#L143) + +## Extends + +- `Interface` + +## Properties + +### type + +> **type**: `"invalidQueueSize"` + +Defined in: [src/core.ts:144](../src/core.ts#L144) + +#### Overrides + +`Interface.type` diff --git a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.TypeAlias.Tag.md b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.TypeAlias.Tag.md index a3ef341601..b04f2f5af1 100644 --- a/packages/simplex-chat-nodejs/docs/core.DBMigrationError.TypeAlias.Tag.md +++ b/packages/simplex-chat-nodejs/docs/core.DBMigrationError.TypeAlias.Tag.md @@ -6,6 +6,6 @@ # Type Alias: Tag -> **Tag** = `"invalidConfirmation"` \| `"errorNotADatabase"` \| `"errorMigration"` \| `"errorSQL"` +> **Tag** = `"invalidConfirmation"` \| `"invalidQueueSize"` \| `"errorNotADatabase"` \| `"errorMigration"` \| `"errorSQL"` -Defined in: [src/core.ts:129](../src/core.ts#L129) +Defined in: [src/core.ts:133](../src/core.ts#L133) diff --git a/packages/simplex-chat-nodejs/docs/core.Enumeration.MigrationConfirmation.md b/packages/simplex-chat-nodejs/docs/core.Enumeration.MigrationConfirmation.md index 7dfd4991bf..48e250c7d4 100644 --- a/packages/simplex-chat-nodejs/docs/core.Enumeration.MigrationConfirmation.md +++ b/packages/simplex-chat-nodejs/docs/core.Enumeration.MigrationConfirmation.md @@ -6,7 +6,7 @@ # Enumeration: MigrationConfirmation -Defined in: [src/core.ts:101](../src/core.ts#L101) +Defined in: [src/core.ts:104](../src/core.ts#L104) Migration confirmation mode @@ -16,7 +16,7 @@ Migration confirmation mode > **Console**: `"console"` -Defined in: [src/core.ts:104](../src/core.ts#L104) +Defined in: [src/core.ts:107](../src/core.ts#L107) *** @@ -24,7 +24,7 @@ Defined in: [src/core.ts:104](../src/core.ts#L104) > **Error**: `"error"` -Defined in: [src/core.ts:105](../src/core.ts#L105) +Defined in: [src/core.ts:108](../src/core.ts#L108) *** @@ -32,7 +32,7 @@ Defined in: [src/core.ts:105](../src/core.ts#L105) > **YesUp**: `"yesUp"` -Defined in: [src/core.ts:102](../src/core.ts#L102) +Defined in: [src/core.ts:105](../src/core.ts#L105) *** @@ -40,4 +40,4 @@ Defined in: [src/core.ts:102](../src/core.ts#L102) > **YesUpDown**: `"yesUpDown"` -Defined in: [src/core.ts:103](../src/core.ts#L103) +Defined in: [src/core.ts:106](../src/core.ts#L106) diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatCloseStore.md b/packages/simplex-chat-nodejs/docs/core.Function.chatCloseStore.md index deeb3213fd..4b0324b92c 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatCloseStore.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatCloseStore.md @@ -8,7 +8,7 @@ > **chatCloseStore**(`ctrl`): `Promise`\<`void`\> -Defined in: [src/core.ts:17](../src/core.ts#L17) +Defined in: [src/core.ts:20](../src/core.ts#L20) Close chat store diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatDecryptFile.md b/packages/simplex-chat-nodejs/docs/core.Function.chatDecryptFile.md index 434aeeaae8..b6786fe1cb 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatDecryptFile.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatDecryptFile.md @@ -8,7 +8,7 @@ > **chatDecryptFile**(`fromPath`, `__namedParameters`, `toPath`): `Promise`\<`void`\> -Defined in: [src/core.ts:73](../src/core.ts#L73) +Defined in: [src/core.ts:76](../src/core.ts#L76) Decrypt file diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatEncryptFile.md b/packages/simplex-chat-nodejs/docs/core.Function.chatEncryptFile.md index 6aa0ad2923..9e30e55a23 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatEncryptFile.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatEncryptFile.md @@ -8,7 +8,7 @@ > **chatEncryptFile**(`ctrl`, `fromPath`, `toPath`): `Promise`\<[`CryptoArgs`](core.Interface.CryptoArgs.md)\> -Defined in: [src/core.ts:65](../src/core.ts#L65) +Defined in: [src/core.ts:68](../src/core.ts#L68) Encrypt file diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatMigrateInit.md b/packages/simplex-chat-nodejs/docs/core.Function.chatMigrateInit.md index 9116026f56..dbe4912520 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatMigrateInit.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatMigrateInit.md @@ -6,9 +6,9 @@ # Function: chatMigrateInit() -> **chatMigrateInit**(`dbPath`, `dbKey`, `confirm`): `Promise`\<`bigint`\> +> **chatMigrateInit**(`dbPath`, `dbKey`, `confirm`, `queueSize?`): `Promise`\<`bigint`\> -Defined in: [src/core.ts:7](../src/core.ts#L7) +Defined in: [src/core.ts:8](../src/core.ts#L8) Initialize chat controller @@ -26,6 +26,12 @@ Initialize chat controller [`MigrationConfirmation`](core.Enumeration.MigrationConfirmation.md) +### queueSize? + +`number` + +Size of internal queues, the core default is used when omitted. + ## Returns `Promise`\<`bigint`\> diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatReadFile.md b/packages/simplex-chat-nodejs/docs/core.Function.chatReadFile.md index 27de43e63c..f6713f22d8 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatReadFile.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatReadFile.md @@ -6,9 +6,9 @@ # Function: chatReadFile() -> **chatReadFile**(`path`, `__namedParameters`): `Promise`\<`ArrayBuffer`\> +> **chatReadFile**(`path`, `__namedParameters`): `Promise`\<`Buffer`\<`ArrayBufferLike`\>\> -Defined in: [src/core.ts:58](../src/core.ts#L58) +Defined in: [src/core.ts:61](../src/core.ts#L61) Read buffer from encrypted file @@ -24,4 +24,4 @@ Read buffer from encrypted file ## Returns -`Promise`\<`ArrayBuffer`\> +`Promise`\<`Buffer`\<`ArrayBufferLike`\>\> diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatRecvMsgWait.md b/packages/simplex-chat-nodejs/docs/core.Function.chatRecvMsgWait.md index 9bf44d6523..719cf610a1 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatRecvMsgWait.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatRecvMsgWait.md @@ -8,7 +8,7 @@ > **chatRecvMsgWait**(`ctrl`, `wait`): `Promise`\<`ChatEvent` \| `undefined`\> -Defined in: [src/core.ts:37](../src/core.ts#L37) +Defined in: [src/core.ts:40](../src/core.ts#L40) Receive chat event diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatSendCmd.md b/packages/simplex-chat-nodejs/docs/core.Function.chatSendCmd.md index 2dfcba45b4..4296a714cf 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatSendCmd.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatSendCmd.md @@ -8,7 +8,7 @@ > **chatSendCmd**(`ctrl`, `cmd`): `Promise`\<`ChatResponse`\> -Defined in: [src/core.ts:25](../src/core.ts#L25) +Defined in: [src/core.ts:28](../src/core.ts#L28) Send chat command as string diff --git a/packages/simplex-chat-nodejs/docs/core.Function.chatWriteFile.md b/packages/simplex-chat-nodejs/docs/core.Function.chatWriteFile.md index 3b1d770fbb..4ca640d8c4 100644 --- a/packages/simplex-chat-nodejs/docs/core.Function.chatWriteFile.md +++ b/packages/simplex-chat-nodejs/docs/core.Function.chatWriteFile.md @@ -8,7 +8,7 @@ > **chatWriteFile**(`ctrl`, `path`, `buffer`): `Promise`\<[`CryptoArgs`](core.Interface.CryptoArgs.md)\> -Defined in: [src/core.ts:50](../src/core.ts#L50) +Defined in: [src/core.ts:53](../src/core.ts#L53) Write buffer to encrypted file @@ -24,7 +24,7 @@ Write buffer to encrypted file ### buffer -`ArrayBuffer` +`ArrayBuffer` \| `Uint8Array`\<`ArrayBufferLike`\> ## Returns diff --git a/packages/simplex-chat-nodejs/docs/core.Interface.APIResult.md b/packages/simplex-chat-nodejs/docs/core.Interface.APIResult.md index 8d18997ec4..2ede6d9ffb 100644 --- a/packages/simplex-chat-nodejs/docs/core.Interface.APIResult.md +++ b/packages/simplex-chat-nodejs/docs/core.Interface.APIResult.md @@ -6,7 +6,7 @@ # Interface: APIResult\ -Defined in: [src/core.ts:87](../src/core.ts#L87) +Defined in: [src/core.ts:90](../src/core.ts#L90) ## Type Parameters @@ -20,7 +20,7 @@ Defined in: [src/core.ts:87](../src/core.ts#L87) > `optional` **error?**: `ChatError` -Defined in: [src/core.ts:89](../src/core.ts#L89) +Defined in: [src/core.ts:92](../src/core.ts#L92) *** @@ -28,4 +28,4 @@ Defined in: [src/core.ts:89](../src/core.ts#L89) > `optional` **result?**: `R` -Defined in: [src/core.ts:88](../src/core.ts#L88) +Defined in: [src/core.ts:91](../src/core.ts#L91) diff --git a/packages/simplex-chat-nodejs/docs/core.Interface.CryptoArgs.md b/packages/simplex-chat-nodejs/docs/core.Interface.CryptoArgs.md index eddcb0bc5a..51a55b86b6 100644 --- a/packages/simplex-chat-nodejs/docs/core.Interface.CryptoArgs.md +++ b/packages/simplex-chat-nodejs/docs/core.Interface.CryptoArgs.md @@ -6,7 +6,7 @@ # Interface: CryptoArgs -Defined in: [src/core.ts:111](../src/core.ts#L111) +Defined in: [src/core.ts:114](../src/core.ts#L114) File encryption key and nonce @@ -16,7 +16,7 @@ File encryption key and nonce > **fileKey**: `string` -Defined in: [src/core.ts:112](../src/core.ts#L112) +Defined in: [src/core.ts:115](../src/core.ts#L115) *** @@ -24,4 +24,4 @@ Defined in: [src/core.ts:112](../src/core.ts#L112) > **fileNonce**: `string` -Defined in: [src/core.ts:113](../src/core.ts#L113) +Defined in: [src/core.ts:116](../src/core.ts#L116) diff --git a/packages/simplex-chat-nodejs/docs/core.Interface.UpMigration.md b/packages/simplex-chat-nodejs/docs/core.Interface.UpMigration.md index 32f6c267aa..9e1fca49b4 100644 --- a/packages/simplex-chat-nodejs/docs/core.Interface.UpMigration.md +++ b/packages/simplex-chat-nodejs/docs/core.Interface.UpMigration.md @@ -6,7 +6,7 @@ # Interface: UpMigration -Defined in: [src/core.ts:185](../src/core.ts#L185) +Defined in: [src/core.ts:193](../src/core.ts#L193) ## Properties @@ -14,7 +14,7 @@ Defined in: [src/core.ts:185](../src/core.ts#L185) > **upName**: `string` -Defined in: [src/core.ts:186](../src/core.ts#L186) +Defined in: [src/core.ts:194](../src/core.ts#L194) *** @@ -22,4 +22,4 @@ Defined in: [src/core.ts:186](../src/core.ts#L186) > **withDown**: `boolean` -Defined in: [src/core.ts:187](../src/core.ts#L187) +Defined in: [src/core.ts:195](../src/core.ts#L195) diff --git a/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTREDifferent.md b/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTREDifferent.md index 8dab81a3a3..f85fb492be 100644 --- a/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTREDifferent.md +++ b/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTREDifferent.md @@ -6,7 +6,7 @@ # Interface: MTREDifferent -Defined in: [src/core.ts:206](../src/core.ts#L206) +Defined in: [src/core.ts:214](../src/core.ts#L214) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:206](../src/core.ts#L206) > **downMigrations**: `string`[] -Defined in: [src/core.ts:208](../src/core.ts#L208) +Defined in: [src/core.ts:216](../src/core.ts#L216) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:208](../src/core.ts#L208) > **type**: `"different"` -Defined in: [src/core.ts:207](../src/core.ts#L207) +Defined in: [src/core.ts:215](../src/core.ts#L215) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTRENoDown.md b/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTRENoDown.md index 1de634e40e..f031ac8982 100644 --- a/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTRENoDown.md +++ b/packages/simplex-chat-nodejs/docs/core.MTRError.Interface.MTRENoDown.md @@ -6,7 +6,7 @@ # Interface: MTRENoDown -Defined in: [src/core.ts:201](../src/core.ts#L201) +Defined in: [src/core.ts:209](../src/core.ts#L209) ## Extends @@ -14,20 +14,20 @@ Defined in: [src/core.ts:201](../src/core.ts#L201) ## Properties +### dbMigrations + +> **dbMigrations**: `string`[] + +Defined in: [src/core.ts:211](../src/core.ts#L211) + +*** + ### type > **type**: `"noDown"` -Defined in: [src/core.ts:202](../src/core.ts#L202) +Defined in: [src/core.ts:210](../src/core.ts#L210) #### Overrides `Interface.type` - -*** - -### upMigrations - -> **upMigrations**: [`UpMigration`](core.Interface.UpMigration.md) - -Defined in: [src/core.ts:203](../src/core.ts#L203) diff --git a/packages/simplex-chat-nodejs/docs/core.MTRError.TypeAlias.Tag.md b/packages/simplex-chat-nodejs/docs/core.MTRError.TypeAlias.Tag.md index 768baa0068..59501b539a 100644 --- a/packages/simplex-chat-nodejs/docs/core.MTRError.TypeAlias.Tag.md +++ b/packages/simplex-chat-nodejs/docs/core.MTRError.TypeAlias.Tag.md @@ -8,4 +8,4 @@ > **Tag** = `"noDown"` \| `"different"` -Defined in: [src/core.ts:195](../src/core.ts#L195) +Defined in: [src/core.ts:203](../src/core.ts#L203) diff --git a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEDowngrade.md b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEDowngrade.md index a2742cbff2..f6202b9456 100644 --- a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEDowngrade.md +++ b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEDowngrade.md @@ -6,7 +6,7 @@ # Interface: MEDowngrade -Defined in: [src/core.ts:174](../src/core.ts#L174) +Defined in: [src/core.ts:182](../src/core.ts#L182) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:174](../src/core.ts#L174) > **downMigrations**: `string`[] -Defined in: [src/core.ts:176](../src/core.ts#L176) +Defined in: [src/core.ts:184](../src/core.ts#L184) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:176](../src/core.ts#L176) > **type**: `"downgrade"` -Defined in: [src/core.ts:175](../src/core.ts#L175) +Defined in: [src/core.ts:183](../src/core.ts#L183) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEUpgrade.md b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEUpgrade.md index 08fe7d56e3..7467895b74 100644 --- a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEUpgrade.md +++ b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MEUpgrade.md @@ -6,7 +6,7 @@ # Interface: MEUpgrade -Defined in: [src/core.ts:169](../src/core.ts#L169) +Defined in: [src/core.ts:177](../src/core.ts#L177) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:169](../src/core.ts#L169) > **type**: `"upgrade"` -Defined in: [src/core.ts:170](../src/core.ts#L170) +Defined in: [src/core.ts:178](../src/core.ts#L178) #### Overrides @@ -28,6 +28,6 @@ Defined in: [src/core.ts:170](../src/core.ts#L170) ### upMigrations -> **upMigrations**: [`UpMigration`](core.Interface.UpMigration.md) +> **upMigrations**: [`UpMigration`](core.Interface.UpMigration.md)[] -Defined in: [src/core.ts:171](../src/core.ts#L171) +Defined in: [src/core.ts:179](../src/core.ts#L179) diff --git a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MigrationError.md b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MigrationError.md index cd811a5747..7b2546fcd5 100644 --- a/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MigrationError.md +++ b/packages/simplex-chat-nodejs/docs/core.MigrationError.Interface.MigrationError.md @@ -6,7 +6,7 @@ # Interface: MigrationError -Defined in: [src/core.ts:179](../src/core.ts#L179) +Defined in: [src/core.ts:187](../src/core.ts#L187) ## Extends @@ -18,7 +18,7 @@ Defined in: [src/core.ts:179](../src/core.ts#L179) > **mtrError**: [`MTRError`](core.TypeAlias.MTRError.md) -Defined in: [src/core.ts:181](../src/core.ts#L181) +Defined in: [src/core.ts:189](../src/core.ts#L189) *** @@ -26,7 +26,7 @@ Defined in: [src/core.ts:181](../src/core.ts#L181) > **type**: `"migrationError"` -Defined in: [src/core.ts:180](../src/core.ts#L180) +Defined in: [src/core.ts:188](../src/core.ts#L188) #### Overrides diff --git a/packages/simplex-chat-nodejs/docs/core.MigrationError.TypeAlias.Tag.md b/packages/simplex-chat-nodejs/docs/core.MigrationError.TypeAlias.Tag.md index 5ef6e70b08..e2e1dcb33f 100644 --- a/packages/simplex-chat-nodejs/docs/core.MigrationError.TypeAlias.Tag.md +++ b/packages/simplex-chat-nodejs/docs/core.MigrationError.TypeAlias.Tag.md @@ -8,4 +8,4 @@ > **Tag** = `"upgrade"` \| `"downgrade"` \| `"migrationError"` -Defined in: [src/core.ts:163](../src/core.ts#L163) +Defined in: [src/core.ts:171](../src/core.ts#L171) diff --git a/packages/simplex-chat-nodejs/docs/core.Namespace.DBMigrationError.md b/packages/simplex-chat-nodejs/docs/core.Namespace.DBMigrationError.md index 95ddfa5b24..889a10ddba 100644 --- a/packages/simplex-chat-nodejs/docs/core.Namespace.DBMigrationError.md +++ b/packages/simplex-chat-nodejs/docs/core.Namespace.DBMigrationError.md @@ -12,6 +12,7 @@ - [ErrorNotADatabase](core.DBMigrationError.Interface.ErrorNotADatabase.md) - [ErrorSQL](core.DBMigrationError.Interface.ErrorSQL.md) - [InvalidConfirmation](core.DBMigrationError.Interface.InvalidConfirmation.md) +- [InvalidQueueSize](core.DBMigrationError.Interface.InvalidQueueSize.md) ## Type Aliases diff --git a/packages/simplex-chat-nodejs/docs/core.TypeAlias.DBMigrationError.md b/packages/simplex-chat-nodejs/docs/core.TypeAlias.DBMigrationError.md index 6473b3ef60..3f4797fb8e 100644 --- a/packages/simplex-chat-nodejs/docs/core.TypeAlias.DBMigrationError.md +++ b/packages/simplex-chat-nodejs/docs/core.TypeAlias.DBMigrationError.md @@ -6,6 +6,6 @@ # Type Alias: DBMigrationError -> **DBMigrationError** = [`InvalidConfirmation`](core.DBMigrationError.Interface.InvalidConfirmation.md) \| [`ErrorNotADatabase`](core.DBMigrationError.Interface.ErrorNotADatabase.md) \| [`ErrorMigration`](core.DBMigrationError.Interface.ErrorMigration.md) \| [`ErrorSQL`](core.DBMigrationError.Interface.ErrorSQL.md) +> **DBMigrationError** = [`InvalidConfirmation`](core.DBMigrationError.Interface.InvalidConfirmation.md) \| [`InvalidQueueSize`](core.DBMigrationError.Interface.InvalidQueueSize.md) \| [`ErrorNotADatabase`](core.DBMigrationError.Interface.ErrorNotADatabase.md) \| [`ErrorMigration`](core.DBMigrationError.Interface.ErrorMigration.md) \| [`ErrorSQL`](core.DBMigrationError.Interface.ErrorSQL.md) -Defined in: [src/core.ts:122](../src/core.ts#L122) +Defined in: [src/core.ts:125](../src/core.ts#L125) diff --git a/packages/simplex-chat-nodejs/docs/core.TypeAlias.MTRError.md b/packages/simplex-chat-nodejs/docs/core.TypeAlias.MTRError.md index 11aa5b7c24..66d6a092dc 100644 --- a/packages/simplex-chat-nodejs/docs/core.TypeAlias.MTRError.md +++ b/packages/simplex-chat-nodejs/docs/core.TypeAlias.MTRError.md @@ -8,4 +8,4 @@ > **MTRError** = [`MTRENoDown`](core.MTRError.Interface.MTRENoDown.md) \| [`MTREDifferent`](core.MTRError.Interface.MTREDifferent.md) -Defined in: [src/core.ts:190](../src/core.ts#L190) +Defined in: [src/core.ts:198](../src/core.ts#L198) diff --git a/packages/simplex-chat-nodejs/docs/core.TypeAlias.MigrationError.md b/packages/simplex-chat-nodejs/docs/core.TypeAlias.MigrationError.md index c15b679769..6c0ba77541 100644 --- a/packages/simplex-chat-nodejs/docs/core.TypeAlias.MigrationError.md +++ b/packages/simplex-chat-nodejs/docs/core.TypeAlias.MigrationError.md @@ -8,4 +8,4 @@ > **MigrationError** = [`MEUpgrade`](core.MigrationError.Interface.MEUpgrade.md) \| [`MEDowngrade`](core.MigrationError.Interface.MEDowngrade.md) \| [`MigrationError`](core.MigrationError.Interface.MigrationError.md) -Defined in: [src/core.ts:157](../src/core.ts#L157) +Defined in: [src/core.ts:165](../src/core.ts#L165) diff --git a/packages/simplex-chat-nodejs/src/api.ts b/packages/simplex-chat-nodejs/src/api.ts index 958304a8ea..8c11e9fde3 100644 --- a/packages/simplex-chat-nodejs/src/api.ts +++ b/packages/simplex-chat-nodejs/src/api.ts @@ -106,13 +106,15 @@ export class ChatApi { * Initializes the ChatApi. * @param {DbConfig} db - Database configuration (sqlite or postgres). * @param {core.MigrationConfirmation} [confirm=core.MigrationConfirmation.YesUp] - Migration confirmation mode. + * @param {number} [queueSize] - Size of internal queues, the core default is used when omitted. */ static async init( db: DbConfig, - confirm = core.MigrationConfirmation.YesUp + confirm = core.MigrationConfirmation.YesUp, + queueSize?: number ): Promise { const [path, key] = dbConfigToMigrateArgs(db) - const ctrl = await core.chatMigrateInit(path, key, confirm) + const ctrl = await core.chatMigrateInit(path, key, confirm, queueSize) return new ChatApi(ctrl) } @@ -120,39 +122,52 @@ export class ChatApi { * Start chat controller. Must be called with the existing user profile. */ async startChat(): Promise { + if (this.eventsLoop) throw new Error("chat already started") + const ctrl = this.ctrl this.receiveEvents = true this.eventsLoop = this.runEventsLoop() - const r = await this.sendChatCmd(CC.StartChat.cmdString({mainApp: true, enableSndFiles: true})) + let r: ChatResponse + try { + r = await core.chatSendCmd(ctrl, CC.StartChat.cmdString({mainApp: true, enableSndFiles: true, serviceRequests: false})) + } catch (e) { + await this.stopEventsLoop() + throw e + } if (r.type !== "chatStarted" && r.type !== "chatRunning") { + await this.stopEventsLoop() throw new ChatCommandError("error starting chat", r) } } - + /** * Stop chat controller. - * Must be called before closing the database. + * `close` calls it before closing the database. * Usually doesn't need to be called in chat bots. */ async stopChat(): Promise { const r = await this.sendChatCmd("/_stop") - if (r.type !== "chatStopped") throw new ChatCommandError("error starting chat", r) - this.receiveEvents = false - if (this.eventsLoop) await this.eventsLoop - this.eventsLoop = undefined + if (r.type !== "chatStopped") throw new ChatCommandError("error stopping chat", r) + await this.stopEventsLoop() } /** - * Close chat database. + * Stop chat controller and close chat database. + * The database is not closed if stopping fails. * Usually doesn't need to be called in chat bots. */ async close(): Promise { - this.receiveEvents = false - if (this.eventsLoop) await this.eventsLoop - this.eventsLoop = undefined + // a running controller keeps using the database connections that closing frees + await this.stopChat() await core.chatCloseStore(this.ctrl) this.ctrl_ = undefined } - + + private async stopEventsLoop(): Promise { + this.receiveEvents = false + if (this.eventsLoop) await this.eventsLoop + this.eventsLoop = undefined + } + private async runEventsLoop(): Promise { while (this.receiveEvents) { try { @@ -335,7 +350,7 @@ export class ChatApi { return await core.chatSendCmd(this.ctrl, cmd) } - async recvChatEvent(wait: number = 5_000_000): Promise { + async recvChatEvent(wait: number = 500_000): Promise { return await core.chatRecvMsgWait(this.ctrl, wait) } @@ -386,8 +401,10 @@ export class ChatApi { switch (r.type) { case "userProfileUpdated": return r.updateSummary + case "userProfileNoChange": + return {updateSuccesses: 0, updateFailures: 0, changedContacts: []} default: - throw new ChatCommandError("error loading user address", r) + throw new ChatCommandError("error setting profile address", r) } } @@ -460,7 +477,7 @@ export class ChatApi { updatedMessage: {msgContent, mentions: {}}, }) ) - if (r.type === "chatItemUpdated") return r.chatItem.chatItem + if (r.type === "chatItemUpdated" || r.type === "chatItemNotChanged") return r.chatItem.chatItem throw new ChatCommandError("error updating chat item", r) } @@ -499,10 +516,10 @@ export class ChatApi { chatItemId: number, add: boolean, reaction: T.MsgReaction - ) { + ): Promise { const r = await this.sendChatCmd(CC.APIChatItemReaction.cmdString({chatRef: {chatType, chatId}, chatItemId, add, reaction})) - if (r.type === "chatItemsDeleted") return r.chatItemDeletions - throw new ChatCommandError("error setting item reaction", r) + if (r.type === "chatItemReaction") return r.reaction + throw new ChatCommandError("error setting item reaction", r) } /** @@ -512,6 +529,7 @@ export class ChatApi { async apiReceiveFile(fileId: number): Promise { const r = await this.sendChatCmd(CC.ReceiveFile.cmdString({fileId, userApprovedRelays: true})) if (r.type === "rcvFileAccepted") return r.chatItem + if (r.type === "rcvFileAcceptedSndCancelled") throw new ChatCommandError("file cancelled by sender", r) throw new ChatCommandError("error receiving file", r) } @@ -698,7 +716,7 @@ export class ChatApi { * Connect via prepared SimpleX link. The link can be 1-time invitation link, contact address or group link * Network usage: interactive. */ - async apiConnect(userId: number, incognito: boolean, preparedLink?: T.CreatedConnLink): Promise { + async apiConnect(userId: number, incognito: boolean, preparedLink: T.CreatedConnLink): Promise { const r = await this.sendChatCmd(CC.APIConnect.cmdString({userId, incognito, preparedLink_: preparedLink})) return this.handleConnectResult(r) } @@ -740,7 +758,7 @@ export class ChatApi { * Network usage: no. */ async apiRejectContactRequest(contactReqId: number): Promise { - const r = await this.sendChatCmd(CC.APIRejectContact.cmdString({contactReqId})) + const r = await this.sendChatCmd(CC.APIRejectContact.cmdString({contactReqId, notify: false})) if (r.type === "contactRequestRejected") return throw new ChatCommandError("error rejecting contact request", r) } diff --git a/packages/simplex-chat-nodejs/src/bot.ts b/packages/simplex-chat-nodejs/src/bot.ts index f6cb753d27..68e787ca3e 100644 --- a/packages/simplex-chat-nodejs/src/bot.ts +++ b/packages/simplex-chat-nodejs/src/bot.ts @@ -6,6 +6,7 @@ import equal = require("fast-deep-equal") export type BotDbOpts = api.DbConfig & { confirmMigrations?: core.MigrationConfirmation + queueSize?: number } export interface BotOptions { @@ -45,10 +46,9 @@ export interface BotConfig { } export async function run({profile, dbOpts, options = defaultOpts, onMessage, onCommands = {}, events = {}}: BotConfig): Promise<[api.ChatApi, T.User, T.UserContactLink | undefined]> { - const bot = await api.ChatApi.init(dbOpts, dbOpts.confirmMigrations || core.MigrationConfirmation.YesUp) + const bot = await api.ChatApi.init(dbOpts, dbOpts.confirmMigrations || core.MigrationConfirmation.YesUp, dbOpts.queueSize) const opts = fullOptions(options) - if (onMessage) subscribeMessages(bot, onMessage) - if (Object.keys(onCommands).length > 0) subscribeCommands(bot, onCommands) + if (onMessage || Object.keys(onCommands).length > 0) subscribeChatItems(bot, onMessage, onCommands) if (Object.keys(events).length > 0) bot.on(events) subscribeLogEvents(bot, opts) const botProfile = mkBotProfile(profile, opts) @@ -105,40 +105,27 @@ function mkBotProfile(profile: T.Profile, opts: Required): T.Profile return profile } -function subscribeMessages(bot: api.ChatApi, onMessage: (chatItem: T.AChatItem, content: T.MsgContent) => void | Promise) { +export function subscribeChatItems( + bot: api.ChatApi, + onMessage: ((chatItem: T.AChatItem, content: T.MsgContent) => void | Promise) | undefined, + commands: {[K in string]?: ((chatItem: T.AChatItem, command: util.BotCommand) => void | Promise)} +) { bot.on("newChatItems", async ({chatItems}) => { for (const ci of chatItems) { - if (ci.chatItem.content.type === "rcvMsgContent") { - try { - const p = onMessage(ci, ci.chatItem.content.msgContent) - if (p instanceof Promise) await p - } catch (e) { - console.log("message processing error", e) - } + const content = ci.chatItem.content + if (content.type !== "rcvMsgContent") continue + const cmd = util.ciBotCommand(ci.chatItem) + const cmdFunc = cmd && (commands[cmd.keyword] || commands[""]) + try { + if (cmd && cmdFunc) await cmdFunc(ci, cmd) + else if (onMessage) await onMessage(ci, content.msgContent) + } catch (e) { + console.log(cmd && cmdFunc ? `${cmd.keyword} command processing error` : "message processing error", e) } } }) } -function subscribeCommands(bot: api.ChatApi, commands: {[K in string]?: ((chatItem: T.AChatItem, command: util.BotCommand) => void | Promise)}) { - bot.on("newChatItems", async (evt) => { - for (const ci of evt.chatItems) { - const cmd = util.ciBotCommand(ci.chatItem) - if (cmd) { - const cmdFunc = commands[cmd.keyword] || commands[""] - if (cmdFunc) { - try { - const p = cmdFunc(ci, cmd) - if (p instanceof Promise) await p - } catch(e) { - console.log(`${cmd} command processing error`, e) - } - } - } - } - }) -} - function subscribeLogEvents(bot: api.ChatApi, opts: Required) { if (opts.logContacts) { bot.on({ diff --git a/packages/simplex-chat-nodejs/src/core.ts b/packages/simplex-chat-nodejs/src/core.ts index 949c2356af..49664fed71 100644 --- a/packages/simplex-chat-nodejs/src/core.ts +++ b/packages/simplex-chat-nodejs/src/core.ts @@ -3,9 +3,12 @@ import * as simplex from "./simplex" /** * Initialize chat controller + * @param {number} [queueSize] - Size of internal queues, the core default is used when omitted. */ -export async function chatMigrateInit(dbPath: string, dbKey: string, confirm: MigrationConfirmation): Promise { - const [ctrl, res] = await simplex.chat_migrate_init(dbPath, dbKey, confirm) +export async function chatMigrateInit(dbPath: string, dbKey: string, confirm: MigrationConfirmation, queueSize?: number): Promise { + const [ctrl, res] = queueSize === undefined + ? await simplex.chat_migrate_init(dbPath, dbKey, confirm) + : await simplex.chat_migrate_init_queue(dbPath, dbKey, confirm, queueSize) const json = JSON.parse(res) if (json.type === 'ok') return ctrl throw new ChatInitError("Database or migration error (see dbMigrationError property)", json as DBMigrationError) @@ -47,7 +50,7 @@ export async function chatRecvMsgWait(ctrl: bigint, wait: number): Promise { +export async function chatWriteFile(ctrl: bigint, path: string, buffer: ArrayBuffer | Uint8Array): Promise { const res = await simplex.chat_write_file(ctrl, path, buffer) return cryptoArgsResult(res) } @@ -55,7 +58,7 @@ export async function chatWriteFile(ctrl: bigint, path: string, buffer: ArrayBuf /** * Read buffer from encrypted file */ -export async function chatReadFile(path: string, {fileKey, fileNonce}: CryptoArgs): Promise { +export async function chatReadFile(path: string, {fileKey, fileNonce}: CryptoArgs): Promise { return await simplex.chat_read_file(path, fileKey, fileNonce) } @@ -121,12 +124,13 @@ export class ChatInitError extends Error { export type DBMigrationError = | DBMigrationError.InvalidConfirmation + | DBMigrationError.InvalidQueueSize | DBMigrationError.ErrorNotADatabase // invalid/corrupt database file or incorrect encryption key | DBMigrationError.ErrorMigration | DBMigrationError.ErrorSQL export namespace DBMigrationError { - export type Tag = "invalidConfirmation" | "errorNotADatabase" | "errorMigration" | "errorSQL" + export type Tag = "invalidConfirmation" | "invalidQueueSize" | "errorNotADatabase" | "errorMigration" | "errorSQL" interface Interface { type: Tag @@ -136,6 +140,10 @@ export namespace DBMigrationError { type: "invalidConfirmation" } + export interface InvalidQueueSize extends Interface { + type: "invalidQueueSize" + } + export interface ErrorNotADatabase extends Interface { type: "errorNotADatabase" dbFile: string @@ -168,7 +176,7 @@ export namespace MigrationError { export interface MEUpgrade extends Interface { type: "upgrade" - upMigrations: UpMigration + upMigrations: UpMigration[] } export interface MEDowngrade extends Interface { @@ -200,7 +208,7 @@ export namespace MTRError { export interface MTRENoDown extends Interface { type: "noDown" - upMigrations: UpMigration + dbMigrations: string[] } export interface MTREDifferent extends Interface { diff --git a/packages/simplex-chat-nodejs/src/download-libs.js b/packages/simplex-chat-nodejs/src/download-libs.js index 0acff40daf..e0debebea8 100644 --- a/packages/simplex-chat-nodejs/src/download-libs.js +++ b/packages/simplex-chat-nodejs/src/download-libs.js @@ -6,6 +6,10 @@ const extract = require('extract-zip'); const GITHUB_REPO = 'simplex-chat/simplex-chat-libs'; const RELEASE_TAG = 'v7.1.0-beta.3'; const BACKEND = (process.env.SIMPLEX_BACKEND || process.env.npm_config_simplex_backend || 'sqlite').toLowerCase(); +// A locally built libsimplex, copied into libs/ rather than loaded in place: +// the addon's RUNPATH is $ORIGIN/../../libs. +const LIBS_DIR_OVERRIDE = process.env.SIMPLEX_LIBS_DIR || process.env.npm_config_simplex_libs_dir; +const LIB_NAMES = ['libsimplex.so', 'libsimplex.dylib', 'libsimplex.dll']; if (BACKEND !== 'sqlite' && BACKEND !== 'postgres') { console.error(`✗ Invalid SIMPLEX_BACKEND: "${BACKEND}". Must be "sqlite" or "postgres".`); @@ -83,8 +87,31 @@ function isAlreadyInstalled() { } } +// No version check: the files behind SIMPLEX_LIBS_DIR change on every rebuild. +function installFromOverride() { + if (!fs.existsSync(LIBS_DIR_OVERRIDE)) { + throw new Error(`SIMPLEX_LIBS_DIR does not exist: ${LIBS_DIR_OVERRIDE}`); + } + const lib = LIB_NAMES.find((name) => fs.existsSync(path.join(LIBS_DIR_OVERRIDE, name))); + if (!lib) { + throw new Error(`No ${LIB_NAMES.join(' / ')} in SIMPLEX_LIBS_DIR: ${LIBS_DIR_OVERRIDE}`); + } + console.log(`Using libraries from SIMPLEX_LIBS_DIR: ${LIBS_DIR_OVERRIDE}`); + cleanLibsDirectory(); + copyDirSync(LIBS_DIR_OVERRIDE, LIBS_DIR); + // Not a release tag: a later install without the variable sees a mismatch + // and replaces these files with the released ones. + fs.writeFileSync(INSTALLED_FILE, `${LIBS_DIR_OVERRIDE}:${BACKEND}`, 'utf-8'); + console.log(`✓ Installed ${lib} and its runtime libraries from ${LIBS_DIR_OVERRIDE}`); +} + async function install() { try { + if (LIBS_DIR_OVERRIDE) { + installFromOverride(); + return; + } + // Check if already installed if (isAlreadyInstalled()) { return; diff --git a/packages/simplex-chat-nodejs/src/simplex.d.ts b/packages/simplex-chat-nodejs/src/simplex.d.ts index 10c2f6608a..1e0ca825a6 100644 --- a/packages/simplex-chat-nodejs/src/simplex.d.ts +++ b/packages/simplex-chat-nodejs/src/simplex.d.ts @@ -1,10 +1,11 @@ // These functions are defined in CPP add-on ../cpp/simplex.cc export function chat_migrate_init(dbPath: string, dbKey: string, confirm: string): Promise<[bigint, string]> +export function chat_migrate_init_queue(dbPath: string, dbKey: string, confirm: string, queueSize: number): Promise<[bigint, string]> export function chat_close_store(ctrl: bigint): Promise export function chat_send_cmd(ctrl: bigint, cmd: string): Promise export function chat_recv_msg_wait(ctrl: bigint, wait: number): Promise -export function chat_write_file(ctrl: bigint, path: string, buffer: ArrayBuffer): Promise -export function chat_read_file(path: string, key: string, nonce: string): Promise +export function chat_write_file(ctrl: bigint, path: string, buffer: ArrayBuffer | Uint8Array): Promise +export function chat_read_file(path: string, key: string, nonce: string): Promise export function chat_encrypt_file(ctrl: bigint, fromPath: string, toPath: string): Promise export function chat_decrypt_file(fromPath: string, key: string, nonce: string, toPath: string): Promise diff --git a/packages/simplex-chat-nodejs/src/util.ts b/packages/simplex-chat-nodejs/src/util.ts index f7365e731c..dffb0ce1bc 100644 --- a/packages/simplex-chat-nodejs/src/util.ts +++ b/packages/simplex-chat-nodejs/src/util.ts @@ -78,7 +78,7 @@ export interface BotCommand { export function ciBotCommand(chatItem: T.ChatItem): BotCommand | undefined { const msg = ciContentText(chatItem)?.trim() if (msg) { - const r = msg.match(/^\/([^\s]+)(.*)/) + const r = msg.match(/^\/([^\s]+)([\s\S]*)/) if (r && r.length >= 3) { return {keyword: r[1], params: r[2].trim()} } diff --git a/packages/simplex-chat-nodejs/tests/api.test.ts b/packages/simplex-chat-nodejs/tests/api.test.ts index 99d511371c..e3ddca2440 100644 --- a/packages/simplex-chat-nodejs/tests/api.test.ts +++ b/packages/simplex-chat-nodejs/tests/api.test.ts @@ -58,8 +58,8 @@ describe("API tests (use preset servers)", () => { await bob.stopChat() await alice.close() await bob.close() - await expect(alice.startChat).rejects.toThrow() - await expect(bob.startChat).rejects.toThrow() + await expect(alice.startChat()).rejects.toThrow("chat api controller not initialized") + await expect(bob.startChat()).rejects.toThrow("chat api controller not initialized") expect(servers.length).toBe(2) expect(servers[0] !== servers[1]).toBe(true) expect(eventCount > 0).toBe(true) diff --git a/packages/simplex-chat-nodejs/tests/api.unit.test.ts b/packages/simplex-chat-nodejs/tests/api.unit.test.ts new file mode 100644 index 0000000000..c5a4367b11 --- /dev/null +++ b/packages/simplex-chat-nodejs/tests/api.unit.test.ts @@ -0,0 +1,102 @@ +import {ChatResponse, T} from "@simplex-chat/types" +import * as api from "../src/api" +import * as core from "../src/core" + +const user = {userId: 1} as T.User + +async function chatWithResponse(response: object): Promise { + jest.spyOn(core, "chatMigrateInit").mockResolvedValue(BigInt(1)) + jest.spyOn(core, "chatSendCmd").mockResolvedValue(response as ChatResponse) + return api.ChatApi.init({type: "sqlite", filePrefix: "unused"}) +} + +afterEach(() => jest.restoreAllMocks()) + +describe("documented success responses", () => { + it("apiChatItemReaction returns the reaction", async () => { + const reaction = {chatReaction: {reaction: {type: "emoji", emoji: "👍"}}} + const chat = await chatWithResponse({type: "chatItemReaction", user, added: true, reaction}) + await expect(chat.apiChatItemReaction(T.ChatType.Direct, 1, 2, true, {type: "emoji", emoji: "👍"})).resolves.toEqual(reaction) + }) + + it("apiUpdateChatItem accepts chatItemNotChanged", async () => { + const chatItem = {meta: {itemId: 2}} + const chat = await chatWithResponse({type: "chatItemNotChanged", user, chatItem: {chatItem}}) + await expect(chat.apiUpdateChatItem(T.ChatType.Direct, 1, 2, {type: "text", text: "same"}, false)).resolves.toEqual(chatItem) + }) + + it("apiSetProfileAddress accepts userProfileNoChange", async () => { + const chat = await chatWithResponse({type: "userProfileNoChange", user}) + await expect(chat.apiSetProfileAddress(1, true)).resolves.toEqual({updateSuccesses: 0, updateFailures: 0, changedContacts: []}) + }) + + it("apiReceiveFile reports a file cancelled by sender", async () => { + const chat = await chatWithResponse({type: "rcvFileAcceptedSndCancelled", user, rcvFileTransfer: {}}) + await expect(chat.apiReceiveFile(3)).rejects.toThrow("file cancelled by sender") + }) +}) + +describe("startChat lifecycle", () => { + function chatWithResponses(...responses: object[]): Promise { + jest.spyOn(core, "chatMigrateInit").mockResolvedValue(BigInt(1)) + jest.spyOn(core, "chatRecvMsgWait").mockImplementation(() => new Promise(resolve => setTimeout(() => resolve(undefined), 10))) + const send = jest.spyOn(core, "chatSendCmd") + for (const r of responses) send.mockResolvedValueOnce(r as ChatResponse) + return api.ChatApi.init({type: "sqlite", filePrefix: "unused"}) + } + + it("rejects a second start", async () => { + const chat = await chatWithResponses({type: "chatStarted"}, {type: "chatStopped"}) + await chat.startChat() + await expect(chat.startChat()).rejects.toThrow("chat already started") + await chat.stopChat() + }) + + it("stops the events loop when start fails", async () => { + const chat = await chatWithResponses({type: "chatCmdError"}) + await expect(chat.startChat()).rejects.toThrow("error starting chat") + expect(chat.started).toBe(false) + }) + + it("rejects start after close", async () => { + const chat = await chatWithResponses({type: "chatStopped"}) + jest.spyOn(core, "chatCloseStore").mockResolvedValue() + await chat.close() + await expect(chat.startChat()).rejects.toThrow("chat api controller not initialized") + }) + + it("stops the chat before closing the store", async () => { + const chat = await chatWithResponses() + const calls: string[] = [] + jest.mocked(core.chatSendCmd).mockImplementation(async (_ctrl, cmd) => { + calls.push(`send ${cmd}`) + return {type: "chatStopped"} as ChatResponse + }) + jest.spyOn(core, "chatCloseStore").mockImplementation(async () => { calls.push("closeStore") }) + await chat.close() + expect(calls).toEqual(["send /_stop", "closeStore"]) + expect(chat.initialized).toBe(false) + }) + + it("does not close the store when stopping fails", async () => { + const chat = await chatWithResponses({type: "chatCmdError"}) + const closeStore = jest.spyOn(core, "chatCloseStore").mockResolvedValue() + await expect(chat.close()).rejects.toThrow("error stopping chat") + expect(closeStore).not.toHaveBeenCalled() + expect(chat.initialized).toBe(true) + }) + + it("reports stop failures as stop errors", async () => { + const chat = await chatWithResponses({type: "chatStarted"}, {type: "chatCmdError"}, {type: "chatStopped"}) + await chat.startChat() + await expect(chat.stopChat()).rejects.toThrow("error stopping chat") + expect(chat.started).toBe(true) + await chat.stopChat() + }) + + it("receives with a 500 ms wait", async () => { + const chat = await chatWithResponses() + await chat.recvChatEvent() + expect(core.chatRecvMsgWait).toHaveBeenCalledWith(BigInt(1), 500_000) + }) +}) diff --git a/packages/simplex-chat-nodejs/tests/bot.unit.test.ts b/packages/simplex-chat-nodejs/tests/bot.unit.test.ts new file mode 100644 index 0000000000..39f9358996 --- /dev/null +++ b/packages/simplex-chat-nodejs/tests/bot.unit.test.ts @@ -0,0 +1,50 @@ +import {ChatEvent, T} from "@simplex-chat/types" +import * as api from "../src/api" +import {subscribeChatItems} from "../src/bot" + +type Handler = (evt: ChatEvent) => Promise + +function fakeBot(): {bot: api.ChatApi, deliver: (items: T.AChatItem[]) => Promise} { + let handler: Handler | undefined + const bot = {on: (_event: string, h: Handler) => { handler = h }} as unknown as api.ChatApi + const deliver = (chatItems: T.AChatItem[]) => handler!({type: "newChatItems", chatItems} as unknown as ChatEvent) + return {bot, deliver} +} + +function item(type: "rcvMsgContent" | "sndMsgContent", text: string): T.AChatItem { + return {chatItem: {content: {type, msgContent: {type: "text", text}}}} as unknown as T.AChatItem +} + +describe("subscribeChatItems", () => { + it("sends a known command only to its handler", async () => { + const {bot, deliver} = fakeBot() + const calls: string[] = [] + subscribeChatItems(bot, async () => { calls.push("message") }, {help: async () => { calls.push("help") }}) + await deliver([item("rcvMsgContent", "/help")]) + expect(calls).toEqual(["help"]) + }) + + it("sends an unknown command to the fallback handler", async () => { + const {bot, deliver} = fakeBot() + const calls: string[] = [] + subscribeChatItems(bot, async () => { calls.push("message") }, {"": async (_ci, cmd) => { calls.push(`fallback:${cmd.keyword}`) }}) + await deliver([item("rcvMsgContent", "/unknown")]) + expect(calls).toEqual(["fallback:unknown"]) + }) + + it("sends unhandled commands and text to onMessage", async () => { + const {bot, deliver} = fakeBot() + const calls: string[] = [] + subscribeChatItems(bot, async (_ci, content) => { calls.push(`message:${(content as T.MsgContent & {text: string}).text}`) }, {help: async () => { calls.push("help") }}) + await deliver([item("rcvMsgContent", "/unknown"), item("rcvMsgContent", "hello")]) + expect(calls).toEqual(["message:/unknown", "message:hello"]) + }) + + it("ignores sent items", async () => { + const {bot, deliver} = fakeBot() + const calls: string[] = [] + subscribeChatItems(bot, async () => { calls.push("message") }, {help: async () => { calls.push("help") }}) + await deliver([item("sndMsgContent", "/help"), item("sndMsgContent", "hello")]) + expect(calls).toEqual([]) + }) +}) diff --git a/packages/simplex-chat-nodejs/tests/commands.test.ts b/packages/simplex-chat-nodejs/tests/commands.test.ts new file mode 100644 index 0000000000..61ce43bd63 --- /dev/null +++ b/packages/simplex-chat-nodejs/tests/commands.test.ts @@ -0,0 +1,13 @@ +import {CC} from "@simplex-chat/types" + +describe("APIConnect.cmdString", () => { + const preparedLink_ = {connFullLink: "L"} + + it("renders incognito=on", () => { + expect(CC.APIConnect.cmdString({userId: 1, incognito: true, preparedLink_})).toBe("/_connect 1 incognito=on L") + }) + + it("omits incognito when off", () => { + expect(CC.APIConnect.cmdString({userId: 1, incognito: false, preparedLink_})).toBe("/_connect 1 L") + }) +}) diff --git a/packages/simplex-chat-nodejs/tests/core.test.ts b/packages/simplex-chat-nodejs/tests/core.test.ts index 141f35746d..8eb106a5b5 100644 --- a/packages/simplex-chat-nodejs/tests/core.test.ts +++ b/packages/simplex-chat-nodejs/tests/core.test.ts @@ -1,3 +1,4 @@ +import {execFile, spawnSync} from "child_process"; import * as fs from "fs"; import * as path from "path"; import {core} from "../src/index"; @@ -9,17 +10,34 @@ describe("Core tests", () => { beforeEach(() => fs.mkdirSync(tmpDir, {recursive: true})); afterEach(() => fs.rmSync(tmpDir, {recursive: true, force: true})); + async function stopAndClose(ctrl: bigint): Promise { + await expect(core.chatSendCmd(ctrl, "/_stop")).resolves.toMatchObject({type: "chatStopped"}); + await core.chatCloseStore(ctrl); + } + it("should initialize chat controller", async () => { const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); expect(typeof ctrl).toBe("bigint"); - await expect(core.chatCloseStore(ctrl)).resolves.toBe(undefined); + await expect(stopAndClose(ctrl)).resolves.toBe(undefined); await expect(core.chatMigrateInit(dbPath, "wrong_key", core.MigrationConfirmation.YesUp)).rejects.toMatchObject({ message: "Database or migration error (see dbMigrationError property)", dbMigrationError: expect.objectContaining({type: "errorNotADatabase"}) }); }); - + + it("should initialize chat controller with queue size", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp, 65536); + expect(typeof ctrl).toBe("bigint"); + await expect(stopAndClose(ctrl)).resolves.toBe(undefined); + + await expect(core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp, 0)).rejects.toMatchObject({ + dbMigrationError: {type: "invalidQueueSize"} + }); + await expect(core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp, 2 ** 31)).rejects.toThrow("Expected 32-bit integer queue size"); + await expect(core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp, 1.5)).rejects.toThrow("Expected 32-bit integer queue size"); + }); + it("should send command and receive event", async () => { const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); @@ -41,7 +59,7 @@ describe("Core tests", () => { chatError: expect.objectContaining({type: "error"}) }); - await core.chatCloseStore(ctrl); + await stopAndClose(ctrl); }); it("should write/read encrypted file from/to buffer", async () => { @@ -59,7 +77,25 @@ describe("Core tests", () => { await expect(core.chatWriteFile(ctrl, path.join(tmpDir, "unknown", "unknown.txt"), buffer)).rejects.toThrow(); await expect(core.chatReadFile(path.join(tmpDir, "unknown.txt"), cryptoArgs)).rejects.toThrow(); - await core.chatCloseStore(ctrl); + await stopAndClose(ctrl); + }); + + it("should write the view of a Uint8Array and read an empty file", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); + + const viewPath = path.join(tmpDir, "view.txt"); + const viewArgs = await core.chatWriteFile(ctrl, viewPath, Buffer.from("xxabcxx").subarray(2, 5)); + const view = await core.chatReadFile(viewPath, viewArgs); + expect(Buffer.isBuffer(view)).toBe(true); + expect(view.toString()).toBe("abc"); + + const emptyPath = path.join(tmpDir, "empty.txt"); + const emptyArgs = await core.chatWriteFile(ctrl, emptyPath, new Uint8Array(0)); + const empty = await core.chatReadFile(emptyPath, emptyArgs); + expect(Buffer.isBuffer(empty)).toBe(true); + expect(empty.length).toBe(0); + + await stopAndClose(ctrl); }); it("should encrypt/decrypt file", async () => { @@ -80,6 +116,118 @@ describe("Core tests", () => { await expect(core.chatEncryptFile(ctrl, path.join(tmpDir, "unknown.txt"), encryptedPath)).rejects.toThrow(); await expect(core.chatDecryptFile(path.join(tmpDir, "unknown.txt"), cryptoArgs, decryptedPath)).rejects.toThrow(); - await core.chatCloseStore(ctrl); + await stopAndClose(ctrl); }); + + it("should not block the libuv pool while receiving", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); + const receives = [1, 2, 3, 4].map(() => core.chatRecvMsgWait(ctrl, 2_000_000)); + const start = Date.now(); + await fs.promises.stat(tmpDir); + expect(Date.now() - start).toBeLessThan(200); + await Promise.all(receives); + await stopAndClose(ctrl); + }, 10000); + + const itOnLinux = process.platform === "linux" ? it : it.skip; + + // Thread count is read from /proc/self/task, which only exists on Linux. + itOnLinux("should keep the thread count constant while receiving", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); + for (let i = 0; i < 10; i++) await core.chatRecvMsgWait(ctrl, 1); + const threadCount = () => fs.readdirSync("/proc/self/task").length; + const warmCount = threadCount(); + const counts = new Set(); + for (let i = 0; i < 200; i++) { + await core.chatRecvMsgWait(ctrl, 1); + counts.add(threadCount()); + } + expect({warmCount, counts: [...counts]}).toEqual({warmCount, counts: [warmCount]}); + await stopAndClose(ctrl); + }, 30000); + + it("should receive on two controllers concurrently", async () => { + const ctrlA = await core.chatMigrateInit(path.join(tmpDir, "simplex_a"), "key", core.MigrationConfirmation.YesUp); + const ctrlB = await core.chatMigrateInit(path.join(tmpDir, "simplex_b"), "key", core.MigrationConfirmation.YesUp); + const start = Date.now(); + await expect(Promise.all([core.chatRecvMsgWait(ctrlA, 1_000_000), core.chatRecvMsgWait(ctrlB, 1_000_000)])) + .resolves.toEqual([undefined, undefined]); + const elapsed = Date.now() - start; + expect(elapsed).toBeGreaterThanOrEqual(900); + expect(elapsed).toBeLessThan(1800); + await stopAndClose(ctrlA); + await stopAndClose(ctrlB); + }, 10000); + + it("should receive events of one controller in order", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); + for (const action of ["first", "second"]) { + await expect(core.chatSendCmd(ctrl, `/debug event {"type": "timedAction", "action": "${action}", "durationMilliseconds": 1}`)) + .resolves.toMatchObject({type: "cmdOk"}); + } + const events = await Promise.all([core.chatRecvMsgWait(ctrl, 500_000), core.chatRecvMsgWait(ctrl, 500_000)]); + expect(events).toMatchObject([ + {type: "timedAction", action: "first"}, + {type: "timedAction", action: "second"} + ]); + await stopAndClose(ctrl); + }, 10000); + + it("should close the store while a receive is in flight", async () => { + const ctrl = await core.chatMigrateInit(dbPath, "key", core.MigrationConfirmation.YesUp); + // starts the receiver thread, so the next request only has to wake it + await core.chatRecvMsgWait(ctrl, 1); + const settle = (p: Promise) => p.then((event) => ({event}), (e: Error) => ({error: e.message})); + const receives = Promise.all([settle(core.chatRecvMsgWait(ctrl, 3_000_000)), settle(core.chatRecvMsgWait(ctrl, 3_000_000))]); + // the thread enters the first receive within this margin even under load, so the second one is still queued at close + await new Promise((resolve) => setTimeout(resolve, 500)); + await expect(core.chatSendCmd(ctrl, "/_stop")).resolves.toMatchObject({type: "chatStopped"}); + let closed = false; + const close = core.chatCloseStore(ctrl).then(() => { closed = true; }); + const timerStart = Date.now(); + const timerDelay = await new Promise((resolve) => setTimeout(() => resolve(Date.now() - timerStart), 10)); + expect({closed, timerDelayBelow100ms: timerDelay < 100}).toEqual({closed: false, timerDelayBelow100ms: true}); + await close; + expect(await receives).toEqual([{event: undefined}, {error: "chat receiver stopped"}]); + }, 10000); + + it("should let the process exit while a receiver is idle", () => { + const childDbPath = path.resolve(tmpDir, "simplex_child"); + const script = ` + const simplex = require("./build/Release/simplex.node"); + simplex.chat_migrate_init(${JSON.stringify(childDbPath)}, "key", "yesUp") + .then(([ctrl]) => simplex.chat_recv_msg_wait(ctrl, 1)) + .then((res) => console.log("received " + JSON.stringify(res))); + `; + const child = spawnSync(process.execPath, ["-e", script], {cwd: path.join(__dirname, ".."), timeout: 10000, encoding: "utf8"}); + if (child.status !== 0 || child.signal !== null) console.log("child stderr:", child.stderr); + expect({status: child.status, signal: child.signal, stdout: child.stdout.trim()}) + .toEqual({status: 0, signal: null, stdout: 'received ""'}); + }, 15000); + + it("should not crash when closing stopped controllers repeatedly", async () => { + const script = ` + const fs = require("fs"), path = require("path"); + const simplex = require("./build/Release/simplex.node"); + (async () => { + for (let i = 0; i < 40; i++) { + const dir = fs.mkdtempSync(path.join(${JSON.stringify(path.resolve(tmpDir))}, "close-")); + const [ctrl] = await simplex.chat_migrate_init(path.join(dir, "simplex"), "key", "yesUp"); + await simplex.chat_send_cmd(ctrl, "/v"); + await simplex.chat_send_cmd(ctrl, "/_stop"); + const res = await simplex.chat_close_store(ctrl); + fs.rmSync(dir, {recursive: true, force: true}); + if (res !== "") throw new Error("close failed: " + res); + } + })(); + `; + const runChild = () => new Promise<{code: number | null, signal: NodeJS.Signals | null, stderr: string}>((resolve) => { + const child = execFile(process.execPath, ["-e", script], {cwd: path.join(__dirname, ".."), timeout: 150000}, (_error, _stdout, stderr) => + resolve({code: child.exitCode, signal: child.signalCode, stderr})); + }); + const childCount = 3; + const results = await Promise.all(Array.from({length: childCount}, runChild)); + for (const r of results) if (r.code !== 0 || r.signal !== null) console.log("child stderr:", r.stderr); + expect(results.map(({code, signal}) => ({code, signal}))).toEqual(Array(childCount).fill({code: 0, signal: null})); + }, 180000); }); diff --git a/packages/simplex-chat-nodejs/tests/util.test.ts b/packages/simplex-chat-nodejs/tests/util.test.ts index 4fe3140edc..29224cf1cc 100644 --- a/packages/simplex-chat-nodejs/tests/util.test.ts +++ b/packages/simplex-chat-nodejs/tests/util.test.ts @@ -34,4 +34,8 @@ describe("ciBotCommand", () => { const ci = {content: {type: "rcvDeleted"}} as T.ChatItem expect(ciBotCommand(ci)).toBeUndefined() }) + + it("keeps multi-line params", () => { + expect(ciBotCommand(rcvText("/review line1\nline2"))).toEqual({keyword: "review", params: "line1\nline2"}) + }) }) diff --git a/packages/simplex-chat-python/src/simplex_chat/_native.py b/packages/simplex-chat-python/src/simplex_chat/_native.py index 4c408479bb..009ff9a1e0 100644 --- a/packages/simplex-chat-python/src/simplex_chat/_native.py +++ b/packages/simplex-chat-python/src/simplex_chat/_native.py @@ -16,7 +16,7 @@ import urllib.request import zipfile from ctypes import POINTER, c_char_p, c_int, c_uint8, c_void_p from pathlib import Path -from typing import Literal +from typing import Any, Literal from ._version import LIBS_VERSION @@ -166,7 +166,8 @@ _backend: Backend | None = None def _load_libc() -> ctypes.CDLL: if sys.platform == "win32": - return ctypes.CDLL("msvcrt") + # libsimplex.dll allocates results with UCRT malloc; msvcrt free would corrupt the heap. + return ctypes.CDLL("ucrtbase") return ctypes.CDLL(None) # libc on POSIX is the process's own symbol table @@ -255,3 +256,19 @@ def lib() -> ctypes.CDLL: if _lib is None: raise RuntimeError("lib_for() must be called before lib()") return _lib + + +QUEUE_SIZE_UNSUPPORTED = ( + "loaded libsimplex does not export chat_migrate_init_queue; queue size needs a newer libsimplex" +) + + +def migrate_init_queue() -> Any: + """`chat_migrate_init_queue`, which older libsimplex releases do not export.""" + try: + fn = lib().chat_migrate_init_queue + except AttributeError as e: + raise RuntimeError(QUEUE_SIZE_UNSUPPORTED) from e + fn.argtypes = [c_char_p, c_char_p, c_char_p, c_int, POINTER(c_void_p)] + fn.restype = c_void_p + return fn diff --git a/packages/simplex-chat-python/src/simplex_chat/api.py b/packages/simplex-chat-python/src/simplex_chat/api.py index e3d36c45df..876230ef39 100644 --- a/packages/simplex-chat-python/src/simplex_chat/api.py +++ b/packages/simplex-chat-python/src/simplex_chat/api.py @@ -2,7 +2,9 @@ from __future__ import annotations +import asyncio import json +from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass from typing import Any, Literal @@ -65,17 +67,20 @@ class ChatApi: def __init__(self, ctrl: int): self._ctrl: int | None = ctrl self._started = False + self._recv_executor: ThreadPoolExecutor | None = None @classmethod async def init( cls, db: Db, confirm: MigrationConfirmation = MigrationConfirmation.YES_UP, + queue_size: int | None = None, ) -> ChatApi: path_or_prefix, key_or_conn, backend = _db_to_migrate_args(db) # Trigger lazy lib load with the right backend BEFORE chat_migrate_init. - _native.lib_for(backend) - ctrl = await core.chat_migrate_init(path_or_prefix, key_or_conn, confirm) + # It may download ~100 MB, so it must not block the event loop. + await asyncio.to_thread(_native.lib_for, backend) + ctrl = await core.chat_migrate_init(path_or_prefix, key_or_conn, confirm, queue_size) return cls(ctrl) @property @@ -114,6 +119,14 @@ class ChatApi: self._started = False async def close(self) -> None: + """Stop the chat and close its store; the store stays open if stopping fails.""" + # a running controller keeps using the database connections that closing frees + await self.stop_chat() + if self._recv_executor is not None: + # Waits for a receive already in flight (up to wait_us) so the store + # never closes underneath one; run off-loop since shutdown blocks. + await asyncio.to_thread(self._recv_executor.shutdown, wait=True) + self._recv_executor = None await core.chat_close_store(self.ctrl) self._ctrl = None self._started = False @@ -122,7 +135,14 @@ class ChatApi: return await core.chat_send_cmd(self.ctrl, cmd) async def recv_chat_event(self, wait_us: int = 500_000) -> CEvt.ChatEvent | None: - return await core.chat_recv_msg_wait(self.ctrl, wait_us) + ctrl = self.ctrl # raises before touching the executor if close() was called + if self._recv_executor is None: + # A receive blocks for up to wait_us almost back to back, so it would + # otherwise pin one of the default executor's few worker threads. + self._recv_executor = ThreadPoolExecutor( + max_workers=1, thread_name_prefix="simplex-recv" + ) + return await core.chat_recv_msg_wait(ctrl, wait_us, self._recv_executor) # ------------------------------------------------------------------ # # Address commands @@ -158,6 +178,8 @@ class ChatApi: ) if r["type"] == "userProfileUpdated": return r["updateSummary"] + if r["type"] == "userProfileNoChange": + return {"updateSuccesses": 0, "updateFailures": 0, "changedContacts": []} raise ChatCommandError("error setting profile address", r) async def api_set_address_settings(self, user_id: int, settings: T.AddressSettings) -> None: @@ -236,6 +258,8 @@ class ChatApi: ) if r["type"] == "chatItemUpdated": return r["chatItem"]["chatItem"] + if r["type"] == "chatItemNotChanged": + return r["chatItem"]["chatItem"] raise ChatCommandError("error updating chat item", r) async def api_delete_chat_items( @@ -302,6 +326,8 @@ class ChatApi: ) if r["type"] == "rcvFileAccepted": return r["chatItem"] + if r["type"] == "rcvFileAcceptedSndCancelled": + raise ChatCommandError("file cancelled by sender", r) raise ChatCommandError("error receiving file", r) async def api_cancel_file(self, file_id: int) -> None: @@ -477,12 +503,13 @@ class ChatApi: self, user_id: int, incognito: bool, - prepared_link: T.CreatedConnLink | None = None, + prepared_link: T.CreatedConnLink, ) -> ConnReqType: - args: CC.APIConnect = {"userId": user_id, "incognito": incognito} - if prepared_link is not None: - args["preparedLink_"] = prepared_link - r = await self.send_chat_cmd(CC.APIConnect_cmd_string(args)) + r = await self.send_chat_cmd( + CC.APIConnect_cmd_string( + {"userId": user_id, "incognito": incognito, "preparedLink_": prepared_link} + ) + ) return self._handle_connect_result(r) async def api_connect_active_user(self, conn_link: str) -> ConnReqType: diff --git a/packages/simplex-chat-python/src/simplex_chat/bot.py b/packages/simplex-chat-python/src/simplex_chat/bot.py index b3e5b5ec03..2fa0ed39b4 100644 --- a/packages/simplex-chat-python/src/simplex_chat/bot.py +++ b/packages/simplex-chat-python/src/simplex_chat/bot.py @@ -90,6 +90,7 @@ class Bot(Client): welcome: str | T.MsgContent | None = None, commands: list[BotCommand] | None = None, confirm_migrations: MigrationConfirmation = MigrationConfirmation.YES_UP, + queue_size: int | None = None, create_address: bool = True, update_address: bool = True, update_profile: bool = True, @@ -103,6 +104,7 @@ class Bot(Client): profile=profile, db=db, confirm_migrations=confirm_migrations, + queue_size=queue_size, update_profile=update_profile, log_contacts=log_contacts, log_network=log_network, diff --git a/packages/simplex-chat-python/src/simplex_chat/client.py b/packages/simplex-chat-python/src/simplex_chat/client.py index 8ec955b54a..476dd70ac3 100644 --- a/packages/simplex-chat-python/src/simplex_chat/client.py +++ b/packages/simplex-chat-python/src/simplex_chat/client.py @@ -149,6 +149,7 @@ class Client: profile: Profile, db: Db, confirm_migrations: MigrationConfirmation = MigrationConfirmation.YES_UP, + queue_size: int | None = None, update_profile: bool = True, log_contacts: bool = False, log_network: bool = False, @@ -156,6 +157,7 @@ class Client: self._profile = profile self._db = db self._confirm_migrations = confirm_migrations + self._queue_size = queue_size self._update_profile = update_profile self._log_contacts = log_contacts self._log_network = log_network @@ -343,7 +345,7 @@ class Client: # do post-start setup (profile sync; Bot adds address sync). # `_stop_event` is never cleared: a stop requested during startup has # to survive into the receive loop. A stopped client is spent. - self._api = await ChatApi.init(self._db, self._confirm_migrations) + self._api = await ChatApi.init(self._db, self._confirm_migrations, self._queue_size) try: user = await self._ensure_active_user() await self._api.start_chat() @@ -362,11 +364,6 @@ class Client: api = self._api if api is None: return - if api.started: - try: - await api.stop_chat() - except Exception: - log.exception("stop_chat failed during init rollback") try: await api.close() except Exception: @@ -379,13 +376,16 @@ class Client: if api is None: return # Null out the reference up-front so the Client appears closed even - # if stop_chat / close raise — otherwise `client.api` would still + # if close raises — otherwise `client.api` would still # hand back a half-shutdown controller after `async with` exits. self._api = None try: - await api.stop_chat() - finally: await api.close() + except BaseException: + # A failed stop leaves the store open; keep it so the caller can retry. + if api.initialized: + self._api = api + raise async def _post_start(self, user: T.User) -> None: """Hook for subclasses to add work between `start_chat` and serving. @@ -617,7 +617,7 @@ class Client: # message resolve a future no one is waiting on. if waiter in waiters: waiters.remove(waiter) - if not waiters: + if not waiters and self._reply_waiters.get(contact_id) is waiters: self._reply_waiters.pop(contact_id, None) async def _receive_loop(self) -> None: diff --git a/packages/simplex-chat-python/src/simplex_chat/core.py b/packages/simplex-chat-python/src/simplex_chat/core.py index 4fc847f7de..adebde1b56 100644 --- a/packages/simplex-chat-python/src/simplex_chat/core.py +++ b/packages/simplex-chat-python/src/simplex_chat/core.py @@ -9,6 +9,7 @@ from __future__ import annotations import asyncio import ctypes import json +from concurrent.futures import Executor from enum import StrEnum from typing import Any, TypedDict @@ -102,7 +103,9 @@ async def chat_send_cmd(ctrl: int, cmd: str) -> CR.ChatResponse: raise ChatAPIError(f"invalid chat command result: {raw[:200]}") -async def chat_recv_msg_wait(ctrl: int, wait_us: int = 500_000) -> CEvt.ChatEvent | None: +async def chat_recv_msg_wait( + ctrl: int, wait_us: int = 500_000, executor: Executor | None = None +) -> CEvt.ChatEvent | None: def _call() -> str: # On timeout, the C side returns a non-NULL pointer to a single NUL byte # (see Mobile.hs `fromMaybe ""`), so `_read_and_free` returns "" — no @@ -110,7 +113,10 @@ async def chat_recv_msg_wait(ctrl: int, wait_us: int = 500_000) -> CEvt.ChatEven ptr = _native.lib().chat_recv_msg_wait(ctrl, wait_us) return _read_and_free(ptr) - raw = await asyncio.to_thread(_call) + if executor is None: + raw = await asyncio.to_thread(_call) + else: + raw = await asyncio.get_running_loop().run_in_executor(executor, _call) if not raw: return None parsed = json.loads(raw) @@ -122,17 +128,29 @@ async def chat_recv_msg_wait(ctrl: int, wait_us: int = 500_000) -> CEvt.ChatEven raise ChatAPIError(f"invalid chat event: {raw[:200]}") -async def chat_migrate_init(db_path: str, db_key: str, confirm: MigrationConfirmation) -> int: - """Initialize chat controller. Returns opaque ctrl pointer as Python int.""" +async def chat_migrate_init( + db_path: str, + db_key: str, + confirm: MigrationConfirmation, + queue_size: int | None = None, +) -> int: + """Initialize chat controller. Returns opaque ctrl pointer as Python int. + + `queue_size` is the size of internal queues; the core default is used when None. + """ + # ctypes silently wraps ints that do not fit C int. + if queue_size is not None and ctypes.c_int(queue_size).value != queue_size: + raise ValueError(f"queue_size {queue_size} does not fit C int") + + init_queue = _native.migrate_init_queue() if queue_size is not None else None def _call() -> tuple[int, str]: ctrl = ctypes.c_void_p() - ptr = _native.lib().chat_migrate_init( - db_path.encode("utf-8"), - db_key.encode("utf-8"), - confirm.encode("utf-8"), - ctypes.byref(ctrl), - ) + args = (db_path.encode("utf-8"), db_key.encode("utf-8"), confirm.encode("utf-8")) + if init_queue is None: + ptr = _native.lib().chat_migrate_init(*args, ctypes.byref(ctrl)) + else: + ptr = init_queue(*args, queue_size, ctypes.byref(ctrl)) return (ctrl.value or 0, _read_and_free(ptr)) ctrl_val, raw = await asyncio.to_thread(_call) diff --git a/packages/simplex-chat-python/src/simplex_chat/types/_commands.py b/packages/simplex-chat-python/src/simplex_chat/types/_commands.py index fd4f561c3d..e6155c9ce7 100644 --- a/packages/simplex-chat-python/src/simplex_chat/types/_commands.py +++ b/packages/simplex-chat-python/src/simplex_chat/types/_commands.py @@ -498,7 +498,7 @@ class APIConnect(TypedDict): def APIConnect_cmd_string(self: APIConnect) -> str: - return '/_connect ' + str(self['userId']) + ((' ' + T.CreatedConnLink_cmd_string(self.get('preparedLink_'))) if self.get('preparedLink_') is not None else '') + return '/_connect ' + str(self['userId']) + (' incognito=on' if self['incognito'] else '') + ((' ' + T.CreatedConnLink_cmd_string(self.get('preparedLink_'))) if self.get('preparedLink_') is not None else '') APIConnect_Response = CR.SentConfirmation | CR.ContactAlreadyExists | CR.SentInvitation | CR.ChatCmdError diff --git a/packages/simplex-chat-python/src/simplex_chat/types/_types.py b/packages/simplex-chat-python/src/simplex_chat/types/_types.py index 6a8fd96c87..ab06a24f53 100644 --- a/packages/simplex-chat-python/src/simplex_chat/types/_types.py +++ b/packages/simplex-chat-python/src/simplex_chat/types/_types.py @@ -220,83 +220,7 @@ BadgeRedeemError = ( BadgeRedeemError_Tag = Literal["invalidCode", "serviceNotConfigured", "badgeActive", "serviceError", "invalidResponse", "unknownKeyIndex", "credentialNotVerified"] -class BadgeServiceErrorCode_badRequest(TypedDict): - type: Literal["badRequest"] - -class BadgeServiceErrorCode_unsupportedVersion(TypedDict): - type: Literal["unsupportedVersion"] - -class BadgeServiceErrorCode_unknownPurchaseKey(TypedDict): - type: Literal["unknownPurchaseKey"] - -class BadgeServiceErrorCode_unknownOfferId(TypedDict): - type: Literal["unknownOfferId"] - -class BadgeServiceErrorCode_offerDisabled(TypedDict): - type: Literal["offerDisabled"] - -class BadgeServiceErrorCode_offerMismatch(TypedDict): - type: Literal["offerMismatch"] - -class BadgeServiceErrorCode_productUnavailable(TypedDict): - type: Literal["productUnavailable"] - -class BadgeServiceErrorCode_paymentNotEntitled(TypedDict): - type: Literal["paymentNotEntitled"] - -class BadgeServiceErrorCode_paymentPending(TypedDict): - type: Literal["paymentPending"] - -class BadgeServiceErrorCode_providerUnavailable(TypedDict): - type: Literal["providerUnavailable"] - -class BadgeServiceErrorCode_rateLimited(TypedDict): - type: Literal["rateLimited"] - -class BadgeServiceErrorCode_codeInvalid(TypedDict): - type: Literal["codeInvalid"] - -class BadgeServiceErrorCode_codeUsed(TypedDict): - type: Literal["codeUsed"] - -class BadgeServiceErrorCode_codeExpired(TypedDict): - type: Literal["codeExpired"] - -class BadgeServiceErrorCode_receiptInvalid(TypedDict): - type: Literal["receiptInvalid"] - -class BadgeServiceErrorCode_receiptUsed(TypedDict): - type: Literal["receiptUsed"] - -class BadgeServiceErrorCode_internal(TypedDict): - type: Literal["internal"] - -class BadgeServiceErrorCode_unknown(TypedDict): - type: Literal["unknown"] - : str - -BadgeServiceErrorCode = ( - BadgeServiceErrorCode_badRequest - | BadgeServiceErrorCode_unsupportedVersion - | BadgeServiceErrorCode_unknownPurchaseKey - | BadgeServiceErrorCode_unknownOfferId - | BadgeServiceErrorCode_offerDisabled - | BadgeServiceErrorCode_offerMismatch - | BadgeServiceErrorCode_productUnavailable - | BadgeServiceErrorCode_paymentNotEntitled - | BadgeServiceErrorCode_paymentPending - | BadgeServiceErrorCode_providerUnavailable - | BadgeServiceErrorCode_rateLimited - | BadgeServiceErrorCode_codeInvalid - | BadgeServiceErrorCode_codeUsed - | BadgeServiceErrorCode_codeExpired - | BadgeServiceErrorCode_receiptInvalid - | BadgeServiceErrorCode_receiptUsed - | BadgeServiceErrorCode_internal - | BadgeServiceErrorCode_unknown -) - -BadgeServiceErrorCode_Tag = Literal["badRequest", "unsupportedVersion", "unknownPurchaseKey", "unknownOfferId", "offerDisabled", "offerMismatch", "productUnavailable", "paymentNotEntitled", "paymentPending", "providerUnavailable", "rateLimited", "codeInvalid", "codeUsed", "codeExpired", "receiptInvalid", "receiptUsed", "internal", "unknown"] +BadgeServiceErrorCode = Literal["bad_request", "unsupported_version", "unknown_purchase_key", "unknown_offer_id", "offer_disabled", "offer_mismatch", "product_unavailable", "payment_not_entitled", "payment_pending", "provider_unavailable", "rate_limited", "code_invalid", "code_used", "code_expired", "receipt_invalid", "receipt_used", "internal"] BadgeStatus = Literal["active", "expired", "expiredOld", "failed", "unknownKey"] diff --git a/packages/simplex-chat-python/src/simplex_chat/util.py b/packages/simplex-chat-python/src/simplex_chat/util.py index e5fbbf3fab..92f2fa52cf 100644 --- a/packages/simplex-chat-python/src/simplex_chat/util.py +++ b/packages/simplex-chat-python/src/simplex_chat/util.py @@ -101,7 +101,7 @@ def ci_content_text(chat_item: T.ChatItem) -> str | None: return None -_BOT_COMMAND_RE = re.compile(r"^/([^\s]+)(.*)$") +_BOT_COMMAND_RE = re.compile(r"^/([^\s]+)(.*)$", re.DOTALL) def ci_bot_command(chat_item: T.ChatItem) -> tuple[str, str] | None: diff --git a/packages/simplex-chat-python/tests/test_api.py b/packages/simplex-chat-python/tests/test_api.py index 09b5ce4c03..1b20ec0639 100644 --- a/packages/simplex-chat-python/tests/test_api.py +++ b/packages/simplex-chat-python/tests/test_api.py @@ -7,6 +7,7 @@ shape it accepts. from __future__ import annotations +import asyncio from typing import Any import pytest @@ -172,3 +173,46 @@ async def test_a_failed_custom_data_write_raises(): api = FakeCtrl({"type": "chatCmdError"}) with pytest.raises(ChatCommandError): await api.api_merge_group_custom_data({"groupId": 9}, "mine", 1) + + +# ---------------------------------------------------------------------- # +# Documented success responses +# ---------------------------------------------------------------------- # + + +def test_update_chat_item_accepts_not_changed(): + chat_item = {"meta": {"itemId": 2}} + api = FakeCtrl({"type": "chatItemNotChanged", "chatItem": {"chatItem": chat_item}}) + msg_content = {"type": "text", "text": "same"} + assert asyncio.run(api.api_update_chat_item("direct", 1, 2, msg_content)) == chat_item + + +def test_set_profile_address_accepts_no_change(): + api = FakeCtrl({"type": "userProfileNoChange"}) + summary = asyncio.run(api.api_set_profile_address(1, True)) + assert summary == {"updateSuccesses": 0, "updateFailures": 0, "changedContacts": []} + + +def test_receive_file_reports_cancelled_by_sender(): + api = FakeCtrl({"type": "rcvFileAcceptedSndCancelled", "rcvFileTransfer": {}}) + with pytest.raises(ChatCommandError, match="file cancelled by sender"): + asyncio.run(api.api_receive_file(3)) + + +async def test_init_loads_library_off_the_event_loop(monkeypatch): + import threading + + from simplex_chat import _native, core + from simplex_chat.api import SqliteDb + + threads: list[int] = [] + monkeypatch.setattr(_native, "lib_for", lambda _backend: threads.append(threading.get_ident())) + + async def fake_migrate_init(*_args): + return 1 + + monkeypatch.setattr(core, "chat_migrate_init", fake_migrate_init) + + loop_thread = threading.get_ident() + await ChatApi.init(SqliteDb(file_prefix="/tmp/unused")) + assert threads and threads[0] != loop_thread diff --git a/packages/simplex-chat-python/tests/test_client_and_waiters.py b/packages/simplex-chat-python/tests/test_client_and_waiters.py index d40c74a0eb..1ecf146ec3 100644 --- a/packages/simplex-chat-python/tests/test_client_and_waiters.py +++ b/packages/simplex-chat-python/tests/test_client_and_waiters.py @@ -14,11 +14,13 @@ import pytest from simplex_chat import ( Bot, BotProfile, + ChatCommandError, Client, ContactAlreadyExistsError, Profile, SqliteDb, ) +from simplex_chat.core import MigrationConfirmation class FakeApi: @@ -292,6 +294,31 @@ def test_send_and_wait_parallel_different_contacts(): assert (a, b) == ("A", "B") +def test_send_and_wait_keeps_waiter_registered_during_previous_cleanup(): + bot, _api = _bot_with_fake_api() + + def reply(text: str) -> dict[str, Any]: + return {"type": "newChatItems", "chatItems": [ + { + "chatInfo": {"type": "direct", "contact": {"contactId": 42}}, + "chatItem": {"content": {"type": "rcvMsgContent", "msgContent": {"type": "text", "text": text}}}, + } + ]} + + async def go() -> tuple[str, str]: + first = asyncio.create_task(bot.send_and_wait(42, "a", timeout=2.0)) + await asyncio.sleep(0) + # Created before the reply is dispatched, so it registers before `first` runs its cleanup. + second = asyncio.create_task(bot.send_and_wait(42, "b", timeout=2.0)) + await bot._dispatch_event(reply("ra")) # type: ignore[arg-type] + await asyncio.sleep(0) + await asyncio.sleep(0) + await bot._dispatch_event(reply("rb")) # type: ignore[arg-type] + return (await first).text or "", (await second).text or "" + + assert asyncio.run(go()) == ("ra", "rb") + + # --------------------------------------------------------------------------- # connect_to # --------------------------------------------------------------------------- @@ -466,6 +493,10 @@ def test_aexit_nulls_api_even_if_close_raises(monkeypatch): async def stop_chat(self): pass + @property + def initialized(self): + return False + async def close(self): raise RuntimeError("close failed") @@ -498,6 +529,83 @@ def test_aexit_nulls_api_even_if_close_raises(monkeypatch): asyncio.run(go()) +def test_aexit_keeps_api_for_retry_when_stop_fails(monkeypatch): + """A failed stop leaves the store open, so the Client must keep the + controller: dropping it would leak the store with no way to close it.""" + import simplex_chat.client as client_mod + + stop_results = ["chatCmdError", "chatStopped"] + closed: list[bool] = [False] + + class _FailingStopApi: + @classmethod + async def init(cls, *_a, **_kw): + return cls() + + @property + def initialized(self): + return not closed[0] + + async def start_chat(self): + pass + + async def close(self): + response = stop_results.pop(0) + if response != "chatStopped": + raise ChatCommandError("error stopping chat", {"type": response}) + closed[0] = True + + async def api_get_active_user(self): + return {"userId": 1, "profile": {"displayName": "x"}} + + async def send_chat_cmd(self, _cmd): + return {"type": "cmdOk"} + + monkeypatch.setattr(client_mod, "ChatApi", _FailingStopApi) + + c = Client(profile=Profile(display_name="x"), db=SqliteDb(file_prefix="/tmp/test")) + + async def go(): + with pytest.raises(ChatCommandError, match="error stopping chat"): + async with c: + pass + assert c._api is not None, "controller dropped while its store is still open" + assert closed == [False] + await c.__aexit__(None, None, None) + assert closed == [True] + assert c._api is None + + asyncio.run(go()) + + +@pytest.mark.parametrize("queue_size", [None, 65536]) +def test_bot_passes_queue_size_to_chat_api_init(monkeypatch, queue_size): + import simplex_chat.client as client_mod + + init_args: list[tuple[Any, ...]] = [] + + class StopInit(RuntimeError): + pass + + class FakeChatApi: + @classmethod + async def init(cls, *args): + init_args.append(args) + raise StopInit + + monkeypatch.setattr(client_mod, "ChatApi", FakeChatApi) + db = SqliteDb(file_prefix="/tmp/test") + bot = Bot(profile=BotProfile(display_name="x"), db=db, queue_size=queue_size) + + async def go(): + with pytest.raises(StopInit): + async with bot: + pytest.fail("should not enter the with-block") + + asyncio.run(go()) + assert init_args == [(db, MigrationConfirmation.YES_UP, queue_size)] + + def test_aenter_rolls_back_partial_init_on_post_start_failure(monkeypatch): """If anything in __aenter__ raises after ChatApi.init succeeded — including _post_start — the controller must be closed. Otherwise the with-block isn't @@ -550,7 +658,7 @@ def test_aenter_rolls_back_partial_init_on_post_start_failure(monkeypatch): pytest.fail("should not enter the with-block") asyncio.run(go()) - assert closed == ["stop", "close"], f"controller not cleaned up: {closed}" + assert closed == ["close"], f"controller not cleaned up: {closed}" assert c._api is None, "Client._api should be reset to None after rollback" diff --git a/packages/simplex-chat-python/tests/test_codegen.py b/packages/simplex-chat-python/tests/test_codegen.py index c5842f5d56..20a9400d18 100644 --- a/packages/simplex-chat-python/tests/test_codegen.py +++ b/packages/simplex-chat-python/tests/test_codegen.py @@ -39,3 +39,9 @@ def test_chat_ref_cmd_string_direct(): """Sanity check the codegen fix for ChatRef-bearing commands.""" assert T.ChatRef_cmd_string({"chatType": "direct", "chatId": 7}) == "@7" assert T.ChatRef_cmd_string({"chatType": "group", "chatId": 42}) == "#42" + + +def test_api_connect_cmd_string_renders_incognito(): + link = {"connFullLink": "L"} + assert CC.APIConnect_cmd_string({"userId": 1, "incognito": True, "preparedLink_": link}) == "/_connect 1 incognito=on L" + assert CC.APIConnect_cmd_string({"userId": 1, "incognito": False, "preparedLink_": link}) == "/_connect 1 L" diff --git a/packages/simplex-chat-python/tests/test_core_migrate_init.py b/packages/simplex-chat-python/tests/test_core_migrate_init.py new file mode 100644 index 0000000000..f18b6d34f0 --- /dev/null +++ b/packages/simplex-chat-python/tests/test_core_migrate_init.py @@ -0,0 +1,123 @@ +"""core.chat_migrate_init picks the FFI export by queue_size, with a fake libsimplex.""" + +from __future__ import annotations + +import asyncio +import json +from typing import Any + +import pytest + +from simplex_chat import core +from simplex_chat.core import ChatInitError, MigrationConfirmation + +CTRL = 42 + + +class FakeLib: + """Records calls; each export writes CTRL to the out-param and returns the JSON result.""" + + def __init__(self, result: dict[str, Any]) -> None: + self.result = json.dumps(result) + self.calls: list[tuple[str, tuple[Any, ...]]] = [] + + def _init(self, name: str, args: tuple[Any, ...]) -> str: + *call_args, ctrl_ref = args + self.calls.append((name, tuple(call_args))) + ctrl_ref._obj.value = CTRL + return self.result + + def chat_migrate_init(self, *args: Any) -> str: + return self._init("chat_migrate_init", args) + + @property + def chat_migrate_init_queue(self) -> Any: + lib = self + + class Fn: + argtypes: Any = None + restype: Any = None + + def __call__(self, *args: Any) -> str: + return lib._init("chat_migrate_init_queue", args) + + return Fn() + + +class OldLib(FakeLib): + """A libsimplex released before chat_migrate_init_queue existed.""" + + def __getattribute__(self, name: str) -> Any: + if name == "chat_migrate_init_queue": + raise AttributeError(name) + return super().__getattribute__(name) + + +@pytest.fixture +def fake_lib(monkeypatch: pytest.MonkeyPatch): + def install(result: dict[str, Any]) -> FakeLib: + lib = FakeLib(result) + monkeypatch.setattr(core._native, "lib", lambda: lib) + monkeypatch.setattr(core, "_read_and_free", lambda ptr: ptr) + return lib + + return install + + +def migrate_init(queue_size: int | None = None) -> int: + return asyncio.run( + core.chat_migrate_init("/tmp/db", "key", MigrationConfirmation.YES_UP, queue_size) + ) + + +def test_without_queue_size_uses_chat_migrate_init(fake_lib): + lib = fake_lib({"type": "ok"}) + assert migrate_init() == CTRL + assert lib.calls == [("chat_migrate_init", (b"/tmp/db", b"key", b"yesUp"))] + + +def test_with_queue_size_uses_chat_migrate_init_queue(fake_lib): + lib = fake_lib({"type": "ok"}) + assert migrate_init(65536) == CTRL + assert lib.calls == [("chat_migrate_init_queue", (b"/tmp/db", b"key", b"yesUp", 65536))] + + +def test_invalid_queue_size_result_raises_init_error(fake_lib): + fake_lib({"type": "invalidQueueSize"}) + with pytest.raises(ChatInitError) as e: + migrate_init(0) + assert e.value.db_migration_error == {"type": "invalidQueueSize"} + + +@pytest.mark.parametrize("queue_size", [2**31, -(2**31) - 1]) +def test_queue_size_outside_c_int_is_rejected_before_ffi(fake_lib, queue_size): + lib = fake_lib({"type": "ok"}) + with pytest.raises(ValueError, match="does not fit C int"): + migrate_init(queue_size) + assert lib.calls == [] + + +def test_queue_size_on_old_lib_raises_clear_error(monkeypatch): + lib = OldLib({"type": "ok"}) + monkeypatch.setattr(core._native, "lib", lambda: lib) + with pytest.raises(RuntimeError, match="does not export chat_migrate_init_queue"): + migrate_init(65536) + assert lib.calls == [] + + +def test_setup_signatures_accepts_old_lib(): + class Fn: + argtypes: Any = None + restype: Any = None + + class Lib: + def __getattr__(self, name: str) -> Fn: + if name == "chat_migrate_init_queue": + raise AttributeError(name) + fn = Fn() + setattr(self, name, fn) + return fn + + from simplex_chat import _native + + _native._setup_signatures(Lib()) # type: ignore[arg-type] diff --git a/packages/simplex-chat-python/tests/test_native_cache.py b/packages/simplex-chat-python/tests/test_native_cache.py index c2938ee3e4..6c4f2a923d 100644 --- a/packages/simplex-chat-python/tests/test_native_cache.py +++ b/packages/simplex-chat-python/tests/test_native_cache.py @@ -91,3 +91,13 @@ def test_atomic_install(tmp_path, monkeypatch): _download(target, "sqlite") assert (target / "libsimplex.so").read_text() == "fake-so" assert (target / "libHS-stub.so").read_text() == "fake-hs" + + +def test_libc_on_windows_is_ucrt(monkeypatch): + loaded: list[str | None] = [] + monkeypatch.setattr("sys.platform", "win32") + monkeypatch.setattr("ctypes.CDLL", lambda name: loaded.append(name)) + from simplex_chat import _native + + _native._load_libc() + assert loaded == ["ucrtbase"] diff --git a/packages/simplex-chat-python/tests/test_recv_executor.py b/packages/simplex-chat-python/tests/test_recv_executor.py new file mode 100644 index 0000000000..ef160d5cf9 --- /dev/null +++ b/packages/simplex-chat-python/tests/test_recv_executor.py @@ -0,0 +1,207 @@ +"""ChatApi receives run on a dedicated per-instance thread, not the default pool. + +Uses a fake libsimplex (see tests/test_core_migrate_init.py for the pattern): +`core._native.lib` and `core._read_and_free` are monkeypatched so `chat_recv_msg_wait` +sleeps for a controlled time and returns a scripted result. +""" + +from __future__ import annotations + +import asyncio +import json +import threading +import time +from concurrent.futures import ThreadPoolExecutor +from typing import Any + +import pytest + +from simplex_chat import ChatApi, ChatCommandError + +RECV_SLEEP = 0.3 + + +class FakeRecvLib: + """Fake chat_recv_msg_wait: blocks for `sleep` seconds, then returns a scripted result. + + `events` records "stop" / "recv_start" / "recv_end" / "close_store" in call order, across + all ChatApi instances sharing this fake, so tests can assert ordering between stop, receive + and store-close calls (not just that they happened). + """ + + def __init__( + self, + sleep: float = RECV_SLEEP, + results: list[str] | None = None, + stop_response: str = "chatStopped", + ) -> None: + self.sleep = sleep + self._results = iter(results or []) + self._stop_response = stop_response + self.calls: list[tuple[int, int]] = [] # (ctrl, thread ident) + self.events: list[str] = [] + self._lock = threading.Lock() + + def chat_recv_msg_wait(self, ctrl: int, wait_us: int) -> str: + with self._lock: + self.events.append("recv_start") + time.sleep(self.sleep) + with self._lock: + self.events.append("recv_end") + self.calls.append((ctrl, threading.get_ident())) + return next(self._results, "") + + def chat_send_cmd(self, ctrl: int, cmd: bytes) -> str: + assert cmd == b"/_stop", f"unexpected command {cmd!r}" + with self._lock: + self.events.append("stop") + return json.dumps({"result": {"type": self._stop_response}}) + + def chat_close_store(self, ctrl: int) -> str: + with self._lock: + self.events.append("close_store") + return "" + + +@pytest.fixture +def fake_lib(monkeypatch: pytest.MonkeyPatch): + def install( + sleep: float = RECV_SLEEP, + results: list[str] | None = None, + stop_response: str = "chatStopped", + ) -> FakeRecvLib: + lib = FakeRecvLib(sleep=sleep, results=results, stop_response=stop_response) + monkeypatch.setattr("simplex_chat.core._native.lib", lambda: lib) + monkeypatch.setattr("simplex_chat.core._read_and_free", lambda ptr: ptr) + return lib + + return install + + +def _recv_thread_names() -> list[str]: + return [t.name for t in threading.enumerate() if t.name.startswith("simplex-recv")] + + +async def test_receives_do_not_use_the_default_executor(fake_lib): + fake_lib(sleep=RECV_SLEEP) + loop = asyncio.get_running_loop() + loop.set_default_executor(ThreadPoolExecutor(max_workers=1)) + + apis = [ChatApi(ctrl=i) for i in range(3)] + recv_tasks = [asyncio.create_task(api.recv_chat_event()) for api in apis] + try: + await asyncio.sleep(0.05) # let all three receives claim their own thread + + start = time.monotonic() + await asyncio.to_thread(lambda: None) + elapsed = time.monotonic() - start + + await asyncio.gather(*recv_tasks) + finally: + for api in apis: + await api.close() + + assert elapsed < 0.1 + + +async def test_one_receive_thread_per_chatapi_reused(fake_lib): + lib = fake_lib(sleep=0.02) + api = ChatApi(ctrl=1) + other_api = ChatApi(ctrl=2) + try: + for _ in range(3): + await api.recv_chat_event() + + idents = {ident for ctrl, ident in lib.calls if ctrl == 1} + assert len(idents) == 1 + recv_ident = idents.pop() + thread = next(t for t in threading.enumerate() if t.ident == recv_ident) + assert thread.name.startswith("simplex-recv") + assert thread.ident != threading.get_ident() + + await other_api.recv_chat_event() + other_idents = {ident for ctrl, ident in lib.calls if ctrl == 2} + assert other_idents and other_idents != {thread.ident} + finally: + await api.close() + await other_api.close() + + +def test_no_thread_until_first_receive(): + # A bare ThreadPoolExecutor spawns no worker thread until the first submit, + # so the real assertion is the attribute itself, not threading.enumerate(). + api = ChatApi(ctrl=1) + assert api._recv_executor is None + + +async def test_close_shuts_down_the_executor_without_blocking_the_loop(fake_lib): + fake_lib(sleep=RECV_SLEEP) + api = ChatApi(ctrl=1) + recv_task = asyncio.create_task(api.recv_chat_event()) + await asyncio.sleep(0.05) # let the receive claim its executor thread + assert _recv_thread_names() != [] + + sleep_task = asyncio.create_task(asyncio.sleep(0.01)) + close_task = asyncio.create_task(api.close()) + + await asyncio.wait_for(sleep_task, timeout=0.2) + assert not close_task.done() # shutdown still waiting on the in-flight receive + + await close_task + await recv_task + + assert _recv_thread_names() == [] + + +async def test_close_shuts_down_executor_before_closing_the_store(fake_lib): + lib = fake_lib(sleep=RECV_SLEEP) + api = ChatApi(ctrl=1) + recv_task = asyncio.create_task(api.recv_chat_event()) + try: + await asyncio.sleep(0.05) # ensure the receive is in flight before close() starts + await api.close() + await recv_task + finally: + if not recv_task.done(): + recv_task.cancel() + + # recv_end (executor drained) must precede close_store: a receive must never + # be in flight while the store closes underneath it. + assert lib.events == ["recv_start", "stop", "recv_end", "close_store"] + + +async def test_close_stops_the_chat_before_closing_the_store(fake_lib): + lib = fake_lib() + api = ChatApi(ctrl=1) + await api.close() + assert lib.events == ["stop", "close_store"] + assert not api.initialized + + +async def test_close_does_not_close_the_store_when_stop_fails(fake_lib): + lib = fake_lib(stop_response="chatCmdError") + api = ChatApi(ctrl=1) + with pytest.raises(ChatCommandError, match="error stopping chat"): + await api.close() + assert lib.events == ["stop"] + assert api.initialized + + +async def test_recv_chat_event_after_close_raises_before_touching_executor(fake_lib): + fake_lib() + api = ChatApi(ctrl=1) + await api.close() + with pytest.raises(RuntimeError, match="controller not initialized"): + await api.recv_chat_event() + assert api._recv_executor is None + + +async def test_receive_parses_event_json_and_none_on_timeout(fake_lib): + event: dict[str, Any] = {"type": "chatItemUpdated", "chatItem": {}} + fake_lib(sleep=0.01, results=[json.dumps({"result": event}), ""]) + api = ChatApi(ctrl=1) + try: + assert await api.recv_chat_event() == event + assert await api.recv_chat_event() is None + finally: + await api.close() diff --git a/packages/simplex-chat-python/tests/test_util.py b/packages/simplex-chat-python/tests/test_util.py index 3ea0d87e6d..d5a43eabaa 100644 --- a/packages/simplex-chat-python/tests/test_util.py +++ b/packages/simplex-chat-python/tests/test_util.py @@ -167,6 +167,11 @@ def test_ci_bot_command_no_text(): assert util.ci_bot_command(ci) is None +def test_ci_bot_command_multiline_params(): + ci = {"content": {"type": "rcvMsgContent", "msgContent": {"type": "text", "text": "/review line1\nline2"}}} + assert util.ci_bot_command(ci) == ("review", "line1\nline2") + + def test_reaction_text_emoji(): r = {"chatReaction": {"reaction": {"type": "emoji", "emoji": "🎉"}}} assert util.reaction_text(r) == "🎉" diff --git a/src/Simplex/Chat/Mobile.hs b/src/Simplex/Chat/Mobile.hs index d2e1d8460d..085df84956 100644 --- a/src/Simplex/Chat/Mobile.hs +++ b/src/Simplex/Chat/Mobile.hs @@ -12,6 +12,7 @@ module Simplex.Chat.Mobile where import Control.Concurrent.STM import Control.Exception (SomeException, catch) +import Control.Monad import Control.Monad.Except import Control.Monad.Reader import Data.Aeson (ToJSON (..)) @@ -35,6 +36,7 @@ import Foreign.Ptr import Foreign.StablePtr import Foreign.Storable (poke) import GHC.IO.Encoding (setFileSystemEncoding, setForeignEncoding, setLocaleEncoding) +import Numeric.Natural (Natural) import Simplex.Chat import Simplex.Chat.Badges.Code (badgeCodeText, parseBadgeCode) import Simplex.Chat.Controller @@ -73,6 +75,7 @@ import qualified Simplex.Messaging.Agent.Store.DB as DB data DBMigrationResult = DBMOk | DBMInvalidConfirmation + | DBMInvalidQueueSize | DBMErrorNotADatabase {dbFile :: String} | DBMErrorMigration {dbFile :: String, migrationError :: MigrationError} | DBMErrorSQL {dbFile :: String, migrationSQLError :: String} @@ -113,6 +116,8 @@ foreign export ccall "chat_migrate_init" cChatMigrateInit :: CString -> CString foreign export ccall "chat_migrate_init_key" cChatMigrateInitKey :: CString -> CString -> CInt -> CString -> CInt -> Ptr (StablePtr ChatController) -> IO CJSONString +foreign export ccall "chat_migrate_init_queue" cChatMigrateInitQueue :: CString -> CString -> CString -> CInt -> Ptr (StablePtr ChatController) -> IO CJSONString + foreign export ccall "chat_close_store" cChatCloseStore :: StablePtr ChatController -> IO CString foreign export ccall "chat_reopen_store" cChatReopenStore :: StablePtr ChatController -> IO CString @@ -166,7 +171,14 @@ cChatMigrateInit fp key conf = cChatMigrateInitKey fp key 0 conf 0 -- For postgres first param is schema prefix, second param is database connection string. cChatMigrateInitKey :: CString -> CString -> CInt -> CString -> CInt -> Ptr (StablePtr ChatController) -> IO CJSONString -cChatMigrateInitKey fp key keepKey conf background ctrl = do +cChatMigrateInitKey fp key keepKey conf background = cChatMigrateInit_ fp key (keepKey /= 0) conf (background /= 0) mobileQueueSize + +-- | queueSize is the size of internal queues, same as terminal option --queue-size +cChatMigrateInitQueue :: CString -> CString -> CString -> CInt -> Ptr (StablePtr ChatController) -> IO CJSONString +cChatMigrateInitQueue fp key conf queueSize = cChatMigrateInit_ fp key False conf False (fromIntegral queueSize) + +cChatMigrateInit_ :: CString -> CString -> Bool -> CString -> Bool -> Int -> Ptr (StablePtr ChatController) -> IO CJSONString +cChatMigrateInit_ fp key keepKey conf background queueSize ctrl = do -- ensure we are set to UTF-8; iOS does not have locale, and will default to -- US-ASCII all the time. setLocaleEncoding utf8 @@ -176,7 +188,7 @@ cChatMigrateInitKey fp key keepKey conf background ctrl = do chatDbOpts <- mobileDbOpts fp key confirm <- peekCAString conf r <- - chatMigrateInitKey chatDbOpts (keepKey /= 0) confirm (background /= 0) >>= \case + chatMigrateInitKey chatDbOpts keepKey confirm background queueSize >>= \case Right cc -> (newStablePtr cc >>= poke ctrl) $> DBMOk Left e -> pure e newCStringFromLazyBS $ J.encode r @@ -254,8 +266,11 @@ cChatParseBadgeCode cCode = do cChatJsonLength :: CString -> IO CInt cChatJsonLength s = fromIntegral . subtract 2 . LB.length . J.encode . safeDecodeUtf8 <$> B.packCString s -mobileChatOpts :: ChatDbOpts -> ChatOpts -mobileChatOpts dbOptions = +mobileQueueSize :: Int +mobileQueueSize = 4096 + +mobileChatOpts :: ChatDbOpts -> Natural -> ChatOpts +mobileChatOpts dbOptions tbqSize = ChatOpts { coreOptions = CoreChatOpts @@ -268,7 +283,7 @@ mobileChatOpts dbOptions = logServerHosts = True, logAgent = Nothing, logFile = Nothing, - tbqSize = 4096, + tbqSize, maxChats = 5000, deviceName = Nothing, chatRelay = False, @@ -313,18 +328,19 @@ getActiveUser_ st = find activeUser <$> withTransaction st getUsers chatMigrateInit :: String -> ScrubbedBytes -> String -> IO (Either DBMigrationResult ChatController) chatMigrateInit dbFilePrefix dbKey confirm = do let chatDBOpts = ChatDbOpts {dbFilePrefix, dbKey, trackQueries = DB.TQSlow 5000, vacuumOnMigration = True} - chatMigrateInitKey chatDBOpts False confirm False + chatMigrateInitKey chatDBOpts False confirm False mobileQueueSize #endif -chatMigrateInitKey :: ChatDbOpts -> Bool -> String -> Bool -> IO (Either DBMigrationResult ChatController) -chatMigrateInitKey chatDbOpts keepKey confirm backgroundMode = runExceptT $ do +chatMigrateInitKey :: ChatDbOpts -> Bool -> String -> Bool -> Int -> IO (Either DBMigrationResult ChatController) +chatMigrateInitKey chatDbOpts keepKey confirm backgroundMode queueSize = runExceptT $ do + unless (queueSize > 0) $ throwError DBMInvalidQueueSize confirmMigrations <- liftEitherWith (const DBMInvalidConfirmation) $ strDecode $ B.pack confirm let migrationConfig = MigrationConfig confirmMigrations (Just "") chatStore <- migrate createChatStore (toDBOpts chatDbOpts chatSuffix keepKey chatDBFunctions) migrationConfig agentStore <- migrate createAgentStore (toDBOpts chatDbOpts agentSuffix keepKey []) migrationConfig ExceptT $ initialize chatStore ChatDatabase {chatStore, agentStore} where - opts = mobileChatOpts $ removeDbKey chatDbOpts + opts = mobileChatOpts (removeDbKey chatDbOpts) (fromIntegral queueSize) initialize st db = do user_ <- liftIO $ getActiveUser_ st first DBMAgentError <$> newChatController db user_ defaultMobileConfig opts backgroundMode diff --git a/tests/MobileTests.hs b/tests/MobileTests.hs index e6aecfd295..b93e1c8c8c 100644 --- a/tests/MobileTests.hs +++ b/tests/MobileTests.hs @@ -25,7 +25,7 @@ import qualified Data.ByteString.Lazy.Char8 as LB import Data.Time.Clock (getCurrentTime) import Data.Word (Word8, Word32) import Foreign.C -import Foreign.Marshal.Alloc (mallocBytes) +import Foreign.Marshal.Alloc (alloca, mallocBytes) import Foreign.Marshal.Utils (copyBytes) import Foreign.Ptr import Foreign.StablePtr @@ -34,7 +34,7 @@ import GHC.IO.Encoding (setLocaleEncoding, setFileSystemEncoding, setForeignEnco import JSONFixtures import Simplex.Chat import Simplex.Chat.Badges (BadgeInfo (..), BadgeRequest (..), BadgeType (..), generateMasterKey, verifyCredential) -import Simplex.Chat.Controller (ChatController (..), ChatDatabase (..)) +import Simplex.Chat.Controller (ChatConfig (..), ChatController (..), ChatDatabase (..)) import Simplex.Chat.Mobile hiding (error) import Simplex.Chat.Mobile.Badges hiding (error) import Simplex.Chat.Mobile.File @@ -44,6 +44,8 @@ import Simplex.Chat.Options.DB import Simplex.Chat.Store import Simplex.Chat.Store.Profiles import Simplex.Chat.Types (AgentUserId (..), Profile (..)) +import Simplex.Messaging.Agent.Client (AgentClient (..)) +import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), Env (..)) import Simplex.Messaging.Agent.Store.Shared (MigrationConfig (..), MigrationConfirmation (..)) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import qualified Simplex.Messaging.Crypto as C @@ -65,6 +67,7 @@ mobileTests = do setForeignEncoding utf8 it "start new chat without user" testChatApiNoUser it "start new chat with existing user" testChatApi + it "should set queue size via C API" testChatMigrateInitQueueCApi it "should encrypt/decrypt WebRTC frames" testMediaApi it "should encrypt/decrypt WebRTC frames via C API" testMediaCApi describe "should read/write encrypted files via C API" $ do @@ -165,6 +168,22 @@ testChatApi ps = do chatParseMarkdown "hello" `shouldBe` "{}" chatParseMarkdown "*hello*" `shouldBe` parsedMarkdown +testChatMigrateInitQueueCApi :: TestParams -> IO () +testChatMigrateInitQueueCApi ps = do + cPath <- newCString $ tmpPath ps "1" + cKey <- newCString "" + cConfirm <- newCString "yesUp" + alloca $ \ctrlPtr -> do + let migrateInit queueSize = peekCAString =<< cChatMigrateInitQueue cPath cKey cConfirm queueSize ctrlPtr + migrateInit 0 `shouldReturn` jsonStr DBMInvalidQueueSize + migrateInit (-1) `shouldReturn` jsonStr DBMInvalidQueueSize + migrateInit 65536 `shouldReturn` jsonStr DBMOk + ChatController {config = ChatConfig {tbqSize}, smpAgent = AgentClient {agentEnv = Env {config = AgentConfig {tbqSize = agentQSize}}}} <- deRefStablePtr =<< peek ctrlPtr + tbqSize `shouldBe` 65536 + agentQSize `shouldBe` 65536 + where + jsonStr = LB.unpack . J.encode + testMediaApi :: HasCallStack => TestParams -> IO () testMediaApi ps = do let tmp = tmpPath ps From 683fd675550c9a29b2b8c94c475c81007ac06a2b Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Sat, 19 Sep 2026 15:19:45 +0400 Subject: [PATCH 12/28] scripts: re-init submodules in reproduce builds (#7508) --- scripts/simplex-chat-reproduce-builds.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/simplex-chat-reproduce-builds.sh b/scripts/simplex-chat-reproduce-builds.sh index d0f121c6ea..5d18b226a8 100755 --- a/scripts/simplex-chat-reproduce-builds.sh +++ b/scripts/simplex-chat-reproduce-builds.sh @@ -148,8 +148,9 @@ for os_pair in ${oses}; do -t "${container_name}" \ sh -c 'rm -rf ./dist-newstyle ./apps/multiplatform' - # Also restore git to previous state + # Also restore git to previous state + re-initialize submodules git reset --hard && git clean -dfx + git submodule update --init --recursive # Stop containers, delete images docker stop "${container_name}" From faedb0328e3e5cc58f5f0f161ac91719f34ed56d Mon Sep 17 00:00:00 2001 From: Simplex Operations Date: Sat, 19 Sep 2026 11:39:26 +0000 Subject: [PATCH 13/28] core: 7.1.0.7 (simplexmq 7.1.0.8) --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cabal.project b/cabal.project index 81a7dc7e6f..5e00d0764b 100644 --- a/cabal.project +++ b/cabal.project @@ -21,7 +21,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: ea43df2349f6d3dedd60d5e4aed21fd99316cad9 + tag: 900c45ffaee5eb7eef8ec9402bc4971e4eb7ef33 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 64a6dce26f..926d6e8860 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."ea43df2349f6d3dedd60d5e4aed21fd99316cad9" = "1jkh6zfyfxbx49s0pggina1yadk3zlb0ls5crgka6aiw1w25dxr0"; + "https://github.com/simplex-chat/simplexmq.git"."900c45ffaee5eb7eef8ec9402bc4971e4eb7ef33" = "1iygb9hkc86ky553jg5apc8vfbjj0lghjaywikc0m7h1yk7zibxg"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 576ccf128e..f5fda29685 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 7.1.0.6 +version: 7.1.0.7 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat From 0183a36058b75632b0ff9591b1ec3746f109e97f Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 19 Sep 2026 14:16:39 +0100 Subject: [PATCH 14/28] ui: update text about badges (#7544) * ui: update text about badges * update * update * update * update * update * update * update kotlin --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- .../Views/Badges/BadgesHowItWorksView.swift | 9 ++++---- .../Views/Badges/BadgesRedeemCodeView.swift | 2 +- .../Badges/BadgesSupportSimplexView.swift | 4 ++-- .../Views/Badges/BadgesYourBadgeView.swift | 2 +- .../Views/Badges/BadgesYourLevelView.swift | 2 +- .../Views/Badges/SupportSimpleXBanner.swift | 2 +- .../Shared/Views/ChatList/ChatListView.swift | 6 +++--- .../views/badges/BadgesHowItWorksView.kt | 3 ++- .../commonMain/resources/MR/base/strings.xml | 21 ++++++++++--------- blog/20260919-simplex-supporter-badges.md | 2 +- 10 files changed, 28 insertions(+), 25 deletions(-) diff --git a/apps/ios/Shared/Views/Badges/BadgesHowItWorksView.swift b/apps/ios/Shared/Views/Badges/BadgesHowItWorksView.swift index bca1f7da40..5758ceb12c 100644 --- a/apps/ios/Shared/Views/Badges/BadgesHowItWorksView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesHowItWorksView.swift @@ -14,7 +14,7 @@ struct BadgesHowItWorksView: View { var body: some View { VStack(alignment: .leading) { - Text("How private badges work") + Text("How badges protect your privacy") .font(.largeTitle) .bold() .foregroundColor(theme.colors.primary) @@ -22,9 +22,10 @@ struct BadgesHowItWorksView: View { .padding(.bottom, 16) ScrollView { VStack(alignment: .leading, spacing: 12) { - Text("A badge is not an account. It is a signed credential stored on your device. It does not identify you, and no one keeps a record of who holds which badge.") - Text("Your contacts see the badge and its expiry date, and nothing else. The badge carries no identifier, so it cannot be used to find out who you are or to match you across chats.") - Text("Payment and badge are kept apart. Paying is one step; the badge is issued in another, under a key that exists only for that badge. Whoever handles the payment cannot see where the badge ends up.") + Text("A badge is an anonymous credential stored in your profile on your device. This credential is never sent to anyone.") + Text("To prove to a contact or a server that you have a badge, the app generates a new proof that reveals only the badge type and the expiry date, rounded to a week.") + Text("Nobody can link two different proofs to each other or to the purchase.") + ExternalLink("Read more in our blog.", destination: URL(string: "https://simplex.chat/blog/20260919-simplex-supporter-badges.html")!) } .lineLimit(nil) .fixedSize(horizontal: false, vertical: true) diff --git a/apps/ios/Shared/Views/Badges/BadgesRedeemCodeView.swift b/apps/ios/Shared/Views/Badges/BadgesRedeemCodeView.swift index 16e1796e96..6ea0c58edb 100644 --- a/apps/ios/Shared/Views/Badges/BadgesRedeemCodeView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesRedeemCodeView.swift @@ -80,7 +80,7 @@ struct BadgesRedeemCodeView: View { .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) - Text("Paste the code from your receipt.") + Text("Paste the code you received.") .font(.body) .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) diff --git a/apps/ios/Shared/Views/Badges/BadgesSupportSimplexView.swift b/apps/ios/Shared/Views/Badges/BadgesSupportSimplexView.swift index 2fc904197d..55d05f2615 100644 --- a/apps/ios/Shared/Views/Badges/BadgesSupportSimplexView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesSupportSimplexView.swift @@ -29,7 +29,7 @@ struct BadgesSupportSimplexView: View { .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) - Text("SimpleX doesn't sell ads or data. It's funded by its users and by investors who share the mission. You can support the project and show a badge on your profile.") + Text("Get a badge to send larger files (2-5GB) that stay available longer (7-21 days), and to show it on your profile.") .font(.body) .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) @@ -110,7 +110,7 @@ struct BadgesSupportSimplexView: View { Button { howItWorksActive = true } label: { HStack(spacing: 4) { Image(systemName: "info.circle") - Text("How private badges work").fontWeight(.medium) + Text("How badges protect your privacy").fontWeight(.medium) } .font(.body) } diff --git a/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift b/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift index 59eeba7eac..5654d6e5aa 100644 --- a/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesYourBadgeView.swift @@ -48,7 +48,7 @@ struct BadgesYourBadgeView: View { .modifier(ThemedBackground()) } label: { settingsRow("info.circle", color: theme.colors.secondary) { - Text("How private badges work") + Text("How badges protect your privacy") } } } diff --git a/apps/ios/Shared/Views/Badges/BadgesYourLevelView.swift b/apps/ios/Shared/Views/Badges/BadgesYourLevelView.swift index eb2396c655..d47bcaa0a7 100644 --- a/apps/ios/Shared/Views/Badges/BadgesYourLevelView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesYourLevelView.swift @@ -162,7 +162,7 @@ struct BadgesYourLevelView: View { } label: { HStack(spacing: 4) { Image(systemName: "info.circle") - Text("How private badges work").fontWeight(.medium) + Text("How badges protect your privacy").fontWeight(.medium) } .font(.body) } diff --git a/apps/ios/Shared/Views/Badges/SupportSimpleXBanner.swift b/apps/ios/Shared/Views/Badges/SupportSimpleXBanner.swift index dad3bb1b0a..c2f6136d31 100644 --- a/apps/ios/Shared/Views/Badges/SupportSimpleXBanner.swift +++ b/apps/ios/Shared/Views/Badges/SupportSimpleXBanner.swift @@ -13,7 +13,7 @@ struct SupportSimpleXBanner: View { @EnvironmentObject var theme: AppTheme @Environment(\.colorScheme) var colorScheme: ColorScheme var title: LocalizedStringKey = "Support SimpleX" - var subtitle: LocalizedStringKey = "Get badge + files up to 5GB" + var subtitle: LocalizedStringKey = "Get badge + better files" let onTap: () -> Void let onDismiss: () -> Void diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 61f29485a7..ab3ffdd191 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -387,7 +387,7 @@ struct ChatListView: View { } private func showSupportEndedDismissAlert() { - showAlert(NSLocalizedString("Support ended", comment: "alert title")) { + showAlert(NSLocalizedString("Your badge expired", comment: "alert title")) { [ UIAlertAction(title: NSLocalizedString("Remind me later", comment: "alert button"), style: .default) { _ in Task { await ackBadgeAlert(snooze: true) } @@ -464,8 +464,8 @@ struct ChatListView: View { // one slot: a badge the user paid for ending outranks the pitch to get one if supportEnded, let alert = badgeModel.alert { SupportSimpleXBanner( - title: "Support ended", - subtitle: "Your support ended on \(alert.dateText).", + title: "Your badge expired", + subtitle: "Your badge expired on \(alert.dateText).", onTap: { showBadgesSheet = true }, onDismiss: showSupportEndedDismissAlert ) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt index 7c16bee763..cb300b183d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt @@ -10,9 +10,9 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.platform.ColumnWithScrollBar +import chat.simplex.common.views.onboarding.ReadableTextWithLink import chat.simplex.res.MR -// TODO [badges]: replace lorem ipsum with the real copy once the badge protocol and privacy properties are documented. @Composable fun BadgesHowItWorksView() { ColumnWithScrollBar( @@ -30,5 +30,6 @@ fun BadgesHowItWorksView() { Text(stringResource(MR.strings.badges_how_it_works_p1), style = MaterialTheme.typography.body1) Text(stringResource(MR.strings.badges_how_it_works_p2), style = MaterialTheme.typography.body1) Text(stringResource(MR.strings.badges_how_it_works_p3), style = MaterialTheme.typography.body1) + ReadableTextWithLink(MR.strings.badges_how_it_works_read_more_with_link, "https://simplex.chat/blog/20260919-simplex-supporter-badges.html") } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index e310834fda..f305ffc13f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -3159,19 +3159,20 @@ Ends on %1$s. Your level Support SimpleX - SimpleX doesn\'t sell ads or data. It\'s funded by its users and by investors who share the mission. You can support the project and show a badge on your profile. + Get a badge to send larger files (2-5GB) that stay available longer (7-21 days), and to show it on your profile. Why SimpleX is built. Choose your level Redeem badge code Continue - How private badges work - How private badges work - A badge is not an account. It is a signed credential stored on your device. It does not identify you, and no one keeps a record of who holds which badge. - Your contacts see the badge and its expiry date, and nothing else. The badge carries no identifier, so it cannot be used to find out who you are or to match you across chats. - Payment and badge are kept apart. Paying is one step; the badge is issued in another, under a key that exists only for that badge. Whoever handles the payment cannot see where the badge ends up. + How badges protect your privacy + How badges protect your privacy + A badge is an anonymous credential stored in your profile on your device. This credential is never sent to anyone. + To prove to a contact or a server that you have a badge, the app generates a new proof that reveals only the badge type and the expiry date, rounded to a week. + Nobody can link two different proofs to each other or to the purchase. + our blog.]]> My nickname Support SimpleX - Get badge + files up to 5GB + Get badge + better files You can support SimpleX later in Settings. Purchase successful Purchase pending @@ -3179,7 +3180,7 @@ Purchase error Get your code Redeem code - Paste the code from your receipt. + Paste the code you received. SB-XXXXX-XXXXX-XXXXX-XXXXX Redeem Cannot redeem code @@ -3197,12 +3198,12 @@ The code could not be redeemed. The code you scanned is not a badge code. Your badge - Support ended + Your badge expired shown on your profile Ends Prepaid months have no billing date. The badge is reissued each month from the balance you already paid for, and ends when it runs out. Investor - Your support ended on %1$s. + Your badge expired on %1$s. Remind me later Dismiss Credential diff --git a/blog/20260919-simplex-supporter-badges.md b/blog/20260919-simplex-supporter-badges.md index bd2774404b..ebe19ef431 100644 --- a/blog/20260919-simplex-supporter-badges.md +++ b/blog/20260919-simplex-supporter-badges.md @@ -20,7 +20,7 @@ You can now support SimpleX Chat and get a supporter badge, larger files and lon A supporter badge is shown on your profile to your contacts, group members and channel subscribers. With a badge you can send files up to 2GB, or 5GB with a legend badge, instead of 1GB, and servers keep your files for longer — 7 days with a supporter badge and 21 days with a legend badge. -A badge is a credential stored in your profile on your device. The credential itself is not sent to anyone: to show the badge to a contact or to present it to a server, the app generates a new zero-knowledge proof that reveals only the badge type and the expiry date, and no two proofs can be linked to each other or to the purchase, by the badge service, your contacts or servers. Credentials are issued for one month at a time, and all badges expire on the same day of the week, so a badge places you among all supporters of that week and nothing more. +A badge is an anonymous credential stored in your profile on your device. The credential itself is not sent to anyone: to show the badge to a contact or to present it to a server, the app generates a new zero-knowledge proof that reveals only the badge type and the expiry date, and no two proofs can be linked to each other or to the purchase, by the badge service, your contacts or servers. Credentials are issued for one month at a time, and all badges expire on the same day of the week, so a badge places you among all supporters of that week and nothing more. This is only possible because the network has no user identifiers — in other messengers a paid feature is attached to the account, so the operator knows who paid and what they do with the feature. From 3326f9db2a4a833bb40b4f00aa62f4c639eb0358 Mon Sep 17 00:00:00 2001 From: SimpleX Chat Date: Sat, 19 Sep 2026 13:21:07 +0000 Subject: [PATCH 15/28] 7.1-beta.4: android 379, desktop 162, ios 357 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 36 +++++++++---------- apps/multiplatform/gradle.properties | 8 ++--- .../types/typescript/package.json | 2 +- packages/simplex-chat-nodejs/package.json | 4 +-- .../simplex-chat-nodejs/src/download-libs.js | 2 +- .../src/simplex_chat/_version.py | 4 +-- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 505552647b..dfab20ec8a 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -192,8 +192,8 @@ 64C3B0212A0D359700E19930 /* CustomTimePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */; }; 64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829982D54AEED006B9E89 /* libgmp.a */; }; 64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829992D54AEEE006B9E89 /* libffi.a */; }; - 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a */; }; - 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a */; }; + 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a */; }; + 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a */; }; 64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */; }; 64D0C2C029F9688300B38D5F /* UserAddressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */; }; 64D0C2C229FA57AB00B38D5F /* UserAddressLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */; }; @@ -584,8 +584,8 @@ 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTimePicker.swift; sourceTree = ""; }; 64C829982D54AEED006B9E89 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; 64C829992D54AEEE006B9E89 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a"; sourceTree = ""; }; - 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a"; sourceTree = ""; }; + 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a"; sourceTree = ""; }; + 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a"; sourceTree = ""; }; 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressView.swift; sourceTree = ""; }; 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressLearnMore.swift; sourceTree = ""; }; @@ -758,8 +758,8 @@ 64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */, 64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */, 64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */, - 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a in Frameworks */, - 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a in Frameworks */, + 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a in Frameworks */, + 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a in Frameworks */, CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -846,8 +846,8 @@ 64C829992D54AEEE006B9E89 /* libffi.a */, 64C829982D54AEED006B9E89 /* libgmp.a */, 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */, - 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw-ghc9.6.3.a */, - 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.6-ErPlbJcf1H358Yh01XLorw.a */, + 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f-ghc9.6.3.a */, + 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-7.1.0.7-KLlSPSHmTF28mDmnoCMp3f.a */, ); path = Libraries; sourceTree = ""; @@ -2135,7 +2135,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2185,7 +2185,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2227,7 +2227,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2247,7 +2247,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2272,7 +2272,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -2309,7 +2309,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -2346,7 +2346,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2397,7 +2397,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2451,7 +2451,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -2485,7 +2485,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 356; + CURRENT_PROJECT_VERSION = 357; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index b7807cb4c0..b8975d80f8 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -24,11 +24,11 @@ android.nonTransitiveRClass=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=7.1-beta.3 -android.version_code=378 +android.version_name=7.1-beta.4 +android.version_code=379 -desktop.version_name=7.1-beta.3 -desktop.version_code=161 +desktop.version_name=7.1-beta.4 +desktop.version_code=162 kotlin.version=2.1.20 gradle.plugin.version=8.7.0 diff --git a/packages/simplex-chat-client/types/typescript/package.json b/packages/simplex-chat-client/types/typescript/package.json index 7fdad94741..4d353cbdae 100644 --- a/packages/simplex-chat-client/types/typescript/package.json +++ b/packages/simplex-chat-client/types/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@simplex-chat/types", - "version": "0.11.3", + "version": "0.11.4", "description": "TypeScript types for SimpleX Chat bot libraries", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/simplex-chat-nodejs/package.json b/packages/simplex-chat-nodejs/package.json index 0960334edc..f405be260d 100644 --- a/packages/simplex-chat-nodejs/package.json +++ b/packages/simplex-chat-nodejs/package.json @@ -1,6 +1,6 @@ { "name": "simplex-chat", - "version": "7.1.0-beta.3", + "version": "7.1.0-beta.4", "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -24,7 +24,7 @@ "docs": "typedoc" }, "dependencies": { - "@simplex-chat/types": "^0.11.3", + "@simplex-chat/types": "^0.11.4", "extract-zip": "^2.0.1", "fast-deep-equal": "^3.1.3", "node-addon-api": "^8.5.0" diff --git a/packages/simplex-chat-nodejs/src/download-libs.js b/packages/simplex-chat-nodejs/src/download-libs.js index e0debebea8..cb92699e69 100644 --- a/packages/simplex-chat-nodejs/src/download-libs.js +++ b/packages/simplex-chat-nodejs/src/download-libs.js @@ -4,7 +4,7 @@ const path = require('path'); const extract = require('extract-zip'); const GITHUB_REPO = 'simplex-chat/simplex-chat-libs'; -const RELEASE_TAG = 'v7.1.0-beta.3'; +const RELEASE_TAG = 'v7.1.0-beta.4'; const BACKEND = (process.env.SIMPLEX_BACKEND || process.env.npm_config_simplex_backend || 'sqlite').toLowerCase(); // A locally built libsimplex, copied into libs/ rather than loaded in place: // the addon's RUNPATH is $ORIGIN/../../libs. diff --git a/packages/simplex-chat-python/src/simplex_chat/_version.py b/packages/simplex-chat-python/src/simplex_chat/_version.py index e3f2fa5338..9c60a54bb1 100644 --- a/packages/simplex-chat-python/src/simplex_chat/_version.py +++ b/packages/simplex-chat-python/src/simplex_chat/_version.py @@ -5,5 +5,5 @@ Bump both together for normal releases. For wrapper-only fixes use a PEP 440 post-release: __version__ = "6.5.2.post1", LIBS_VERSION unchanged. """ -__version__ = "7.1.0b3" # PEP 440 — read by hatchling for wheel metadata -LIBS_VERSION = "7.1.0-beta.3" # simplex-chat-libs release tag (no 'v' prefix) +__version__ = "7.1.0b4" # PEP 440 — read by hatchling for wheel metadata +LIBS_VERSION = "7.1.0-beta.4" # simplex-chat-libs release tag (no 'v' prefix) From 6075021aa128ed7c065f0a98269379272c4d701b Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sat, 19 Sep 2026 22:43:19 +0100 Subject: [PATCH 16/28] blog: update image --- blog/images/20260919-badge-screen.png | Bin 320087 -> 315435 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/blog/images/20260919-badge-screen.png b/blog/images/20260919-badge-screen.png index c4a7994e957a152771e37c9a213d2cfe91d82973..beece83da62c0428548175b5701e445f5f26bd9c 100644 GIT binary patch literal 315435 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 z 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

v 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

M#kd9ly( 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

I1f7Uv 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 From 5ff4c89f046f8296863ffc017927ff789b9172a9 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sun, 20 Sep 2026 21:20:29 +0100 Subject: [PATCH 17/28] website: update cf page (#7549) * website: update cf page * tooltip * mobile * landscape * update user count --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- website/src/crowdfunding.html | 386 ++++++++++++++++++++++++++++++++-- 1 file changed, 365 insertions(+), 21 deletions(-) diff --git a/website/src/crowdfunding.html b/website/src/crowdfunding.html index 1f87477b3c..f2f8a6ab3d 100644 --- a/website/src/crowdfunding.html +++ b/website/src/crowdfunding.html @@ -64,7 +64,7 @@ templateEngineOverride: njk --cf-area-off: calc((var(--sec-h) - 100svh) / 2); } - @media screen and (max-width: 959px) { + @media screen and (max-width: 959px) and (orientation: portrait) { :root { --cf-grad-light: linear-gradient(30deg, #e8f3ff 0%, #c0e2ff 40%, #e9ffff 80%, #ffefd6 90%); --cf-grad-dark: linear-gradient(30deg, #000000 0%, #131d49 52%, #3f5598 65%, #c3faff 85%, #fff6e0 90%); @@ -193,11 +193,12 @@ templateEngineOverride: njk margin-top: calc(var(--sec-vhu) * 3); max-width: calc(var(--sec-vwu) * 40); } + .cf-hero .lead-short { display: none; } .cf-stats { display: flex; gap: calc(var(--sec-vwu) * 5); - margin-top: calc(var(--sec-vhu) * 6); + margin-top: calc(var(--sec-vhu) * 4.67); position: relative; top: calc(var(--sec-vhu) * 2); } @@ -218,6 +219,61 @@ templateEngineOverride: njk color: #dfeaff; } + .cf-hero-offer { + position: relative; + margin-top: calc(var(--sec-vhu) * 6.3); + width: calc(var(--sec-vwu) * 56); + } + .cf-hero-offer p { font-family: "Manrope", sans-serif; } + .cf-hero-offer .cf-offer-lead { + font-weight: 600; + font-size: calc(var(--sec-vwu) * 2.1); + line-height: 1.4; + color: #ffffff; + font-variant-numeric: tabular-nums; + } + .cf-hero-offer .cf-offer-lead b { + font-weight: 700; + background: linear-gradient(90deg, #019bfe 0%, #64fdff 58%, #c8feff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + color: transparent; + } + .cf-hero-offer .cf-offer-lead span { white-space: nowrap; } + .cf-hero-offer .cf-offer-terms { + font-weight: 300; + font-size: calc(var(--sec-vwu) * 1.55); + line-height: 1.55; + color: #dfeaff; + margin-top: calc(var(--sec-vhu) * 0.4); + } + .cf-hero-offer .cf-offer-terms a { position: relative; color: inherit; text-decoration: none; } + .cf-hero-offer .cf-offer-terms abbr { text-decoration: underline dotted; text-underline-offset: 3px; cursor: pointer; } + .cf-hero-offer .cf-offer-terms a::after { + content: attr(data-tip); + position: absolute; + left: calc(100% + 12px); + top: 50%; + transform: translateY(-50%); + white-space: nowrap; + padding: 7px 12px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, .18); + background: rgba(5, 9, 32, .96); + color: #dfeaff; + font-family: "Manrope", sans-serif; + font-weight: 400; + font-size: calc(var(--sec-vwu) * 1.1); + line-height: 1.4; + opacity: 0; + visibility: hidden; + transition: opacity .12s ease; + pointer-events: none; + } + .cf-hero-offer .cf-offer-terms a:hover::after, + .cf-hero-offer .cf-offer-terms a:focus-visible::after { opacity: 1; visibility: visible; } + /* ---- close: same left-aligned layout as the hero ---- */ .cf-close .area { position: relative; display: flex; align-items: flex-end; padding: 0 calc(var(--sec-vwu) * 7.5) calc(var(--sec-vhu) * 22) 0; } @@ -376,7 +432,7 @@ templateEngineOverride: njk .cf-pill svg { height: 30px; width: auto; display: block; transform: translateY(-3.5px); } - @media screen and (min-width: 960px) { + @media screen and (min-width: 960px), screen and (max-width: 959px) and (orientation: landscape) { .cf-pill { width: 252px; justify-content: center; } } @@ -386,7 +442,7 @@ templateEngineOverride: njk .cf-cta-link:hover, .cf .text-container a.gradient-text:hover { filter: brightness(1.12); } - @media screen and (min-width: 960px) { + @media screen and (min-width: 960px), screen and (max-width: 959px) and (orientation: landscape) { .cf-network .text-container h2 { max-width: calc(var(--sec-vwu) * 23.5) !important; } .cf-network .text-container p { max-width: calc(var(--sec-vwu) * 31) !important; } .cf-network .text-container a { max-width: calc(var(--sec-vwu) * 31) !important; } @@ -426,7 +482,7 @@ templateEngineOverride: njk #navbar.on-light > a.logo.logo-light { display: flex; } #navbar.on-light > a.logo.logo-dark { display: none; } - @media screen and (min-width: 960px) { + @media screen and (min-width: 960px), screen and (max-width: 959px) and (orientation: landscape) { header#navbar { height: 74px; } header#navbar > a.logo { top: 0; @@ -446,15 +502,17 @@ templateEngineOverride: njk opacity: 1 !important; transform: none !important; background: transparent !important; - height: 54px !important; } + } + @media screen and (max-width: 959px) and (orientation: portrait) { + header#navbar { height: 54px !important; } header#navbar > a.logo { top: 0 !important; height: 100% !important; align-items: center; transform: translateY(var(--cf-nav-shift)); } [dir="ltr"] header#navbar > a.logo { padding-left: var(--cf-text-pad); } header#navbar > a.logo img { height: 31.5px; } } /* ---- mobile: portrait art on top, text at the bottom (home page system) ---- */ - @media screen and (max-width: 959px) { + @media screen and (max-width: 959px) and (orientation: portrait) { .cf .text-container h2 { font-size: calc(var(--sec-vwu) * 9.4); } .cf .text-container { margin-left: 0 !important; @@ -596,12 +654,12 @@ templateEngineOverride: njk --cf-phone-h: calc(var(--cf-phone-w) / 0.4914); --cf-phone-part: 0.55; /* bottom of the hero text block, measured from the section top */ - --cf-hero-text-b: calc(var(--cf-top-base) + max(0px, calc(-1 * var(--cf-area-off))) + 78.5vw); + --cf-hero-text-b: calc(var(--cf-top-base) + max(0px, calc(-1 * var(--cf-area-off))) + 76.7vw); /* the arc crest starts 0.2678 down the cover image, which is 2.349 phone widths tall and sits 0.4034 phone heights above the phone top: the phone may rise no higher than this */ --cf-phone-ceiling: calc(var(--cf-hero-text-b) + var(--cf-phone-w) * 0.1917); - --cf-phone-show: max(calc(var(--cf-phone-h) * 0.15), min(calc(var(--cf-phone-h) * var(--cf-phone-part)), calc(100svh - var(--cf-phone-ceiling)))); + --cf-phone-show: max(52vw, min(calc(var(--cf-phone-h) * var(--cf-phone-part)), calc(100svh - var(--cf-phone-ceiling)))); --cf-phone-top: calc(100svh - var(--cf-phone-show) + var(--cf-area-off)); --cf-fade-ext: max(0px, calc(110lvh - 100svh)); /* dvh so the fade rides with the button as the chrome moves */ @@ -623,8 +681,10 @@ templateEngineOverride: njk .cf-hero h1, .cf-hero .lead, .cf-hero .cf-stats { position: relative; z-index: 4; } - .cf-hero h1 { font-size: calc(var(--sec-vwu) * 9.7); } + .cf-hero h1 { font-size: calc(var(--sec-vwu) * 8.54); } .cf-hero .lead { font-size: calc(var(--sec-vwu) * 3.55); max-width: none; margin-top: calc(var(--sec-vhu) * 2); } + .cf-hero .lead:not(.lead-short) { display: none; } + .cf-hero .lead-short { display: block; font-size: calc(var(--sec-vwu) * 4.5); white-space: nowrap; } .cf-close .area { padding: calc(var(--cf-top) + var(--sec-vhu) * 14) var(--cf-gutter) 0; } /* crest a fixed 78px from the section top */ section.page.cf.cf-close { @@ -652,6 +712,19 @@ templateEngineOverride: njk } .cf-close-offer p { font-size: calc(var(--sec-vwu) * 3.6); } .cf-stats { top: 0; gap: calc(var(--sec-vwu) * 8); margin-top: calc(var(--sec-vhu) * 3); } + .cf-hero .cf-hero-offer { + position: relative; + top: 0; + width: auto; + z-index: 4; + margin-top: calc(var(--sec-vhu) * 2); + padding: 10px var(--cf-text-pad) 12px; + margin-left: calc(-1 * var(--cf-gutter)); + margin-right: calc(-1 * var(--cf-gutter)); + background: linear-gradient(to bottom, rgba(2, 7, 29, 0) 0%, rgba(2, 7, 29, var(--cf-offer-veil, 0)) 22%, rgba(2, 7, 29, var(--cf-offer-veil, 0)) 78%, rgba(2, 7, 29, 0) 100%); + } + .cf-hero-offer .cf-offer-lead { font-size: calc(var(--sec-vwu) * 4.2); line-height: 1.3; white-space: nowrap; } + .cf-hero-offer .cf-offer-terms { font-size: calc(var(--sec-vwu) * 4); margin-top: calc(var(--sec-vhu) * 0.8); } .cf-stat img { width: calc(var(--sec-vwu) * 8); } .cf-stat b { font-size: calc(var(--sec-vwu) * 6.5); } .cf-stat span { font-size: calc(var(--sec-vwu) * 3.4); } @@ -743,21 +816,21 @@ templateEngineOverride: njk .cf-tag .n { font-weight: 700; font-size: calc(var(--sec-vwu) * 1.5); line-height: 1.35; } .cf-tag .v { font-weight: 500; font-size: calc(var(--sec-vwu) * 1.2); line-height: 1.45; } .cf-tag .v b { font-weight: 700; } - @media screen and (min-width: 960px) { + @media screen and (min-width: 960px), screen and (max-width: 959px) and (orientation: landscape) { .cf-tags-art, .cf-art { display: none; } } - @media screen and (max-width: 959px) { + @media screen and (max-width: 959px) and (orientation: portrait) { .cf-tag .n { font-size: 3.54cqh; line-height: 1.3; } } /* 320pt phones: keep the headline at three lines */ - @media screen and (max-width: 330px) { - .cf-hero h1 { font-size: calc(var(--sec-vwu) * 9.3); } + @media screen and (max-width: 330px) and (orientation: portrait) { + .cf-hero h1 { font-size: calc(var(--sec-vwu) * 8.18); } } /* narrow phones: keep the corner link clear of the logo */ - @media screen and (max-width: 389px) { + @media screen and (max-width: 389px) and (orientation: portrait) { header#navbar > a.logo img { height: 24px; } .cf-hero-corner { height: 40px; } .cf-tag .v { font-size: 2.96cqh; line-height: 1.4; } @@ -787,7 +860,7 @@ templateEngineOverride: njk .cf-fine-links a { color: #9fb2d8; text-decoration: none; } .cf-fine-links a:hover { color: #ffffff; } - @media screen and (max-width: 959px) { + @media screen and (max-width: 959px) and (orientation: portrait) { /* padding-bottom comes from .safari-ios section.page, which a fit-content footer does not need */ section.page.cf.cf-footer { height: fit-content; min-height: fit-content; padding-bottom: 0; } @@ -917,11 +990,73 @@ templateEngineOverride: njk .cf-modal-panel h2 { font-size: 1.4rem; } } /* 320pt phones: the card's text column is narrower than the submit label */ - @media screen and (max-width: 389px) { + @media screen and (max-width: 389px) and (orientation: portrait) { .cf-modal { padding: 24px 12px; } .cf-modal-panel { padding: 28px 20px; } .cf-form-submit { padding: 0 12px; font-size: 15px; } } + @media screen and (max-width: 959px) and (orientation: landscape) { + :root { + --cover-bg-w: calc(min((3200 / 1920) * 100vw, (3200 / 1080) * 100svh)); + --cover-bg-h: calc(min((1800 / 1920) * 100vw, (1800 / 1080) * 100svh)); + --sec-w: calc(min((1920 / 1920) * 100vw, (1920 / 1080) * 100svh)); + --sec-h: calc(min((1080 / 1920) * 100vw, (1080 / 1080) * 100svh)); + --sec-vwu: calc(var(--sec-w) / 100); + --sec-vhu: calc(var(--sec-h) / 100); + } + html { scroll-snap-type: none; } + section.page.cf:not(.cf-footer), + html.safari-ios section.page.cf:not(.cf-footer), + html.chrome-ios section.page.cf:not(.cf-footer), + html.chrome-android section.page.cf:not(.cf-footer), + html.safari-ios section.page.cf.cf-current:not(.cf-footer), + html.chrome-ios section.page.cf.cf-current:not(.cf-footer) { + height: auto; + min-height: 100dvh; + margin-top: 0; + padding: 74px 0 0; + align-items: flex-start; + } + section.page.cf .area { + height: auto; + min-height: calc(100dvh - 74px); + } + .page .text-container { + height: auto; + min-height: calc(100dvh - 74px); + padding-top: calc(var(--sec-vhu) * 3); + padding-bottom: calc(var(--sec-vhu) * 3); + } + .page .text-container { + justify-content: center; + gap: calc(var(--sec-vhu) * 3.25); + margin-right: calc(var(--sec-vwu) * 7.5) !important; + margin-left: calc(var(--sec-vwu) * 7.5) !important; + padding-bottom: 0; + max-width: none !important; + } + .cf-right .text-container { margin-left: auto !important; } + .cf-left .text-container { margin-right: auto !important; } + .page .text-container h2 { font-size: calc(var(--sec-vwu) * 4.94); line-height: 1.05; } + .page .text-container p { font-weight: 200; font-size: calc(var(--sec-vwu) * 1.62); } + .page .text-container p span { font-weight: 500; } + .page .text-container a { font-weight: 200; font-size: calc(var(--sec-vwu) * 1.62); } + .cf-hero h1 { font-size: calc(var(--sec-vwu) * 4.4); } + .cf-hero .lead:not(.lead-short) { display: none; } + .cf-hero .lead-short { display: block; margin-top: calc(var(--sec-vhu) * 2); } + .cf-hero .cf-hero-cta { margin-top: calc(var(--sec-vhu) * 3); } + .cf-hero .cf-stats { margin-top: calc(var(--sec-vhu) * 3); } + .cf-hero .area { + align-items: center; + padding: calc(var(--sec-vhu) * 2) 0 calc(var(--sec-vhu) * 6); + } + .cf-phone { top: calc(var(--sec-vhu) * 27.1); bottom: auto; } + section.page.cf.cf-hero, + section.page.cf.cf-close { + background-position: calc(50% + var(--sec-vwu) * 40.3) calc(74px + var(--sec-h) / 2 + var(--sec-vhu) * 2.2 - var(--cover-bg-h) / 2); + } + .cf-close .area { padding-bottom: calc(var(--sec-vhu) * 8); } + } @@ -945,6 +1080,7 @@ templateEngineOverride: njk

+ @@ -973,8 +1113,8 @@ templateEngineOverride: njk
-

480,000+ users with zero marketing spend

-

Hundreds of user posts, podcasts and videos and $650,000 in user donations, before any paid features.

+

520,000
monthly users

+

Grown with zero marketing spend: hundreds of user posts, podcasts and videos, and $650,000 in user donations, before any paid features.

Only $1.7M investment over 4 years — more capital efficient than most startups.

@@ -999,7 +1139,7 @@ templateEngineOverride: njk
Users
-
480,000 active monthly,
+
520,000 active monthly,
organic growth
@@ -1238,6 +1378,210 @@ templateEngineOverride: njk
+ + -