Commit Graph

26750 Commits

Author SHA1 Message Date
Nico Vertriest
d9bbf610a4 Doc: Added brief statement for examples overview page
Task-number: QTBUG-50261
Change-Id: Ia0daf0c5c7fc0b2e54904f0b7fe6ebe1220e5c4d
Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
2016-01-26 09:32:49 +00:00
Anton Kudryavtsev
520afea6b7 QTzTimeZonePrivate: optimize container usage in init().
Iteration over node-based containers is so slow that the number of passes
should be minimized.

Replace QList with QVector. Saves ~0.2 KBytes in text size with gcc 4.9.

Change-Id: I93298b29b06e4a38a6f716d85f127e0af4385461
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-26 09:24:29 +00:00
BogDan Vatra
63c88ae809 Android: Probe for virtual keyboard height
Knowing the real virtual keyboard height will be easier for us to
decide if we pan or resize the current view.
The virtual keyboard is re-shown if current virtual keyboard height
is different from previous one.

Task-number: QTBUG-43739
Change-Id: I1bb41a70cced4c1d0e5f05a6c554831459b7a917
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2016-01-26 09:01:28 +00:00
Lars Knoll
5550e310f9 Remove support for old/deprecated gl function names
These are nowadays standardized.

Change-Id: I3931859bba0b4c34a9336c7f537e3093e07d9b2d
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-26 07:50:49 +00:00
Anton Kudryavtsev
6ca81d1fd1 QTranslator: don't re-create QString each time through a loop
Just cache it.

Also port to QStringLiteral, because the string is never modified.

Since the string literal is used in more than one function, to
avoid duplication of .rodata, wrap the QStringLiteral in an
inline function.

Change-Id: Ib5aede9f129610c80d122939afc343c938cc8e48
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-26 07:34:06 +00:00
Anton Kudryavtsev
037e58fff6 QVariant: replace QLatin1String with QStringLiteral
... in convert() to optimize string creation.

Change-Id: Id012f2f52606c026ed216655ff3ce63bd5154da6
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-25 08:36:39 +00:00
Anton Kudryavtsev
7ee1fc4c29 QMimeData: use reserve in formats()
... to optimize memory allocation.

Change-Id: I039a6de6f97858f339b83ca7e3e361963eaa61ee
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-25 08:36:36 +00:00
Anton Kudryavtsev
451273523d QMimeData: replace QLatin1String with QStringLiteral
... wherever it allocates memory.

Change-Id: Ice17e39a138ff05b49eb23eecc693d368d0b349e
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-25 08:36:34 +00:00
Thiago Macieira
a1ba281a26 Call out to QtDBus message spies in the main thread
Whenever there are spies installed, we call out to the main thread to
call to the kded/kiod message spies. This allows the spy code to do just
about anything, where previously it was restricted in what it could do
to avoid deadlocking or triggering assertions if it recursed back into
QDBusConnection code in the manager thread. After the spies are done,
the message is re-inserted into the QDBusConnection processing pipeline.

This commit moves the spy handling to after the check for disabled
dispatching, as doing otherwise would mean the message could get
postponed again for no good reason. It's also possible that the main
thread isn't done installing the hooks, so waiting until the dispatching
is enabled is a good idea.

For simplicity, this commit also restricts spying to method calls
only. Signals are no longer spyable.

Change-Id: I3d11545be52c43119f0fffff142b0e9d447415c2
Reviewed-by: David Faure <david.faure@kdab.com>
2016-01-25 07:32:04 +00:00
Dyami Caliri
5cac511908 Repaint QOpenGLWidget when screen changes
Commit 5c7f000cd4 greatly reduces the
number of repaints for QOpenGLWidget. Unfortunately, this included when
the widget changes screens.

Change-Id: Iaabcb94925e4519cb5d8561b47aaddcfdc7b01ac
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-24 18:26:27 +00:00
Dyami Caliri
c820692fc0 Fix tlw source rect transformation for backingstore blit.
The srcRect is already in device window coordinates. Converting it
again via deviceRect(QRect, QWindow) causes it to be overly large.

Task-number: QTBUG-50613
Change-Id: Iaae390499c0d1add842bde6eec22fb07c8de663b
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-24 18:26:20 +00:00
Borgar Ovsthus
fbd6acedac Add TeamCity logging feature to testlib
This allows TeamCity to parse realtime test-results instead of using
post-build XML Report Processing. This does not support logging of
benchmarks.

[ChangeLog][QTest] Added a new logging mode that allow test-results to
be parsed on-the-fly when using Jetbrains TeamCity as CI-server. This
mode is enabled by using the -teamcity option on the command-line.

Change-Id: Ie730beb643043eb0f448f99abe6c0b5ac48aaf03
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-23 18:30:58 +00:00
Marc Mutz
2fed43d843 Q*Application: don't allocate memory just to compare C strings
Instead of creating a QByteArray, possibly normalizing a leading
'--' (one allocation, plus possibly one copy), simply use the
old 'ol str(n)cmp, skipping the first character if the argument
starts with '--'.

It also fixes parsing of -stylesheet and other options which
were erroneously parsed using indexOf() != -1, when they
should have used startsWith().

Also saves 504/742/522b in text size for QtCore/QtGui/QtWidgets,
resp., on optimized GCC 5.3 Linux AMD64 builds.

Change-Id: Ida868badac3fb9b77285417ee537c861ccc4fc06
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-23 11:44:06 +00:00
BogDan Vatra
81d6906ad9 Android: Fix compile on arm64
Workaround Bionic bug.
Check https://code.google.com/p/android/issues/detail?id=194631 for more info.

Change-Id: Ib1abae37c94d4e76bb3bd633985c84128659bf4c
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-23 09:09:22 +00:00
Thiago Macieira
9eda09f511 Uppercase the verbosity setting enums.
Change-Id: I7a9e11d7b64a4cc78e24ffff142b9996fd77cb10
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2016-01-22 23:28:14 +00:00
Simon Hausmann
e782501532 Speed up QObject::connect with function pointers
When resolving the signal/slot of connect(&Foo::bar, ...) we place a meta-call
to map the address to the method index. Once we have found the index, we don't
need to continue but can return the result right away.

Change-Id: I67bb22df394d7c22dc1731367c0961b958ed77b3
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2016-01-22 21:50:01 +00:00
Rafael Roquetto
684e5587d5 QNX: Fix -developer-build
-developer-build enables -Werror=undef, which uncovered a bug inside
qcompilerdetection.h.

According to the Dinkum headers, it is necessary to account for three different states
concerning the values of the _HAS_* macros:

    1. undefined
    2. 0
    3. 1

Therefore, it is necessary to check both whether it is defined and if it is
not 0. Only checking whether a given macro is 0 will generate a trap by
-Werror=undef.

(__GLIBCXX__ is the sole exception).

Change-Id: Ib95e485698ee38858a1671d930d7e960b75bb041
Reviewed-by: James McDonnell <jmcdonnell@qnx.com>
Reviewed-by: Dan Cape <dcape@qnx.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-22 18:06:39 +00:00
Morten Johan Sørvig
db2675d6fd Cocoa: Update QWindow::screen() on expose/show.
This is needed to correctly handle show on non-primary
screens.

Change-Id: I80b13372b3a92786987a66f0da385af6b4a6a863
Task-number: QTBUG-47950
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
2016-01-22 13:16:59 +00:00
Anton Kudryavtsev
0f51686a69 QVariant: use reserve in convert()
... to optimize memory allocation.

Change-Id: I7f644955be779c3651683401a7985a265b69ca6f
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-22 10:18:34 +00:00
Tony Sarajärvi
720d1792f2 Remove insignificant from qabstracttextdocumentlayout test
Task-number: QTBUG-28593
Change-Id: If5a102cd1c8cdad6d77cc8dbcece3ac983a8010b
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-22 09:13:27 +00:00
Tony Sarajärvi
870e68cd75 Remove insignificant flag from qglyphrun test
Task-number: QTBUG-28593
Change-Id: I04e73947c7f131bdb4341c224fb008b26be22c22
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2016-01-22 09:13:20 +00:00
Thiago Macieira
7dceb22748 Autotest: make tst_QDateTime pass when LC_TIME != en_US
QDateTime::toString for Qt::TextDate unconditionally uses the system
locale (because QDate::shortDayName and QDate::shortMonthName do).
Setting the default QLocale has no effect. If you ask me, those two
QDate methods are buggy, but they are documented that way.

Change-Id: I408dcb81ba654c929f25ffff1427366b04da5a43
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-22 03:37:54 +00:00
Thiago Macieira
d921a9bd15 Hide better the private API QTextCursor constructors
Both constructors were taking a pointer, so they participated in
overload resolution along with QTextDocument and QTextFrame pointers.

Instead, make them take references and move them to the private section
of QTextCursor. That necessitated adding a method to QTextCursorPrivate
to access that private constructor from non-friend classes.

Change-Id: I7e6338336dd6468ead24ffff1410e3bc534d77dd
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2016-01-22 03:36:16 +00:00
Thiago Macieira
cfe891eeb8 Add Intel copyright to files that Intel has had non-trivial contribution
I wrote a script to help find the files, but I reviewed the
contributions manually to be sure I wasn't claiming copyright for search
& replace, adding Q_DECL_NOTHROW or adding "We mean it" headers.

Change-Id: I7a9e11d7b64a4cc78e24ffff142b506368fc8842
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-21 22:44:21 +00:00
Thiago Macieira
23bd4651c7 Update the Intel copyright year
Not that we require it, but since The Qt Company did it for all files
they have copyright, even if they haven't touched the file in years
(especially not in 2016), I'm doing the same.

Change-Id: I7a9e11d7b64a4cc78e24ffff142b4c9d53039846
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-21 22:44:16 +00:00
Tor Arne Vestbø
a44e4a6cfe Fix build with QT_NO_OPENGL
Change-Id: I3056d101967d94961b35ce10692dc9f390189b40
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-21 21:53:49 +00:00
Tobias Koenig
a01146aac1 Use QFileInfo::exists(f) instead of QFileInfo(f).exists()
QFileInfo::exists(f) is somewhat faster than the version which creates an temporary object.

Change-Id: I5f931a86d9dfad57d99efe04ca115422de43def9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 21:21:47 +00:00
Allan Sandfeld Jensen
c7a86c5e0c Remove dead code from QOpenGLPaintEngine
These variables were never used or set to anything meaningfull.

Change-Id: Ic68ac5c38a3db28d7a5a05be004bcb6a554a1483
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2016-01-21 20:17:30 +00:00
Frederik Gladhorn
f33c6f37a8 Work around MinGW-make's magic prefixing of paths.
When building QNX on MS-Windows, make magically adds the Msys root as
prefix to variables whose values look like paths; this applies to both
environment variables and variables given values on the command-line.
When we don't actually want to install under the Msys root, this is
unwelcome "help".  So (for MinGW's make) support a magic prefix of our
own, @msyshack@, that'll make a path value for INSTALL_ROOT not look
like a path to make; we can then strip it off when we come to use it.

Change-Id: I951ad3c8fe3e5cfb49e6e361d7fff779f3a9d716
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2016-01-21 19:23:40 +00:00
Oswald Buddenhagen
2bb473c19a give the pkg-config wrapper a proper name
amends 282f15feaa.

Change-Id: I91fa244a9c33495365da4278b99d6312c1af299a
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-01-21 19:23:27 +00:00
Tobias Koenig
24d851dcd2 Avoid heap allocations in Median class
Create a MedianDouble class and V2 version of BlockSizeManager, which
use a fixed size array of double (since we always use 7 elements
to calculate the median anyway).

Change-Id: Ife90b90336a9a8c037b90726dee4cd2a1b8b6cd9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-21 18:57:04 +00:00
Jani Heikkinen
ad38ece3c8 Updated license headers
From Qt 5.7 -> examples are lisenced under BSD license, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/

Updated license headers to use new BSD header instead of LGPL21 one
(in those files which will be under BSD)

Change-Id: I3ad61caaf07802eb9da7d29eca3fe49d8a51b6a8
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-21 18:55:32 +00:00
Jani Heikkinen
f776595cc1 Updated license headers
From Qt 5.7 -> tools & applications are lisenced under GPL v3 with some
exceptions, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/

Updated license headers to use new GPL-EXCEPT header instead of LGPL21 one
(in those files which will be under GPL 3 with exceptions)

Change-Id: I42a473ddc97101492a60b9287d90979d9eb35ae1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-21 18:55:18 +00:00
Jani Heikkinen
18455d5585 Fixed qtbase tests to pass with updated license header
Change-Id: I996a1c3713d0799504bd98ffcdfdc7841c88182a
Reviewed-by: Antti Kokko <antti.kokko@theqtcompany.com>
2016-01-21 18:55:03 +00:00
Konstantin Ritt
c3850dd636 QString: optimize case conversion code
Handle special case mapping of length 1 explicitly;
Skip calculating of high surrogate for the same plane;
Optimize branch prediction with Q_LIKELY/Q_UNLIKELY;
Replace peekNext() + advance() with just next() in the caller function.

Change-Id: I0d37969749bd8ca855321242e6a0e72c405c5f8d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 15:20:41 +00:00
Marc Mutz
5a30884c57 Document qAsConst(), turning it into public API.
[ChangeLog][QtCore] Added qAsConst().

Task-number: QTBUG-50548
Change-Id: Id25592c821808596c6a5768a42b76c1db569f490
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
2016-01-21 09:41:19 +00:00
Laszlo Agocs
7edd488a5f eglfs: Detect llvmpipe and show a warning
Do ourselves and our users a favor by pointing out why Qt (Quick)
apps perform horribly on commonly used distros on the RPi. Using
a software rasterizer on such boards is not going to cut it.

Task-number: QTBUG-50533
Change-Id: I087f502ddb9c6bdde84343e6abd85c87cdc474f0
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2016-01-21 09:16:26 +00:00
Christian Strømme
205987750d Make pkgConfigExecutable() work when a pkg-config is defined in the spec
Commit 6e6f27b6 made it possible to set the PKG_CONFIG variable using
CROSS_COMPILE as a prefix. The problem with that solution is that it makes
pkgConfigExecutable() skip the environment setup for pkg-config as well,
as it expects the pre-set command to be self-contained - which it isn't.
To avoid this problem we need to store the pkg-config define in the
device spec in a separate variable.

Change-Id: Id8ae7fb03d9253be55840e23fe73b30815ee86c3
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-01-21 08:53:05 +00:00
Edward Welbourne
1185c28f2f Fix some mis-guided fall-throughs #ifdef QT_BOOTSTRAPPED.
A switch had a case whose body was in a #ifndef; when that got elided,
this case fell through into an entirely misguided case.  Give the #if
a #else clause so that it break;s in the defined case.  Code review
revealed another, then I searched for more following the same pattern.

Change-Id: I57fb59b6c8d349604f3fc6c8b1d424fb3c775d50
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-01-21 08:34:27 +00:00
Dmitry Shachnev
19866d8861 Fix pixmap types in org.kde.StatusNotifierItem.xml
According to the spec, pixmap type is ARRAY(INT, INT, ARRAY BYTE).
This also matches our QXdgDBusImageVector typedef.
Also fix the D-Bus Introspection class info.

Change-Id: Ic13e8a078299b9c76d2742055d64cfdc54460d58
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
2016-01-21 07:36:47 +00:00
Anton Kudryavtsev
f384c30979 QMake: replace QStringLiteral with QLatin1String
... in string comparisons. It's more efficient.

Change-Id: I5d54ab7777a0838455eaaac671e735eb37bfe243
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-01-21 07:25:48 +00:00
Liang Qi
158a3a4159 Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
	src/corelib/io/qiodevice_p.h
	src/corelib/kernel/qvariant_p.h
	src/corelib/tools/qsimd.cpp
	src/gui/kernel/qguiapplication.cpp
	tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp

Change-Id: I742a093cbb231b282b43e463ec67173e0d29f57a
2016-01-21 08:17:21 +01:00
Friedemann Kleint
acb2e873f0 QtPlatformSupport: Remove virtual from declarations with override.
Change-Id: If94207596411680dfc2dbe33f298dc48fd5b7cc0
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-01-21 07:17:18 +00:00
Friedemann Kleint
26379d0320 QGnomeTheme: Change the QFont members to pointer members.
When initializing the font members in the QGnomeTheme constructor,
the QFont constructor called QGuiApplication::font() which in
turn calls initFontUnlocked(), initializing
QGuiApplicationPrivate::app_font to QPlatformFontDatabase::defaultFont()
("Deja Vu 12") since QGuiApplicationPrivate::platformTheme() is still
0 at that point.

Change the fonts to pointer members and initialize them
delayed in QGnomeThemePrivate::configureFonts() instead.

Task-number: QTBUG-49095
Change-Id: I3282ea8484e04827be2a424f5ea3e34d607c4bc5
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
2016-01-21 06:02:20 +00:00
Maurice Kalinowski
1f9a06c294 winrt: Fix potential crash in readDatagram
The native socket engine used strcpy for WinRT, which tries to copy
terminating null character. The QSocketNotifier::async_readDatagramSlot
autotest uses a buffer of size 1, which causes readDatagram to overwrite
the buffer on the stack.

Hence use memcpy instead to protect from additional copies beyond
barriers. Note that we cannot use qstrcpy as that does a buf[size-1] =
'\0' at the end, which would remove content for a buf size of 1.

Change-Id: I20baf9e63646cd28c1c954a20b8ae9c7d5873c31
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
2016-01-21 05:53:45 +00:00
Maurice Kalinowski
f05c597ae5 winrt: msvc2015: refactor file handling
msvc2015 reintroduced a couple of functions from the win32 API
towards WinRT.

Enable usage of those and simplify the file system engine.
Furthermore update the autotests.

Change-Id: I9eafffba0ddfd05917c184c4a6b9e166f86d71d9
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
2016-01-21 05:53:17 +00:00
Marc Mutz
f4502fbaf0 [docs] Fix reverse STL iteration example
Use reverse_iterator, now that we finally have it.

Change-Id: If74ead1a6075c5437c1d111206913481a495a014
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2016-01-21 05:29:32 +00:00
Thiago Macieira
143c684364 Fix the use of R_X86_64_GOTPCREL on a 64-bit field: it should be 32-bit
The ABI says that PC-relative displacements should be on 32-bit fields,
even on 64-bit builds. For -mcmodel=large, it should use R_X86_64_GOT64
relocations, like 32-bit.

Task-number: QTBUG-50537
Change-Id: I1041122c530b4f5bbaabffff142ade5b3cbfc4c5
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2016-01-21 05:19:16 +00:00
Thiago Macieira
dcc36d7aa3 Autotest: remove the check that broadcast = ip | ~netmask
It's possible to configure an interface so that it isn't the case. I have
no idea if this is a valid scenario, but the unit test shouldn't enforce
that.

ip addr can report:
    inet 192.168.1.1/32 brd 192.168.1.255 scope global vlan0
       valid_lft forever preferred_lft forever

Change-Id: I8de47ed6c7be4847b99bffff141c337575760bd9
Reviewed-by: Richard J. Moore <rich@kde.org>
2016-01-21 05:19:13 +00:00
Thiago Macieira
8cd67bbfac QNetworkInterface: don't add a QNetworkAddressEntry if no IP is known
If SIOCGIFADDR fails, then don't bother trying to get the broadcast
address or netmask, and especially don't add the empty
QNetworkAddressEntry to the interface. This can happen on interfaces
that have no IP address assigned (for example, inactive interfaces).

Change-Id: I8de47ed6c7be4847b99bffff141c326d94ecca78
Reviewed-by: Richard J. Moore <rich@kde.org>
2016-01-21 05:19:10 +00:00