OSDN Git Service
Ivailo Monev [Mon, 29 Nov 2021 09:44:23 +0000 (11:44 +0200)]
fix gradient cache race-condition and heap-use-after-free
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 23:10:20 +0000 (01:10 +0200)]
do not detach QBrush data in QBrush::setColor() if color is the same
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 23:06:38 +0000 (01:06 +0200)]
avoid QBrush construction in QPen::setColor()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 22:58:26 +0000 (00:58 +0200)]
use QSTACKARRAY() macro in fillRect_normalized() and QRasterPaintEngine::drawBitmap()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 22:58:04 +0000 (00:58 +0200)]
indent qcolormap_x11 source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 21:02:04 +0000 (23:02 +0200)]
make private QBrush data actually private [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 19:41:33 +0000 (21:41 +0200)]
initialize QImageData properly rather than incrementing it
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 28 Nov 2021 19:03:50 +0000 (21:03 +0200)]
use qAtomicDetach() for QPen detaching [ci reset]
plugs memory leaks
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 16:46:04 +0000 (18:46 +0200)]
add QPainterPathStroker test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 14:03:25 +0000 (16:03 +0200)]
prioritize optimized cases in QImage::transformed()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 13:10:08 +0000 (15:10 +0200)]
remove redundant QLibraryPrivate::qualifiedFileName member
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 13:05:34 +0000 (15:05 +0200)]
remove unused QLibraryPrivate::fullVersion member
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 10:34:06 +0000 (12:34 +0200)]
fix heap-buffer-overflow in swap_bit_order() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 26 Nov 2021 06:36:46 +0000 (08:36 +0200)]
update NetBSD package PLIST file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 14:24:58 +0000 (16:24 +0200)]
ftruncate() and truncate() are documented as interruptable
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 14:00:07 +0000 (16:00 +0200)]
fix retry code path in QFileSystemEngine::copyFile() for Linux and add disabled LFS test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 10:47:06 +0000 (12:47 +0200)]
fix possible pointer dereference in QGraphicsItemPrivate::setEnabledHelper(), QGraphicsItem::mouseMoveEvent() and AnchorData::refreshSizeHints()
upstream commmit:
https://github.com/qt/qtbase/commit/
98db99657649d4668c766eaa36b8d29c58d19754
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 10:24:08 +0000 (12:24 +0200)]
fix possible pointer dereference in QUnixPrintWidgetPrivate::updateWidget()
upstream commit:
https://github.com/qt/qtbase/commit/
57f752b30a0f452e9cc079b5a4ede6134719a769
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 10:04:04 +0000 (12:04 +0200)]
remove redundant reference assignments in QCursorData::setBitmap()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 09:30:57 +0000 (11:30 +0200)]
use qAtomicAssign() in objects assignment operators where possible
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 09:17:52 +0000 (11:17 +0200)]
do not check if private cursor data is initialized twice from QCursor constructor
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 08:36:41 +0000 (10:36 +0200)]
do not deep-copy QImage objects in QRasterPixmapData::copy() and QX11PixmapData::copy()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 07:25:33 +0000 (09:25 +0200)]
fix theme lookup for scalable entries
upstream commit:
https://github.com/qt/qtbase/commit/
5eda3cff5e18308f8d78d438e5aeb4e685c5f974
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 06:37:40 +0000 (08:37 +0200)]
mark QIconEngine::clone() reimplmentation as required
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 25 Nov 2021 06:37:12 +0000 (08:37 +0200)]
move QIconPrivate deconstructor from header to source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 18:08:58 +0000 (20:08 +0200)]
replace QFile::exists() with QStatInfo::isFile() where possible
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 18:04:08 +0000 (20:04 +0200)]
correct directory existence check in QFileDialogPrivate::_q_createDirectory() and use QStatInfo for it
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 17:24:26 +0000 (19:24 +0200)]
use qAtomicAssign() in QIcon::operator=()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 14:12:54 +0000 (16:12 +0200)]
accept4(), paccept() and accept() are documented as interruptable
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 13:32:06 +0000 (15:32 +0200)]
non-shared QKeySequence with limit of two key sequences
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 10:22:24 +0000 (12:22 +0200)]
map Qt::Key_Backtab to XK_ISO_Left_Tab [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 07:08:42 +0000 (09:08 +0200)]
use QSTACKARRAY() macro in QTextDocumentPrivate::plainText()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 24 Nov 2021 07:08:27 +0000 (09:08 +0200)]
reference count fix for QKeySequence::setKey()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 20:35:55 +0000 (22:35 +0200)]
always stream all QKeySequence keys
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 20:02:42 +0000 (22:02 +0200)]
compiler warning fix
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 19:48:34 +0000 (21:48 +0200)]
plug QRegion memory leak
upstream commit:
https://github.com/qt/qtbase/commit/
d9e1a0f05b30fd646a6b473bea605f6054bf0e67
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 18:11:24 +0000 (20:11 +0200)]
fix bad free in QKeySequence [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 17:40:14 +0000 (19:40 +0200)]
fix bad free in QRegion::cleanUp()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 17:31:41 +0000 (19:31 +0200)]
fix possible pointer dereference in QTgaFile::readImage()
upstream commit:
https://github.com/qt/qtimageformats/commit/
3dfd4dd8068284465302ecc46cc024e62a931d1a
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 17:17:10 +0000 (19:17 +0200)]
initialize variables in QSplitter::moveSplitter() and QSplitter::closestLegalPosition()
upstream commit:
https://github.com/qt/qtbase/commit/
4f24e1e9b1230b97a45c6aab366fecd29795e885
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 16:59:23 +0000 (18:59 +0200)]
fix possible pointer dereference in QPixmapIconEngine::pixmap()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 16:15:36 +0000 (18:15 +0200)]
de-duplicate code in tests and benchmarks
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 15:57:58 +0000 (17:57 +0200)]
drop bogus fast declarative properties support
Ivailo Monev [Tue, 23 Nov 2021 15:46:36 +0000 (17:46 +0200)]
add QDeclarativeProperty test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 13:53:03 +0000 (15:53 +0200)]
lock before accessing global metatype data in QDeclarativeMetaType::isModule()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 13:28:16 +0000 (15:28 +0200)]
remove code for always false condition in QDeclarativeTimeLinePrivate
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 13:03:12 +0000 (15:03 +0200)]
remove code for always false condition in QDeclarativeItemPrivate, QDeclarativeFlickablePrivate and QDeclarativePathViewPrivate
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 10:57:35 +0000 (12:57 +0200)]
version bump [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 07:00:00 +0000 (09:00 +0200)]
do not list directory by default upon QStatInfo construction
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 06:22:16 +0000 (08:22 +0200)]
indent QColor::alphaF() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 23 Nov 2021 06:15:08 +0000 (08:15 +0200)]
deal with TODO related to timezone format char
for reference:
https://github.com/fluxer/katie/commit/
09592d6e12a2a5e555829e5fa969e3232ae7a248
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 17:18:21 +0000 (19:18 +0200)]
format and indent QFileSystemModel::headerData()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 16:58:04 +0000 (18:58 +0200)]
do not deep-copy QFontSubset::glyphName() object arguments
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 16:51:53 +0000 (18:51 +0200)]
do not deep-copy translate_dashPattern() function arguments
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 16:50:39 +0000 (18:50 +0200)]
add unifdef to build dependencies for NetBSD
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 14:43:38 +0000 (16:43 +0200)]
warn when invalid character is detected in QByteArray::fromHex()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 14:13:46 +0000 (16:13 +0200)]
QByteArray::toHex() optimization
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 12:12:59 +0000 (14:12 +0200)]
use QFile::atEnd() as condition for the while loop in getUserDirName() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 12:11:59 +0000 (14:11 +0200)]
avoid object assignment in getUserDirName() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 12:08:37 +0000 (14:08 +0200)]
mark warning case in QStandardPaths::standardLocations() as unlikely
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 12:07:06 +0000 (14:07 +0200)]
prefix strerror_r() function call in qt_error_string()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 11:42:43 +0000 (13:42 +0200)]
plug memory leak in tst_QAbstractScrollArea::task214488_layoutDirection()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 11:40:30 +0000 (13:40 +0200)]
correct definition in tst_QAbstractSpinBox::getSetCheck()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 11:23:20 +0000 (13:23 +0200)]
remove declarations of non-existing QPSPrintEngineFont and QPSPrintEngineFontMulti classes [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 11:10:02 +0000 (13:10 +0200)]
do not use alpha paint engine for postscript panting
fixes postscript print feature, regression since
deff95c0f90e4d341e0d519c5d5576b2f1edeb32
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 10:15:01 +0000 (12:15 +0200)]
bump version in doxygen config [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 09:03:02 +0000 (11:03 +0200)]
use uninitialized output buffer in QPdf::ascii85Encode()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 08:21:34 +0000 (10:21 +0200)]
update translations [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 08:20:00 +0000 (10:20 +0200)]
fix regression since
be9e8cd95327c2bd70ce51e08b5e2d01e161a58c [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 07:38:16 +0000 (09:38 +0200)]
mark QNetworkReplyDataImpl and QNetworkReplyFileImpl reimplementations as final
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 06:44:33 +0000 (08:44 +0200)]
add missing script entry to special languages table
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 05:10:40 +0000 (07:10 +0200)]
const-ify QStringSplitter::m_splitChar member
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 22 Nov 2021 04:02:43 +0000 (06:02 +0200)]
remove trailing and leading quotes from user-dirs.dirs config values
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 19:08:57 +0000 (21:08 +0200)]
drop support for scoped (system or user) QSettings objects
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 18:36:40 +0000 (20:36 +0200)]
replace QFileInfo with QStatInfo in gui component where possible
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 18:28:47 +0000 (20:28 +0200)]
drop support for QRC in QTextImageHandler and QTextBrowser
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 16:24:00 +0000 (18:24 +0200)]
oops
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:58:48 +0000 (17:58 +0200)]
rename QStandardPaths::DownloadLocation to QStandardPaths::DownloadsLocation
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:48:14 +0000 (17:48 +0200)]
get rid of QDesktopServices [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:36:52 +0000 (17:36 +0200)]
implement QStandardPaths::openUrl() as substitue for QDesktopServices::openUrl()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:25:23 +0000 (17:25 +0200)]
const-ify QStatInfo objects in QStandardPaths::writableLocation() and QStandardPaths::findExecutable()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:11:03 +0000 (17:11 +0200)]
change permissions of the final directory in QStandardPaths::writableLocation()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 15:00:29 +0000 (17:00 +0200)]
update translations [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 14:57:02 +0000 (16:57 +0200)]
handle XDG_CONFIG_DIRS as list of paths in QStandardPaths::standardLocations()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 14:34:28 +0000 (16:34 +0200)]
theoretical reimplementation of QStandardPaths
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 11:02:13 +0000 (13:02 +0200)]
drop support for some and implement other QStandardPaths/QDesktopServices locations
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 10:29:24 +0000 (12:29 +0200)]
explicitly compare qstrcmp()/qstrncmp() return values to integer
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 09:50:14 +0000 (11:50 +0200)]
remove unused QAccessibleObjectPrivate::actionList() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 09:30:10 +0000 (11:30 +0200)]
remove obsolete jambi hack in domPropertyToVariant() function and QFormBuilder::applyProperties()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 07:26:00 +0000 (09:26 +0200)]
remove unused QBenchmarkGlobalData::callgrindOutFileBase member
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 07:24:59 +0000 (09:24 +0200)]
de-duplicate enums by using QTest::QBenchmarkMetric in QBenchmarkGlobalData
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 07:14:17 +0000 (09:14 +0200)]
remove valgrind support leftovers
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 04:44:37 +0000 (06:44 +0200)]
const-ify qdesigner_internal::PositionSortPredicate::operator()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 04:44:08 +0000 (06:44 +0200)]
const-ify QTessellatorPrivate::EdgeSorter::operator()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 04:28:00 +0000 (06:28 +0200)]
use correct type for sort flags argument of QDirSortItemComparator
upstream commit:
https://github.com/qt/qtbase/commit/
0533695dddf9683660ad79383eb2c90532f68acb
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 04:22:38 +0000 (06:22 +0200)]
const-ify QDirSortItemComparator::operator()
upstream commit:
https://github.com/qt/qtbase/commit/
42223a777e28f2e6884cfd5540618ba9b571954e
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 03:22:47 +0000 (05:22 +0200)]
add QFileIconProvider test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 03:16:56 +0000 (05:16 +0200)]
add QDialogButtonBox test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 03:13:04 +0000 (05:13 +0200)]
add QDialog test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 21 Nov 2021 02:05:38 +0000 (04:05 +0200)]
remove unused QDeclarativeCompiledBindingsPrivate::findgeneric() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>