Hello community,

here is the log from the commit of package krunner for openSUSE:Factory checked 
in at 2019-09-23 12:25:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/krunner (Old)
 and      /work/SRC/openSUSE:Factory/.krunner.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "krunner"

Mon Sep 23 12:25:54 2019 rev:68 rq:730954 version:5.62.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/krunner/krunner.changes  2019-08-19 
21:12:21.960823961 +0200
+++ /work/SRC/openSUSE:Factory/.krunner.new.7948/krunner.changes        
2019-09-23 12:25:57.221722907 +0200
@@ -1,0 +2,15 @@
+Sat Sep  7 20:37:06 UTC 2019 - Christophe Giboudeaux <[email protected]>
+
+- Update to 5.62.0
+  * New feature release
+  * For more details please see:
+  * https://www.kde.org/announcements/kde-frameworks-5.62.0.php
+- Changes since 5.61.0:
+  * Make sure we're checking whether tearing down is due after finishing a job
+  * Port runnertest to QGuiApplication
+  * Fix runnertest exiting early
+  * Add a done signal to FindMatchesJob instead of using QObjectDecorator 
wrongly
+  * Remove unused includes
+- Replace foo-devel with cmake(KF5Foo) in build requirements
+
+-------------------------------------------------------------------

Old:
----
  krunner-5.61.0.tar.xz
  krunner-5.61.0.tar.xz.sig

New:
----
  krunner-5.62.0.tar.xz
  krunner-5.62.0.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ krunner.spec ++++++
--- /var/tmp/diff_new_pack.QO57Ja/_old  2019-09-23 12:25:57.853722804 +0200
+++ /var/tmp/diff_new_pack.QO57Ja/_new  2019-09-23 12:25:57.857722803 +0200
@@ -17,7 +17,7 @@
 
 
 %define lname   libKF5Runner5
-%define _tar_path 5.61
+%define _tar_path 5.62
 # Full KF5 version (e.g. 5.33.0)
 %{!?_kf5_version: %global _kf5_version %{version}}
 # Last major and minor KF5 version (e.g. 5.33)
@@ -25,7 +25,7 @@
 # Only needed for the package signature condition
 %bcond_without lang
 Name:           krunner
-Version:        5.61.0
+Version:        5.62.0
 Release:        0
 Summary:        Plugins responsible for better integration of Qt applications 
in KDE Workspace
 License:        LGPL-2.1-or-later
@@ -40,16 +40,16 @@
 BuildRequires:  cmake >= 3.0
 BuildRequires:  extra-cmake-modules >= %{_kf5_bugfix_version}
 BuildRequires:  fdupes
-BuildRequires:  kconfig-devel >= %{_kf5_bugfix_version}
-BuildRequires:  kcoreaddons-devel >= %{_kf5_bugfix_version}
 BuildRequires:  kf5-filesystem
-BuildRequires:  ki18n-devel >= %{_kf5_bugfix_version}
-BuildRequires:  kio-devel >= %{_kf5_bugfix_version}
-BuildRequires:  kservice-devel >= %{_kf5_bugfix_version}
-BuildRequires:  kwindowsystem-devel >= %{_kf5_bugfix_version}
-BuildRequires:  plasma-framework-devel >= %{_kf5_bugfix_version}
-BuildRequires:  solid-devel >= %{_kf5_bugfix_version}
-BuildRequires:  threadweaver-devel >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5Config) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5CoreAddons) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5I18n) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5KIO) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5Plasma) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5Service) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5Solid) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5ThreadWeaver) >= %{_kf5_bugfix_version}
+BuildRequires:  cmake(KF5WindowSystem) >= %{_kf5_bugfix_version}
 BuildRequires:  cmake(Qt5Gui) >= 5.6.0
 BuildRequires:  cmake(Qt5Quick) >= 5.6.0
 BuildRequires:  cmake(Qt5Test) >= 5.6.0
@@ -77,7 +77,7 @@
 Group:          Development/Libraries/KDE
 Requires:       %{lname} = %{version}
 Requires:       extra-cmake-modules
-Requires:       plasma-framework-devel >= %{_kf5_bugfix_version}
+Requires:       cmake(KF5Plasma) >= %{_kf5_bugfix_version}
 Requires:       cmake(Qt5Core) >= 5.6.0
 Conflicts:      kapptemplate <= 16.03.80
 


++++++ krunner-5.61.0.tar.xz -> krunner-5.62.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/CMakeLists.txt 
new/krunner-5.62.0/CMakeLists.txt
--- old/krunner-5.61.0/CMakeLists.txt   2019-08-03 21:35:16.000000000 +0200
+++ new/krunner-5.62.0/CMakeLists.txt   2019-09-07 14:37:26.000000000 +0200
@@ -1,12 +1,12 @@
 cmake_minimum_required(VERSION 3.5)
 
-set(KF5_VERSION "5.61.0") # handled by release scripts
-set(KF5_DEP_VERSION "5.61.0") # handled by release scripts
+set(KF5_VERSION "5.62.0") # handled by release scripts
+set(KF5_DEP_VERSION "5.62.0") # handled by release scripts
 project(KRunner VERSION ${KF5_VERSION})
 
 # ECM setup
 include(FeatureSummary)
-find_package(ECM 5.61.0  NO_MODULE)
+find_package(ECM 5.62.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL 
"https://projects.kde.org/projects/kdesupport/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/autotests/dbusrunnertest.cpp 
new/krunner-5.62.0/autotests/dbusrunnertest.cpp
--- old/krunner-5.61.0/autotests/dbusrunnertest.cpp     2019-08-03 
21:35:16.000000000 +0200
+++ new/krunner-5.62.0/autotests/dbusrunnertest.cpp     2019-09-07 
14:37:26.000000000 +0200
@@ -22,7 +22,6 @@
 
 #include "runnermanager.h"
 #include <QSignalSpy>
-#include <QDebug>
 #include <QProcess>
 
 #include <KSycoca>
@@ -164,8 +163,8 @@
     QString first = m.matches().at(0).data().toString();
     QString second = m.matches().at(1).data().toString();
     QVERIFY(first != second);
-    QVERIFY(first == QStringLiteral("net.krunnertests.multi.a1") || first == 
QStringLiteral("net.krunnertests.multi.a2"));
-    QVERIFY(second == QStringLiteral("net.krunnertests.multi.a1") || second == 
QStringLiteral("net.krunnertests.multi.a2"));
+    QVERIFY(first == QLatin1String("net.krunnertests.multi.a1") || first == 
QStringLiteral("net.krunnertests.multi.a2"));
+    QVERIFY(second == QLatin1String("net.krunnertests.multi.a1") || second == 
QStringLiteral("net.krunnertests.multi.a2"));
 
     process1.kill();
     process2.kill();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/abstractrunner.cpp 
new/krunner-5.62.0/src/abstractrunner.cpp
--- old/krunner-5.61.0/src/abstractrunner.cpp   2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/abstractrunner.cpp   2019-09-07 14:37:26.000000000 
+0200
@@ -22,11 +22,8 @@
 
 #include <QAction>
 #include <QHash>
-#include <QMenu>
 #include <QMimeData>
 #include <QMutex>
-#include <QMutexLocker>
-#include <QTimer>
 
 #include "krunner_debug.h"
 #include <kplugininfo.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/abstractrunner.h 
new/krunner-5.62.0/src/abstractrunner.h
--- old/krunner-5.61.0/src/abstractrunner.h     2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/abstractrunner.h     2019-09-07 14:37:26.000000000 
+0200
@@ -21,7 +21,6 @@
 #define PLASMA_ABSTRACTRUNNER_H
 
 #include <QObject>
-#include <QMutex>
 #include <QStringList>
 #include <QIcon>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/krunner-5.61.0/src/data/servicetypes/plasma-runner.desktop 
new/krunner-5.62.0/src/data/servicetypes/plasma-runner.desktop
--- old/krunner-5.61.0/src/data/servicetypes/plasma-runner.desktop      
2019-08-03 21:35:16.000000000 +0200
+++ new/krunner-5.62.0/src/data/servicetypes/plasma-runner.desktop      
2019-09-07 14:37:26.000000000 +0200
@@ -43,6 +43,7 @@
 Comment[sr@ijekavianlatin]=Priključak K‑izvođača
 Comment[sr@latin]=Priključak K‑izvođača
 Comment[sv]=Insticksprogram för Kör program
+Comment[tg]=Васлкунаки KRunner
 Comment[tr]=KRunner eklentisi
 Comment[ug]=KRunner قىستۇرما
 Comment[uk]=Додаток KRunner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/dbusrunner.cpp 
new/krunner-5.62.0/src/dbusrunner.cpp
--- old/krunner-5.61.0/src/dbusrunner.cpp       2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/dbusrunner.cpp       2019-09-07 14:37:26.000000000 
+0200
@@ -18,19 +18,15 @@
 
 #include "dbusrunner_p.h"
 
-#include <QDBusArgument>
 #include <QDBusConnection>
 #include <QDBusConnectionInterface>
 #include <QDBusMessage>
-#include <QDBusError>
 #include <QDBusPendingReply>
 #include <QDBusMetaType>
 #include <QAction>
 #include <QIcon>
-#include <QVariantMap>
 #include <QMutexLocker>
 
-#include <KPluginMetaData>
 
 #include "krunner_debug.h"
 #include "dbusutils_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/declarative/runnermodel.cpp 
new/krunner-5.62.0/src/declarative/runnermodel.cpp
--- old/krunner-5.61.0/src/declarative/runnermodel.cpp  2019-08-03 
21:35:16.000000000 +0200
+++ new/krunner-5.62.0/src/declarative/runnermodel.cpp  2019-09-07 
14:37:26.000000000 +0200
@@ -19,7 +19,6 @@
 
 #include "runnermodel.h"
 
-#include <QIcon>
 #include <QAction>
 #include <QTimer>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/querymatch.cpp 
new/krunner-5.62.0/src/querymatch.cpp
--- old/krunner-5.61.0/src/querymatch.cpp       2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/querymatch.cpp       2019-09-07 14:37:26.000000000 
+0200
@@ -23,9 +23,7 @@
 #include <QIcon>
 #include <QReadWriteLock>
 #include <QSharedData>
-#include <QStringList>
 #include <QVariant>
-#include <QWeakPointer>
 
 #include "krunner_debug.h"
 
@@ -329,7 +327,7 @@
 
 void QueryMatch::run(const RunnerContext &context) const
 {
-    //qCDebug(KRUNNER) << "we run the term" << context->query() << "whose type 
is" << context->mimetype();
+    //qCDebug(KRUNNER) << "we run the term" << context.query() << "whose type 
is" << d->mimeType;
     if (d->runner) {
         d->runner.data()->run(context, *this);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/runnercontext.cpp 
new/krunner-5.62.0/src/runnercontext.cpp
--- old/krunner-5.61.0/src/runnercontext.cpp    2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/runnercontext.cpp    2019-09-07 14:37:26.000000000 
+0200
@@ -200,8 +200,8 @@
                 QUrl url = QUrl::fromUserInput(term);
                 // QUrl::fromUserInput assigns http to everything if it cannot 
match it to
                 // anything else. We do not want that.
-                if (url.scheme() == QStringLiteral("http")) {
-                    if (!term.startsWith(QStringLiteral("http"))) {
+                if (url.scheme() == QLatin1String("http")) {
+                    if (!term.startsWith(QLatin1String("http"))) {
                         url.setScheme(QString());
                     }
                 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/runnerjobs.cpp 
new/krunner-5.62.0/src/runnerjobs.cpp
--- old/krunner-5.61.0/src/runnerjobs.cpp       2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/runnerjobs.cpp       2019-09-07 14:37:26.000000000 
+0200
@@ -125,8 +125,7 @@
     : ThreadWeaver::Job(),
       m_context(*context, nullptr),
       m_runner(runner),
-      m_timer(nullptr),
-      m_decorator(new ThreadWeaver::QObjectDecorator(this, true))
+      m_timer(nullptr)
 {
     QMutexLocker l(mutex()); Q_UNUSED(l);
     if (runner->speed() == Plasma::AbstractRunner::SlowSpeed) {
@@ -150,13 +149,14 @@
     m_timer = timer;
 }
 
-void FindMatchesJob::run(ThreadWeaver::JobPointer, ThreadWeaver::Thread*)
+void FindMatchesJob::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread*)
 {
 //     qCDebug(KRUNNER) << "Running match for " << m_runner->objectName()
 //              << " in Thread " << thread()->id() << endl;
     if (m_context.isValid()) {
         m_runner->performMatch(m_context);
     }
+    emit done(self);
 }
 
 int FindMatchesJob::priority() const
@@ -178,7 +178,7 @@
     connect(m_weaver, SIGNAL(finished()), this, SLOT(checkIfFinished()));
 
     for (auto it = m_jobs.constBegin(); it != m_jobs.constEnd(); ++it) {
-        connect((*it)->decorator(), &ThreadWeaver::QObjectDecorator::done, 
this, &DelayedJobCleaner::jobDone);
+        connect(it->data(), &FindMatchesJob::done, this, 
&DelayedJobCleaner::jobDone);
     }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/runnerjobs_p.h 
new/krunner-5.62.0/src/runnerjobs_p.h
--- old/krunner-5.61.0/src/runnerjobs_p.h       2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/runnerjobs_p.h       2019-09-07 14:37:26.000000000 
+0200
@@ -27,7 +27,6 @@
 #include <ThreadWeaver/Job>
 #include <ThreadWeaver/QueuePolicy>
 #include <ThreadWeaver/Queue>
-#include <ThreadWeaver/QObjectDecorator>
 
 #include "abstractrunner.h"
 
@@ -90,8 +89,9 @@
  * FindMatchesJob class
  * Class to run queries in different threads
  */
-class FindMatchesJob : public Job
+class FindMatchesJob : public QObject, public Job
 {
+Q_OBJECT
 public:
     FindMatchesJob(Plasma::AbstractRunner *runner,
                    Plasma::RunnerContext *context, QObject *parent = nullptr);
@@ -102,7 +102,9 @@
 
     QTimer* delayTimer() const;
     void setDelayTimer(QTimer *timer);
-    ThreadWeaver::QObjectDecorator* decorator() const { return m_decorator; }
+
+Q_SIGNALS:
+    void done(ThreadWeaver::JobPointer self);
 
 protected:
     void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread* thread) 
override;
@@ -111,7 +113,6 @@
     Plasma::RunnerContext m_context;
     Plasma::AbstractRunner *m_runner;
     QTimer *m_timer;
-    ThreadWeaver::QObjectDecorator* m_decorator;
 };
 
 class DelayedJobCleaner : public QObject
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/src/runnermanager.cpp 
new/krunner-5.62.0/src/runnermanager.cpp
--- old/krunner-5.61.0/src/runnermanager.cpp    2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/src/runnermanager.cpp    2019-09-07 14:37:26.000000000 
+0200
@@ -22,7 +22,6 @@
 #include "runnermanager.h"
 
 #include <QElapsedTimer>
-#include <QMutex>
 #include <QTimer>
 #include <QCoreApplication>
 #include <qstandardpaths.h>
@@ -251,7 +250,7 @@
                 while (it != searchJobs.end()) {
                     auto &job = (*it);
                     if (deadRunners.contains(job->runner())) {
-                        QObject::disconnect(job->decorator(), 
SIGNAL(done(ThreadWeaver::JobPointer)), q, 
SLOT(jobDone(ThreadWeaver::JobPointer)));
+                        QObject::disconnect(job.data(), 
SIGNAL(done(ThreadWeaver::JobPointer)), q, 
SLOT(jobDone(ThreadWeaver::JobPointer)));
                         it = searchJobs.erase(it);
                         deadJobs.insert(job);
                     } else {
@@ -355,6 +354,7 @@
             emit q->matchesChanged(context.matches());
         }
 
+        teardownRequested = true;
         checkTearDown();
     }
 
@@ -423,7 +423,7 @@
     {
         if ((runner->ignoredTypes() & context.type()) == 0) {
             QSharedPointer<FindMatchesJob> job(new FindMatchesJob(runner, 
&context, Queue::instance()));
-            QObject::connect(job->decorator(), 
SIGNAL(done(ThreadWeaver::JobPointer)), q, 
SLOT(jobDone(ThreadWeaver::JobPointer)));
+            QObject::connect(job.data(), 
SIGNAL(done(ThreadWeaver::JobPointer)), q, 
SLOT(jobDone(ThreadWeaver::JobPointer)));
             if (runner->speed() == AbstractRunner::SlowSpeed) {
                 job->setDelayTimer(&delayTimer);
             }
@@ -706,7 +706,7 @@
     if (parentApp.isEmpty()) {
         constraint.append(QStringLiteral("not exist [X-KDE-ParentApp]"));
     } else {
-        constraint.append(QStringLiteral("[X-KDE-ParentApp] == 
'")).append(parentApp).append(QStringLiteral("'"));
+        constraint.append(QStringLiteral("[X-KDE-ParentApp] == 
'")).append(parentApp).append(QLatin1Char('\''));
     }
 
     KService::List offers = 
KServiceTypeTrader::self()->query(QStringLiteral("Plasma/Runner"), constraint);
@@ -844,6 +844,7 @@
     }
 
     d->context.reset();
+    emit queryFinished();
 }
 
 } // Plasma namespace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/templates/runner/runner.kdevtemplate 
new/krunner-5.62.0/templates/runner/runner.kdevtemplate
--- old/krunner-5.61.0/templates/runner/runner.kdevtemplate     2019-08-03 
21:35:16.000000000 +0200
+++ new/krunner-5.62.0/templates/runner/runner.kdevtemplate     2019-09-07 
14:37:26.000000000 +0200
@@ -34,6 +34,7 @@
 Name[sr@ijekavianlatin]=C++
 Name[sr@latin]=C++
 Name[sv]=C++
+Name[tg]=C++
 Name[tr]=C++
 Name[uk]=C++
 Name[x-test]=xxC++xx
@@ -72,6 +73,7 @@
 Comment[sr@ijekavianlatin]=Šablon plasma izvođača.
 Comment[sr@latin]=Šablon plasma izvođača.
 Comment[sv]=Plasma-mall för körning av program. Mall för Plasma körning av 
program
+Comment[tg]=Қолиби иҷрокунандаи Plasma. Қолиби иҷрокунандаи Plasma
 Comment[tr]=Plasma Çalıştırıcı Şablonu. Bir Plasma çalıştırıcı şablonu
 Comment[uk]=Шаблон засобу запуску Плазми
 Comment[x-test]=xxPlasma Runner Template. A plasma runner templatexx
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/tests/runnermodeltest.cpp 
new/krunner-5.62.0/tests/runnermodeltest.cpp
--- old/krunner-5.61.0/tests/runnermodeltest.cpp        2019-08-03 
21:35:16.000000000 +0200
+++ new/krunner-5.62.0/tests/runnermodeltest.cpp        2019-09-07 
14:37:26.000000000 +0200
@@ -1,6 +1,5 @@
 #include <QAction>
 #include <QApplication>
-#include <QDialog>
 #include <QLineEdit>
 #include <QTreeView>
 #include <QVBoxLayout>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/krunner-5.61.0/tests/runnertest.cpp 
new/krunner-5.62.0/tests/runnertest.cpp
--- old/krunner-5.61.0/tests/runnertest.cpp     2019-08-03 21:35:16.000000000 
+0200
+++ new/krunner-5.62.0/tests/runnertest.cpp     2019-09-07 14:37:26.000000000 
+0200
@@ -17,7 +17,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include <QCoreApplication>
+#include <QGuiApplication>
 #include <QCommandLineParser>
 #include <QCommandLineOption>
 #include <QDebug>
@@ -28,7 +28,8 @@
 
 int main(int argc, char **argv)
 {
-    QCoreApplication app(argc, argv);
+    QGuiApplication app(argc, argv);
+    app.setQuitLockEnabled(false);
 
     QCommandLineParser parser;
     parser.addPositionalArgument(QStringLiteral("query"), 
QStringLiteral("words to query"));
@@ -40,7 +41,7 @@
     parser.addHelpOption();
     parser.process(app);
 
-    QString query = parser.positionalArguments().join(QStringLiteral(" "));
+    QString query = parser.positionalArguments().join(QLatin1Char(' '));
     if (query.isEmpty()) {
         parser.showHelp(1);
     }


Reply via email to