commit:     d6a04bbc2910f099ef8869868a95241466ca68b6
Author:     orbea <orbea <AT> riseup <DOT> net>
AuthorDate: Fri Nov 21 14:24:16 2025 +0000
Commit:     orbea <orbea <AT> riseup <DOT> net>
CommitDate: Sat Nov 22 04:01:19 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/libressl.git/commit/?id=d6a04bbc

dev-qt/qtbase: add 6.10.1

Signed-off-by: orbea <orbea <AT> riseup.net>

 dev-qt/qtbase/Manifest                             |   1 +
 .../qtbase/files/qtbase-6.10.0-QTBUG-141099.patch  |  31 ++
 dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch   | 354 +++++++++++++++++
 dev-qt/qtbase/qtbase-6.10.1.ebuild                 | 440 +++++++++++++++++++++
 4 files changed, 826 insertions(+)

diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest
index 5f6e198..bf12568 100644
--- a/dev-qt/qtbase/Manifest
+++ b/dev-qt/qtbase/Manifest
@@ -1 +1,2 @@
+DIST qtbase-everywhere-src-6.10.1.tar.xz 50234516 BLAKE2B 
bf4f79725d817b681f302d95827e425aa578302feaa8980b1263fbb3ef12480ce0d573b36b25738b9b673294a9d7227c8869ccef3b22a176c7655fe501767f58
 SHA512 
fd5dcdc59ec3b39e48563513ae438eb4540a28e72c46961295de2ccb08609289d477ef7e91aac0b8983f2d5b05b901b4f5be10eaca4ac4c6aa8cd598f37a228e
 DIST qtbase-everywhere-src-6.9.3.tar.xz 49856272 BLAKE2B 
c25fdd711061ae7521f8f0838e40db2b800062e469bef946ee57959846667450a33d817c84e5ae733d00b86f3daac25ecafa66aaf6fff76c68525718ad20a44c
 SHA512 
d49b6356869830b7421e8bb94354884c132dcb37b9b2d56c88671bff0fe60e51a4ee961a7db3f248da84d0eda64af1636f1bdf59fdc0bbf8e50147c370e901de

diff --git a/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch 
b/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch
new file mode 100644
index 0000000..d4edaeb
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch
@@ -0,0 +1,31 @@
+https://bugreports.qt.io/browse/QTBUG-141099
+https://codereview.qt-project.org/c/qt/qtbase/+/685911
+--- a/src/gui/kernel/qguiapplication.cpp
++++ b/src/gui/kernel/qguiapplication.cpp
+@@ -3418,4 +3418,13 @@
+     QWindowPrivate *p = qt_window_private(window);
+ 
++    if (e->isExposed) {
++        // If the window has been automatically positioned or resized by the
++        // window manager, we now assume those have taken effect, even for
++        // asynchronous window managers. From this point on we want the window
++        // to keep its geometry, even when recreated.
++        p->positionAutomatic = false;
++        p->resizeAutomatic = false;
++    }
++
+     if (!p->receivedExpose) {
+         if (p->resizeEventPending) {
+--- a/src/gui/kernel/qwindow.cpp
++++ b/src/gui/kernel/qwindow.cpp
+@@ -587,10 +587,4 @@
+     platformWindow->initialize();
+ 
+-    // Now that the window is created and initialized the platform has had
+-    // a chance to position and size it automatically. From this point on
+-    // we want the window to keep its geometry, even when recreated.
+-    positionAutomatic = false;
+-    resizeAutomatic = false;
+-
+     QObjectList childObjects = q->children();
+     for (int i = 0; i < childObjects.size(); i ++) {

diff --git a/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch 
b/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch
new file mode 100644
index 0000000..45057ca
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch
@@ -0,0 +1,354 @@
+commit 06f3302b521daae3e51272b3931db6a947b31ee3
+Fixes Qt6 build on LibreSSL.
+
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp?rev=1.8
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qopenssl_p_h?rev=1.2
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslcontext_openssl_cpp?rev=1.2
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslsocket_openssl_symbols_p_h?rev=1.2
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qtls_openssl_cpp?rev=1.2
+http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qx509_openssl_cpp?rev=1.3
+
+--- a/src/plugins/tls/openssl/qopenssl_p.h
++++ b/src/plugins/tls/openssl/qopenssl_p.h
+@@ -71,6 +71,13 @@
+ 
+ QT_BEGIN_NAMESPACE
+ 
++#ifndef DTLS_ANY_VERSION
++#define DTLS_ANY_VERSION 0x1FFFF
++#endif
++#ifndef TLS_ANY_VERSION
++#define TLS_ANY_VERSION 0x10000
++#endif
++
+ struct QSslErrorEntry {
+     int code = 0;
+     int depth = 0;
+--- a/src/plugins/tls/openssl/qsslcontext_openssl.cpp
++++ b/src/plugins/tls/openssl/qsslcontext_openssl.cpp
+@@ -36,9 +36,9 @@ int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx);
+ int qt_OCSP_status_server_callback(SSL *ssl, void *);
+ #endif // ocsp
+ 
+-#ifdef TLS1_3_VERSION
++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER)
+ int q_ssl_sess_set_new_cb(SSL *context, SSL_SESSION *session);
+-#endif // TLS1_3_VERSION
++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBER
+ 
+ } // namespace QTlsPrivate
+ 
+@@ -369,9 +369,11 @@ QT_WARNING_POP
+         return;
+     }
+ 
++#ifndef LIBRESSL_VERSION_NUMBER
+     // A nasty hacked OpenSSL using a level that will make our auto-tests 
fail:
+     if (q_SSL_CTX_get_security_level(sslContext->ctx) > 1 && 
*forceSecurityLevel())
+         q_SSL_CTX_set_security_level(sslContext->ctx, 1);
++#endif // LIBRESSL_VERSION_NUMBER
+ 
+     const long anyVersion =
+ #if QT_CONFIG(dtls)
+@@ -662,14 +664,14 @@ QT_WARNING_POP
+         q_SSL_CTX_set_verify(sslContext->ctx, verificationMode, 
verificationCallback);
+     }
+ 
+-#ifdef TLS1_3_VERSION
++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER)
+     // NewSessionTicket callback:
+     if (mode == QSslSocket::SslClientMode && !isDtls) {
+         q_SSL_CTX_sess_set_new_cb(sslContext->ctx, 
QTlsPrivate::q_ssl_sess_set_new_cb);
+         q_SSL_CTX_set_session_cache_mode(sslContext->ctx, 
SSL_SESS_CACHE_CLIENT);
+     }
+ 
+-#endif // TLS1_3_VERSION
++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBER
+ 
+ #if QT_CONFIG(dtls)
+     // DTLS cookies:
+@@ -759,6 +761,7 @@ void QSslContext::applyBackendConfig(QSslContext 
*sslContext)
+     }
+ #endif // ocsp
+ 
++#ifndef LIBRESSL_VERSION_NUMBER
+     QSharedPointer<SSL_CONF_CTX> cctx(q_SSL_CONF_CTX_new(), 
&q_SSL_CONF_CTX_free);
+     if (cctx) {
+         q_SSL_CONF_CTX_set_ssl_ctx(cctx.data(), sslContext->ctx);
+@@ -802,7 +805,9 @@ void QSslContext::applyBackendConfig(QSslContext 
*sslContext)
+             sslContext->errorStr = 
msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed"));
+             sslContext->errorCode = QSslError::UnspecifiedError;
+         }
+-    } else {
++    } else
++#endif // LIBRESSL_VERSION_NUMBER
++    {
+         sslContext->errorStr = 
msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_CTX_new() failed"));
+         sslContext->errorCode = QSslError::UnspecifiedError;
+     }
+--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp
++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp
+@@ -115,14 +115,25 @@ DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, 
w, return 0, return)
+ DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return)
+ DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *a, a, return 0, return)
+ DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE 
*e, e, return nullptr, return)
++#ifndef LIBRESSL_VERSION_NUMBER
+ DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, 
return)
++#endif
+ DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return)
++#ifndef LIBRESSL_VERSION_NUMBER
+ DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return)
+ DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), 
b, return, DUMMYARG)
+ DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return 
nullptr, return)
+ DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, 
DUMMYARG)
+ DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG)
+ DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return 
nullptr, return)
++#else
++DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return)
++DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, 
DUMMYARG)
++DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return)
++DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG)
++DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG)
++DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return nullptr, return)
++#endif // LIBRESSL_VERSION_NUMBER
+ DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return)
+ DEFINEFUNC2(qssloptions, SSL_CTX_set_options, SSL_CTX *ctx, ctx, qssloptions 
op, op, return 0, return)
+ using info_callback = void (*) (const SSL *ssl, int type, int val);
+@@ -156,7 +167,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE 
*a, a, X509_STORE_CTX_ver
+ DEFINEFUNC3(int, X509_STORE_set_ex_data, X509_STORE *a, a, int idx, idx, void 
*data, data, return 0, return)
+ DEFINEFUNC2(void *, X509_STORE_get_ex_data, X509_STORE *r, r, int idx, idx, 
return nullptr, return)
+ DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, 
return nullptr, return)
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 
0x3090000fL)
+ DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int 
line, line, return, DUMMYARG)
++#else
++DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
++#endif
+ DEFINEFUNC3(int, CRYPTO_memcmp, const void * in_a, in_a, const void * in_b, 
in_b, size_t len, len, return 1, return);
+ DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return)
+ DEFINEFUNC(const char *, OpenSSL_version, int a, a, return nullptr, return)
+@@ -291,12 +306,14 @@ DEFINEFUNC3(int, SSL_CTX_use_certificate_file, SSL_CTX 
*a, a, const char *b, b,
+ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, 
return -1, return)
+ DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, 
b, int c, c, return -1, return)
+ DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return 
nullptr, return)
++#ifndef LIBRESSL_VERSION_NUMBER
+ DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return 
nullptr, return);
+ DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return);
+ DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, 
b, return, return);
+ DEFINEFUNC2(unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a, 
unsigned int b, b, return 0, return);
+ DEFINEFUNC(int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a, return 0, return);
+ DEFINEFUNC3(int, SSL_CONF_cmd, SSL_CONF_CTX *a, a, const char *b, b, const 
char *c, c, return 0, return);
++#endif
+ DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG)
+ DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return 
nullptr, return)
+ DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return 
nullptr, return)
+@@ -870,14 +887,25 @@ bool q_resolveOpenSslSymbols()
+         RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free)
+         RESOLVEFUNC(EVP_PKEY_up_ref)
+         RESOLVEFUNC(EVP_PKEY_CTX_new)
++#ifndef LIBRESSL_VERSION_NUMBER
+         RESOLVEFUNC(EVP_PKEY_param_check)
++#endif
+         RESOLVEFUNC(EVP_PKEY_CTX_free)
++#ifndef LIBRESSL_VERSION_NUMBER
+         RESOLVEFUNC(OPENSSL_sk_new_null)
+         RESOLVEFUNC(OPENSSL_sk_push)
+         RESOLVEFUNC(OPENSSL_sk_free)
+         RESOLVEFUNC(OPENSSL_sk_num)
+         RESOLVEFUNC(OPENSSL_sk_pop_free)
+         RESOLVEFUNC(OPENSSL_sk_value)
++#else
++        RESOLVEFUNC(sk_new_null)
++        RESOLVEFUNC(sk_push)
++        RESOLVEFUNC(sk_free)
++        RESOLVEFUNC(sk_num)
++        RESOLVEFUNC(sk_pop_free)
++        RESOLVEFUNC(sk_value)
++#endif
+         RESOLVEFUNC(SSL_CTX_set_options)
+         RESOLVEFUNC(SSL_set_info_callback)
+         RESOLVEFUNC(SSL_alert_type_string)
+@@ -1060,12 +1088,14 @@ bool q_resolveOpenSslSymbols()
+         RESOLVEFUNC(SSL_CTX_use_PrivateKey)
+         RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
+         RESOLVEFUNC(SSL_CTX_get_cert_store);
++#ifndef LIBRESSL_VERSION_NUMBER
+         RESOLVEFUNC(SSL_CONF_CTX_new);
+         RESOLVEFUNC(SSL_CONF_CTX_free);
+         RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx);
+         RESOLVEFUNC(SSL_CONF_CTX_set_flags);
+         RESOLVEFUNC(SSL_CONF_CTX_finish);
+         RESOLVEFUNC(SSL_CONF_cmd);
++#endif
+         RESOLVEFUNC(SSL_accept)
+         RESOLVEFUNC(SSL_clear)
+         RESOLVEFUNC(SSL_connect)
+--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h
++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h
+@@ -47,6 +47,12 @@ QT_BEGIN_NAMESPACE
+ 
+ #define DUMMYARG
+ 
++#ifdef LIBRESSL_VERSION_NUMBER
++typedef _STACK STACK;
++typedef STACK OPENSSL_STACK;
++typedef void OPENSSL_INIT_SETTINGS;
++#endif
++
+ #if !defined QT_LINKED_OPENSSL
+ // **************** Shared declarations ******************
+ // ret func(arg)
+@@ -206,6 +212,7 @@ int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
+ int q_EVP_PKEY_up_ref(EVP_PKEY *a);
+ EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
+ void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
++#ifndef LIBRESSL_VERSION_NUMBER
+ int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
+ int q_OPENSSL_sk_num(OPENSSL_STACK *a);
+ void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
+@@ -213,6 +220,20 @@ OPENSSL_STACK *q_OPENSSL_sk_new_null();
+ void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data);
+ void q_OPENSSL_sk_free(OPENSSL_STACK *a);
+ void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b);
++#else // LIBRESSL_VERSION_NUMBER
++int q_sk_num(STACK *a);
++#define q_OPENSSL_sk_num(a) q_sk_num(a)
++void q_sk_pop_free(STACK *a, void (*b)(void *));
++#define q_OPENSSL_sk_pop_free(a, b) q_sk_pop_free(a, b)
++STACK *q_sk_new_null();
++#define q_OPENSSL_sk_new_null() q_sk_new_null()
++void q_sk_push(STACK *st, void *data);
++#define q_OPENSSL_sk_push(st, data) q_sk_push(st, data)
++void q_sk_free(STACK *a);
++#define q_OPENSSL_sk_free q_sk_free
++void * q_sk_value(STACK *a, int b);
++#define q_OPENSSL_sk_value(a, b) q_sk_value(a, b)
++#endif // LIBRESSL_VERSION_NUMBER
+ int q_SSL_session_reused(SSL *a);
+ qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op);
+ int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
+@@ -238,8 +259,13 @@ STACK_OF(X509) 
*q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx);
+ # define q_SSL_load_error_strings() 
q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
+                                                        | 
OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
+ 
++#ifndef LIBRESSL_VERSION_NUMBER
+ #define q_SKM_sk_num(st) q_OPENSSL_sk_num((OPENSSL_STACK *)st)
+ #define q_SKM_sk_value(type, st,i) (type *)q_OPENSSL_sk_value((OPENSSL_STACK 
*)st, i)
++#else // LIBRESSL_VERSION_NUMBER
++#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
++#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, 
int))q_sk_value)(st, i)
++#endif // LIBRESSL_VERSION_NUMBER
+ 
+ #define q_OPENSSL_add_all_algorithms_conf()  
q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
+                                                                    | 
OPENSSL_INIT_ADD_ALL_DIGESTS \
+@@ -424,12 +450,14 @@ int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const 
char *b, int c);
+ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
+ int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
+ X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a);
++#ifndef LIBRESSL_VERSION_NUMBER
+ SSL_CONF_CTX *q_SSL_CONF_CTX_new();
+ void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a);
+ void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b);
+ unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b);
+ int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a);
+ int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c);
++#endif // LIBRESSL_VERSION_NUMBER
+ void q_SSL_free(SSL *a);
+ STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
+ const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
+@@ -538,14 +566,26 @@ void q_PKCS12_free(PKCS12 *pkcs12);
+ #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char 
*)pp)
+ #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
+ #define q_SSL_CTX_set_mode(ctx,op) 
q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
++#ifndef LIBRESSL_VERSION_NUMBER
+ #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num((st))
++#else
++#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
++#endif
+ #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i))
+ 
+ void q_GENERAL_NAME_free(GENERAL_NAME *a);
+ 
++#ifndef LIBRESSL_VERSION_NUMBER
+ #define q_sk_X509_num(st) q_SKM_sk_num((st))
++#else
++#define q_sk_X509_num(st) q_SKM_sk_num(X509, (st))
++#endif
+ #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i))
++#ifndef LIBRESSL_VERSION_NUMBER
+ #define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num((st))
++#else
++#define q_sk_SSL_CIPHER_num(st)   q_SKM_sk_num(SSL_CIPHER, (st))
++#endif
+ #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
+ #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
+         q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
+@@ -666,8 +706,13 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
+ 
+ void *q_CRYPTO_malloc(size_t num, const char *file, int line);
+ #define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0)
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 
0x3090000fL)
+ void q_CRYPTO_free(void *str, const char *file, int line);
+ # define q_OPENSSL_free(addr) q_CRYPTO_free(addr, "", 0)
++#else
++void q_CRYPTO_free(void *a);
++# define q_OPENSSL_free(addr) q_CRYPTO_free(addr)
++#endif
+ int q_CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len);
+ 
+ void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, 
int val));
+--- a/src/plugins/tls/openssl/qtls_openssl.cpp
++++ b/src/plugins/tls/openssl/qtls_openssl.cpp
+@@ -1435,13 +1435,13 @@ bool TlsCryptographOpenSSL::initSslContext()
+     else if (mode == QSslSocket::SslServerMode)
+         q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback);
+ 
+-#if OPENSSL_VERSION_NUMBER >= 0x10101006L
++#if OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER)
+     // Set the client callback for TLSv1.3 PSK
+     if (mode == QSslSocket::SslClientMode
+         && QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) {
+         q_SSL_set_psk_use_session_callback(ssl, 
&q_ssl_psk_use_session_callback);
+     }
+-#endif // openssl version >= 0x10101006L
++#endif // OPENSSL_VERSION_NUMBER >= 0x10101006L && 
!defined(LIBRESSL_VERSION_NUMBER)
+ 
+ #endif // OPENSSL_NO_PSK
+ 
+--- a/src/plugins/tls/openssl/qx509_openssl.cpp
++++ b/src/plugins/tls/openssl/qx509_openssl.cpp
+@@ -65,7 +65,11 @@ QMultiMap<QByteArray, QString> mapFromX509Name(X509_NAME 
*name)
+         unsigned char *data = nullptr;
+         int size = q_ASN1_STRING_to_UTF8(&data, 
q_X509_NAME_ENTRY_get_data(e));
+         info.insert(name, QString::fromUtf8((char*)data, size));
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 
0x3090000fL)
+         q_CRYPTO_free(data, nullptr, 0);
++#else
++      q_CRYPTO_free(data);
++#endif
+     }
+ 
+     return info;
+@@ -191,7 +195,11 @@ QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext)
+         QVariantList list;
+         bool isMap = false;
+ 
++#if defined(LIBRESSL_VERSION_NUMBER)
++        for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) {
++#else
+         for (int j = 0; j < q_SKM_sk_num(val); j++) {
++#endif
+             CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j);
+             if (nval->name && nval->value) {
+                 isMap = true;
+@@ -287,7 +295,11 @@ QVariant x509ExtensionToValue(X509_EXTENSION *ext)
+             if (!info)
+                 return {};
+             QVariantMap result;
++#if defined(LIBRESSL_VERSION_NUMBER)
++            for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) {
++#else
+             for (int i=0; i < q_SKM_sk_num(info); i++) {
++#endif
+                 ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, 
info, i);
+ 
+                 GENERAL_NAME *name = ad->location;

diff --git a/dev-qt/qtbase/qtbase-6.10.1.ebuild 
b/dev-qt/qtbase/qtbase-6.10.1.ebuild
new file mode 100644
index 0000000..c5b55a1
--- /dev/null
+++ b/dev-qt/qtbase/qtbase-6.10.1.ebuild
@@ -0,0 +1,440 @@
+# Copyright 2021-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+QT6_HAS_STATIC_LIBS=1
+inherit flag-o-matic qt6-build toolchain-funcs
+
+DESCRIPTION="Cross-platform application development framework"
+
+if [[ ${QT6_BUILD_TYPE} == release ]]; then
+       KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+declare -A QT6_IUSE=(
+       [global]="+ssl +udev zstd"
+       [core]="icu journald syslog"
+       [modules]="+concurrent +dbus +gui +network +sql +xml"
+
+       [gui]="
+               +X accessibility eglfs evdev gles2-only +libinput
+               opengl renderdoc tslib vulkan wayland +widgets
+       "
+       [network]="brotli gssapi libproxy sctp"
+       [sql]="mysql oci8 odbc postgres +sqlite"
+       [widgets]="cups gtk"
+
+       [optfeature]="nls" #810802
+)
+IUSE="${QT6_IUSE[*]}"
+REQUIRED_USE="
+       ?? ( journald syslog )
+       $(
+               printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/}
+               printf '%s? ( network ) ' ${QT6_IUSE[network]//+/}
+               printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/}
+               printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/}
+       )
+       accessibility? ( dbus )
+       eglfs? ( opengl )
+       gles2-only? ( opengl )
+       gui? ( || ( X eglfs wayland ) )
+       libinput? ( udev )
+       sql? ( || ( ${QT6_IUSE[sql]//+/} ) )
+       test? ( icu sql? ( sqlite ) )
+       wayland? ( opengl )
+"
+
+# groups:
+# - global (configure.cmake)
+# - qtcore (src/corelib/configure.cmake)
+# - qtgui (src/gui/configure.cmake)
+# - qtnetwork (src/network/configure.cmake)
+# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets]
+# - qtsql (src/plugins/sqldrivers/configure.cmake)
+# nolink: renderdoc, systemd
+COMMON_DEPEND="
+       virtual/zlib:=
+       ssl? ( dev-libs/openssl:= )
+       udev? ( virtual/libudev:= )
+       zstd? ( app-arch/zstd:= )
+
+       app-crypt/libb2
+       dev-libs/double-conversion:=
+       dev-libs/glib:2
+       dev-libs/libpcre2:=[pcre16,unicode(+)]
+       icu? ( dev-libs/icu:= )
+       journald? ( sys-apps/systemd )
+
+       dbus? ( sys-apps/dbus )
+       gui? (
+               dev-libs/md4c
+               media-libs/fontconfig
+               >=media-libs/freetype-2.13.1:2
+               media-libs/harfbuzz:=
+               media-libs/libjpeg-turbo:=
+               media-libs/libpng:=
+               x11-libs/libdrm
+               x11-libs/libxkbcommon[X?]
+               X? (
+                       x11-libs/libICE
+                       x11-libs/libSM
+                       x11-libs/libX11
+                       x11-libs/libxcb:=
+                       x11-libs/xcb-util-cursor
+                       x11-libs/xcb-util-image
+                       x11-libs/xcb-util-keysyms
+                       x11-libs/xcb-util-renderutil
+                       x11-libs/xcb-util-wm
+               )
+               accessibility? ( app-accessibility/at-spi2-core:2 )
+               eglfs? ( media-libs/mesa[gbm(+)] )
+               evdev? ( sys-libs/mtdev )
+               libinput? ( dev-libs/libinput:= )
+               opengl? (
+                       gles2-only? ( media-libs/libglvnd )
+                       !gles2-only? ( media-libs/libglvnd[X?] )
+               )
+               renderdoc? ( media-gfx/renderdoc )
+               tslib? ( x11-libs/tslib )
+               wayland? ( dev-libs/wayland )
+               widgets? (
+                       cups? ( net-print/cups )
+                       gtk? (
+                               x11-libs/gdk-pixbuf:2
+                               >=x11-libs/gtk+-3.24.41-r1:3[X?,wayland?]
+                               x11-libs/pango
+                       )
+               )
+       )
+       network? (
+               brotli? ( app-arch/brotli:= )
+               gssapi? ( virtual/krb5 )
+               libproxy? ( net-libs/libproxy )
+       )
+       sql? (
+               mysql? ( dev-db/mysql-connector-c:= )
+               oci8? ( dev-db/oracle-instantclient:=[sdk] )
+               odbc? ( dev-db/unixODBC )
+               postgres? ( dev-db/postgresql:* )
+               sqlite? ( dev-db/sqlite:3 )
+       )
+"
+# wrt blockers: users do not always depclean regularly and outdated
+# dev-qt packages sometime cause runtime issues (update this when new
+# Qt libraries/plugins are added, and keep old for 2y+ if removed)
+RDEPEND="
+       ${COMMON_DEPEND}
+       !<dev-qt/qt3d-${PV}:6
+       !<dev-qt/qt5compat-${PV}:6
+       !<dev-qt/qtcharts-${PV}:6
+       !<dev-qt/qtconnectivity-${PV}:6
+       !<dev-qt/qtdeclarative-${PV}:6
+       !<dev-qt/qtgraphs-${PV}:6
+       !<dev-qt/qthttpserver-${PV}:6
+       !<dev-qt/qtimageformats-${PV}:6
+       !<dev-qt/qtlanguageserver-${PV}:6
+       !<dev-qt/qtlocation-${PV}:6
+       !<dev-qt/qtmultimedia-${PV}:6
+       !<dev-qt/qtnetworkauth-${PV}:6
+       !<dev-qt/qtpositioning-${PV}:6
+       !<dev-qt/qtquick3d-${PV}:6
+       !<dev-qt/qtquicktimeline-${PV}:6
+       !<dev-qt/qtremoteobjects-${PV}:6
+       !<dev-qt/qtscxml-${PV}:6
+       !<dev-qt/qtsensors-${PV}:6
+       !<dev-qt/qtserialbus-${PV}:6
+       !<dev-qt/qtserialport-${PV}:6
+       !<dev-qt/qtshadertools-${PV}:6
+       !<dev-qt/qtspeech-${PV}:6
+       !<dev-qt/qtsvg-${PV}:6
+       !<dev-qt/qttools-${PV}:6
+       !<dev-qt/qtvirtualkeyboard-${PV}:6
+       !<dev-qt/qtwayland-${PV}:6
+       !<dev-qt/qtwebchannel-${PV}:6
+       !<dev-qt/qtwebengine-${PV}:6
+       !<dev-qt/qtwebsockets-${PV}:6
+       !<dev-qt/qtwebview-${PV}:6
+       syslog? ( virtual/logger )
+"
+DEPEND="
+       ${COMMON_DEPEND}
+       X? ( x11-base/xorg-proto )
+       gui? (
+               vulkan? ( dev-util/vulkan-headers )
+               wayland? ( dev-util/wayland-scanner )
+       )
+       network? (
+               sctp? ( net-misc/lksctp-tools )
+       )
+       test? (
+               elibc_musl? ( sys-libs/timezone-data )
+       )
+"
+# libarchive[zstd] is indirectly used by cmake (bug #910392)
+BDEPEND="
+       zstd? ( app-arch/libarchive[zstd] )
+"
+PDEPEND="
+       nls? ( ~dev-qt/qttranslations-${PV}:6 )
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-6.10.1-libressl.patch
+       "${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch
+       "${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch
+       "${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch
+       "${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch
+       "${FILESDIR}"/${PN}-6.8.2-cross.patch
+       "${FILESDIR}"/${PN}-6.9.0-no-direct-extern-access.patch
+)
+
+src_prepare() {
+       qt6-build_src_prepare
+
+       if use test; then
+               # test itself has -Werror=strict-aliasing issues, drop for 
simplicity
+               sed -e '/add_subdirectory(qsharedpointer)/d' \
+                       -i tests/auto/corelib/tools/CMakeLists.txt || die
+
+               # workaround for __extendhfxf2 being used for tst_qfloat16.cpp
+               # which is unavailable with compiler-rt (assume used if clang)
+               if tc-is-clang; then
+                       sed -e '/add_subdirectory(qfloat16)/d' \
+                               -i tests/auto/corelib/global/CMakeLists.txt || 
die
+               fi
+       fi
+}
+
+src_configure() {
+       # temporary warning to spare surprised users for whom "it worked 
before",
+       # will drop this in Qt 6.11 (bug #966289)
+       if use custom-cflags && tc-cpp-is-true __RDRND__ ${CXXFLAGS}; then
+               ewarn "USE=custom-cflags is enabled, and there is a good chance 
that the build"
+               ewarn "will fail with current CXXFLAGS. Please disable it if 
have issues."
+       fi
+
+       if use gtk; then
+               # defang automagic dependencies (bug #624960)
+               use X || append-cxxflags -DGENTOO_GTK_HIDE_X11
+               use wayland || append-cxxflags -DGENTOO_GTK_HIDE_WAYLAND
+       fi
+
+       local mycmakeargs=(
+               -DBUILD_WITH_PCH=OFF
+
+               -DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}"
+               -DINSTALL_BINDIR="${QT6_BINDIR}"
+               -DINSTALL_DATADIR="${QT6_DATADIR}"
+               -DINSTALL_DOCDIR="${QT6_DOCDIR}"
+               -DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}"
+               -DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}"
+               -DINSTALL_LIBDIR="${QT6_LIBDIR}"
+               -DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}"
+               -DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}"
+               -DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}"
+               -DINSTALL_QMLDIR="${QT6_QMLDIR}"
+               -DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}"
+               -DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}"
+
+               -DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* 
too
+
+               -DQT_FEATURE_force_system_libs=ON
+               -DQT_FEATURE_relocatable=OFF #927691
+               $(qt_feature ssl openssl)
+               $(qt_feature ssl openssl_linked)
+               $(qt_feature udev libudev)
+               $(qt_feature zstd)
+
+               # qtcore
+               $(qt_feature icu)
+               $(qt_feature journald)
+               $(qt_feature syslog)
+               # currently jemalloc upstream is dead and tests fail with it
+               -DQT_FEATURE_jemalloc=OFF
+
+               # tools
+               -DQT_FEATURE_androiddeployqt=OFF
+
+               # modules
+               $(qt_feature concurrent)
+               $(qt_feature dbus)
+               $(qt_feature gui)
+               $(qt_feature network)
+               $(qt_feature sql)
+               # trivial, and is often needed (sometimes even when not 
building tests)
+               -DQT_FEATURE_testlib=ON
+               $(qt_feature xml)
+
+               # let gentoo's defaults and/or users control security *FLAGS
+               -DQT_FEATURE_glibc_fortify_source=OFF
+               -DQT_FEATURE_intelcet=OFF
+               -DQT_FEATURE_libcpp_hardening=OFF
+               -DQT_FEATURE_libstdcpp_assertions=OFF
+               -DQT_FEATURE_relro_now_linker=OFF
+               -DQT_FEATURE_stack_clash_protection=OFF
+               -DQT_FEATURE_stack_protector=OFF
+               -DQT_FEATURE_trivial_auto_var_init_pattern=OFF
+
+               -DQT_INTERNAL_AVOID_OVERRIDING_SYNCQT_CONFIG=ON # would force 
-O3
+       )
+
+       use gui && mycmakeargs+=(
+               $(qt_feature X xcb)
+               $(qt_feature X system_xcb_xinput)
+               $(qt_feature X xkbcommon_x11)
+               $(cmake_use_find_package X X11) # needed for truly no automagic
+               $(qt_feature accessibility accessibility_atspi_bridge)
+               $(qt_feature eglfs)
+               $(qt_feature evdev)
+               $(qt_feature evdev mtdev)
+               $(qt_feature libinput)
+               $(qt_feature renderdoc graphicsframecapture)
+               $(qt_feature tslib)
+               $(qt_feature vulkan)
+               $(qt_feature wayland)
+               $(qt_feature widgets)
+               -DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no)
+       ) && use widgets && mycmakeargs+=(
+               # note: qtprintsupport is enabled w/ gui+widgets regardless of 
USE=cups
+               $(qt_feature cups)
+               $(qt_feature gtk gtk3)
+       )
+
+       use network && mycmakeargs+=(
+               $(qt_feature brotli)
+               $(qt_feature gssapi)
+               $(qt_feature libproxy)
+               $(qt_feature sctp)
+               $(usev test -DQT_SKIP_DOCKER_COMPOSE=ON)
+               -DQT_FEATURE_dtls=OFF # Required for LibreSSL
+       )
+
+       use sql && mycmakeargs+=(
+               -DQT_FEATURE_sql_db2=OFF # unpackaged
+               -DQT_FEATURE_sql_ibase=OFF # unpackaged
+               -DQT_FEATURE_sql_mimer=OFF # unpackaged
+               $(qt_feature mysql sql_mysql)
+               $(qt_feature oci8 sql_oci)
+               $(usev oci8 
-DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client)
+               $(qt_feature odbc sql_odbc)
+               $(qt_feature postgres sql_psql)
+               $(qt_feature sqlite sql_sqlite)
+               $(qt_feature sqlite system_sqlite)
+       )
+
+       tc-is-cross-compiler && mycmakeargs+=(
+               -DQT_HOST_PATH="${BROOT}"/usr
+               -DQT_FORCE_BUILD_TOOLS=ON
+               -DQT_NO_GENERATE_QMAKE_WRAPPER_FOR_TARGET=ON
+       )
+
+       qt6-build_src_configure
+}
+
+src_test() {
+       local -x TZ=UTC
+       local -x LC_TIME=C
+
+       # users' session setting may break tst_clientextension (bug #927030)
+       unset DESKTOP_SESSION XDG_CURRENT_DESKTOP
+       unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION
+
+       local CMAKE_SKIP_TESTS=(
+               # broken with out-of-source + if qtbase is not already installed
+               tst_moc
+               tst_qmake
+               # similarly broken when relocatable=OFF (bug #927691)
+               tst_qapplication
+               tst_qt_cmake_create
+               tst_uic
+               # needs x11/wayland/opengl rather than just Qt offscreen and 
would
+               # rather to keep this simple
+               tst_qgraphicsview
+               tst_qopengl{,config,widget,window}
+               tst_qx11info
+               tst_surface
+               tst_wl_reconnect
+               tst_xdgdecorationv1
+               # fails for unknown reasons, but seatv4 is not actually used 
nowadays
+               tst_seatv4
+               # fails with network sandbox
+               tst_qdnslookup
+               # fails with sandbox
+               tst_qsharedmemory
+               # typical to lack SCTP support on non-generic kernels
+               tst_qsctpsocket
+               # flaky tests, may be better with -j1 but not worth using over 
this
+               tst_qfiledialog{,2} #916181
+               tst_qprocess #936484
+               tst_qtimer
+               tst_wayland_cursor
+               # haystacksWithMoreThan4GiBWork can easily OOM (16GB ram not 
enough)
+               tst_qlatin1stringmatcher
+               # these can be flaky depending on the environment/toolchain
+               tst_qlogging # backtrace log test can easily vary
+               tst_q{,raw}font # affected by available fonts / settings (bug 
#914737)
+               tst_qprinter # checks system's printers (bug #916216)
+               tst_qhighdpi # may detect users' settings and fail (bug #935364)
+               tst_qstorageinfo # checks mounted filesystems
+               # flaky due to using different test framework and fails with 
USE=-gui
+               tst_selftests
+               # known failing when using clang+glibc+stdc++, needs looking 
into
+               tst_qthread
+               # partially failing on x86 chroots and seemingly(?) harmless 
(dev-qt
+               # revdeps tests pass), skip globally to avoid keywording 
flakiness
+               tst_json
+               tst_qcolorspace
+               tst_qdoublevalidator
+               tst_qglobal
+               tst_qglyphrun
+               tst_qvectornd
+               tst_rcc
+               # similarly, but on armv7 and potentially others (bug #914028)
+               tst_qlineedit
+               tst_qpainter
+               # likewise, known failing on BE arches (bug 
#914033,914371,918878)
+               tst_qimagereader
+               tst_qimagewriter
+               tst_qpluginloader
+               tst_quuid # >=6.6.2 had related fixes, needs retesting
+               # partially broken on llvm-musl, needs looking into but skip to 
have
+               # a baseline for regressions (rest of dev-qt still passes with 
musl)
+               $(usev elibc_musl '
+                       tst_qicoimageformat
+                       tst_qimagereader
+                       tst_qimage
+               ')
+               # fails due to hppa's NaN handling, needs looking into (bug 
#914371)
+               $(usev hppa '
+                       tst_qcborvalue
+                       tst_qnumeric
+               ')
+               # note: for linux, upstream only really runs+maintains tests 
for amd64
+               # https://doc.qt.io/qt-6/supported-platforms.html
+       )
+
+       qt6-build_src_test
+}
+
+src_install() {
+       qt6-build_src_install
+
+       if use test; then
+               local delete_bins=( # need a better way to handle this
+                       apphelper clientserver copier crashingServer 
desktopsettingsaware_helper
+                       echo fileWriterProcess modal_helper nospace 'one space'
+                       paster qcommandlineparser_test_helper 
qfileopeneventexternal
+                       socketprocess syslocaleapp tst_qhashseed_helper 'two 
space s'
+                       write-read-write
+               )
+               local delete=( # sigh
+                       "${D}${QT6_BINDIR}"/test*
+                       "${D}${QT6_LIBDIR}/objects-${CMAKE_BUILD_TYPE}"/*test*
+                       "${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
+               )
+               # using -f given not tracking which tests may be skipped or not
+               rm -rf -- "${delete[@]}" || die
+       fi
+}

Reply via email to