<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From 4d90f45d6c204ad87b2198791fe522be092bed98 Mon Sep 17 00:00:00 2001
From: Alexander Lopatin &lt;alopatindev@codonaft.com&gt;
Date: Tue, 14 Jan 2025 23:52:00 +0800
Subject: [PATCH] Port to Qt 6

https://bugs.gentoo.org/948065
---
 qdevicemonitor/StringRingBuffer.h             |  1 +
 qdevicemonitor/devices/AndroidDevice.cpp      | 24 +++++++++++--------
 qdevicemonitor/devices/AndroidDevice.h        |  8 +++----
 qdevicemonitor/devices/BaseDevice.cpp         | 10 +++++---
 qdevicemonitor/devices/BaseDevice.h           |  5 ++--
 qdevicemonitor/devices/IOSDevice.cpp          | 24 ++++++++++++-------
 qdevicemonitor/devices/IOSDevice.h            |  2 +-
 qdevicemonitor/devices/TextFileDevice.cpp     | 16 +++++++------
 qdevicemonitor/devices/TextFileDevice.h       |  2 +-
 .../trackers/AndroidDevicesTracker.cpp        |  4 ++++
 .../devices/trackers/IOSDevicesTracker.cpp    |  4 ++++
 qdevicemonitor/ui/DeviceWidget.cpp            | 10 +++++---
 qdevicemonitor/ui/DeviceWidget.h              |  4 ++--
 qdevicemonitor/ui/MainWindow.cpp              |  3 +--
 14 files changed, 73 insertions(+), 44 deletions(-)

diff --git a/qdevicemonitor/StringRingBuffer.h b/qdevicemonitor/StringRingBuffer.h
index 5c6537b..76dee9d 100644
--- a/qdevicemonitor/StringRingBuffer.h
+++ b/qdevicemonitor/StringRingBuffer.h
@@ -18,6 +18,7 @@
 #ifndef RINGBUFFER_H
 #define RINGBUFFER_H
 
+#include &lt;QObject&gt;
 #include &lt;QPointer&gt;
 #include &lt;QString&gt;
 #include &lt;QVector&gt;
diff --git a/qdevicemonitor/devices/AndroidDevice.cpp b/qdevicemonitor/devices/AndroidDevice.cpp
index e0785e9..a11e79f 100644
--- a/qdevicemonitor/devices/AndroidDevice.cpp
+++ b/qdevicemonitor/devices/AndroidDevice.cpp
@@ -146,7 +146,11 @@ void AndroidDevice::startLogger()
         m_logFile.setFileName(currentLogAbsFileName);
         m_logFile.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate);
         m_logFileStream = QSharedPointer&lt;QTextStream&gt;::create(&amp;m_logFile);
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
         m_logFileStream-&gt;setCodec("UTF-8");
+#else
+        m_logFileStream-&gt;setEncoding(QStringConverter::Utf8);
+#endif
 
         startLogProcess();
 
@@ -230,13 +234,13 @@ void AndroidDevice::filterAndAddToTextEdit(const QString&amp; line)
     const QRegularExpressionMatch match = re.match(line);
     if (match.hasMatch())
     {
-        const QStringRef date = match.capturedRef("date");
-        const QStringRef time = match.capturedRef("time");
-        const QStringRef pid = match.capturedRef("pid");
-        const QStringRef tid = match.capturedRef("tid");
-        const QStringRef verbosity = match.capturedRef("verbosity");
-        const QStringRef tag = match.capturedRef("tag").trimmed();
-        const QStringRef text = line.midRef(match.capturedEnd("tag") + 1);
+        const QStringView date = match.captured("date");
+        const QStringView time = match.captured("time");
+        const QStringView pid = match.captured("pid");
+        const QStringView tid = match.captured("tid");
+        const QStringView verbosity = match.captured("verbosity");
+        const QStringView tag = match.captured("tag").trimmed();
+        const QStringView text = line.mid(match.capturedEnd("tag") + 1);
 
         const auto verbosityLevel = static_cast&lt;VerbosityEnum&gt;(Utils::verbosityCharacterToInt(verbosity.at(0).toLatin1()));
 
@@ -261,7 +265,7 @@ void AndroidDevice::filterAndAddToTextEdit(const QString&amp; line)
         checkFilters(filtersMatch, m_filtersValid);
         if (filtersMatch)
         {
-            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringRef(&amp;line));
+            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringView(line));
             m_deviceWidget-&gt;flushText();
         }
     }
@@ -269,7 +273,7 @@ void AndroidDevice::filterAndAddToTextEdit(const QString&amp; line)
     m_deviceWidget-&gt;highlightFilterLineEdit(!m_filtersValid);
 }
 
-void AndroidDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const VerbosityEnum verbosityLevel, const QStringRef&amp; pid, const QStringRef&amp; tid, const QStringRef&amp; tag, const QStringRef&amp; text)
+void AndroidDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const VerbosityEnum verbosityLevel, const QStringView pid, const QStringView tid, const QStringView tag, const QStringView text)
 {
     filtersMatch = verbosityLevel &lt;= m_deviceWidget-&gt;getVerbosityLevel();
 
@@ -283,7 +287,7 @@ void AndroidDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const V
 
     for (auto it = m_filters.constBegin(); it != m_filters.constEnd(); ++it)
     {
-        const QStringRef filter(&amp;(*it));
+        const QStringView filter(*it);
         bool columnFound = false;
         if (!columnMatches("pid:", filter, pid, filtersValid, columnFound) ||
             !columnMatches("tid:", filter, tid, filtersValid, columnFound) ||
diff --git a/qdevicemonitor/devices/AndroidDevice.h b/qdevicemonitor/devices/AndroidDevice.h
index 1012c43..f908d07 100644
--- a/qdevicemonitor/devices/AndroidDevice.h
+++ b/qdevicemonitor/devices/AndroidDevice.h
@@ -77,10 +77,10 @@ private:
     void checkFilters(bool&amp; filtersMatch,
                       bool&amp; filtersValid,
                       const VerbosityEnum verbosityLevel = Verbose,
-                      const QStringRef&amp; pid = QStringRef(),
-                      const QStringRef&amp; tid = QStringRef(),
-                      const QStringRef&amp; tag = QStringRef(),
-                      const QStringRef&amp; text = QStringRef());
+                      const QStringView pid = QStringView(),
+                      const QStringView tid = QStringView(),
+                      const QStringView tag = QStringView(),
+                      const QStringView text = QStringView());
 };
 
 #endif // ANDROIDDEVICE_H
diff --git a/qdevicemonitor/devices/BaseDevice.cpp b/qdevicemonitor/devices/BaseDevice.cpp
index 21ee82c..628d7a4 100644
--- a/qdevicemonitor/devices/BaseDevice.cpp
+++ b/qdevicemonitor/devices/BaseDevice.cpp
@@ -47,7 +47,11 @@ BaseDevice::BaseDevice(
 {
     qDebug() &lt;&lt; "new BaseDevice; type" &lt;&lt; type &lt;&lt; "; id" &lt;&lt; id;
 
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
     m_tempStream.setCodec("UTF-8");
+#else
+    m_tempStream.setEncoding(QStringConverter::Utf8);
+#endif
     m_tempStream.setString(&amp;m_tempBuffer, QIODevice::ReadWrite | QIODevice::Text);
 
     updateLogBufferSpace();
@@ -195,12 +199,12 @@ void BaseDevice::filterAndAddFromLogBufferToTextEdit()
     }
 }
 
-bool BaseDevice::columnMatches(const QString&amp; column, const QStringRef&amp; filter, const QStringRef&amp; originalValue, bool&amp; filtersValid, bool&amp; columnFound)
+bool BaseDevice::columnMatches(const QString&amp; column, const QStringView filter, const QStringView originalValue, bool&amp; filtersValid, bool&amp; columnFound)
 {
     if (filter.startsWith(column))
     {
         columnFound = true;
-        const QStringRef value = filter.mid(column.length());
+        const QStringView value = filter.mid(column.length());
         if (value.isEmpty())
         {
             filtersValid = false;
@@ -213,7 +217,7 @@ bool BaseDevice::columnMatches(const QString&amp; column, const QStringRef&amp; filter,
     return true;
 }
 
-bool BaseDevice::columnTextMatches(const QStringRef&amp; filter, const QString&amp; text)
+bool BaseDevice::columnTextMatches(const QStringView filter, const QString&amp; text)
 {
     if (filter.isEmpty() || text.contains(filter))
     {
diff --git a/qdevicemonitor/devices/BaseDevice.h b/qdevicemonitor/devices/BaseDevice.h
index 504b78d..2990b02 100644
--- a/qdevicemonitor/devices/BaseDevice.h
+++ b/qdevicemonitor/devices/BaseDevice.h
@@ -28,7 +28,6 @@
 #include &lt;QRegularExpression&gt;
 #include &lt;QSharedPointer&gt;
 #include &lt;QString&gt;
-#include &lt;QStringRef&gt;
 #include &lt;QTabWidget&gt;
 #include &lt;QTextStream&gt;
 #include &lt;QTimer&gt;
@@ -93,8 +92,8 @@ public:
 
     void updateLogBufferSpace();
     void filterAndAddFromLogBufferToTextEdit();
-    bool columnMatches(const QString&amp; column, const QStringRef&amp; filter, const QStringRef&amp; originalValue, bool&amp; filtersValid, bool&amp; columnFound);
-    bool columnTextMatches(const QStringRef&amp; filter, const QString&amp; text);
+    bool columnMatches(const QString&amp; column, const QStringView filter, const QStringView originalValue, bool&amp; filtersValid, bool&amp; columnFound);
+    bool columnTextMatches(const QStringView filter, const QString&amp; text);
 
     void scheduleLogReady();
     void stopLogReadyTimer();
diff --git a/qdevicemonitor/devices/IOSDevice.cpp b/qdevicemonitor/devices/IOSDevice.cpp
index 98fca1c..d47d200 100644
--- a/qdevicemonitor/devices/IOSDevice.cpp
+++ b/qdevicemonitor/devices/IOSDevice.cpp
@@ -38,7 +38,11 @@ IOSDevice::IOSDevice(
 {
     qDebug() &lt;&lt; "IOSDevice::IOSDevice";
 
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
     m_tempErrorsStream.setCodec("UTF-8");
+#else
+    m_tempErrorsStream.setEncoding(QStringConverter::Utf8);
+#endif
     m_tempErrorsStream.setString(&amp;m_tempErrorsBuffer, QIODevice::ReadWrite | QIODevice::Text);
 
     m_deviceWidget-&gt;getFilterLineEdit().setToolTip(tr("Search for messages. Accepts&lt;ul&gt;&lt;li&gt;Plain Text&lt;/li&gt;&lt;li&gt;Prefix &lt;b&gt;text:&lt;/b&gt; with Plain Text&lt;/li&gt;&lt;li&gt;Regular Expressions&lt;/li&gt;&lt;/ul&gt;"));
@@ -160,7 +164,11 @@ void IOSDevice::startLogger()
         m_logFile.setFileName(currentLogAbsFileName);
         m_logFile.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate);
         m_logFileStream = QSharedPointer&lt;QTextStream&gt;::create(&amp;m_logFile);
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
         m_logFileStream-&gt;setCodec("UTF-8");
+#else
+        m_logFileStream-&gt;setEncoding(QStringConverter::Utf8);
+#endif
 
         startLogProcess();
 
@@ -193,14 +201,14 @@ void IOSDevice::onUpdateFilter(const QString&amp; filter)
     maybeAddCompletionAfterDelay(filter);
 }
 
-void IOSDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringRef&amp; text)
+void IOSDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringView text)
 {
     QString textString;
     bool textStringInitialized = false;
 
     for (auto it = m_filters.constBegin(); it != m_filters.constEnd(); ++it)
     {
-        const QStringRef filter(&amp;(*it));
+        const QStringView filter(*it);
         bool columnFound = false;
         if (!columnMatches("text:", filter, text, filtersValid, columnFound))
         {
@@ -242,9 +250,9 @@ void IOSDevice::filterAndAddToTextEdit(const QString&amp; line)
     const QRegularExpressionMatch match = re.match(line);
     if (match.hasMatch())
     {
-        const QStringRef prefix = match.capturedRef("prefix");
-        const QStringRef deviceName = match.capturedRef("deviceName");
-        const QStringRef text = line.midRef(match.capturedEnd("deviceName") + 1);
+        const QStringView prefix = match.captured("prefix");
+        const QStringView deviceName = match.captured("deviceName");
+        const QStringView text = QStringView(line).mid(match.capturedEnd("deviceName") + 1);
 
         checkFilters(filtersMatch, m_filtersValid, text);
 
@@ -258,11 +266,11 @@ void IOSDevice::filterAndAddToTextEdit(const QString&amp; line)
     }
     else
     {
-        checkFilters(filtersMatch, m_filtersValid, QStringRef(&amp;line));
+        checkFilters(filtersMatch, m_filtersValid, QStringView(line));
 
         if (filtersMatch)
         {
-            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringRef(&amp;line));
+            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringView(line));
             m_deviceWidget-&gt;flushText();
         }
     }
@@ -323,7 +331,7 @@ void IOSDevice::maybeReadErrorsPart()
         if (m_tempErrorsStream.readLineInto(&amp;line))
 #endif
         {
-            m_deviceWidget-&gt;addText(ColorTheme::VerbosityAssert, QStringRef(&amp;line));
+            m_deviceWidget-&gt;addText(ColorTheme::VerbosityAssert, QStringView(line));
             m_deviceWidget-&gt;flushText();
         }
     }
diff --git a/qdevicemonitor/devices/IOSDevice.h b/qdevicemonitor/devices/IOSDevice.h
index e9ba086..cca3a15 100644
--- a/qdevicemonitor/devices/IOSDevice.h
+++ b/qdevicemonitor/devices/IOSDevice.h
@@ -62,7 +62,7 @@ private:
     void stopInfoProcess();
     void startLogger();
     void stopLogger();
-    void checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringRef&amp; text);
+    void checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringView text);
 
     void maybeReadErrorsPart();
     void maybeReadLogPart();
diff --git a/qdevicemonitor/devices/TextFileDevice.cpp b/qdevicemonitor/devices/TextFileDevice.cpp
index 353d162..bd11b45 100644
--- a/qdevicemonitor/devices/TextFileDevice.cpp
+++ b/qdevicemonitor/devices/TextFileDevice.cpp
@@ -90,7 +90,7 @@ void TextFileDevice::onUpdateFilter(const QString&amp; filter)
     maybeAddCompletionAfterDelay(filter);
 }
 
-void TextFileDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringRef&amp; text)
+void TextFileDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringView text)
 {
     filtersValid = true;
 
@@ -98,7 +98,7 @@ void TextFileDevice::checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const
 
     for (auto it = m_filters.constBegin(); it != m_filters.constEnd(); ++it)
     {
-        const QStringRef filter(&amp;(*it));
+        const QStringView filter(*it);
         if (!columnTextMatches(filter, textString))
         {
             filtersMatch = false;
@@ -113,14 +113,16 @@ void TextFileDevice::filterAndAddToTextEdit(const QString&amp; line)
         "(?&lt;prefix&gt;[A-Za-z]{3} +[\\d]{1,2} [\\d:]{8}) (?&lt;hostname&gt;.+) ",
         QRegularExpression::InvertedGreedinessOption | QRegularExpression::DotMatchesEverythingOption
     );
+    static const QString prefixPattern("prefix");
+    static const QString hostnamePattern("hostname");
 
     bool filtersMatch = true;
     const QRegularExpressionMatch match = re.match(line);
     if (match.hasMatch())
     {
-        const QStringRef prefix = match.capturedRef("prefix");
-        const QStringRef hostname = match.capturedRef("hostname");
-        const QStringRef text = line.midRef(match.capturedEnd("hostname") + 1);
+        const QStringView prefix = match.capturedView(QStringView(prefixPattern));
+        const QStringView hostname = match.capturedView(QStringView(hostnamePattern));
+        const QStringView text = QStringView(line).mid(match.capturedEnd("hostname") + 1);
 
         checkFilters(filtersMatch, m_filtersValid, text);
 
@@ -134,10 +136,10 @@ void TextFileDevice::filterAndAddToTextEdit(const QString&amp; line)
     }
     else
     {
-        checkFilters(filtersMatch, m_filtersValid, QStringRef(&amp;line));
+        checkFilters(filtersMatch, m_filtersValid, QStringView(line));
         if (filtersMatch)
         {
-            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringRef(&amp;line));
+            m_deviceWidget-&gt;addText(ColorTheme::VerbosityVerbose, QStringView(line));
             m_deviceWidget-&gt;flushText();
         }
     }
diff --git a/qdevicemonitor/devices/TextFileDevice.h b/qdevicemonitor/devices/TextFileDevice.h
index b943ff2..23622d7 100644
--- a/qdevicemonitor/devices/TextFileDevice.h
+++ b/qdevicemonitor/devices/TextFileDevice.h
@@ -51,7 +51,7 @@ private:
     void startLogger();
     void stopLogger();
 
-    void checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringRef&amp; text);
+    void checkFilters(bool&amp; filtersMatch, bool&amp; filtersValid, const QStringView text);
 
 private slots:
     void onLogReady() override;
diff --git a/qdevicemonitor/devices/trackers/AndroidDevicesTracker.cpp b/qdevicemonitor/devices/trackers/AndroidDevicesTracker.cpp
index e83d598..713805b 100644
--- a/qdevicemonitor/devices/trackers/AndroidDevicesTracker.cpp
+++ b/qdevicemonitor/devices/trackers/AndroidDevicesTracker.cpp
@@ -21,7 +21,11 @@
 
 AndroidDevicesTracker::AndroidDevicesTracker()
 {
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
     m_codecStream.setCodec("UTF-8");
+#else
+    m_codecStream.setEncoding(QStringConverter::Utf8);
+#endif
     m_codecStream.setString(&amp;m_buffer, QIODevice::ReadWrite | QIODevice::Text);
 }
 
diff --git a/qdevicemonitor/devices/trackers/IOSDevicesTracker.cpp b/qdevicemonitor/devices/trackers/IOSDevicesTracker.cpp
index e66a21d..da64678 100644
--- a/qdevicemonitor/devices/trackers/IOSDevicesTracker.cpp
+++ b/qdevicemonitor/devices/trackers/IOSDevicesTracker.cpp
@@ -21,7 +21,11 @@
 
 IOSDevicesTracker::IOSDevicesTracker()
 {
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
     m_codecStream.setCodec("UTF-8");
+#else
+    m_codecStream.setEncoding(QStringConverter::Utf8);
+#endif
     m_codecStream.setString(&amp;m_buffer, QIODevice::ReadWrite | QIODevice::Text);
 }
 
diff --git a/qdevicemonitor/ui/DeviceWidget.cpp b/qdevicemonitor/ui/DeviceWidget.cpp
index a665ab2..e317434 100644
--- a/qdevicemonitor/ui/DeviceWidget.cpp
+++ b/qdevicemonitor/ui/DeviceWidget.cpp
@@ -39,7 +39,11 @@ DeviceWidget::DeviceWidget(QPointer&lt;QWidget&gt; parent, QPointer&lt;DeviceFacade&gt; devi
     m_redPalette = QPalette(Qt::red);
     m_redPalette.setColor(QPalette::Highlight, Qt::red);
 
+#if QT_VERSION &lt; QT_VERSION_CHECK(6, 0, 0)
     m_textStream.setCodec("UTF-8");
+#else
+    m_textStream.setEncoding(QStringConverter::Utf8);
+#endif
     m_textStream.setString(&amp;m_stringStream, QIODevice::ReadWrite | QIODevice::Text);
 
     //ui-&gt;textEdit-&gt;setFontFamily(m_deviceFacade-&gt;getFont());
@@ -97,12 +101,12 @@ void DeviceWidget::maybeScrollTextEditToEnd()
     }
 }
 
-void DeviceWidget::addText(const ColorTheme::ColorType color, const QStringRef&amp; text)
+void DeviceWidget::addText(const ColorTheme::ColorType color, const QStringView text)
 {
     addText(m_deviceFacade-&gt;getThemeColor(color), text);
 }
 
-void DeviceWidget::addText(const QColor&amp; color, const QStringRef&amp; text)
+void DeviceWidget::addText(const QColor&amp; color, const QStringView text)
 {
     m_textStream
         &lt;&lt; "&lt;font style=\"font-family: " &lt;&lt; m_deviceFacade-&gt;getFont()
@@ -187,7 +191,7 @@ void DeviceWidget::focusFilterInput()
 
 void DeviceWidget::on_markLogButton_clicked()
 {
-    addText(ColorTheme::VerbosityVerbose, QStringRef(&amp;MARK_LINE));
+    addText(ColorTheme::VerbosityVerbose, QStringView(MARK_LINE));
     m_deviceFacade-&gt;writeToLogFile(m_id, MARK_LINE);
     flushText();
 }
diff --git a/qdevicemonitor/ui/DeviceWidget.h b/qdevicemonitor/ui/DeviceWidget.h
index 9dcd608..9dcd7b4 100644
--- a/qdevicemonitor/ui/DeviceWidget.h
+++ b/qdevicemonitor/ui/DeviceWidget.h
@@ -55,8 +55,8 @@ public:
     inline int getVerbosityLevel() const { return m_ui-&gt;verbositySlider-&gt;value(); }
     void highlightFilterLineEdit(bool red);
     void maybeScrollTextEditToEnd();
-    void addText(const ColorTheme::ColorType color, const QStringRef&amp; text);
-    void addText(const QColor&amp; color, const QStringRef&amp; text);
+    void addText(const ColorTheme::ColorType color, const QStringView text);
+    void addText(const QColor&amp; color, const QStringView text);
     void flushText();
     void clearTextEdit();
     void onLogFileNameChanged(const QString&amp; logFileName);
diff --git a/qdevicemonitor/ui/MainWindow.cpp b/qdevicemonitor/ui/MainWindow.cpp
index 69d4433..56ffb40 100644
--- a/qdevicemonitor/ui/MainWindow.cpp
+++ b/qdevicemonitor/ui/MainWindow.cpp
@@ -23,7 +23,6 @@
 #include &lt;cstdlib&gt;
 #include &lt;QApplication&gt;
 #include &lt;QDebug&gt;
-#include &lt;QDesktopWidget&gt;
 #include &lt;QDir&gt;
 #include &lt;QFileDialog&gt;
 #include &lt;QFileInfo&gt;
@@ -162,7 +161,7 @@ void MainWindow::keyReleaseEvent(QKeyEvent* event)
 
 void MainWindow::mouseReleaseEvent(QMouseEvent* event)
 {
-    if (event-&gt;button() == Qt::MidButton)
+    if (event-&gt;button() == Qt::MiddleButton)
     {
         const QTabBar&amp; tabBar = *(m_ui-&gt;tabWidget-&gt;tabBar());
         const QPoint mousePos = tabBar.mapFrom(this, event-&gt;pos());
-- 
2.45.2

</pre></body></html>