Tatsuhiro Tsujikawa
0390fae213
2009-11-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Fixed typo
* src/DownloadContext.h
2009-11-28 09:11:23 +00:00
Tatsuhiro Tsujikawa
9423f0d29a
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Added markTotalLengthIsKnown().
* src/DownloadContext.h
2009-11-22 14:39:20 +00:00
Tatsuhiro Tsujikawa
e40d6b7c0f
2009-07-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Release pooled and in-flight Request objectsand URIResult objects
in FileEntry after download completed.
* src/DownloadContext.cc
* src/DownloadContext.h
* src/FileEntry.cc
* src/FileEntry.h
* src/RequestGroup.cc
2009-07-05 09:10:08 +00:00
Tatsuhiro Tsujikawa
e82f870fdc
2009-06-29 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Removed _uris from RequestGroup. All functions that refer to _uris
were moved to FileEntry. Exit status code are now defined in
DownloadResultCode.h.
* src/AbstractCommand.cc
* src/AdaptiveURISelector.cc
* src/AdaptiveURISelector.h
* src/AutoSaveCommand.cc
* src/BtPostDownloadHandler.cc
* src/CheckIntegrityDispatcherCommand.cc
* src/CookieStorage.cc
* src/DHTAutoSaveCommand.cc
* src/DHTBucketRefreshCommand.cc
* src/DHTEntryPointNameResolveCommand.cc
* src/DHTInteractionCommand.cc
* src/DHTPeerAnnounceCommand.cc
* src/DHTTokenUpdateCommand.cc
* src/DlAbortEx.h
* src/DlRetryEx.h
* src/DownloadCommand.cc
* src/DownloadContext.h
* src/DownloadFailureException.h
* src/DownloadResult.h
* src/DownloadResultCode.h
* src/FeedbackURISelector.cc
* src/FeedbackURISelector.h
* src/FileEntry.cc
* src/FileEntry.h
* src/FtpNegotiationCommand.cc
* src/HttpListenCommand.cc
* src/HttpResponseCommand.cc
* src/HttpServerResponseCommand.cc
* src/HttpSkipResponseCommand.cc
* src/InOrderURISelector.cc
* src/InOrderURISelector.h
* src/Makefile.am
* src/Makefile.in
* src/Metalink2RequestGroup.cc
* src/MultiUrlRequestInfo.cc
* src/MultiUrlRequestInfo.h
* src/OptionHandlerFactory.cc
* src/PeerListenCommand.cc
* src/RecoverableException.h
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/TimedHaltCommand.cc
* src/TrackerWatcherCommand.cc
* src/URIResult.cc
* src/URIResult.h
* src/URISelector.h
* src/XmlRpcMethodImpl.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* src/download_helper.cc
* src/main.cc
* src/option_processing.cc
* test/BtDependencyTest.cc
* test/BtPostDownloadHandlerTest.cc
* test/CookieStorageTest.cc
* test/DefaultBtMessageDispatcherTest.cc
* test/DownloadHandlerFactoryTest.cc
* test/DownloadHelperTest.cc
* test/FeedbackURISelectorTest.cc
* test/FileEntryTest.cc
* test/InOrderURISelectorTest.cc
* test/Metalink2RequestGroupTest.cc
* test/MetalinkPostDownloadHandlerTest.cc
* test/RequestGroupManTest.cc
* test/RequestGroupTest.cc
* test/XmlRpcMethodTest.cc
2009-06-29 08:42:58 +00:00
Tatsuhiro Tsujikawa
5699b67526
2009-06-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Rewritten DownloadContext and removed SingleFileDownloadContext
and BtContext and its derived classes. BitTorrent specific
attributes are now set by DownloadContext::setAttribute() with key
bittorrent::BITTORRENT.
* src/AbstractBtMessage.cc
* src/AbstractBtMessage.h
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/AbstractProxyRequestCommand.cc
* src/AbstractProxyResponseCommand.cc
* src/ActivePeerConnectionCommand.cc
* src/ActivePeerConnectionCommand.h
* src/AnnounceList.cc
* src/BtCheckIntegrityEntry.cc
* src/BtConstants.h
* src/BtContext.h: Removed
* src/BtDependency.cc
* src/BtExtendedMessage.cc
* src/BtPieceMessage.cc
* src/BtPieceMessage.h
* src/BtPostDownloadHandler.cc
* src/BtRegistry.cc
* src/BtRegistry.h
* src/BtSetup.cc
* src/CheckIntegrityCommand.cc
* src/CheckIntegrityEntry.cc
* src/ChecksumCheckIntegrityEntry.cc
* src/ConsoleStatCalc.cc
* src/ContentTypeRequestGroupCriteria.cc
* src/DHTGetPeersCommand.cc
* src/DHTGetPeersCommand.h
* src/DHTPeerLookupTask.cc
* src/DHTPeerLookupTask.h
* src/DHTTaskFactory.h
* src/DHTTaskFactoryImpl.cc
* src/DHTTaskFactoryImpl.h
* src/DefaultBtAnnounce.cc
* src/DefaultBtAnnounce.h
* src/DefaultBtContext.cc: Removed
* src/DefaultBtContext.h: Removed
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/DefaultBtMessageFactory.cc
* src/DefaultBtMessageFactory.h
* src/DefaultBtMessageReceiver.cc
* src/DefaultBtMessageReceiver.h
* src/DefaultBtProgressInfoFile.cc
* src/DefaultBtRequestFactory.cc
* src/DefaultBtRequestFactory.h
* src/DefaultExtensionMessageFactory.cc
* src/DefaultExtensionMessageFactory.h
* src/DefaultPeerStorage.cc
* src/DefaultPeerStorage.h
* src/DefaultPieceStorage.cc
* src/DefaultSegmentManFactory.cc
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/DownloadContext.cc
* src/DownloadContext.h
* src/DownloadEngine.cc
* src/DownloadEngineFactory.cc
* src/DownloadHandler.cc
* src/DownloadResult.h
* src/FileAllocationCommand.cc
* src/FileAllocationDispatcherCommand.cc
* src/FileAllocationEntry.cc
* src/FileEntry.h
* src/FillRequestGroupCommand.cc
* src/FtpDownloadCommand.cc
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/FtpTunnelRequestCommand.cc
* src/FtpTunnelResponseCommand.cc
* src/HandshakeExtensionMessage.cc
* src/HandshakeExtensionMessage.h
* src/HaveEraseCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpProxyRequestCommand.cc
* src/HttpProxyResponseCommand.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/HttpResponseCommand.cc
* src/HttpServerBodyCommand.cc
* src/HttpServerCommand.cc
* src/HttpSkipResponseCommand.cc
* src/InitiateConnectionCommandFactory.cc
* src/InitiatorMSEHandshakeCommand.cc
* src/InitiatorMSEHandshakeCommand.h
* src/IteratableChecksumValidator.cc
* src/IteratableChecksumValidator.h
* src/IteratableChunkChecksumValidator.cc
* src/MSEHandshake.cc
* src/MSEHandshake.h
* src/Makefile.am
* src/Makefile.in
* src/Metalink2RequestGroup.cc
* src/MetalinkPostDownloadHandler.cc
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/MultiFileAllocationIterator.cc
* src/MultiUrlRequestInfo.cc
* src/PeerChokeCommand.cc
* src/PeerChokeCommand.h
* src/PeerInitiateConnectionCommand.cc
* src/PeerInitiateConnectionCommand.h
* src/PeerInteractionCommand.cc
* src/PeerInteractionCommand.h
* src/PeerReceiveHandshakeCommand.cc
* src/PieceHashCheckIntegrityEntry.cc
* src/RealtimeCommand.cc
* src/ReceiverMSEHandshakeCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupEntry.cc
* src/RequestGroupMan.cc
* src/SeedCheckCommand.cc
* src/SeedCheckCommand.h
* src/SegmentMan.cc
* src/ShareRatioSeedCriteria.h
* src/SingleFileDownloadContext.cc: Removed
* src/SingleFileDownloadContext.h: Removed
* src/SleepCommand.cc
* src/StreamCheckIntegrityEntry.cc
* src/TrackerWatcherCommand.cc
* src/TrackerWatcherCommand.h
* src/UnknownLengthPieceStorage.cc
* src/Util.cc
* src/Util.h
* src/XmlRpcMethodImpl.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* src/download_helper.cc
* src/main.cc
* src/option_processing.cc
* test/BitfieldManTest.cc
* test/BittorrentHelperTest.cc
* test/BtCancelMessageTest.cc
* test/BtChokeMessageTest.cc
* test/BtDependencyTest.cc
* test/BtPieceMessageTest.cc
* test/BtPostDownloadHandlerTest.cc
* test/BtRegistryTest.cc
* test/BtRejectMessageTest.cc
* test/BtRequestMessageTest.cc
* test/DHTPeerAnnounceStorageTest.cc
* test/DefaultBtAnnounceTest.cc
* test/DefaultBtContextTest.cc: Removed
* test/DefaultBtMessageDispatcherTest.cc
* test/DefaultBtMessageFactoryTest.cc
* test/DefaultBtProgressInfoFileTest.cc
* test/DefaultBtRequestFactoryTest.cc
* test/DefaultExtensionMessageFactoryTest.cc
* test/DefaultPeerStorageTest.cc
* test/DefaultPieceStorageTest.cc
* test/DirectDiskAdaptorTest.cc
* test/DownloadContextTest.cc
* test/DownloadHandlerFactoryTest.cc
* test/DownloadHelperTest.cc
* test/HandshakeExtensionMessageTest.cc
* test/HttpRequestTest.cc
* test/HttpResponseTest.cc
* test/IteratableChecksumValidatorTest.cc
* test/IteratableChunkChecksumValidatorTest.cc
* test/MSEHandshakeTest.cc
* test/Makefile.am
* test/Makefile.in
* test/Metalink2RequestGroupTest.cc
* test/MetalinkPostDownloadHandlerTest.cc
* test/MockBtContext.h: Removed
* test/MockDHTTaskFactory.h
* test/MockDownloadContext.h: Removed
* test/MockPieceStorage.h
* test/MultiDiskAdaptorTest.cc
* test/MultiFileAllocationIteratorTest.cc
* test/RequestGroupManTest.cc
* test/RequestGroupTest.cc
* test/SegmentManTest.cc
* test/ShareRatioSeedCriteriaTest.cc
* test/SingleFileDownloadContextTest.cc: Removed
* test/UtilTest.cc
* test/XmlRpcMethodTest.cc
2009-06-28 10:37:15 +00:00
Tatsuhiro Tsujikawa
90471d6805
2009-06-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Added experimental support of WEB-Seeding for multi-file torrent.
Due to fundamental changes in file handling in HTTP/FTP code, many
functions are not working: PeerStat, ServerHost, proxy..etc
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/CreateRequestCommand.cc
* src/CreateRequestCommand.h
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/DownloadCommand.cc
* src/DownloadCommand.h
* src/DownloadContext.cc
* src/DownloadContext.h
* src/FileEntry.cc
* src/FileEntry.h
* src/FtpDownloadCommand.cc
* src/FtpDownloadCommand.h
* src/FtpFinishDownloadCommand.cc
* src/FtpFinishDownloadCommand.h
* src/FtpInitiateConnectionCommand.cc
* src/FtpInitiateConnectionCommand.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/FtpTunnelResponseCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpDownloadCommand.h
* src/HttpInitiateConnectionCommand.cc
* src/HttpInitiateConnectionCommand.h
* src/HttpProxyResponseCommand.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/HttpRequestCommand.h
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/HttpSkipResponseCommand.cc
* src/HttpSkipResponseCommand.h
* src/InitiateConnectionCommand.cc
* src/InitiateConnectionCommand.h
* src/InitiateConnectionCommandFactory.cc
* src/InitiateConnectionCommandFactory.h
* src/Makefile.am
* src/PieceStorage.h
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/SegmentMan.cc
* src/SegmentMan.h
* src/SingleFileDownloadContext.h
* src/StreamFileAllocationEntry.cc
* src/TrackerWatcherCommand.cc
* src/UnknownLengthPieceStorage.cc
* src/UnknownLengthPieceStorage.h
* src/array_fun.h
* src/bitfield.h
* src/download_helper.cc
* test/DownloadContextTest.cc
* test/Makefile.am
* test/MockDownloadContext.h
2009-06-23 15:35:45 +00:00
Tatsuhiro Tsujikawa
39472a64eb
2009-06-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
DownloadContext now has _fileEntries so that
DownloadContext::getFileEntries() can returns its const reference.
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DownloadContext.cc
* src/DownloadContext.h
* src/SingleFileDownloadContext.cc
* src/SingleFileDownloadContext.h
2009-06-14 11:12:20 +00:00
Tatsuhiro Tsujikawa
8b6da1ee36
2009-05-29 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Implemented getter methods in header files to give them more
chance of optimization.
Return const reference for SharadHandle if possible.
* src/AbstractAuthResolver.cc
* src/AbstractAuthResolver.h
* src/AbstractBtMessage.cc
* src/AbstractBtMessage.h
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/AsyncNameResolver.cc
* src/AsyncNameResolver.h
* src/BNode.cc
* src/BNode.h
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/BtAbortOutstandingRequestEvent.h
* src/BtExtendedMessage.cc
* src/BtExtendedMessage.h
* src/BtSeederStateChoke.cc
* src/BtSeederStateChoke.h
* src/Cookie.cc
* src/Cookie.h
* src/DHTBucket.cc
* src/DHTBucket.h
* src/DHTConnectionImpl.cc
* src/DHTConnectionImpl.h
* src/DHTFindNodeReplyMessage.cc
* src/DHTFindNodeReplyMessage.h
* src/DHTGetPeersReplyMessage.cc
* src/DHTGetPeersReplyMessage.h
* src/DHTInteractionCommand.cc
* src/DHTMessage.cc
* src/DHTMessage.h
* src/DHTMessageDispatcherImpl.cc
* src/DHTMessageEntry.cc
* src/DHTMessageReceiver.cc
* src/DHTMessageReceiver.h
* src/DHTMessageTrackerEntry.cc
* src/DHTMessageTrackerEntry.h
* src/DHTPeerAnnounceEntry.cc
* src/DHTPeerAnnounceEntry.h
* src/DHTPeerLookupTask.cc
* src/DHTPeerLookupTask.h
* src/DHTRoutingTableDeserializer.cc
* src/DHTRoutingTableDeserializer.h
* src/DefaultBtAnnounce.cc
* src/DefaultBtAnnounce.h
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/DefaultBtRequestFactory.cc
* src/DefaultBtRequestFactory.h
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/DownloadContext.cc
* src/DownloadContext.h
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/EpollEventPoll.cc
* src/EpollEventPoll.h
* src/FtpConnection.cc
* src/FtpConnection.h
* src/HttpConnection.cc
* src/HttpConnection.h
* src/HttpHeader.cc
* src/HttpHeader.h
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpResponse.cc
* src/HttpResponse.h
* src/LibsslTLSContext.cc
* src/LibsslTLSContext.h
* src/MSEHandshake.cc
* src/MSEHandshake.h
* src/MetalinkEntry.cc
* src/MetalinkEntry.h
* src/MetalinkParserController.cc
* src/MetalinkParserController.h
* src/MetalinkParserStateMachine.cc
* src/MetalinkParserStateMachine.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/NetrcAuthResolver.cc
* src/NetrcAuthResolver.h
* src/Peer.cc
* src/Peer.h
* src/PeerSessionResource.cc
* src/PeerSessionResource.h
* src/Piece.cc
* src/Piece.h
* src/PieceStatMan.cc
* src/PieceStatMan.h
* src/Request.cc
* src/Request.h
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/RequestSlot.cc
* src/RequestSlot.h
* src/SegmentMan.cc
* src/SegmentMan.h
* src/SelectEventPoll.cc
* src/SelectEventPoll.h
* src/ServerStat.cc
* src/ServerStat.h
* src/Signature.cc
* src/Signature.h
* src/URIResult.cc
* src/URIResult.h
* src/UTPexExtensionMessage.cc
* src/UTPexExtensionMessage.h
2009-05-29 12:12:22 +00:00
Tatsuhiro Tsujikawa
849a533d61
2009-03-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Removed getName() from DownloadContext. getName() is declared in
BtContext.
* src/BtContext.h
* src/DownloadContext.h
* src/SingleFileDownloadContext.cc
* src/SingleFileDownloadContext.h
Removed getFilePath() from DiskAdaptor. getFilePath() is
declared in AbstractSingleDiskAdaptor.
* src/AbstractSingleDiskAdaptor.h
* src/DiskAdaptor.h
* src/MultiDiskAdaptor.h
* src/RequestGroup.cc
Removed setTopDir() and getTopDir() and getTopDirPath() from
MultiDiskAdaptor.
* src/DefaultPieceStorage.cc
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* test/MultiDiskAdaptorTest.cc
2009-03-10 12:24:29 +00:00
Tatsuhiro Tsujikawa
b1edad42ff
2008-11-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Fixed the bug that prevents aria2 from downloading 0-length
files via HTTP/FTP.
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DownloadContext.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/RequestGroup.cc
* src/SingleFileDownloadContext.cc
* src/SingleFileDownloadContext.h
* test/BtPostDownloadHandlerTest.cc
* test/MetalinkPostDownloadHandlerTest.cc
* test/MockBtContext.h
2008-11-26 15:22:54 +00:00
Tatsuhiro Tsujikawa
bdff264d2c
2008-11-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
...
Show an average download speed in Download results.
* src/BtFileAllocationEntry.cc
* src/DefaultPieceStorage.cc
* src/DownloadContext.cc
* src/DownloadContext.h
* src/DownloadResult.h
* src/RequestGroup.cc
* src/RequestGroupMan.cc
* src/StreamFileAllocationEntry.cc
2008-11-10 16:10:31 +00:00
Tatsuhiro Tsujikawa
5472c8033e
2008-07-12 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
...
Added the ability to retrieve signature from Metalink file.
A retrieved signature is stored in Signature class and it is
held by
DownloadContext class. Note that aria2 doesn't verify signature.
* src/DownloadContext.cc
* src/DownloadContext.h
* src/Makefile.am
* src/Makefile.in
* src/Metalink2RequestGroup.cc
* src/MetalinkEntry.cc
* src/MetalinkEntry.h
* src/MetalinkParserController.cc
* src/MetalinkParserController.h
* src/MetalinkParserStateMachine.cc
* src/MetalinkParserStateMachine.h
* src/Signature.cc
* src/Signature.h
* src/SignatureMetalinkParserState.cc
* src/SignatureMetalinkParserState.h
* src/VerificationMetalinkParserState.cc
* src/VerificationMetalinkParserState.h
* test/Metalink2RequestGroupTest.cc
* test/MetalinkParserControllerTest.cc
* test/MetalinkProcessorTest.cc
* test/test.xml
2008-07-12 13:35:35 +00:00
Tatsuhiro Tsujikawa
ff6b5ecc9c
2008-05-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
...
Returns const reference:
DownloadContext::getPieceHash, DownloadContext::getName,
DownloadContext::getPieceHashAlgo, DownloadContext::getDir,
BtContext::getInfoHashAsString,
* src/BtContext.h
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DownloadContext.h
* src/SingleFileDownloadContext.h
* test/MockBtContext.h
2008-05-19 11:28:17 +00:00
Tatsuhiro Tsujikawa
c64a191061
2008-03-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
...
Type clarification: size_t for length or size, uint64_t for file
length, off_t for file offset.
* src/DefaultBtProgressInfoFile.cc
* src/DefaultBtContext.{h, cc}
* src/DefaultBtInteractive.cc
* src/DownloadCommand.{h, cc}
* src/IteratableChunkChecksumValidator.{h, cc}
* src/SegmentMan.{h, cc}
* src/SingleFileDownloadContext.{h, cc}
* src/IteratableChecksumValidator.{h, cc}
* src/BtContext.h
* src/IteratableValidator.h
* src/DownloadContext.h
* test/SingleFileDownloadContextTest.cc
* test/DefaultBtContextTest.cc
* test/MockBtContext.h
* test/Metalink2RequestGroupTest.cc
2008-03-08 10:33:56 +00:00
Tatsuhiro Tsujikawa
1b7c198289
2008-02-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
...
Removed "using namespace std;" from all sources. Appended std::
prefix to c++
standard classes.
Included string.h where mem* function are used.
2008-02-08 15:53:45 +00:00
Tatsuhiro Tsujikawa
048a2cf597
2007-10-12 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
...
Implemented BitTorrent/http/ftp integrated download.
I've rewritten lots of files and now some headers have forward
class declarations to reduce compile time.
The implementation is extremely alpha stage, I recommend to use this
for testing purpose only.
2007-10-11 16:58:24 +00:00