From 8b80d3f8c86a2a42e6257643cf4ec3b38af4270d Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Mon, 25 Nov 2024 16:07:55 +0200 Subject: [PATCH 1/9] Fix batch deleting current user while it has muted users attached to it (#3507) --- .../StreamChatModel.xcdatamodel/contents | 6 +++--- .../StreamChatTests/Database/DatabaseContainer_Tests.swift | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents b/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents index 181d663671..1b70c50a08 100644 --- a/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents +++ b/Sources/StreamChat/Database/StreamChatModel.xcdatamodeld/StreamChatModel.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -152,7 +152,7 @@ - + @@ -472,7 +472,7 @@ - + diff --git a/Tests/StreamChatTests/Database/DatabaseContainer_Tests.swift b/Tests/StreamChatTests/Database/DatabaseContainer_Tests.swift index 4d19d1e6e4..36836a666b 100644 --- a/Tests/StreamChatTests/Database/DatabaseContainer_Tests.swift +++ b/Tests/StreamChatTests/Database/DatabaseContainer_Tests.swift @@ -386,6 +386,9 @@ final class DatabaseContainer_Tests: XCTestCase { createdAt: .unique, updatedAt: .unique )) + let mutedUserId = UserId.unique + let mutedUserDTO = try session.saveUser(payload: .dummy(userId: mutedUserId)) + session.currentUser?.mutedUsers = Set([mutedUserDTO]) session.saveThreadList( payload: ThreadListPayload( threads: [ From c0562257c008f9f7c2b7937cbbb3b4ef1ca8e8a1 Mon Sep 17 00:00:00 2001 From: Alexey Alter-Pesotskiy Date: Mon, 25 Nov 2024 18:03:25 +0000 Subject: [PATCH 2/9] Add snapshot postfix to v4.67.0 --- Sources/StreamChat/Generated/SystemEnvironment+Version.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StreamChat/Generated/SystemEnvironment+Version.swift b/Sources/StreamChat/Generated/SystemEnvironment+Version.swift index 5f222e5f8d..de0d79eb7f 100644 --- a/Sources/StreamChat/Generated/SystemEnvironment+Version.swift +++ b/Sources/StreamChat/Generated/SystemEnvironment+Version.swift @@ -7,5 +7,5 @@ import Foundation extension SystemEnvironment { /// A Stream Chat version. - public static let version: String = "4.67.0" + public static let version: String = "4.67.0-SNAPSHOT" } From 82b28effc3ba7a7de80159b152d6755fec5fb314 Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Wed, 27 Nov 2024 09:51:58 +0200 Subject: [PATCH 3/9] Convert to models after NSFetchedResultsController finishes reporting changes for avoiding update cycle triggered by fetch requests in item creator (#3508) --- CHANGELOG.md | 4 +- .../DatabaseObserver/ListChange.swift | 40 ++++++++++++++----- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e2ebf6d85..f413593a58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +## StreamChat +### 🐞 Fixed +- Fix a rare infinite loop triggering a crash when handling database changes [#3508](https://github.com/GetStream/stream-chat-swift/pull/3508) # [4.67.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.67.0) _November 25, 2024_ diff --git a/Sources/StreamChat/Controllers/DatabaseObserver/ListChange.swift b/Sources/StreamChat/Controllers/DatabaseObserver/ListChange.swift index e9e4bbb4b0..936873b6c1 100644 --- a/Sources/StreamChat/Controllers/DatabaseObserver/ListChange.swift +++ b/Sources/StreamChat/Controllers/DatabaseObserver/ListChange.swift @@ -150,9 +150,8 @@ class ListChangeAggregator: NSObject, NSFetchedResul /// Called with the aggregated changes after `FetchResultsController` calls controllerDidChangeContent` on its delegate. var onDidChange: (([ListChange]) -> Void)? - /// An array of changes in the current update. It gets reset every time `controllerWillChangeContent` is called, and - /// published to the observer when `controllerDidChangeContent` is called. - private var currentChanges: [ListChange] = [] + /// An array of changes in the current update. + private var currentChanges: [ListChange] = [] /// Creates a new `ChangeAggregator`. /// @@ -178,8 +177,10 @@ class ListChangeAggregator: NSObject, NSFetchedResul for type: NSFetchedResultsChangeType, newIndexPath: IndexPath? ) { - guard let dto = anObject as? DTO, let item = try? itemCreator(dto) else { - log.debug("Skipping the update from DB because the DTO can't be converted to the model object.") + // Model conversions must happen in `controllerDidChangeContent`. Otherwise, it can trigger a loop where + // this delegate method is called again when additional fetch requests in `asModel()` are triggered. + guard let dto = anObject as? DTO else { + log.debug("Skipping the update from DB because the DTO has invalid type: \(anObject)") return } @@ -189,28 +190,28 @@ class ListChangeAggregator: NSObject, NSFetchedResul log.warning("Skipping the update from DB because `newIndexPath` is missing for `.insert` change.") return } - currentChanges.append(.insert(item, index: index)) + currentChanges.append(.insert(dto, index: index)) case .move: guard let fromIndex = indexPath, let toIndex = newIndexPath else { log.warning("Skipping the update from DB because `indexPath` or `newIndexPath` are missing for `.move` change.") return } - currentChanges.append(.move(item, fromIndex: fromIndex, toIndex: toIndex)) + currentChanges.append(.move(dto, fromIndex: fromIndex, toIndex: toIndex)) case .update: guard let index = indexPath else { log.warning("Skipping the update from DB because `indexPath` is missing for `.update` change.") return } - currentChanges.append(.update(item, index: index)) + currentChanges.append(.update(dto, index: index)) case .delete: guard let index = indexPath else { log.warning("Skipping the update from DB because `indexPath` is missing for `.delete` change.") return } - currentChanges.append(.remove(item, index: index)) + currentChanges.append(.remove(dto, index: index)) default: break @@ -218,6 +219,25 @@ class ListChangeAggregator: NSObject, NSFetchedResul } func controllerDidChangeContent(_ controller: NSFetchedResultsController) { - onDidChange?(currentChanges) + // Model conversion is safe when all the changes have been processed (Core Data's _processRecentChanges can be called if conversion triggers additional fetch requests). + let itemChanges = currentChanges.compactMap { dtoChange in + do { + switch dtoChange { + case .update(let dto, index: let indexPath): + return try ListChange.update(itemCreator(dto), index: indexPath) + case .insert(let dto, index: let indexPath): + return try ListChange.insert(itemCreator(dto), index: indexPath) + case .move(let dto, fromIndex: let fromIndex, toIndex: let toIndex): + return try ListChange.move(itemCreator(dto), fromIndex: fromIndex, toIndex: toIndex) + case .remove(let dto, index: let indexPath): + return try ListChange.remove(itemCreator(dto), index: indexPath) + } + } catch { + log.debug("Skipping the update from DB because the DTO can't be converted to the model object: \(error)") + return nil + } + } + onDidChange?(itemChanges) + currentChanges.removeAll() } } From 4b87a3e466ed1df06982e7c7992ab819c04999c1 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Fri, 29 Nov 2024 09:56:41 +0000 Subject: [PATCH 4/9] Fix Channel List search bar disappearing (#3515) --- CHANGELOG.md | 4 ++++ Sources/StreamChatUI/ChatChannelList/ChatChannelListVC.swift | 1 + 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f413593a58..8a107f536b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### 🐞 Fixed - Fix a rare infinite loop triggering a crash when handling database changes [#3508](https://github.com/GetStream/stream-chat-swift/pull/3508) +## StreamChatUI +### 🐞 Fixed +- Fix Channel List search bar disappearing after it loses scrollability in rare scenarios [#3515](https://github.com/GetStream/stream-chat-swift/pull/3515) + # [4.67.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.67.0) _November 25, 2024_ diff --git a/Sources/StreamChatUI/ChatChannelList/ChatChannelListVC.swift b/Sources/StreamChatUI/ChatChannelList/ChatChannelListVC.swift index 1657316f75..3be2f04857 100644 --- a/Sources/StreamChatUI/ChatChannelList/ChatChannelListVC.swift +++ b/Sources/StreamChatUI/ChatChannelList/ChatChannelListVC.swift @@ -138,6 +138,7 @@ open class ChatChannelListVC: _ViewController, withReuseIdentifier: separatorReuseIdentifier ) + collectionView.alwaysBounceVertical = true collectionView.dataSource = self collectionView.delegate = self From 11cbd2e319eee5a20c19045b2261ae29ebb64d02 Mon Sep 17 00:00:00 2001 From: Martin Mitrevski Date: Mon, 2 Dec 2024 20:47:47 +0100 Subject: [PATCH 5/9] Added new events for AI typing indicator (#3516) --- .../Events/AITypingEvents.swift | 105 ++++++++++++++++++ .../WebSocketClient/Events/EventPayload.swift | 18 ++- .../WebSocketClient/Events/EventType.swift | 14 +++ StreamChat.xcodeproj/project.pbxproj | 30 +++++ .../Events/AIIndicator/AIIndicatorClear.json | 16 +++ .../Events/AIIndicator/AIIndicatorStop.json | 16 +++ .../Events/AIIndicator/AIIndicatorUpdate.json | 19 ++++ .../Events/AIIndicatorEvents_Tests.swift | 42 +++++++ 8 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 Sources/StreamChat/WebSocketClient/Events/AITypingEvents.swift create mode 100644 TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorClear.json create mode 100644 TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorStop.json create mode 100644 TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorUpdate.json create mode 100644 Tests/StreamChatTests/WebSocketClient/Events/AIIndicatorEvents_Tests.swift diff --git a/Sources/StreamChat/WebSocketClient/Events/AITypingEvents.swift b/Sources/StreamChat/WebSocketClient/Events/AITypingEvents.swift new file mode 100644 index 0000000000..2721c682ea --- /dev/null +++ b/Sources/StreamChat/WebSocketClient/Events/AITypingEvents.swift @@ -0,0 +1,105 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +import Foundation + +/// An event that provides updates about the state of the AI typing indicator. +public struct AIIndicatorUpdateEvent: Event { + /// The state of the AI typing indicator. + public let state: AITypingState + /// The channel ID this event is related to. + public let cid: ChannelId? + /// The message ID this event is related to. + public let messageId: MessageId? + /// Optional server message, usually when an error occurs. + public let aiMessage: String? +} + +class AIIndicatorUpdateEventDTO: EventDTO { + let payload: EventPayload + + init(from response: EventPayload) throws { + payload = response + } + + func toDomainEvent(session: DatabaseSession) -> Event? { + if let typingState = payload.aiState, + let aiTypingState = AITypingState(rawValue: typingState) { + return AIIndicatorUpdateEvent( + state: aiTypingState, + cid: payload.cid, + messageId: payload.messageId, + aiMessage: payload.aiMessage + ) + } else { + return nil + } + } +} + +/// An event that clears the AI typing indicator. +public struct AIIndicatorClearEvent: Event { + /// The channel ID this event is related to. + public let cid: ChannelId? +} + +class AIIndicatorClearEventDTO: EventDTO { + let payload: EventPayload + + init(from response: EventPayload) throws { + payload = response + } + + func toDomainEvent(session: any DatabaseSession) -> (any Event)? { + AIIndicatorClearEvent(cid: payload.cid) + } +} + +/// An event that indicates the AI has stopped generating the message. +public struct AIIndicatorStopEvent: CustomEventPayload, Event { + public static var eventType: EventType = .aiTypingIndicatorStop + + /// The channel ID this event is related to. + public let cid: ChannelId? + + public init(cid: ChannelId?) { + self.cid = cid + } +} + +class AIIndicatorStopEventDTO: EventDTO { + let payload: EventPayload + + init(from response: EventPayload) throws { + payload = response + } + + func toDomainEvent(session: any DatabaseSession) -> (any Event)? { + AIIndicatorStopEvent(cid: payload.cid) + } +} + +/// The state of the AI typing indicator. +public struct AITypingState: ExpressibleByStringLiteral, Hashable { + public var rawValue: String + + public init?(rawValue: String) { + self.rawValue = rawValue + } + + public init(stringLiteral value: String) { + rawValue = value + } +} + +public extension AITypingState { + /// The AI is thinking. + static let thinking: Self = "AI_STATE_THINKING" + /// The AI is checking external sources. + static let checkingExternalSources: Self = "AI_STATE_EXTERNAL_SOURCES" + /// The AI is generating the message. + static let generating: Self = "AI_STATE_GENERATING" + /// There's an error with the message generation. + static let error: Self = "AI_STATE_ERROR" +} diff --git a/Sources/StreamChat/WebSocketClient/Events/EventPayload.swift b/Sources/StreamChat/WebSocketClient/Events/EventPayload.swift index d10d0bbf96..bcf74c6881 100644 --- a/Sources/StreamChat/WebSocketClient/Events/EventPayload.swift +++ b/Sources/StreamChat/WebSocketClient/Events/EventPayload.swift @@ -36,6 +36,9 @@ class EventPayload: Decodable { case thread case vote = "poll_vote" case poll + case aiState = "ai_state" + case messageId = "message_id" + case aiMessage = "ai_message" } let eventType: EventType @@ -68,6 +71,10 @@ class EventPayload: Decodable { /// Thread Data, it is stored in Result, to be easier to debug decoding errors let threadDetails: Result? let threadPartial: Result? + + let aiState: String? + let messageId: String? + let aiMessage: String? init( eventType: EventType, @@ -96,7 +103,10 @@ class EventPayload: Decodable { threadDetails: Result? = nil, threadPartial: Result? = nil, poll: PollPayload? = nil, - vote: PollVotePayload? = nil + vote: PollVotePayload? = nil, + aiState: String? = nil, + messageId: String? = nil, + aiMessage: String? = nil ) { self.eventType = eventType self.connectionId = connectionId @@ -125,6 +135,9 @@ class EventPayload: Decodable { self.threadDetails = threadDetails self.poll = poll self.vote = vote + self.aiState = aiState + self.messageId = messageId + self.aiMessage = aiMessage } required init(from decoder: Decoder) throws { @@ -158,6 +171,9 @@ class EventPayload: Decodable { threadPartial = container.decodeAsResultIfPresent(ThreadPartialPayload.self, forKey: .thread) vote = try container.decodeIfPresent(PollVotePayload.self, forKey: .vote) poll = try container.decodeIfPresent(PollPayload.self, forKey: .poll) + aiState = try container.decodeIfPresent(String.self, forKey: .aiState) + messageId = try container.decodeIfPresent(String.self, forKey: .messageId) + aiMessage = try container.decodeIfPresent(String.self, forKey: .aiMessage) } func event() throws -> Event { diff --git a/Sources/StreamChat/WebSocketClient/Events/EventType.swift b/Sources/StreamChat/WebSocketClient/Events/EventType.swift index 37124123ac..084e4606b6 100644 --- a/Sources/StreamChat/WebSocketClient/Events/EventType.swift +++ b/Sources/StreamChat/WebSocketClient/Events/EventType.swift @@ -143,6 +143,17 @@ public extension EventType { /// When a thread has a new reply. static let threadMessageNew: Self = "notification.thread_message_new" + + // MARK: - AI + + // When an AI typing indicator's state has changed. + static let aiTypingIndicatorChanged: Self = "ai_indicator.update" + + // When an AI typing indicator has been cleared. + static let aiTypingIndicatorClear: Self = "ai_indicator.clear" + + // When an AI typing indicator has been stopped. + static let aiTypingIndicatorStop: Self = "ai_indicator.stop" } extension EventType { @@ -208,6 +219,9 @@ extension EventType { case .pollVoteRemoved: return try PollVoteRemovedEventDTO(from: response) case .threadUpdated: return try ThreadUpdatedEventDTO(from: response) case .threadMessageNew: return try ThreadMessageNewEventDTO(from: response) + case .aiTypingIndicatorChanged: return try AIIndicatorUpdateEventDTO(from: response) + case .aiTypingIndicatorClear: return try AIIndicatorClearEventDTO(from: response) + case .aiTypingIndicatorStop: return try AIIndicatorStopEventDTO(from: response) default: if response.cid == nil { throw ClientError.UnknownUserEvent(response.eventType) diff --git a/StreamChat.xcodeproj/project.pbxproj b/StreamChat.xcodeproj/project.pbxproj index 813505464d..f05ba17591 100644 --- a/StreamChat.xcodeproj/project.pbxproj +++ b/StreamChat.xcodeproj/project.pbxproj @@ -756,6 +756,8 @@ 847E946E269C687300E31D0C /* EventsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847E946D269C687300E31D0C /* EventsController.swift */; }; 847F3CEA2689FDEB00D240E0 /* ChatMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847F3CE92689FDEB00D240E0 /* ChatMessageCell.swift */; }; 8486CAF926FA51EE00A9AD96 /* EventDTOConverterMiddleware_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8486CAF826FA51EE00A9AD96 /* EventDTOConverterMiddleware_Tests.swift */; }; + 848849B62CEE01070010E7CA /* AITypingEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848849B52CEE01070010E7CA /* AITypingEvents.swift */; }; + 848849B72CEE01070010E7CA /* AITypingEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848849B52CEE01070010E7CA /* AITypingEvents.swift */; }; 849980F1277246DB00ABA58B /* UIScrollView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849980F0277246DB00ABA58B /* UIScrollView+Extensions.swift */; }; 849AE664270CB14000423A20 /* VideoAttachmentComposerPreview_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849AE663270CB14000423A20 /* VideoAttachmentComposerPreview_Tests.swift */; }; 849AE666270CB55F00423A20 /* VideoAttachmentGalleryCell_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849AE665270CB55F00423A20 /* VideoAttachmentGalleryCell_Tests.swift */; }; @@ -812,6 +814,10 @@ 84DCB851269F4D31006CDF32 /* EventsController+Combine_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DCB850269F4D31006CDF32 /* EventsController+Combine_Tests.swift */; }; 84DCB853269F569A006CDF32 /* EventsController+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DCB852269F569A006CDF32 /* EventsController+SwiftUI.swift */; }; 84DCB855269F56A7006CDF32 /* EventsController+SwiftUI_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DCB854269F56A7006CDF32 /* EventsController+SwiftUI_Tests.swift */; }; + 84E46A372CFA1B8E000CBDDE /* AIIndicatorClear.json in Resources */ = {isa = PBXBuildFile; fileRef = 84E46A342CFA1B8E000CBDDE /* AIIndicatorClear.json */; }; + 84E46A382CFA1B8E000CBDDE /* AIIndicatorStop.json in Resources */ = {isa = PBXBuildFile; fileRef = 84E46A352CFA1B8E000CBDDE /* AIIndicatorStop.json */; }; + 84E46A392CFA1B8E000CBDDE /* AIIndicatorUpdate.json in Resources */ = {isa = PBXBuildFile; fileRef = 84E46A362CFA1B8E000CBDDE /* AIIndicatorUpdate.json */; }; + 84E46A3B2CFA1BB9000CBDDE /* AIIndicatorEvents_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E46A3A2CFA1BB9000CBDDE /* AIIndicatorEvents_Tests.swift */; }; 84EB4E76276A012900E47E73 /* ClientError_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4E75276A012900E47E73 /* ClientError_Tests.swift */; }; 84EB4E78276A03DE00E47E73 /* ErrorPayload_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4E77276A03DE00E47E73 /* ErrorPayload_Tests.swift */; }; 84EE53B12BBC32AD00FD2A13 /* Chat_Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84EE53B02BBC32AD00FD2A13 /* Chat_Mock.swift */; }; @@ -3660,6 +3666,7 @@ 847E946D269C687300E31D0C /* EventsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventsController.swift; sourceTree = ""; }; 847F3CE92689FDEB00D240E0 /* ChatMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageCell.swift; sourceTree = ""; }; 8486CAF826FA51EE00A9AD96 /* EventDTOConverterMiddleware_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDTOConverterMiddleware_Tests.swift; sourceTree = ""; }; + 848849B52CEE01070010E7CA /* AITypingEvents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AITypingEvents.swift; sourceTree = ""; }; 849980F0277246DB00ABA58B /* UIScrollView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+Extensions.swift"; sourceTree = ""; }; 849AE661270CB00000423A20 /* VideoLoader_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoLoader_Mock.swift; sourceTree = ""; }; 849AE663270CB14000423A20 /* VideoAttachmentComposerPreview_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoAttachmentComposerPreview_Tests.swift; sourceTree = ""; }; @@ -3711,6 +3718,10 @@ 84DCB852269F569A006CDF32 /* EventsController+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EventsController+SwiftUI.swift"; sourceTree = ""; }; 84DCB854269F56A7006CDF32 /* EventsController+SwiftUI_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EventsController+SwiftUI_Tests.swift"; sourceTree = ""; }; 84E32EA4276C9AB200A27112 /* InternetConnection_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternetConnection_Mock.swift; sourceTree = ""; }; + 84E46A342CFA1B8E000CBDDE /* AIIndicatorClear.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AIIndicatorClear.json; sourceTree = ""; }; + 84E46A352CFA1B8E000CBDDE /* AIIndicatorStop.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AIIndicatorStop.json; sourceTree = ""; }; + 84E46A362CFA1B8E000CBDDE /* AIIndicatorUpdate.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AIIndicatorUpdate.json; sourceTree = ""; }; + 84E46A3A2CFA1BB9000CBDDE /* AIIndicatorEvents_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AIIndicatorEvents_Tests.swift; sourceTree = ""; }; 84EB4E732769F76500E47E73 /* BackgroundTaskScheduler_Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundTaskScheduler_Mock.swift; sourceTree = ""; }; 84EB4E75276A012900E47E73 /* ClientError_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientError_Tests.swift; sourceTree = ""; }; 84EB4E77276A03DE00E47E73 /* ErrorPayload_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorPayload_Tests.swift; sourceTree = ""; }; @@ -5515,6 +5526,7 @@ 8A0C3BBB24C0947400CAFD19 /* UserEvents.swift */, 841BAA0F2BCEADAC000C73E4 /* PollsEvents.swift */, AD7BE1692C209888000A5756 /* ThreadEvents.swift */, + 848849B52CEE01070010E7CA /* AITypingEvents.swift */, ); path = Events; sourceTree = ""; @@ -6247,6 +6259,16 @@ path = Cells; sourceTree = ""; }; + 84E46A332CFA1B73000CBDDE /* AIIndicator */ = { + isa = PBXGroup; + children = ( + 84E46A342CFA1B8E000CBDDE /* AIIndicatorClear.json */, + 84E46A352CFA1B8E000CBDDE /* AIIndicatorStop.json */, + 84E46A362CFA1B8E000CBDDE /* AIIndicatorUpdate.json */, + ); + path = AIIndicator; + sourceTree = ""; + }; 84EE53AF2BBC329300FD2A13 /* State */ = { isa = PBXGroup; children = ( @@ -6543,6 +6565,7 @@ 8A62705F24BE31B20040BFD6 /* Events */ = { isa = PBXGroup; children = ( + 84E46A332CFA1B73000CBDDE /* AIIndicator */, ADE57B802C3C5C4600DD6B88 /* Thread */, 8A0C3BCA24C1C38C00CAFD19 /* Channel */, E7DB9F2526329C0C0090D9C7 /* HealthCheck */, @@ -6961,6 +6984,7 @@ 8A62705B24BE2BC00040BFD6 /* TypingEvent_Tests.swift */, 8A0C3BC824C0BBAB00CAFD19 /* UserEvents_Tests.swift */, ADE57B872C3C60CB00DD6B88 /* ThreadEvents_Tests.swift */, + 84E46A3A2CFA1BB9000CBDDE /* AIIndicatorEvents_Tests.swift */, ); path = Events; sourceTree = ""; @@ -10213,6 +10237,9 @@ A311B40327E8B9AD00CFCF6D /* NotificationInviteAccepted.json in Resources */, A311B3D327E8B98C00CFCF6D /* Message.json in Resources */, A311B3E427E8B98C00CFCF6D /* MessagePayloadWithCustom.json in Resources */, + 84E46A372CFA1B8E000CBDDE /* AIIndicatorClear.json in Resources */, + 84E46A382CFA1B8E000CBDDE /* AIIndicatorStop.json in Resources */, + 84E46A392CFA1B8E000CBDDE /* AIIndicatorUpdate.json in Resources */, A3D9D68727EDE3B900725066 /* yoda.jpg in Resources */, A311B42727E8B9CE00CFCF6D /* MessageReactionPayload+CustomExtraData.json in Resources */, A311B3E527E8B98C00CFCF6D /* MessageWithBrokenAttachments.json in Resources */, @@ -11551,6 +11578,7 @@ 40789D1729F6AC500018C2BB /* AudioPlaybackContextAccessor.swift in Sources */, 79D5CDD427EA1BE300BE7D8B /* MessageTranslationsPayload.swift in Sources */, 88D85D97252F168000AE1030 /* MemberController+SwiftUI.swift in Sources */, + 848849B72CEE01070010E7CA /* AITypingEvents.swift in Sources */, 43D3F0FC28410A0200B74921 /* CreateCallRequestBody.swift in Sources */, 79877A0D2498E4BC00015F8B /* CurrentUser.swift in Sources */, 4042967D29FAC9DA0089126D /* AudioAnalysisContext.swift in Sources */, @@ -11703,6 +11731,7 @@ 84EB4E76276A012900E47E73 /* ClientError_Tests.swift in Sources */, DA8407232525E871005A0F62 /* UserListPayload_Tests.swift in Sources */, 437FCA1926D906B20000223C /* ChatPushNotificationContent_Tests.swift in Sources */, + 84E46A3B2CFA1BB9000CBDDE /* AIIndicatorEvents_Tests.swift in Sources */, F61D7C3124FF9D1F00188A0E /* MessageEndpoints_Tests.swift in Sources */, 8459C9EE2BFB673E00F0D235 /* PollVoteListController+Combine_Tests.swift in Sources */, 8836FFC325408210009FDF73 /* FlagUserPayload_Tests.swift in Sources */, @@ -12497,6 +12526,7 @@ C121E8C2274544B100023E4C /* ChannelEventsController.swift in Sources */, C121E8C3274544B100023E4C /* ListChange.swift in Sources */, C15C8839286C7BF300E6A72C /* BackgroundListDatabaseObserver.swift in Sources */, + 848849B62CEE01070010E7CA /* AITypingEvents.swift in Sources */, ADB951B3291C3CE900800554 /* AnyAttachmentUpdater.swift in Sources */, 40789D3829F6AC500018C2BB /* AssetPropertyLoading.swift in Sources */, C121E8C4274544B100023E4C /* EntityChange.swift in Sources */, diff --git a/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorClear.json b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorClear.json new file mode 100644 index 0000000000..d1fde4915e --- /dev/null +++ b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorClear.json @@ -0,0 +1,16 @@ +{ + "type": "ai_indicator.clear", + "cid": "messaging:general-a4ea1bed-f233-4021-b9f8-f9519367cefd", + "channel_id": "general-a4ea1bed-f233-4021-b9f8-f9519367cefd", + "channel_type": "messaging", + "user": { + "id": "ai-b076753a-830e-40b0-816d-0929bb73d7ce", + "role": "user", + "created_at": "2024-11-27T15:57:45.157276Z", + "updated_at": "2024-11-27T15:57:45.157276Z", + "last_active": "2024-11-27T15:57:45.177077Z", + "banned": false, + "online": true + }, + "created_at": "2024-11-27T15:57:45.32967Z" +} diff --git a/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorStop.json b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorStop.json new file mode 100644 index 0000000000..d15a4ef8e0 --- /dev/null +++ b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorStop.json @@ -0,0 +1,16 @@ +{ + "type": "ai_indicator.stop", + "cid": "messaging:general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89", + "channel_id": "general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89", + "channel_type": "messaging", + "user": { + "id": "ai-1e9666df-9b9e-429e-b7e4-e2f54446d5ac", + "role": "user", + "created_at": "2024-11-27T15:51:55.649597Z", + "updated_at": "2024-11-27T15:51:55.649597Z", + "last_active": "2024-11-27T15:51:55.668787Z", + "banned": false, + "online": true + }, + "created_at": "2024-11-27T15:51:55.803339Z" +} diff --git a/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorUpdate.json b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorUpdate.json new file mode 100644 index 0000000000..3545d48cdf --- /dev/null +++ b/TestTools/StreamChatTestTools/Fixtures/JSONs/Events/AIIndicator/AIIndicatorUpdate.json @@ -0,0 +1,19 @@ +{ + "type": "ai_indicator.update", + "cid": "messaging:general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89", + "channel_id": "general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89", + "channel_type": "messaging", + "message_id": "aba120c6-c845-4c5a-968d-31ed0429c31e", + "ai_state": "AI_STATE_ERROR", + "ai_message": "failure", + "user": { + "id": "ai-1e9666df-9b9e-429e-b7e4-e2f54446d5ac", + "role": "user", + "created_at": "2024-11-27T15:51:55.649597Z", + "updated_at": "2024-11-27T15:51:55.649597Z", + "last_active": "2024-11-27T15:51:55.668787Z", + "banned": false, + "online": true + }, + "created_at": "2024-11-27T15:51:55.757904Z" +} diff --git a/Tests/StreamChatTests/WebSocketClient/Events/AIIndicatorEvents_Tests.swift b/Tests/StreamChatTests/WebSocketClient/Events/AIIndicatorEvents_Tests.swift new file mode 100644 index 0000000000..5974c15f3e --- /dev/null +++ b/Tests/StreamChatTests/WebSocketClient/Events/AIIndicatorEvents_Tests.swift @@ -0,0 +1,42 @@ +// +// Copyright © 2024 Stream.io Inc. All rights reserved. +// + +@testable import StreamChat +@testable import StreamChatTestTools +import XCTest + +final class AIIndicatorEvents_Tests: XCTestCase { + var eventDecoder: EventDecoder! + + override func setUp() { + super.setUp() + eventDecoder = EventDecoder() + } + + override func tearDown() { + super.tearDown() + eventDecoder = nil + } + + func test_aiIndicatorUpdate() throws { + let json = XCTestCase.mockData(fromJSONFile: "AIIndicatorUpdate") + let event = try XCTUnwrap(try eventDecoder.decode(from: json) as? AIIndicatorUpdateEventDTO) + XCTAssertEqual(event.payload.cid?.rawValue, "messaging:general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89") + XCTAssertEqual(event.payload.messageId, "aba120c6-c845-4c5a-968d-31ed0429c31e") + XCTAssertEqual(event.payload.aiState, "AI_STATE_ERROR") + XCTAssertEqual(event.payload.aiMessage, "failure") + } + + func test_aiIndicatorClear() throws { + let json = XCTestCase.mockData(fromJSONFile: "AIIndicatorClear") + let event = try XCTUnwrap(try eventDecoder.decode(from: json) as? AIIndicatorClearEventDTO) + XCTAssertEqual(event.payload.cid?.rawValue, "messaging:general-a4ea1bed-f233-4021-b9f8-f9519367cefd") + } + + func test_aiIndicatorStop() throws { + let json = XCTestCase.mockData(fromJSONFile: "AIIndicatorStop") + let event = try XCTUnwrap(try eventDecoder.decode(from: json) as? AIIndicatorStopEventDTO) + XCTAssertEqual(event.payload.cid?.rawValue, "messaging:general-3ac667a1-6113-4b16-b1e3-50dbff0ffb89") + } +} From 040264001c7bb457a4762fb54f80ae29b78a0d4d Mon Sep 17 00:00:00 2001 From: Toomas Vahter Date: Tue, 3 Dec 2024 10:19:20 +0200 Subject: [PATCH 6/9] Fix unstable typing related tests in ChatChannelController_Tests (#3520) --- .../ChannelController/ChannelController_Tests.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Tests/StreamChatTests/Controllers/ChannelController/ChannelController_Tests.swift b/Tests/StreamChatTests/Controllers/ChannelController/ChannelController_Tests.swift index 1088d3e0d9..32fbcc9156 100644 --- a/Tests/StreamChatTests/Controllers/ChannelController/ChannelController_Tests.swift +++ b/Tests/StreamChatTests/Controllers/ChannelController/ChannelController_Tests.swift @@ -2987,6 +2987,8 @@ final class ChannelController_Tests: XCTestCase { controller.sendKeystrokeEvent { XCTAssertNil($0) } + wait(for: [env.eventSender!.keystroke_completion_expectation], timeout: defaultTimeout) + env.eventSender!.keystroke_completion_expectation = XCTestExpectation() // Simulate `keystroke` call and catch the completion var completionCalledError: Error? @@ -3000,6 +3002,7 @@ final class ChannelController_Tests: XCTestCase { controller = nil // Check keystroke cid. + wait(for: [env.eventSender!.keystroke_completion_expectation], timeout: defaultTimeout) XCTAssertEqual(env.eventSender!.keystroke_cid, channelId) // Simulate failed update @@ -3059,6 +3062,8 @@ final class ChannelController_Tests: XCTestCase { controller.sendStartTypingEvent { XCTAssertNil($0) } + wait(for: [env.eventSender!.startTyping_completion_expectation], timeout: defaultTimeout) + env.eventSender!.startTyping_completion_expectation = XCTestExpectation() // Simulate `startTyping` call and catch the completion var completionCalledError: Error? @@ -3072,6 +3077,7 @@ final class ChannelController_Tests: XCTestCase { controller = nil // Check `startTyping` cid. + wait(for: [env.eventSender!.startTyping_completion_expectation], timeout: defaultTimeout) XCTAssertEqual(env.eventSender!.startTyping_cid, channelId) // Simulate failed update @@ -3131,7 +3137,9 @@ final class ChannelController_Tests: XCTestCase { controller.sendStopTypingEvent { XCTAssertNil($0) } - + wait(for: [env.eventSender!.stopTyping_completion_expectation], timeout: defaultTimeout) + env.eventSender!.stopTyping_completion_expectation = XCTestExpectation() + // Simulate `stopTyping` call and catch the completion var completionCalledError: Error? controller.sendStopTypingEvent { completionCalledError = $0 } @@ -3144,6 +3152,7 @@ final class ChannelController_Tests: XCTestCase { controller = nil // Check `stopTyping` cid. + wait(for: [env.eventSender!.stopTyping_completion_expectation], timeout: defaultTimeout) XCTAssertEqual(env.eventSender!.stopTyping_cid, channelId) // Simulate failed update From 24433631e118745fa206bdfb81aeb38077437656 Mon Sep 17 00:00:00 2001 From: Stream Bot Date: Tue, 3 Dec 2024 08:29:36 +0000 Subject: [PATCH 7/9] Bump 4.68.0 --- CHANGELOG.md | 5 +++++ README.md | 2 +- Sources/StreamChat/Generated/SystemEnvironment+Version.swift | 2 +- Sources/StreamChat/Info.plist | 2 +- Sources/StreamChatUI/Info.plist | 2 +- StreamChat-XCFramework.podspec | 2 +- StreamChat.podspec | 2 +- StreamChatArtifacts.json | 2 +- StreamChatUI-XCFramework.podspec | 2 +- StreamChatUI.podspec | 2 +- 10 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a107f536b..b433fe2648 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming +### 🔄 Changed + +# [4.68.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.68.0) +_December 03, 2024_ + ## StreamChat ### 🐞 Fixed - Fix a rare infinite loop triggering a crash when handling database changes [#3508](https://github.com/GetStream/stream-chat-swift/pull/3508) diff --git a/README.md b/README.md index e39d6210aa..a5834eeeb0 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@

- StreamChat + StreamChat StreamChatUI

diff --git a/Sources/StreamChat/Generated/SystemEnvironment+Version.swift b/Sources/StreamChat/Generated/SystemEnvironment+Version.swift index de0d79eb7f..90768b7c3d 100644 --- a/Sources/StreamChat/Generated/SystemEnvironment+Version.swift +++ b/Sources/StreamChat/Generated/SystemEnvironment+Version.swift @@ -7,5 +7,5 @@ import Foundation extension SystemEnvironment { /// A Stream Chat version. - public static let version: String = "4.67.0-SNAPSHOT" + public static let version: String = "4.68.0" } diff --git a/Sources/StreamChat/Info.plist b/Sources/StreamChat/Info.plist index c583202cb4..a06f6f6830 100644 --- a/Sources/StreamChat/Info.plist +++ b/Sources/StreamChat/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 4.67.0 + 4.68.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) diff --git a/Sources/StreamChatUI/Info.plist b/Sources/StreamChatUI/Info.plist index c583202cb4..a06f6f6830 100644 --- a/Sources/StreamChatUI/Info.plist +++ b/Sources/StreamChatUI/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 4.67.0 + 4.68.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) diff --git a/StreamChat-XCFramework.podspec b/StreamChat-XCFramework.podspec index 454fe7565d..fa944c7f77 100644 --- a/StreamChat-XCFramework.podspec +++ b/StreamChat-XCFramework.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "StreamChat-XCFramework" - spec.version = "4.67.0" + spec.version = "4.68.0" spec.summary = "StreamChat iOS Client" spec.description = "stream-chat-swift is the official Swift client for Stream Chat, a service for building chat applications." diff --git a/StreamChat.podspec b/StreamChat.podspec index bbdfd4e244..b1e95162a7 100644 --- a/StreamChat.podspec +++ b/StreamChat.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "StreamChat" - spec.version = "4.67.0" + spec.version = "4.68.0" spec.summary = "StreamChat iOS Chat Client" spec.description = "stream-chat-swift is the official Swift client for Stream Chat, a service for building chat applications." diff --git a/StreamChatArtifacts.json b/StreamChatArtifacts.json index 02b09389b7..f4549fcf87 100644 --- a/StreamChatArtifacts.json +++ b/StreamChatArtifacts.json @@ -1 +1 @@ -{"4.7.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.7.0/StreamChat-All.zip","4.8.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.8.0/StreamChat-All.zip","4.9.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.9.0/StreamChat-All.zip","4.10.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.10.0/StreamChat-All.zip","4.10.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.10.1/StreamChat-All.zip","4.11.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.11.0/StreamChat-All.zip","4.12.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.12.0/StreamChat-All.zip","4.13.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.13.0/StreamChat-All.zip","4.13.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.13.1/StreamChat-All.zip","4.14.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.14.0/StreamChat-All.zip","4.15.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.15.0/StreamChat-All.zip","4.15.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.15.1/StreamChat-All.zip","4.16.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.16.0/StreamChat-All.zip","4.17.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.17.0/StreamChat-All.zip","4.18.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.18.0/StreamChat-All.zip","4.19.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.19.0/StreamChat-All.zip","4.20.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.20.0/StreamChat-All.zip","4.21.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.0/StreamChat-All.zip","4.21.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.1/StreamChat-All.zip","4.21.2":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.2/StreamChat-All.zip","4.22.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.22.0/StreamChat-All.zip","4.23.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.23.0/StreamChat-All.zip","4.24.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.24.0/StreamChat-All.zip","4.24.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.24.1/StreamChat-All.zip","4.25.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.25.0/StreamChat-All.zip","4.25.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.25.1/StreamChat-All.zip","4.26.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.26.0/StreamChat-All.zip","4.27.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.27.0/StreamChat-All.zip","4.27.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.27.1/StreamChat-All.zip","4.28.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.28.0/StreamChat-All.zip","4.29.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.29.0/StreamChat-All.zip","4.30.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.30.0/StreamChat-All.zip","4.31.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.31.0/StreamChat-All.zip","4.32.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.32.0/StreamChat-All.zip","4.33.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.33.0/StreamChat-All.zip","4.34.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.34.0/StreamChat-All.zip","4.35.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.0/StreamChat-All.zip","4.35.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.1/StreamChat-All.zip","4.35.2":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.2/StreamChat-All.zip","4.36.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.36.0/StreamChat-All.zip","4.37.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.37.0/StreamChat-All.zip","4.37.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.37.1/StreamChat-All.zip","4.38.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.38.0/StreamChat-All.zip","4.39.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.39.0/StreamChat-All.zip","4.40.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.40.0/StreamChat-All.zip","4.41.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.41.0/StreamChat-All.zip","4.42.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.42.0/StreamChat-All.zip","4.43.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.43.0/StreamChat-All.zip","4.44.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.44.0/StreamChat-All.zip","4.45.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.45.0/StreamChat-All.zip","4.46.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.46.0/StreamChat-All.zip","4.47.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.47.0/StreamChat-All.zip","4.47.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.47.1/StreamChat-All.zip","4.48.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.48.0/StreamChat-All.zip","4.48.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.48.1/StreamChat-All.zip","4.49.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.49.0/StreamChat-All.zip","4.50.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.50.0/StreamChat-All.zip","4.51.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.51.0/StreamChat-All.zip","4.52.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.52.0/StreamChat-All.zip","4.53.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.53.0/StreamChat-All.zip","4.54.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.54.0/StreamChat-All.zip","4.55.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.55.0/StreamChat-All.zip","4.56.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.56.0/StreamChat-All.zip","4.56.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.56.1/StreamChat-All.zip","4.57.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.57.0/StreamChat-All.zip","4.58.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.58.0/StreamChat-All.zip","4.59.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.59.0/StreamChat-All.zip","4.60.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.60.0/StreamChat-All.zip","4.61.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.61.0/StreamChat-All.zip","4.62.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.62.0/StreamChat-All.zip","4.63.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.63.0/StreamChat-All.zip","4.64.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.64.0/StreamChat-All.zip","4.65.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.65.0/StreamChat-All.zip","4.66.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.66.0/StreamChat-All.zip","4.67.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.67.0/StreamChat-All.zip"} \ No newline at end of file +{"4.7.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.7.0/StreamChat-All.zip","4.8.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.8.0/StreamChat-All.zip","4.9.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.9.0/StreamChat-All.zip","4.10.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.10.0/StreamChat-All.zip","4.10.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.10.1/StreamChat-All.zip","4.11.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.11.0/StreamChat-All.zip","4.12.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.12.0/StreamChat-All.zip","4.13.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.13.0/StreamChat-All.zip","4.13.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.13.1/StreamChat-All.zip","4.14.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.14.0/StreamChat-All.zip","4.15.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.15.0/StreamChat-All.zip","4.15.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.15.1/StreamChat-All.zip","4.16.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.16.0/StreamChat-All.zip","4.17.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.17.0/StreamChat-All.zip","4.18.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.18.0/StreamChat-All.zip","4.19.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.19.0/StreamChat-All.zip","4.20.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.20.0/StreamChat-All.zip","4.21.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.0/StreamChat-All.zip","4.21.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.1/StreamChat-All.zip","4.21.2":"https://github.com/GetStream/stream-chat-swift/releases/download/4.21.2/StreamChat-All.zip","4.22.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.22.0/StreamChat-All.zip","4.23.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.23.0/StreamChat-All.zip","4.24.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.24.0/StreamChat-All.zip","4.24.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.24.1/StreamChat-All.zip","4.25.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.25.0/StreamChat-All.zip","4.25.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.25.1/StreamChat-All.zip","4.26.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.26.0/StreamChat-All.zip","4.27.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.27.0/StreamChat-All.zip","4.27.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.27.1/StreamChat-All.zip","4.28.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.28.0/StreamChat-All.zip","4.29.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.29.0/StreamChat-All.zip","4.30.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.30.0/StreamChat-All.zip","4.31.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.31.0/StreamChat-All.zip","4.32.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.32.0/StreamChat-All.zip","4.33.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.33.0/StreamChat-All.zip","4.34.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.34.0/StreamChat-All.zip","4.35.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.0/StreamChat-All.zip","4.35.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.1/StreamChat-All.zip","4.35.2":"https://github.com/GetStream/stream-chat-swift/releases/download/4.35.2/StreamChat-All.zip","4.36.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.36.0/StreamChat-All.zip","4.37.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.37.0/StreamChat-All.zip","4.37.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.37.1/StreamChat-All.zip","4.38.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.38.0/StreamChat-All.zip","4.39.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.39.0/StreamChat-All.zip","4.40.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.40.0/StreamChat-All.zip","4.41.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.41.0/StreamChat-All.zip","4.42.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.42.0/StreamChat-All.zip","4.43.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.43.0/StreamChat-All.zip","4.44.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.44.0/StreamChat-All.zip","4.45.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.45.0/StreamChat-All.zip","4.46.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.46.0/StreamChat-All.zip","4.47.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.47.0/StreamChat-All.zip","4.47.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.47.1/StreamChat-All.zip","4.48.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.48.0/StreamChat-All.zip","4.48.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.48.1/StreamChat-All.zip","4.49.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.49.0/StreamChat-All.zip","4.50.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.50.0/StreamChat-All.zip","4.51.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.51.0/StreamChat-All.zip","4.52.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.52.0/StreamChat-All.zip","4.53.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.53.0/StreamChat-All.zip","4.54.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.54.0/StreamChat-All.zip","4.55.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.55.0/StreamChat-All.zip","4.56.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.56.0/StreamChat-All.zip","4.56.1":"https://github.com/GetStream/stream-chat-swift/releases/download/4.56.1/StreamChat-All.zip","4.57.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.57.0/StreamChat-All.zip","4.58.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.58.0/StreamChat-All.zip","4.59.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.59.0/StreamChat-All.zip","4.60.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.60.0/StreamChat-All.zip","4.61.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.61.0/StreamChat-All.zip","4.62.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.62.0/StreamChat-All.zip","4.63.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.63.0/StreamChat-All.zip","4.64.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.64.0/StreamChat-All.zip","4.65.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.65.0/StreamChat-All.zip","4.66.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.66.0/StreamChat-All.zip","4.67.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.67.0/StreamChat-All.zip","4.68.0":"https://github.com/GetStream/stream-chat-swift/releases/download/4.68.0/StreamChat-All.zip"} \ No newline at end of file diff --git a/StreamChatUI-XCFramework.podspec b/StreamChatUI-XCFramework.podspec index ffb2103194..af6c15c82b 100644 --- a/StreamChatUI-XCFramework.podspec +++ b/StreamChatUI-XCFramework.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "StreamChatUI-XCFramework" - spec.version = "4.67.0" + spec.version = "4.68.0" spec.summary = "StreamChat UI Components" spec.description = "StreamChatUI SDK offers flexible UI components able to display data provided by StreamChat SDK." diff --git a/StreamChatUI.podspec b/StreamChatUI.podspec index 7725bb64f4..f6c4429198 100644 --- a/StreamChatUI.podspec +++ b/StreamChatUI.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "StreamChatUI" - spec.version = "4.67.0" + spec.version = "4.68.0" spec.summary = "StreamChat UI Components" spec.description = "StreamChatUI SDK offers flexible UI components able to display data provided by StreamChat SDK." From 80755a96d2297fccd6c14746763e3f584f1034cb Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Tue, 3 Dec 2024 09:34:14 +0000 Subject: [PATCH 8/9] Fix reconnection timeout handler not working in the token provider phase (#3513) --- CHANGELOG.md | 1 + .../StreamChat/ChatClient+Environment.swift | 11 +- Sources/StreamChat/ChatClient.swift | 48 ++++++- .../AuthenticationRepository.swift | 29 +++-- .../Repositories/ConnectionRepository.swift | 12 +- .../WebSocketClient/ConnectionStatus.swift | 2 +- .../WebSocketClient/WebSocketClient.swift | 23 ++-- .../ConnectionRecoveryHandler.swift | 15 +-- .../ConnectionRepository_Mock.swift | 5 + .../AuthenticationRepository_Mock.swift | 11 +- .../WebSocketClient_Mock.swift | 6 - Tests/StreamChatTests/ChatClient_Tests.swift | 123 +++++++++++++++++- .../AuthenticationRepository_Tests.swift | 8 +- .../ConnectionRepository_Tests.swift | 13 -- .../WebSocketClient_Tests.swift | 13 ++ .../ConnectionRecoveryHandler_Tests.swift | 20 +-- 16 files changed, 239 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b433fe2648..6f3c4e7250 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ _December 03, 2024_ ## StreamChat ### 🐞 Fixed - Fix a rare infinite loop triggering a crash when handling database changes [#3508](https://github.com/GetStream/stream-chat-swift/pull/3508) +- Fix reconnection timeout handler not working in the token provider phase [#3513](https://github.com/GetStream/stream-chat-swift/pull/3513) ## StreamChatUI ### 🐞 Fixed diff --git a/Sources/StreamChat/ChatClient+Environment.swift b/Sources/StreamChat/ChatClient+Environment.swift index 9d86085105..08fd6535aa 100644 --- a/Sources/StreamChat/ChatClient+Environment.swift +++ b/Sources/StreamChat/ChatClient+Environment.swift @@ -47,6 +47,11 @@ extension ChatClient { ) } + var reconnectionHandlerBuilder: (_ chatClientConfig: ChatClientConfig) -> StreamTimer? = { + guard let reconnectionTimeout = $0.reconnectionTimeout else { return nil } + return ScheduledStreamTimer(interval: reconnectionTimeout, fireOnStart: false, repeats: false) + } + var extensionLifecycleBuilder = NotificationExtensionLifecycle.init var requestEncoderBuilder: (_ baseURL: URL, _ apiKey: APIKey) -> RequestEncoder = DefaultRequestEncoder.init @@ -97,8 +102,7 @@ extension ChatClient { _ extensionLifecycle: NotificationExtensionLifecycle, _ backgroundTaskScheduler: BackgroundTaskScheduler?, _ internetConnection: InternetConnection, - _ keepConnectionAliveInBackground: Bool, - _ reconnectionTimeoutHandler: StreamTimer? + _ keepConnectionAliveInBackground: Bool ) -> ConnectionRecoveryHandler = { DefaultConnectionRecoveryHandler( webSocketClient: $0, @@ -109,8 +113,7 @@ extension ChatClient { internetConnection: $5, reconnectionStrategy: DefaultRetryStrategy(), reconnectionTimerType: DefaultTimer.self, - keepConnectionAliveInBackground: $6, - reconnectionTimeoutHandler: $7 + keepConnectionAliveInBackground: $6 ) } diff --git a/Sources/StreamChat/ChatClient.swift b/Sources/StreamChat/ChatClient.swift index c6af54a27d..7e01e5d7c6 100644 --- a/Sources/StreamChat/ChatClient.swift +++ b/Sources/StreamChat/ChatClient.swift @@ -96,6 +96,9 @@ public class ChatClient { /// Used as a bridge to communicate between the host app and the notification extension. Holds the state for the app lifecycle. let extensionLifecycle: NotificationExtensionLifecycle + /// The component responsible to timeout the user connection if it takes more time than the `ChatClientConfig.reconnectionTimeout`. + var reconnectionTimeoutHandler: StreamTimer? + /// The environment object containing all dependencies of this `Client` instance. private let environment: Environment @@ -219,12 +222,18 @@ public class ChatClient { setupOfflineRequestQueue() setupConnectionRecoveryHandler(with: environment) validateIntegrity() + + reconnectionTimeoutHandler = environment.reconnectionHandlerBuilder(config) + reconnectionTimeoutHandler?.onChange = { [weak self] in + self?.timeout() + } } deinit { Self._activeLocalStorageURLs.mutate { $0.subtract(databaseContainer.persistentStoreDescriptions.compactMap(\.url)) } completeConnectionIdWaiters(connectionId: nil) completeTokenWaiters(token: nil) + reconnectionTimeoutHandler?.stop() } func setupTokenRefresher() { @@ -254,8 +263,7 @@ public class ChatClient { extensionLifecycle, environment.backgroundTaskSchedulerBuilder(), environment.internetConnection(eventNotificationCenter, environment.internetMonitor), - config.staysConnectedInBackground, - config.reconnectionTimeout.map { ScheduledStreamTimer(interval: $0, fireOnStart: false, repeats: false) } + config.staysConnectedInBackground ) } @@ -300,7 +308,9 @@ public class ChatClient { tokenProvider: @escaping TokenProvider, completion: ((Error?) -> Void)? = nil ) { + reconnectionTimeoutHandler?.start() connectionRecoveryHandler?.start() + connectionRepository.initialize() authenticationRepository.connectUser( userInfo: userInfo, @@ -393,7 +403,9 @@ public class ChatClient { userInfo: UserInfo, completion: ((Error?) -> Void)? = nil ) { + connectionRepository.initialize() connectionRecoveryHandler?.start() + reconnectionTimeoutHandler?.start() authenticationRepository.connectGuestUser(userInfo: userInfo, completion: { completion?($0) }) } @@ -417,6 +429,8 @@ public class ChatClient { /// Connects an anonymous user /// - Parameter completion: The completion that will be called once the **first** user session for the given token is setup. public func connectAnonymousUser(completion: ((Error?) -> Void)? = nil) { + connectionRepository.initialize() + reconnectionTimeoutHandler?.start() connectionRecoveryHandler?.start() authenticationRepository.connectAnonymousUser( completion: { completion?($0) } @@ -458,7 +472,7 @@ public class ChatClient { completion() } authenticationRepository.clearTokenProvider() - authenticationRepository.cancelTimers() + authenticationRepository.reset() } /// Disconnects the chat client from the chat servers. No further updates from the servers @@ -617,6 +631,15 @@ public class ChatClient { completion?($0) } } + + private func timeout() { + completeConnectionIdWaiters(connectionId: nil) + authenticationRepository.completeTokenCompletions(error: ClientError.ReconnectionTimeout()) + completeTokenWaiters(token: nil) + authenticationRepository.reset() + let webSocketConnectionState = webSocketClient?.connectionState ?? .initialized + connectionRepository.disconnect(source: .timeout(from: webSocketConnectionState)) {} + } } extension ChatClient: AuthenticationRepositoryDelegate { @@ -646,6 +669,17 @@ extension ChatClient: ConnectionStateDelegate { ) connectionRecoveryHandler?.webSocketClient(client, didUpdateConnectionState: state) try? backgroundWorker(of: MessageSender.self).didUpdateConnectionState(state) + + switch state { + case .connecting: + if reconnectionTimeoutHandler?.isRunning == false { + reconnectionTimeoutHandler?.start() + } + case .connected: + reconnectionTimeoutHandler?.stop() + default: + break + } } } @@ -692,6 +726,14 @@ extension ClientError { } } + public final class ReconnectionTimeout: ClientError { + override public var localizedDescription: String { + """ + The reconnection process has timed out after surpassing the value from `ChatClientConfig.reconnectionTimeout`. + """ + } + } + public final class MissingToken: ClientError {} final class WaiterTimeout: ClientError {} diff --git a/Sources/StreamChat/Repositories/AuthenticationRepository.swift b/Sources/StreamChat/Repositories/AuthenticationRepository.swift index 7f36fca6fb..6d45afb2c2 100644 --- a/Sources/StreamChat/Repositories/AuthenticationRepository.swift +++ b/Sources/StreamChat/Repositories/AuthenticationRepository.swift @@ -196,9 +196,12 @@ class AuthenticationRepository { isGettingToken = false } - func cancelTimers() { + func reset() { connectionProviderTimer?.cancel() tokenProviderTimer?.cancel() + tokenQueue.async(flags: .barrier) { + self._tokenExpirationRetryStrategy.resetConsecutiveFailures() + } } func logOutUser() { @@ -280,6 +283,19 @@ class AuthenticationRepository { updateToken(token: token, notifyTokenWaiters: true) } + func completeTokenCompletions(error: Error?) { + let completionBlocks: [(Error?) -> Void]? = tokenQueue.sync(flags: .barrier) { + self._isGettingToken = false + let completions = self._tokenRequestCompletions + return completions + } + completionBlocks?.forEach { $0(error) } + tokenQueue.async(flags: .barrier) { + self._tokenRequestCompletions = [] + self._consecutiveRefreshFailures = 0 + } + } + private func updateToken(token: Token?, notifyTokenWaiters: Bool) { let waiters: [String: (Result) -> Void] = tokenQueue.sync(flags: .barrier) { _currentToken = token @@ -331,21 +347,12 @@ class AuthenticationRepository { isGettingToken = true let onCompletion: (Error?) -> Void = { [weak self] error in - guard let self = self else { return } if let error = error { log.error("Error when getting token: \(error)", subsystems: .authentication) } else { log.debug("Successfully retrieved token", subsystems: .authentication) } - - let completionBlocks: [(Error?) -> Void]? = self.tokenQueue.sync(flags: .barrier) { - self._isGettingToken = false - let completions = self._tokenRequestCompletions - self._tokenRequestCompletions = [] - self._consecutiveRefreshFailures = 0 - return completions - } - completionBlocks?.forEach { $0(error) } + self?.completeTokenCompletions(error: error) } guard consecutiveRefreshFailures < Constants.maximumTokenRefreshAttempts else { diff --git a/Sources/StreamChat/Repositories/ConnectionRepository.swift b/Sources/StreamChat/Repositories/ConnectionRepository.swift index d9b1ece47e..2e6489a18f 100644 --- a/Sources/StreamChat/Repositories/ConnectionRepository.swift +++ b/Sources/StreamChat/Repositories/ConnectionRepository.swift @@ -42,6 +42,10 @@ class ConnectionRepository { self.timerType = timerType } + func initialize() { + webSocketClient?.initialize() + } + /// Connects the chat client the controller represents to the chat servers. /// /// When the connection is established, `ChatClient` starts receiving chat updates, and `currentUser` variable is available. @@ -95,14 +99,6 @@ class ConnectionRepository { return } - if connectionId == nil { - if source == .userInitiated { - log.warning("The client is already disconnected. Skipping the `disconnect` call.") - } - completion() - return - } - // Disconnect the web socket webSocketClient?.disconnect(source: source) { [weak self] in // Reset `connectionId`. This would happen asynchronously by the callback from WebSocketClient anyway, but it's diff --git a/Sources/StreamChat/WebSocketClient/ConnectionStatus.swift b/Sources/StreamChat/WebSocketClient/ConnectionStatus.swift index 50a7607cd8..94fb00e06b 100644 --- a/Sources/StreamChat/WebSocketClient/ConnectionStatus.swift +++ b/Sources/StreamChat/WebSocketClient/ConnectionStatus.swift @@ -77,7 +77,7 @@ enum WebSocketConnectionState: Equatable { } } - /// The initial state meaning that there was no atempt to connect yet. + /// The initial state meaning that the web socket engine is not yet connected or connecting. case initialized /// The web socket is not connected. Contains the source/reason why the disconnection has happened. diff --git a/Sources/StreamChat/WebSocketClient/WebSocketClient.swift b/Sources/StreamChat/WebSocketClient/WebSocketClient.swift index bb03570918..3bcdf9f092 100644 --- a/Sources/StreamChat/WebSocketClient/WebSocketClient.swift +++ b/Sources/StreamChat/WebSocketClient/WebSocketClient.swift @@ -100,6 +100,10 @@ class WebSocketClient { self.eventNotificationCenter = eventNotificationCenter } + func initialize() { + connectionState = .initialized + } + /// Connects the web connect. /// /// Calling this method has no effect is the web socket is already connected, or is in the connecting phase. @@ -137,23 +141,18 @@ class WebSocketClient { source: WebSocketConnectionState.DisconnectionSource = .userInitiated, completion: @escaping () -> Void ) { - connectionState = .disconnecting(source: source) - engineQueue.async { [engine, eventsBatcher] in - engine?.disconnect() - - eventsBatcher.processImmediately(completion: completion) + switch connectionState { + case .initialized, .disconnected, .disconnecting: + connectionState = .disconnected(source: source) + case .connecting, .waitingForConnectionId, .connected: + connectionState = .disconnecting(source: source) } - } - - func timeout() { - let previousState = connectionState - connectionState = .disconnected(source: .timeout(from: previousState)) + engineQueue.async { [engine, eventsBatcher] in engine?.disconnect() - eventsBatcher.processImmediately {} + eventsBatcher.processImmediately(completion: completion) } - log.error("Connection timed out. `\(connectionState)", subsystems: .webSocket) } } diff --git a/Sources/StreamChat/Workers/Background/ConnectionRecoveryHandler.swift b/Sources/StreamChat/Workers/Background/ConnectionRecoveryHandler.swift index 14d99290a0..41e4a90344 100644 --- a/Sources/StreamChat/Workers/Background/ConnectionRecoveryHandler.swift +++ b/Sources/StreamChat/Workers/Background/ConnectionRecoveryHandler.swift @@ -36,7 +36,6 @@ final class DefaultConnectionRecoveryHandler: ConnectionRecoveryHandler { private var reconnectionStrategy: RetryStrategy private var reconnectionTimer: TimerControl? private let keepConnectionAliveInBackground: Bool - private var reconnectionTimeoutHandler: StreamTimer? // MARK: - Init @@ -49,8 +48,7 @@ final class DefaultConnectionRecoveryHandler: ConnectionRecoveryHandler { internetConnection: InternetConnection, reconnectionStrategy: RetryStrategy, reconnectionTimerType: Timer.Type, - keepConnectionAliveInBackground: Bool, - reconnectionTimeoutHandler: StreamTimer? + keepConnectionAliveInBackground: Bool ) { self.webSocketClient = webSocketClient self.eventNotificationCenter = eventNotificationCenter @@ -61,7 +59,6 @@ final class DefaultConnectionRecoveryHandler: ConnectionRecoveryHandler { self.reconnectionStrategy = reconnectionStrategy self.reconnectionTimerType = reconnectionTimerType self.keepConnectionAliveInBackground = keepConnectionAliveInBackground - self.reconnectionTimeoutHandler = reconnectionTimeoutHandler } func start() { @@ -71,7 +68,6 @@ final class DefaultConnectionRecoveryHandler: ConnectionRecoveryHandler { func stop() { unsubscribeFromNotifications() cancelReconnectionTimer() - reconnectionTimeoutHandler?.stop() } deinit { @@ -94,11 +90,6 @@ private extension DefaultConnectionRecoveryHandler { name: .internetConnectionAvailabilityDidChange, object: nil ) - - reconnectionTimeoutHandler?.onChange = { [weak self] in - self?.webSocketClient.timeout() - self?.cancelReconnectionTimer() - } } func unsubscribeFromNotifications() { @@ -177,9 +168,6 @@ extension DefaultConnectionRecoveryHandler { switch state { case .connecting: cancelReconnectionTimer() - if reconnectionTimeoutHandler?.isRunning == false { - reconnectionTimeoutHandler?.start() - } case .connected: extensionLifecycle.setAppState(isReceivingEvents: true) @@ -187,7 +175,6 @@ extension DefaultConnectionRecoveryHandler { syncRepository.syncLocalState { log.info("Local state sync completed", subsystems: .offlineSupport) } - reconnectionTimeoutHandler?.stop() case .disconnected: extensionLifecycle.setAppState(isReceivingEvents: false) diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/ConnectionRepository_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/ConnectionRepository_Mock.swift index efd3cf5a4e..bd95468abd 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/ConnectionRepository_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/ConnectionRepository_Mock.swift @@ -8,6 +8,7 @@ import Foundation /// Mock implementation of `ChatClientUpdater` final class ConnectionRepository_Mock: ConnectionRepository, Spy { enum Signature { + static let initialize = "initialize()" static let connect = "connect(completion:)" static let disconnect = "disconnect(source:completion:)" static let forceConnectionInactiveMode = "forceConnectionStatusForInactiveModeIfNeeded()" @@ -58,6 +59,10 @@ final class ConnectionRepository_Mock: ConnectionRepository, Spy { // MARK: - Overrides + override func initialize() { + record() + } + override func connect(completion: ((Error?) -> Void)? = nil) { record() if let result = connectResult { diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Repositories/AuthenticationRepository_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Repositories/AuthenticationRepository_Mock.swift index 5daf097ba9..e8e6577e71 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Repositories/AuthenticationRepository_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Repositories/AuthenticationRepository_Mock.swift @@ -14,6 +14,7 @@ class AuthenticationRepository_Mock: AuthenticationRepository, Spy { static let clearTokenProvider = "clearTokenProvider()" static let logOut = "logOutUser()" static let completeTokenWaiters = "completeTokenWaiters(token:)" + static let completeTokenCompletions = "completeTokenCompletions(error:)" static let setToken = "setToken(token:completeTokenWaiters:)" static let provideToken = "provideToken(timeout:completion:)" } @@ -94,9 +95,9 @@ class AuthenticationRepository_Mock: AuthenticationRepository, Spy { record() } - var cancelTimersCallCount: Int = 0 - override func cancelTimers() { - cancelTimersCallCount += 1 + var resetCallCount: Int = 0 + override func reset() { + resetCallCount += 1 } override func completeTokenWaiters(token: Token?) { @@ -104,6 +105,10 @@ class AuthenticationRepository_Mock: AuthenticationRepository, Spy { completeWaitersToken = token } + override func completeTokenCompletions(error: (any Error)?) { + record() + } + override func provideToken(timeout: TimeInterval = 10, completion: @escaping (Result) -> Void) { record() } diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/WebSocketClient_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/WebSocketClient_Mock.swift index 169931a561..95180c1fe1 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/WebSocketClient_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/WebSocketClient_Mock.swift @@ -21,8 +21,6 @@ final class WebSocketClient_Mock: WebSocketClient { var disconnect_called: Bool { disconnect_calledCounter > 0 } var disconnect_completion: (() -> Void)? - var timeout_callCount = 0 - var mockedConnectionState: WebSocketConnectionState? @@ -78,10 +76,6 @@ final class WebSocketClient_Mock: WebSocketClient { disconnect_completion = completion } - override func timeout() { - timeout_callCount += 1 - } - var mockEventsBatcher: EventBatcher_Mock { eventsBatcher as! EventBatcher_Mock } diff --git a/Tests/StreamChatTests/ChatClient_Tests.swift b/Tests/StreamChatTests/ChatClient_Tests.swift index dc2a0b86dd..bd887776ca 100644 --- a/Tests/StreamChatTests/ChatClient_Tests.swift +++ b/Tests/StreamChatTests/ChatClient_Tests.swift @@ -462,6 +462,9 @@ final class ChatClient_Tests: XCTestCase { let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) let userInfo = UserInfo(id: "id") let authenticationRepository = try XCTUnwrap(client.authenticationRepository as? AuthenticationRepository_Mock) + let reconnectionTimeoutHandler = try XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + let connectionRecoveryHandler = try XCTUnwrap(client.connectionRecoveryHandler as? ConnectionRecoveryHandler_Mock) + let connectionRepository = try XCTUnwrap(client.connectionRepository as? ConnectionRepository_Mock) let expectation = self.expectation(description: "Connect completes") authenticationRepository.connectUserResult = .success(()) @@ -472,8 +475,11 @@ final class ChatClient_Tests: XCTestCase { } waitForExpectations(timeout: defaultTimeout) - XCTAssertCall(AuthenticationRepository_Mock.Signature.connectTokenProvider, on: authenticationRepository) XCTAssertNil(receivedError) + XCTAssertCall(AuthenticationRepository_Mock.Signature.connectTokenProvider, on: authenticationRepository) + XCTAssertCall(ConnectionRepository_Mock.Signature.initialize, on: connectionRepository) + XCTAssertEqual(reconnectionTimeoutHandler.startCallCount, 1) + XCTAssertEqual(connectionRecoveryHandler.startCallCount, 1) } // MARK: - Connect Static Token @@ -598,6 +604,9 @@ final class ChatClient_Tests: XCTestCase { let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) let userInfo = UserInfo(id: "id") let authenticationRepository = try XCTUnwrap(client.authenticationRepository as? AuthenticationRepository_Mock) + let reconnectionTimeoutHandler = try XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + let connectionRecoveryHandler = try XCTUnwrap(client.connectionRecoveryHandler as? ConnectionRecoveryHandler_Mock) + let connectionRepository = try XCTUnwrap(client.connectionRepository as? ConnectionRepository_Mock) let expectation = self.expectation(description: "Connect completes") authenticationRepository.connectGuestResult = .success(()) @@ -608,8 +617,11 @@ final class ChatClient_Tests: XCTestCase { } waitForExpectations(timeout: defaultTimeout) - XCTAssertCall(AuthenticationRepository_Mock.Signature.connectGuest, on: authenticationRepository) XCTAssertNil(receivedError) + XCTAssertCall(AuthenticationRepository_Mock.Signature.connectGuest, on: authenticationRepository) + XCTAssertCall(ConnectionRepository_Mock.Signature.initialize, on: connectionRepository) + XCTAssertEqual(reconnectionTimeoutHandler.startCallCount, 1) + XCTAssertEqual(connectionRecoveryHandler.startCallCount, 1) } // MARK: - Connect Anonymous @@ -635,6 +647,9 @@ final class ChatClient_Tests: XCTestCase { func test_connectAnonymous_tokenProvider_callsAuthenticationRepository_success() throws { let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) let authenticationRepository = try XCTUnwrap(client.authenticationRepository as? AuthenticationRepository_Mock) + let reconnectionTimeoutHandler = try XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + let connectionRecoveryHandler = try XCTUnwrap(client.connectionRecoveryHandler as? ConnectionRecoveryHandler_Mock) + let connectionRepository = try XCTUnwrap(client.connectionRepository as? ConnectionRepository_Mock) let expectation = self.expectation(description: "Connect completes") authenticationRepository.connectAnonResult = .success(()) @@ -645,8 +660,11 @@ final class ChatClient_Tests: XCTestCase { } waitForExpectations(timeout: defaultTimeout) - XCTAssertCall(AuthenticationRepository_Mock.Signature.connectAnon, on: authenticationRepository) XCTAssertNil(receivedError) + XCTAssertCall(AuthenticationRepository_Mock.Signature.connectAnon, on: authenticationRepository) + XCTAssertCall(ConnectionRepository_Mock.Signature.initialize, on: connectionRepository) + XCTAssertEqual(reconnectionTimeoutHandler.startCallCount, 1) + XCTAssertEqual(connectionRecoveryHandler.startCallCount, 1) } // MARK: - Disconnect @@ -665,7 +683,7 @@ final class ChatClient_Tests: XCTestCase { XCTAssertCall(ConnectionRepository_Mock.Signature.disconnect, on: connectionRepository) XCTAssertCall(AuthenticationRepository_Mock.Signature.clearTokenProvider, on: authenticationRepository) - XCTAssertEqual(client.mockAuthenticationRepository.cancelTimersCallCount, 1) + XCTAssertEqual(client.mockAuthenticationRepository.resetCallCount, 1) } func test_logout_shouldDisconnect_logOut_andRemoveAllData() throws { @@ -835,6 +853,97 @@ final class ChatClient_Tests: XCTestCase { XCTAssertEqual(streamHeader, SystemEnvironment.xStreamClientHeader) } + + // MARK: - Reconnection Timeout Tests + + func test_reconnectionTimeoutHandler_isInitializedWithConfig() { + // Given + var config = inMemoryStorageConfig + config.reconnectionTimeout = 20 + let client = ChatClient(config: config) + + // Then + XCTAssertNotNil(client.reconnectionTimeoutHandler) + } + + func test_reconnectionTimeoutHandler_notInitialisedIfTimeoutNotProvided() { + // Given + var config = inMemoryStorageConfig + config.reconnectionTimeout = nil + let client = ChatClient(config: config) + + // Then + XCTAssertNil(client.reconnectionTimeoutHandler) + } + + func test_reconnectionTimeoutHandler_startsOnConnect() { + // Given + let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) + let timerMock = try! XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + + // When + client.connectAnonymousUser() + + // Then + XCTAssertEqual(timerMock.startCallCount, 1) + } + + func test_reconnectionTimeoutHandler_stopsOnConnected() { + // Given + let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) + let timerMock = try! XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + + // When + client.webSocketClient(client.webSocketClient!, didUpdateConnectionState: .connected(connectionId: .unique)) + + // Then + XCTAssertEqual(timerMock.stopCallCount, 1) + } + + func test_reconnectionTimeoutHandler_startsOnConnecting() { + // Given + let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) + let timerMock = try! XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + timerMock.isRunning = false + + // When + client.webSocketClient(client.webSocketClient!, didUpdateConnectionState: .connecting) + + // Then + XCTAssertEqual(timerMock.startCallCount, 1) + } + + func test_reconnectionTimeoutHandler_whenRunning_doesNotStart() { + let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) + let timerMock = try! XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + timerMock.isRunning = true + + // When + client.webSocketClient(client.webSocketClient!, didUpdateConnectionState: .connecting) + + // Then + XCTAssertEqual(timerMock.startCallCount, 0) + } + + func test_reconnectionTimeout_onChange() throws { + // Given + let client = ChatClient(config: inMemoryStorageConfig, environment: testEnv.environment) + let timerMock = try XCTUnwrap(client.reconnectionTimeoutHandler as? ScheduledStreamTimer_Mock) + let authenticationRepository = try XCTUnwrap(client.authenticationRepository as? AuthenticationRepository_Mock) + let connectionRepository = try XCTUnwrap(client.connectionRepository as? ConnectionRepository_Mock) + connectionRepository.disconnectResult = .success(()) + + // When + timerMock.onChange?() + + // Then + XCTAssertCall(ConnectionRepository_Mock.Signature.disconnect, on: connectionRepository) + XCTAssertCall(ConnectionRepository_Mock.Signature.completeConnectionIdWaiters, on: connectionRepository) + XCTAssertCall(AuthenticationRepository_Mock.Signature.completeTokenWaiters, on: authenticationRepository) + XCTAssertCall(AuthenticationRepository_Mock.Signature.completeTokenCompletions, on: authenticationRepository) + XCTAssertEqual(connectionRepository.disconnectSource, .timeout(from: .initialized)) + XCTAssertEqual(authenticationRepository.resetCallCount, 1) + } } final class TestWorker: Worker { @@ -904,6 +1013,9 @@ private class TestEnvironment { ) return self.databaseContainer! }, + reconnectionHandlerBuilder: { _ in + ScheduledStreamTimer_Mock() + }, requestEncoderBuilder: { if let encoder = self.requestEncoder { return encoder @@ -940,6 +1052,9 @@ private class TestEnvironment { return self.backgroundTaskScheduler! }, timerType: VirtualTimeTimer.self, + connectionRecoveryHandlerBuilder: { _, _, _, _, _, _, _ in + ConnectionRecoveryHandler_Mock() + }, authenticationRepositoryBuilder: { self.authenticationRepository = AuthenticationRepository_Mock( apiClient: $0, diff --git a/Tests/StreamChatTests/Repositories/AuthenticationRepository_Tests.swift b/Tests/StreamChatTests/Repositories/AuthenticationRepository_Tests.swift index 3cdbd7e658..63c54ddb90 100644 --- a/Tests/StreamChatTests/Repositories/AuthenticationRepository_Tests.swift +++ b/Tests/StreamChatTests/Repositories/AuthenticationRepository_Tests.swift @@ -1039,11 +1039,12 @@ final class AuthenticationRepository_Tests: XCTestCase { XCTAssertEqual(state, .newToken) } - // MARK: Cancel Timers + // MARK: Reset - func test_cancelTimers() { + func test_reset() { let mockTimer = MockTimer() FakeTimer.mockTimer = mockTimer + retryStrategy.consecutiveFailuresCount = 5 let repository = AuthenticationRepository( apiClient: apiClient, databaseContainer: database, @@ -1059,10 +1060,11 @@ final class AuthenticationRepository_Tests: XCTestCase { completion: { _ in } ) - repository.cancelTimers() + repository.reset() // should cancel the connection provider timer and the // the token provider timer XCTAssertEqual(mockTimer.cancelCallCount, 2) + XCTAssertEqual(retryStrategy.mock_resetConsecutiveFailures.count, 1) } // MARK: Helpers diff --git a/Tests/StreamChatTests/Repositories/ConnectionRepository_Tests.swift b/Tests/StreamChatTests/Repositories/ConnectionRepository_Tests.swift index 58a1e70192..55a4087d05 100644 --- a/Tests/StreamChatTests/Repositories/ConnectionRepository_Tests.swift +++ b/Tests/StreamChatTests/Repositories/ConnectionRepository_Tests.swift @@ -150,19 +150,6 @@ final class ConnectionRepository_Tests: XCTestCase { // MARK: Disconnect - func test_disconnect_noConnectionId_shouldReturnWithoutTryingToConnect() { - XCTAssertNil(repository.connectionId) - - let expectation = self.expectation(description: "connect completes") - repository.disconnect(source: .userInitiated) { expectation.fulfill() } - - waitForExpectations(timeout: defaultTimeout) - - XCTAssertFalse(webSocketClient.disconnect_called) - XCTAssertCall(APIClient_Spy.Signature.flushRequestsQueue, on: apiClient) - XCTAssertCall(SyncRepository_Mock.Signature.cancelRecoveryFlow, on: syncRepository) - } - func test_disconnect_withConnectionId_notInActiveMode_shouldReturnError() { repository.completeConnectionIdWaiters(connectionId: "123") XCTAssertNotNil(repository.connectionId) diff --git a/Tests/StreamChatTests/WebSocketClient/WebSocketClient_Tests.swift b/Tests/StreamChatTests/WebSocketClient/WebSocketClient_Tests.swift index e992b436fa..6ddf97c582 100644 --- a/Tests/StreamChatTests/WebSocketClient/WebSocketClient_Tests.swift +++ b/Tests/StreamChatTests/WebSocketClient/WebSocketClient_Tests.swift @@ -238,7 +238,9 @@ final class WebSocketClient_Tests: XCTestCase { ] for source in testCases { + // reset state engine?.disconnect_calledCount = 0 + webSocketClient.connect() // Call `disconnect` with the given source webSocketClient.disconnect(source: source) {} @@ -257,6 +259,17 @@ final class WebSocketClient_Tests: XCTestCase { } } + func test_disconnect_whenInitialized_shouldDisconnect() { + // When in initialized state + XCTAssertEqual(webSocketClient.connectionState, .initialized) + + // Call disconnect when not connected + webSocketClient.disconnect {} + + // Assert connection state is updated + XCTAssertEqual(webSocketClient.connectionState, .disconnected(source: .userInitiated)) + } + func test_connectionState_afterDecodingError() { // Simulate connection test_connectionFlow() diff --git a/Tests/StreamChatTests/Workers/Background/ConnectionRecoveryHandler_Tests.swift b/Tests/StreamChatTests/Workers/Background/ConnectionRecoveryHandler_Tests.swift index 7584c85b4f..b6b4a2b463 100644 --- a/Tests/StreamChatTests/Workers/Background/ConnectionRecoveryHandler_Tests.swift +++ b/Tests/StreamChatTests/Workers/Background/ConnectionRecoveryHandler_Tests.swift @@ -14,7 +14,6 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { var mockBackgroundTaskScheduler: BackgroundTaskScheduler_Mock! var mockRetryStrategy: RetryStrategy_Spy! var mockTime: VirtualTime { VirtualTimeTimer.time } - var mockReconnectionTimeoutHandler: ScheduledStreamTimer_Mock! override func setUp() { super.setUp() @@ -26,7 +25,6 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { mockRetryStrategy = RetryStrategy_Spy() mockRetryStrategy.mock_nextRetryDelay.returns(5) mockInternetConnection = .init(notificationCenter: mockChatClient.eventNotificationCenter) - mockReconnectionTimeoutHandler = ScheduledStreamTimer_Mock() } override func tearDown() { @@ -46,14 +44,6 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { super.tearDown() } - func test_reconnectionTimeoutHandler_onChange_shouldTimeout() { - handler = makeConnectionRecoveryHandler(keepConnectionAliveInBackground: false, withReconnectionTimeout: true) - mockReconnectionTimeoutHandler.onChange?() - - XCTAssertEqual(mockChatClient.mockWebSocketClient.timeout_callCount, 1) - XCTAssertTrue(mockTime.scheduledTimers.isEmpty) - } - /// keepConnectionAliveInBackground == false /// /// 1. internet -> OFF (no disconnect, no bg task, no timer) @@ -511,31 +501,26 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { XCTAssertNotCall("syncLocalState(completion:)", on: mockChatClient.mockSyncRepository) XCTAssertNil(mockChatClient.mockExtensionLifecycle.receivedIsReceivingEvents) - XCTAssertEqual(mockReconnectionTimeoutHandler.startCallCount, 0) } func test_webSocketStateUpdate_connecting_whenTimeout_whenNotRunning_shouldStartTimeout() { handler = makeConnectionRecoveryHandler(keepConnectionAliveInBackground: false, withReconnectionTimeout: true) - mockReconnectionTimeoutHandler.isRunning = false // Simulate connection update handler.webSocketClient(mockChatClient.mockWebSocketClient, didUpdateConnectionState: .connecting) XCTAssertNotCall("syncLocalState(completion:)", on: mockChatClient.mockSyncRepository) XCTAssertNil(mockChatClient.mockExtensionLifecycle.receivedIsReceivingEvents) - XCTAssertEqual(mockReconnectionTimeoutHandler.startCallCount, 1) } func test_webSocketStateUpdate_connecting_whenTimeout_whenRunning_shouldNotStartTimeout() { handler = makeConnectionRecoveryHandler(keepConnectionAliveInBackground: false, withReconnectionTimeout: true) - mockReconnectionTimeoutHandler.isRunning = true // Simulate connection update handler.webSocketClient(mockChatClient.mockWebSocketClient, didUpdateConnectionState: .connecting) XCTAssertNotCall("syncLocalState(completion:)", on: mockChatClient.mockSyncRepository) XCTAssertNil(mockChatClient.mockExtensionLifecycle.receivedIsReceivingEvents) - XCTAssertEqual(mockReconnectionTimeoutHandler.startCallCount, 0) } func test_webSocketStateUpdate_connected() { @@ -547,7 +532,6 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { XCTAssertCall(RetryStrategy_Spy.Signature.resetConsecutiveFailures, on: mockRetryStrategy, times: 1) XCTAssertCall("syncLocalState(completion:)", on: mockChatClient.mockSyncRepository, times: 1) XCTAssert(mockChatClient.mockExtensionLifecycle.receivedIsReceivingEvents == true) - XCTAssertEqual(mockReconnectionTimeoutHandler.stopCallCount, 0) } func test_webSocketStateUpdate_connected_whenTimeout_shouldStopTimeout() { @@ -559,7 +543,6 @@ final class ConnectionRecoveryHandler_Tests: XCTestCase { XCTAssertCall(RetryStrategy_Spy.Signature.resetConsecutiveFailures, on: mockRetryStrategy, times: 1) XCTAssertCall("syncLocalState(completion:)", on: mockChatClient.mockSyncRepository, times: 1) XCTAssert(mockChatClient.mockExtensionLifecycle.receivedIsReceivingEvents == true) - XCTAssertEqual(mockReconnectionTimeoutHandler.stopCallCount, 1) } func test_webSocketStateUpdate_disconnected_userInitiated() { @@ -648,8 +631,7 @@ private extension ConnectionRecoveryHandler_Tests { internetConnection: mockInternetConnection, reconnectionStrategy: mockRetryStrategy, reconnectionTimerType: VirtualTimeTimer.self, - keepConnectionAliveInBackground: keepConnectionAliveInBackground, - reconnectionTimeoutHandler: withReconnectionTimeout ? mockReconnectionTimeoutHandler : nil + keepConnectionAliveInBackground: keepConnectionAliveInBackground ) handler.start() From 88c724bd767fb367a8431bc26fec4738fe221194 Mon Sep 17 00:00:00 2001 From: Alexey Alter-Pesotskiy Date: Tue, 3 Dec 2024 11:15:34 +0000 Subject: [PATCH 9/9] [CI] Bump Xcode version (#3509) --- .github/workflows/cron-checks.yml | 28 ++++---- .github/workflows/release-publish.yml | 2 +- .github/workflows/smoke-checks.yml | 26 ++++---- .github/workflows/update-copyright.yml | 2 +- CHANGELOG.md | 2 + .../Robots/UserRobot.swift | 3 + .../ChatChannelController_Mock.swift | 62 +++++++++--------- .../ChatChannelListController_Mock.swift | 30 ++++----- .../ChatMessageController_Mock.swift | 26 ++++---- .../ChatMessageSearchController_Mock.swift | 18 ++--- .../ChatThreadListController_Mock.swift | 18 ++--- .../ChatUserSearchController_Mock.swift | 12 ++-- .../CurrentChatUserController_Mock.swift | 8 +-- ..._chatChannel_isPopulated.default-light.png | Bin 22778 -> 23014 bytes ...nViewValues_arePopulated.default-light.png | Bin 24331 -> 24551 bytes ...rePopulated.extraExtraExtraLarge-light.png | Bin 27057 -> 27300 bytes ...arePopulated.rightToLeftLayout-default.png | Bin 24537 -> 24765 bytes ...tionViewValues_arePopulated.small-dark.png | Bin 23596 -> 24086 bytes .../test_defaultAppearance.default-light.png | Bin 26167 -> 26383 bytes ...ibilityWhenAlwaysVisible.default-light.png | Bin 21306 -> 21471 bytes ...lityWhenOnlyVisibleToYou.default-light.png | Bin 17236 -> 17334 bytes ...ithAttachmentsAppearance.default-light.png | Bin 27366 -> 27518 bytes .../test_emptyAppearance.default-light.png | Bin 15190 -> 15257 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 16715 -> 16193 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 15089 -> 15186 bytes .../test_emptyAppearance.small-dark.png | Bin 14890 -> 14977 bytes ...ator_AndIsMarkedAsUnread.default-light.png | Bin 23845 -> 24008 bytes ...ator_AndIsMarkedAsUnread.default-light.png | Bin 26190 -> 26419 bytes ...lyEmojiMessageAppearance.default-light.png | Bin 42665 -> 42768 bytes ...eAppearance.extraExtraExtraLarge-light.png | Bin 46217 -> 45872 bytes ...geAppearance.rightToLeftLayout-default.png | Bin 42578 -> 42707 bytes ..._onlyEmojiMessageAppearance.small-dark.png | Bin 42002 -> 41983 bytes ...rance_whenQuotingMessage.default-light.png | Bin 43551 -> 44087 bytes ...tingMessage.extraExtraExtraLarge-light.png | Bin 47011 -> 47184 bytes ...otingMessage.rightToLeftLayout-default.png | Bin 43506 -> 44033 bytes ...pearance_whenQuotingMessage.small-dark.png | Bin 42923 -> 43675 bytes ...DateSeparatorsAppearance.default-light.png | Bin 32681 -> 33001 bytes ...ditedMessageIsNotGrouped.default-light.png | Bin 25054 -> 25159 bytes ...ge_messagesAreNotGrouped.default-light.png | Bin 31165 -> 31544 bytes ...ge_messagesAreNotGrouped.default-light.png | Bin 24758 -> 24878 bytes ...ge_messagesAreNotGrouped.default-light.png | Bin 25030 -> 25164 bytes ...ault-light-after-current-user-reaction.png | Bin 19920 -> 20068 bytes ...ult-light-before-current-user-reaction.png | Bin 19886 -> 20035 bytes ...MessagesStartAtTheTopIsTrue.small-dark.png | Bin 19101 -> 19658 bytes ...enJumpToUnreadIsDisabled.default-light.png | Bin 32697 -> 33271 bytes ...henJumpToUnreadIsEnabled.default-light.png | Bin 32697 -> 33271 bytes ...ouldShowABannerOnTopOfIt.default-light.png | Bin 25755 -> 25977 bytes ...ouldShowABannerOnTopOfIt.default-light.png | Bin 28160 -> 28360 bytes ...rLess_messagesAreGrouped.default-light.png | Bin 23183 -> 23456 bytes ...in_messagesAreNotGrouped.default-light.png | Bin 22656 -> 22833 bytes ...rLess_messagesAreGrouped.default-light.png | Bin 21845 -> 21943 bytes ...in_messagesAreNotGrouped.default-light.png | Bin 20318 -> 20422 bytes .../Search/ChatMessageSearchVC_Tests.swift | 4 +- .../test_defaultAppearance.default-light.png | Bin 27904 -> 27857 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 33166 -> 33143 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 27834 -> 27760 bytes .../test_defaultAppearance.small-dark.png | Bin 27004 -> 26985 bytes .../test_emptyAppearance.default-light.png | Bin 19623 -> 19613 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 20156 -> 20217 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 19635 -> 19644 bytes .../test_emptyAppearance.small-dark.png | Bin 20284 -> 20138 bytes .../test_loadingAppearance.default-light.png | Bin 13340 -> 13304 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 13885 -> 13956 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 13344 -> 13332 bytes .../test_loadingAppearance.small-dark.png | Bin 13461 -> 13416 bytes .../test_defaultAppearance.default-light.png | Bin 32311 -> 33829 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 39369 -> 41173 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 32364 -> 33812 bytes .../test_defaultAppearance.small-dark.png | Bin 31164 -> 32499 bytes .../test_emptyAppearance.default-light.png | Bin 19623 -> 19613 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 20156 -> 20217 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 19635 -> 19644 bytes .../test_emptyAppearance.small-dark.png | Bin 20284 -> 20138 bytes .../test_loadingAppearance.default-light.png | Bin 13340 -> 13304 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 13885 -> 13956 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 13344 -> 13332 bytes .../test_loadingAppearance.small-dark.png | Bin 13461 -> 13416 bytes ...mization_usingAppearance.default-light.png | Bin 23044 -> 23029 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 23044 -> 23029 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 23044 -> 23029 bytes ...stomization_usingAppearance.small-dark.png | Bin 25688 -> 25678 bytes ...ization_usingSubclassing.default-light.png | Bin 19511 -> 19477 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 19511 -> 19477 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 19511 -> 19477 bytes ...tomization_usingSubclassing.small-dark.png | Bin 19574 -> 19536 bytes .../test_defaultAppearance.default-light.png | Bin 21789 -> 21777 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 21789 -> 21777 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 21789 -> 21777 bytes .../test_defaultAppearance.small-dark.png | Bin 23890 -> 23466 bytes ...mization_usingAppearance.default-light.png | Bin 4651 -> 4654 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 4651 -> 4654 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 4666 -> 4662 bytes ...stomization_usingAppearance.small-dark.png | Bin 4651 -> 4654 bytes ...ization_usingSubclassing.default-light.png | Bin 4451 -> 4462 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 4451 -> 4462 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 4489 -> 4494 bytes ...tomization_usingSubclassing.small-dark.png | Bin 4451 -> 4462 bytes .../test_defaultAppearance.default-light.png | Bin 4651 -> 4654 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 4651 -> 4654 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 4666 -> 4662 bytes .../test_defaultAppearance.small-dark.png | Bin 4651 -> 4654 bytes ...test_injectedSwiftUIView.default-light.png | Bin 9727 -> 9729 bytes ...SwiftUIView.extraExtraExtraLarge-light.png | Bin 10202 -> 10204 bytes ...dSwiftUIView.rightToLeftLayout-default.png | Bin 9820 -> 9817 bytes .../test_injectedSwiftUIView.small-dark.png | Bin 9384 -> 9386 bytes ...mization_usingAppearance.default-light.png | Bin 10816 -> 10853 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 11670 -> 11698 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 10844 -> 10902 bytes ...stomization_usingAppearance.small-dark.png | Bin 10737 -> 10729 bytes ...ization_usingSubclassing.default-light.png | Bin 13610 -> 13640 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 16112 -> 16144 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 13633 -> 13667 bytes ...tomization_usingSubclassing.small-dark.png | Bin 13105 -> 13090 bytes ...ance_audioPreviewMessage.default-light.png | Bin 12123 -> 12118 bytes ...sage_whenMultipleMembers.default-light.png | Bin 12457 -> 12460 bytes ...ge_whenSentByCurrentUser.default-light.png | Bin 12520 -> 12530 bytes ...wMessage_whenTextIsEmpty.default-light.png | Bin 11133 -> 11142 bytes ...CurrentUser_readsDisabled.default-dark.png | Bin 12985 -> 12973 bytes ...urrentUser_readsDisabled.default-light.png | Bin 13141 -> 13160 bytes ...mCurrentUser_readsEnabled.default-dark.png | Bin 12985 -> 12973 bytes ...CurrentUser_readsEnabled.default-light.png | Bin 13141 -> 13160 bytes ...rance_filePreviewMessage.default-light.png | Bin 11291 -> 11302 bytes ...sage_whenMultipleMembers.default-light.png | Bin 11684 -> 11697 bytes ...ge_whenSentByCurrentUser.default-light.png | Bin 11728 -> 11748 bytes ...ewMessage_whenTitleIsNil.default-light.png | Bin 12121 -> 12119 bytes ...ance_giphyPreviewMessage.default-light.png | Bin 10791 -> 10799 bytes ...sage_whenMultipleMembers.default-light.png | Bin 11198 -> 11203 bytes ...ge_whenSentByCurrentUser.default-light.png | Bin 11248 -> 11241 bytes ...ance_imagePreviewMessage.default-light.png | Bin 12345 -> 12338 bytes ...sage_whenMultipleMembers.default-light.png | Bin 12755 -> 12745 bytes ...ge_whenSentByCurrentUser.default-light.png | Bin 12809 -> 12810 bytes ...wMessage_whenTextIsEmpty.default-light.png | Bin 11367 -> 11378 bytes ...urrentUser_readsDisabled.default-light.png | Bin 12543 -> 12550 bytes ...CurrentUser_readsEnabled.default-light.png | Bin 12543 -> 12550 bytes ...LatestVoterIsAnotherUser.default-light.png | Bin 12742 -> 12728 bytes ...LatestVoterIsCurrentUser.default-light.png | Bin 12293 -> 12306 bytes ...CurrentUser.extraExtraExtraLarge-light.png | Bin 14415 -> 14476 bytes ...sCurrentUser.rightToLeftLayout-default.png | Bin 12345 -> 12363 bytes ...henLatestVoterIsCurrentUser.small-dark.png | Bin 11646 -> 11653 bytes ...PollCreatedByAnotherUser.default-light.png | Bin 12979 -> 12981 bytes ...PollCreatedByCurrentUser.default-light.png | Bin 12481 -> 12467 bytes ...wMessageIsVoiceRecording.default-light.png | Bin 6458 -> 6445 bytes ...ceRecording.extraExtraExtraLarge-light.png | Bin 7666 -> 7641 bytes ...iceRecording.rightToLeftLayout-default.png | Bin 6587 -> 6548 bytes ...viewMessageIsVoiceRecording.small-dark.png | Bin 6028 -> 6051 bytes ...omAnotherUser_readEnabled.default-dark.png | Bin 12850 -> 12842 bytes ...mAnotherUser_readEnabled.default-light.png | Bin 13091 -> 13115 bytes ...CurrentUser_readsDisabled.default-dark.png | Bin 12610 -> 12593 bytes ...urrentUser_readsDisabled.default-light.png | Bin 12769 -> 12804 bytes ...mCurrentUser_readsEnabled.default-dark.png | Bin 12858 -> 12847 bytes ...CurrentUser_readsEnabled.default-light.png | Bin 13002 -> 13046 bytes ...ppearance_searchedMessage.default-dark.png | Bin 13070 -> 13057 bytes ...age.default-light-without-channel-name.png | Bin 11549 -> 11576 bytes ...pearance_searchedMessage.default-light.png | Bin 13223 -> 13306 bytes ...CurrentUser_readsDisabled.default-dark.png | Bin 12497 -> 12516 bytes ...urrentUser_readsDisabled.default-light.png | Bin 12720 -> 12745 bytes ...mCurrentUser_readsEnabled.default-dark.png | Bin 12611 -> 12628 bytes ...CurrentUser_readsEnabled.default-light.png | Bin 12846 -> 12868 bytes ...ance_systemPreviewMessage.default-dark.png | Bin 11351 -> 11355 bytes ...nce_systemPreviewMessage.default-light.png | Bin 11627 -> 11627 bytes ...earance_translatedMessage.default-dark.png | Bin 10836 -> 10831 bytes ...arance_translatedMessage.default-light.png | Bin 11070 -> 11067 bytes ...Message_whenHasAttachment.default-dark.png | Bin 11552 -> 11570 bytes ...essage_whenHasAttachment.default-light.png | Bin 11787 -> 11795 bytes ...ance_videoPreviewMessage.default-light.png | Bin 12396 -> 12408 bytes ...sage_whenMultipleMembers.default-light.png | Bin 12766 -> 12764 bytes ...ge_whenSentByCurrentUser.default-light.png | Bin 12807 -> 12820 bytes ...wMessage_whenTextIsEmpty.default-light.png | Bin 11421 -> 11428 bytes .../test_emptyState.default-light.png | Bin 4962 -> 4966 bytes ..._emptyState.extraExtraExtraLarge-light.png | Bin 4962 -> 4966 bytes ...t_emptyState.rightToLeftLayout-default.png | Bin 5115 -> 5086 bytes .../test_emptyState.small-dark.png | Bin 4847 -> 4856 bytes ...tChannelList_isPopulated.default-light.png | Bin 49006 -> 49155 bytes ...isPopulated.extraExtraExtraLarge-light.png | Bin 54755 -> 54861 bytes ..._isPopulated.rightToLeftLayout-default.png | Bin 49180 -> 49260 bytes ...chatChannelList_isPopulated.small-dark.png | Bin 44929 -> 44790 bytes ...nViewValues_arePopulated.default-light.png | Bin 51043 -> 51174 bytes ...rePopulated.extraExtraExtraLarge-light.png | Bin 56808 -> 56905 bytes ...arePopulated.rightToLeftLayout-default.png | Bin 51042 -> 51173 bytes ...tionViewValues_arePopulated.small-dark.png | Bin 50160 -> 49981 bytes ...omization_usingComponents.default-dark.png | Bin 51313 -> 51113 bytes ...mization_usingComponents.default-light.png | Bin 50892 -> 51032 bytes ...mization_usingSubclassing.default-dark.png | Bin 49558 -> 49417 bytes ...ization_usingSubclassing.default-light.png | Bin 49030 -> 49202 bytes ...appearance_withSearchBar.default-light.png | Bin 52652 -> 52800 bytes ...thSearchBar.extraExtraExtraLarge-light.png | Bin 58332 -> 58410 bytes ...ithSearchBar.rightToLeftLayout-default.png | Bin 52871 -> 52946 bytes ...st_appearance_withSearchBar.small-dark.png | Bin 51584 -> 51387 bytes .../test_defaultAppearance.default-light.png | Bin 50881 -> 51026 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 56428 -> 56510 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 51086 -> 51164 bytes .../test_defaultAppearance.small-dark.png | Bin 49819 -> 49632 bytes .../test_emptyAppearance.default-light.png | Bin 27949 -> 27908 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 28507 -> 28528 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 27959 -> 27952 bytes .../test_emptyAppearance.small-dark.png | Bin 29698 -> 28853 bytes ...test_injectedSwiftUIView.default-light.png | Bin 1789 -> 1791 bytes ...SwiftUIView.extraExtraExtraLarge-light.png | Bin 2073 -> 2075 bytes ...dSwiftUIView.rightToLeftLayout-default.png | Bin 1799 -> 1794 bytes .../test_injectedSwiftUIView.small-dark.png | Bin 1588 -> 1588 bytes ...mization_usingComponents.default-light.png | Bin 799 -> 803 bytes ...gComponents.extraExtraExtraLarge-light.png | Bin 1071 -> 1060 bytes ...ngComponents.rightToLeftLayout-default.png | Bin 799 -> 803 bytes ...stomization_usingComponents.small-dark.png | Bin 776 -> 775 bytes ...ization_usingSubclassing.default-light.png | Bin 1657 -> 1679 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 1585 -> 1605 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 1657 -> 1679 bytes ...tomization_usingSubclassing.small-dark.png | Bin 1571 -> 1597 bytes ...efaultAppearance.default-light-2digits.png | Bin 895 -> 900 bytes ...efaultAppearance.default-light-3digits.png | Bin 1094 -> 1138 bytes ...nce.extraExtraExtraLarge-light-2digits.png | Bin 1179 -> 1176 bytes ...nce.extraExtraExtraLarge-light-3digits.png | Bin 1495 -> 1512 bytes ...ance.rightToLeftLayout-default-2digits.png | Bin 895 -> 900 bytes ...ance.rightToLeftLayout-default-3digits.png | Bin 1094 -> 1138 bytes ...t_defaultAppearance.small-dark-2digits.png | Bin 875 -> 867 bytes ...t_defaultAppearance.small-dark-3digits.png | Bin 1061 -> 1081 bytes ...mization_usingAppearance.default-light.png | Bin 5194 -> 5365 bytes ...ization_usingSubclassing.default-light.png | Bin 5630 -> 5822 bytes .../test_appearance_pdf.default-light.png | Bin 5155 -> 5306 bytes ...nDownloadedThenShareIcon.default-light.png | Bin 5561 -> 5730 bytes ...rance_pdf_whenSizeIsZero.default-light.png | Bin 4929 -> 5099 bytes ..._whenUploadingStateIsNil.default-light.png | Bin 5155 -> 5306 bytes ...t_appearance_whenUnknown.default-light.png | Bin 6155 -> 6315 bytes ...ization_usingSubclassing.default-light.png | Bin 17668 -> 17823 bytes ...earance_five_attachments.default-light.png | Bin 21937 -> 22532 bytes ...ppearance_one_attachment.default-light.png | Bin 5252 -> 5415 bytes ...pearance_two_attachments.default-light.png | Bin 9436 -> 9741 bytes ...mization_usingAppearance.default-light.png | Bin 69921 -> 69920 bytes ...ce_whenMoreThanFourImages.default-dark.png | Bin 68979 -> 68973 bytes ...e_whenMoreThanFourImages.default-light.png | Bin 68979 -> 68973 bytes .../test_appearance.default-light.png | Bin 48623 -> 48761 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 45875 -> 46075 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 47292 -> 47422 bytes .../test_appearance.small-dark.png | Bin 49665 -> 49785 bytes ...mization_usingAppearance.default-light.png | Bin 48676 -> 48820 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 45937 -> 46133 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 47352 -> 47481 bytes ...stomization_usingAppearance.small-dark.png | Bin 49714 -> 49833 bytes ...ization_usingSubclassing.default-light.png | Bin 48736 -> 48887 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 45843 -> 46037 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 47426 -> 47555 bytes ...tomization_usingSubclassing.small-dark.png | Bin 49825 -> 49947 bytes ...appearance_whenLongTexts.default-light.png | Bin 51273 -> 51426 bytes ...enLongTexts.extraExtraExtraLarge-light.png | Bin 50183 -> 50378 bytes ...henLongTexts.rightToLeftLayout-default.png | Bin 50370 -> 50505 bytes ...st_appearance_whenLongTexts.small-dark.png | Bin 51976 -> 52097 bytes ..._appearance_whenNoAuthor.default-light.png | Bin 53584 -> 53623 bytes ...henNoAuthor.extraExtraExtraLarge-light.png | Bin 54063 -> 54099 bytes ...whenNoAuthor.rightToLeftLayout-default.png | Bin 53585 -> 53623 bytes ...est_appearance_whenNoAuthor.small-dark.png | Bin 53551 -> 53586 bytes ...rance_whenNoImagePreview.default-light.png | Bin 3401 -> 3450 bytes ...magePreview.extraExtraExtraLarge-light.png | Bin 4532 -> 4583 bytes ...ImagePreview.rightToLeftLayout-default.png | Bin 3416 -> 3455 bytes ...pearance_whenNoImagePreview.small-dark.png | Bin 3238 -> 3269 bytes ...t_appearance_whenNoTitle.default-light.png | Bin 48013 -> 48178 bytes ...whenNoTitle.extraExtraExtraLarge-light.png | Bin 44950 -> 45149 bytes ..._whenNoTitle.rightToLeftLayout-default.png | Bin 46711 -> 46853 bytes ...test_appearance_whenNoTitle.small-dark.png | Bin 49138 -> 49263 bytes ...rance_whenNoTitleAndText.default-light.png | Bin 47658 -> 47815 bytes ...itleAndText.extraExtraExtraLarge-light.png | Bin 44314 -> 44510 bytes ...TitleAndText.rightToLeftLayout-default.png | Bin 46266 -> 46405 bytes ...pearance_whenNoTitleAndText.small-dark.png | Bin 48696 -> 48803 bytes ...ization_usingSubclassing.default-light.png | Bin 18206 -> 18288 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 22318 -> 22374 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 17749 -> 17781 bytes ...tomization_usingSubclassing.small-dark.png | Bin 16570 -> 16759 bytes ...earance_five_attachments.default-light.png | Bin 35641 -> 35968 bytes ...attachments.extraExtraExtraLarge-light.png | Bin 40462 -> 40669 bytes ..._attachments.rightToLeftLayout-default.png | Bin 35203 -> 35457 bytes ...appearance_five_attachments.small-dark.png | Bin 33740 -> 34013 bytes ...ppearance_one_attachment.default-light.png | Bin 7141 -> 7181 bytes ..._attachment.extraExtraExtraLarge-light.png | Bin 7758 -> 7835 bytes ...e_attachment.rightToLeftLayout-default.png | Bin 7015 -> 7112 bytes ...t_appearance_one_attachment.small-dark.png | Bin 6654 -> 6776 bytes ...pearance_two_attachments.default-light.png | Bin 14280 -> 14515 bytes ...attachments.extraExtraExtraLarge-light.png | Bin 16026 -> 16128 bytes ..._attachments.rightToLeftLayout-default.png | Bin 14046 -> 14248 bytes ..._appearance_two_attachments.small-dark.png | Bin 13471 -> 13729 bytes ...omization_usingAppearance.default-dark.png | Bin 2431 -> 2789 bytes ...mization_usingAppearance.default-light.png | Bin 2413 -> 2826 bytes ...mization_usingSubclassing.default-dark.png | Bin 2162 -> 2301 bytes ...ization_usingSubclassing.default-light.png | Bin 2167 -> 2246 bytes ...pearance_whenContentIsSet.default-dark.png | Bin 2636 -> 2845 bytes ...earance_whenContentIsSet.default-light.png | Bin 2576 -> 2825 bytes ...pearance_whenNoContentSet.default-dark.png | Bin 2431 -> 2789 bytes ...earance_whenNoContentSet.default-light.png | Bin 2413 -> 2826 bytes ...ge-reactions-text-threadInfo-timestamp.png | Bin 18127 -> 18528 bytes ...quotedMessage-reactions-text-timestamp.png | Bin 15101 -> 15478 bytes ...ar-bubble-quotedMessage-text-timestamp.png | Bin 13707 -> 14008 bytes ...avatar-bubble-reactions-text-timestamp.png | Bin 9783 -> 9917 bytes ...ult-light-avatar-bubble-text-timestamp.png | Bin 8281 -> 8431 bytes ...uotedMessage-reactions-text-threadInfo.png | Bin 15229 -> 15609 bytes ...ousBubble-quotedMessage-reactions-text.png | Bin 12192 -> 12564 bytes ...le-continuousBubble-quotedMessage-text.png | Bin 10625 -> 10927 bytes ...bubble-continuousBubble-reactions-text.png | Bin 6962 -> 7099 bytes ...zePadding-bubble-continuousBubble-text.png | Bin 5348 -> 5497 bytes ...ge-reactions-text-threadInfo-timestamp.png | Bin 15744 -> 15905 bytes ...uotedMessage-reactions-text-threadInfo.png | Bin 14588 -> 14743 bytes ...ge-reactions-text-threadInfo-timestamp.png | Bin 15397 -> 15566 bytes ...uotedMessage-reactions-text-threadInfo.png | Bin 14236 -> 14407 bytes ...e-flipped-quotedMessage-reactions-text.png | Bin 11202 -> 11347 bytes ...nuousBubble-flipped-quotedMessage-text.png | Bin 9607 -> 9783 bytes ...ontinuousBubble-flipped-reactions-text.png | Bin 6095 -> 6079 bytes ...t-bubble-continuousBubble-flipped-text.png | Bin 5017 -> 5026 bytes ...quotedMessage-reactions-text-timestamp.png | Bin 12275 -> 12450 bytes ...e-flipped-quotedMessage-text-timestamp.png | Bin 10864 -> 11051 bytes ...ubble-flipped-reactions-text-timestamp.png | Bin 7747 -> 7736 bytes ...lt-light-bubble-flipped-text-timestamp.png | Bin 5802 -> 5829 bytes ...ization_usingSubclassing.default-light.png | Bin 5873 -> 5901 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 8830 -> 8887 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 5897 -> 5919 bytes ...tomization_usingSubclassing.small-dark.png | Bin 5432 -> 5540 bytes ...tomization_usingUIConfig.default-light.png | Bin 5873 -> 5901 bytes ...ingUIConfig.extraExtraExtraLarge-light.png | Bin 8830 -> 8887 bytes ...singUIConfig.rightToLeftLayout-default.png | Bin 5897 -> 5919 bytes ...Customization_usingUIConfig.small-dark.png | Bin 5432 -> 5540 bytes ...ppearanceForErrorMessage.default-light.png | Bin 3315 -> 3312 bytes ...rrorMessage.extraExtraExtraLarge-light.png | Bin 5680 -> 5676 bytes ...ErrorMessage.rightToLeftLayout-default.png | Bin 3315 -> 3312 bytes ...t_appearanceForErrorMessage.small-dark.png | Bin 3156 -> 3144 bytes ...pearanceForSystemMessage.default-light.png | Bin 3315 -> 3312 bytes ...stemMessage.extraExtraExtraLarge-light.png | Bin 5680 -> 5676 bytes ...ystemMessage.rightToLeftLayout-default.png | Bin 3315 -> 3312 bytes ..._appearanceForSystemMessage.small-dark.png | Bin 3156 -> 3144 bytes ...eCurrentUserIsPendingSend.default-dark.png | Bin 5319 -> 5360 bytes ...CurrentUserIsPendingSend.default-light.png | Bin 5307 -> 5314 bytes ..._inDirectMesssagesChannel.default-dark.png | Bin 8760 -> 8852 bytes ...inDirectMesssagesChannel.default-light.png | Bin 8643 -> 8765 bytes ...UserIsRead_inGroupChannel.default-dark.png | Bin 7625 -> 7724 bytes ...serIsRead_inGroupChannel.default-light.png | Bin 7534 -> 7636 bytes ...eFromTheCurrentUserIsSent.default-dark.png | Bin 4814 -> 4851 bytes ...FromTheCurrentUserIsSent.default-light.png | Bin 4819 -> 4827 bytes ...arance_whenMessageHasLink.default-dark.png | Bin 99871 -> 100009 bytes ...rance_whenMessageHasLink.default-light.png | Bin 99051 -> 99282 bytes ...essageHasLinkAndMarkdown.default-light.png | Bin 102215 -> 102778 bytes ...MessageHasLinkAndMention.default-light.png | Bin 102318 -> 102712 bytes ...ssageHasLinkWithoutAuthor.default-dark.png | Bin 103165 -> 103298 bytes ...sageHasLinkWithoutAuthor.default-light.png | Bin 102939 -> 103140 bytes ...essageHasLinkWithoutImage.default-dark.png | Bin 21528 -> 21446 bytes ...ssageHasLinkWithoutImage.default-light.png | Bin 21044 -> 21019 bytes ...LinkWithoutImageAndAuthor.default-dark.png | Bin 19830 -> 19771 bytes ...inkWithoutImageAndAuthor.default-light.png | Bin 19352 -> 19443 bytes ...lation_whenHasAttachment.default-light.png | Bin 103494 -> 103789 bytes ...n_whenIsSentByCurrentUser.default-dark.png | Bin 5655 -> 5693 bytes ..._whenIsSentByCurrentUser.default-light.png | Bin 5625 -> 5657 bytes ...lation_whenNotLastInGroup.default-dark.png | Bin 4629 -> 4658 bytes ...ation_whenNotLastInGroup.default-light.png | Bin 4602 -> 4615 bytes ..._whenNotSentByCurrentUser.default-dark.png | Bin 6918 -> 7045 bytes ...whenNotSentByCurrentUser.default-light.png | Bin 6925 -> 7024 bytes ...nce_whenMessageIsBounced.default-light.png | Bin 3713 -> 3750 bytes ...ance_whenMessageIsEdited.default-light.png | Bin 5203 -> 5208 bytes ...ageIsEdited.extraExtraExtraLarge-light.png | Bin 6990 -> 7050 bytes ...sageIsEdited.rightToLeftLayout-default.png | Bin 5221 -> 5234 bytes ...earance_whenMessageIsEdited.small-dark.png | Bin 4792 -> 4829 bytes ...shouldNotShowEditedLabel.default-light.png | Bin 5148 -> 5189 bytes ...eWithAMentionedUserIsSent.default-dark.png | Bin 8093 -> 8174 bytes ...WithAMentionedUserIsSent.default-light.png | Bin 7919 -> 8023 bytes ...nt_whenDuplicatedMentions.default-dark.png | Bin 8256 -> 8389 bytes ...t_whenDuplicatedMentions.default-light.png | Bin 8105 -> 8252 bytes ...onedUserIsSent_whenNoName.default-dark.png | Bin 7571 -> 7652 bytes ...nedUserIsSent_whenNoName.default-light.png | Bin 7460 -> 7553 bytes ...nFromTheCurrentUserIsSent.default-dark.png | Bin 14598 -> 14635 bytes ...FromTheCurrentUserIsSent.default-light.png | Bin 14443 -> 14522 bytes ...eFromTheCurrentUserIsSent.default-dark.png | Bin 45428 -> 45537 bytes ...FromTheCurrentUserIsSent.default-light.png | Bin 43888 -> 43983 bytes ...tFromTheCurrentUserIsSent.default-dark.png | Bin 16696 -> 16637 bytes ...FromTheCurrentUserIsSent.default-light.png | Bin 16661 -> 16696 bytes ...tFromTheCurrentUserIsSent.default-dark.png | Bin 11654 -> 11731 bytes ...FromTheCurrentUserIsSent.default-light.png | Bin 11576 -> 11674 bytes ...oteMessageHasTranslation.default-light.png | Bin 8290 -> 8602 bytes ...ssageIsReadInGroupChannel.default-dark.png | Bin 817 -> 818 bytes .../test_appearance.default-light.png | Bin 29095 -> 29155 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 27491 -> 27580 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 29111 -> 29121 bytes .../test_appearance.small-dark.png | Bin 28053 -> 28131 bytes ..._appearance_whenIsClosed.default-light.png | Bin 26084 -> 26072 bytes ...henIsClosed.extraExtraExtraLarge-light.png | Bin 24782 -> 24785 bytes ...whenIsClosed.rightToLeftLayout-default.png | Bin 26200 -> 26169 bytes ...est_appearance_whenIsClosed.small-dark.png | Bin 25712 -> 25705 bytes .../test_appearance.default-light.png | Bin 38066 -> 38341 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 47469 -> 47593 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 38254 -> 38330 bytes .../test_appearance.small-dark.png | Bin 35693 -> 36091 bytes ...appearance_whenAnonymous.default-light.png | Bin 38946 -> 38944 bytes ...est_appearance_whenClosed.default-dark.png | Bin 33898 -> 34149 bytes ...st_appearance_whenClosed.default-light.png | Bin 33135 -> 33297 bytes ...oreThanMaxVisibleOptions.default-light.png | Bin 36114 -> 36341 bytes ...e_whenSuggestionsEnabled.default-light.png | Bin 46406 -> 46594 bytes ...t_appearance_withComments.default-dark.png | Bin 45331 -> 45391 bytes ..._appearance_withComments.default-light.png | Bin 43252 -> 43579 bytes ...urrentUserAlreadyComment.default-light.png | Bin 40940 -> 41136 bytes ...earance_withZeroComments.default-light.png | Bin 40560 -> 40808 bytes .../test_appearance.default-light.png | Bin 27292 -> 27542 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 29836 -> 29955 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 27292 -> 27542 bytes .../test_appearance.small-dark.png | Bin 27131 -> 27419 bytes ...nce_whenAlreadyCommented.default-light.png | Bin 36530 -> 36777 bytes ...dyCommented.extraExtraExtraLarge-light.png | Bin 41155 -> 41300 bytes ...adyCommented.rightToLeftLayout-default.png | Bin 36530 -> 36777 bytes ...arance_whenAlreadyCommented.small-dark.png | Bin 36039 -> 36492 bytes .../test_appearance.default-light.png | Bin 33811 -> 34250 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 34623 -> 35061 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 33769 -> 34236 bytes .../test_appearance.small-dark.png | Bin 34937 -> 35650 bytes ...earance_whenCanCreatePoll.default-dark.png | Bin 35708 -> 36566 bytes ...arance_whenCanCreatePoll.default-light.png | Bin 34625 -> 35062 bytes ...nFeaturesEnabledByDefault.default-dark.png | Bin 40177 -> 40975 bytes ...FeaturesEnabledByDefault.default-light.png | Bin 38936 -> 39679 bytes ..._whenFeaturesNotSupported.default-dark.png | Bin 19357 -> 19397 bytes ...whenFeaturesNotSupported.default-light.png | Bin 18705 -> 18795 bytes ..._whenMaxVotesOnlyDisabled.default-dark.png | Bin 36069 -> 36752 bytes ...whenMaxVotesOnlyDisabled.default-light.png | Bin 34969 -> 35648 bytes ...st_appearance_withErrors.default-light.png | Bin 37506 -> 38006 bytes ..._withErrors.extraExtraExtraLarge-light.png | Bin 42833 -> 43328 bytes ...e_withErrors.rightToLeftLayout-default.png | Bin 37419 -> 37986 bytes .../test_appearance_withErrors.small-dark.png | Bin 37527 -> 38238 bytes .../test_appearance.default-light.png | Bin 59012 -> 59301 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 67923 -> 68172 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 59012 -> 59301 bytes .../test_appearance.small-dark.png | Bin 63706 -> 64964 bytes ...appearance_whenAnonymous.default-light.png | Bin 33979 -> 34352 bytes ...est_appearance_whenClosed.default-dark.png | Bin 68383 -> 69653 bytes ...st_appearance_whenClosed.default-light.png | Bin 68040 -> 68256 bytes ...ce_whenVotesMoreThanLimit.default-dark.png | Bin 69881 -> 71196 bytes ...e_whenVotesMoreThanLimit.default-light.png | Bin 69315 -> 69567 bytes .../test_appearance.default-light.png | Bin 29188 -> 29240 bytes ..._appearance.extraExtraExtraLarge-light.png | Bin 33083 -> 33150 bytes ...t_appearance.rightToLeftLayout-default.png | Bin 29188 -> 29240 bytes .../test_appearance.small-dark.png | Bin 27995 -> 28116 bytes .../test_customAppearance.default-dark.png | Bin 86491 -> 85628 bytes .../test_customAppearance.default-light.png | Bin 86365 -> 85656 bytes .../test_defaultAppearance.default-light.png | Bin 55004 -> 54641 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 58413 -> 58036 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 55004 -> 54641 bytes .../test_defaultAppearance.small-dark.png | Bin 53874 -> 53223 bytes ...nderUnavailableReactions.default-light.png | Bin 17808 -> 17869 bytes ...dUseSingularLocalization.default-light.png | Bin 17808 -> 17869 bytes ...dMessages_hundredMessages.default-dark.png | Bin 2729 -> 2785 bytes ...Messages_hundredMessages.default-light.png | Bin 2729 -> 2785 bytes ...readMessages_zeroMessages.default-dark.png | Bin 2471 -> 2519 bytes ...eadMessages_zeroMessages.default-light.png | Bin 2471 -> 2519 bytes ...mization_usingAppearance.default-light.png | Bin 4678 -> 4681 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 4678 -> 4681 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 4698 -> 4700 bytes ...stomization_usingAppearance.small-dark.png | Bin 4676 -> 4681 bytes ...ization_usingSubclassing.default-light.png | Bin 5249 -> 5246 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 5249 -> 5246 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 5251 -> 5254 bytes ...tomization_usingSubclassing.small-dark.png | Bin 5514 -> 5511 bytes .../test_defaultAppearance.default-light.png | Bin 3764 -> 3760 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 3764 -> 3760 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 3750 -> 3743 bytes .../test_defaultAppearance.small-dark.png | Bin 4059 -> 4066 bytes ...chatThreadVC_isPopulated.default-light.png | Bin 34788 -> 35131 bytes ...nViewValues_arePopulated.default-light.png | Bin 39355 -> 39627 bytes ...rePopulated.extraExtraExtraLarge-light.png | Bin 43641 -> 43947 bytes ...arePopulated.rightToLeftLayout-default.png | Bin 39622 -> 39985 bytes ...tionViewValues_arePopulated.small-dark.png | Bin 38215 -> 38937 bytes .../test_defaultAppearance.default-light.png | Bin 37029 -> 37327 bytes .../test_emptyAppearance.default-light.png | Bin 21947 -> 22187 bytes ...MessagesStartAtTheTopIsTrue.small-dark.png | Bin 29110 -> 29848 bytes ...entMessageEnabledIsFalse.default-light.png | Bin 22824 -> 23030 bytes .../test_defaultAppearance.default-light.png | Bin 14196 -> 14231 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 17676 -> 17691 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 14242 -> 14278 bytes .../test_defaultAppearance.small-dark.png | Bin 13466 -> 13508 bytes ...pearance_whenAttachments.default-light.png | Bin 12886 -> 12923 bytes ...nce_withLastReplyDeleted.default-light.png | Bin 15014 -> 15029 bytes ...withParentMessageDeleted.default-light.png | Bin 14852 -> 14874 bytes ...pearance_withThreadTitle.default-light.png | Bin 13903 -> 13935 bytes ...ltAppearance_withUnreads.default-light.png | Bin 14637 -> 14683 bytes ...withUnreads.extraExtraExtraLarge-light.png | Bin 18421 -> 18410 bytes ..._withUnreads.rightToLeftLayout-default.png | Bin 14679 -> 14702 bytes ...faultAppearance_withUnreads.small-dark.png | Bin 13867 -> 13885 bytes .../test_defaultAppearance.default-light.png | Bin 26945 -> 27008 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 33674 -> 33693 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 26953 -> 27006 bytes .../test_defaultAppearance.small-dark.png | Bin 25887 -> 25918 bytes ...owLoadingHeaderBannerView.default-dark.png | Bin 28264 -> 28326 bytes ...wLoadingHeaderBannerView.default-light.png | Bin 27480 -> 27538 bytes ...owLoadingHeaderBannerView.default-dark.png | Bin 28264 -> 28326 bytes ...wLoadingHeaderBannerView.default-light.png | Bin 27480 -> 27538 bytes .../test_emptyAppearance.default-light.png | Bin 12436 -> 12459 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 12436 -> 12459 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 12442 -> 12454 bytes .../test_emptyAppearance.small-dark.png | Bin 12907 -> 12897 bytes .../test_errorAppearance.default-light.png | Bin 10553 -> 10558 bytes ...rAppearance.extraExtraExtraLarge-light.png | Bin 10553 -> 10558 bytes ...orAppearance.rightToLeftLayout-default.png | Bin 10556 -> 10564 bytes .../test_errorAppearance.small-dark.png | Bin 10563 -> 10569 bytes ...est_newThreadsAppearance.default-light.png | Bin 29194 -> 29245 bytes ...sAppearance.extraExtraExtraLarge-light.png | Bin 35914 -> 35967 bytes ...dsAppearance.rightToLeftLayout-default.png | Bin 29205 -> 29261 bytes .../test_newThreadsAppearance.small-dark.png | Bin 28181 -> 28199 bytes ..._wasConfiguredAsExpected.default-light.png | Bin 6395 -> 6485 bytes ...dAsExpected.extraExtraExtraLarge-light.png | Bin 7054 -> 7122 bytes ...edAsExpected.rightToLeftLayout-default.png | Bin 6412 -> 6494 bytes ...nce_wasConfiguredAsExpected.small-dark.png | Bin 5926 -> 6087 bytes ...alItems_rendersCorrectly.default-light.png | Bin 15304 -> 15570 bytes ...rsCorrectly.extraExtraExtraLarge-light.png | Bin 16453 -> 16681 bytes ...ersCorrectly.rightToLeftLayout-default.png | Bin 15266 -> 15488 bytes ...ticalItems_rendersCorrectly.small-dark.png | Bin 14054 -> 14346 bytes ...alItems_rendersCorrectly.default-light.png | Bin 23775 -> 24009 bytes ...rsCorrectly.extraExtraExtraLarge-light.png | Bin 23874 -> 24221 bytes ...ersCorrectly.rightToLeftLayout-default.png | Bin 23660 -> 23943 bytes ...ticalItems_rendersCorrectly.small-dark.png | Bin 21883 -> 22058 bytes ...ngAppearanceAndComponents.default-dark.png | Bin 6509 -> 6584 bytes ...gAppearanceAndComponents.default-light.png | Bin 6511 -> 6583 bytes ...mization_usingSubclassing.default-dark.png | Bin 5675 -> 5729 bytes ...ization_usingSubclassing.default-light.png | Bin 5675 -> 5729 bytes ...FourMembersInNonDMChannel.default-dark.png | Bin 6450 -> 6509 bytes ...ourMembersInNonDMChannel.default-light.png | Bin 6450 -> 6509 bytes ...nceWithNoMembersInChannel.default-dark.png | Bin 2980 -> 2981 bytes ...ceWithNoMembersInChannel.default-light.png | Bin 2980 -> 2981 bytes ...ingleMemberInNonDMChannel.default-dark.png | Bin 6654 -> 6691 bytes ...ngleMemberInNonDMChannel.default-light.png | Bin 6654 -> 6691 bytes ...hreeMembersInNonDMChannel.default-dark.png | Bin 6355 -> 6397 bytes ...reeMembersInNonDMChannel.default-light.png | Bin 6355 -> 6397 bytes ...hTwoMembersInNonDMChannel.default-dark.png | Bin 6206 -> 6247 bytes ...TwoMembersInNonDMChannel.default-light.png | Bin 6206 -> 6247 bytes ...nel.default-dark-with-online-indicator.png | Bin 6622 -> 6683 bytes ..._withDirectMessageChannel.default-dark.png | Bin 6666 -> 6716 bytes ...el.default-light-with-online-indicator.png | Bin 6622 -> 6683 bytes ...withDirectMessageChannel.default-light.png | Bin 6666 -> 6716 bytes ...annel_whenMultipleMembers.default-dark.png | Bin 6993 -> 7058 bytes ...nnel_whenMultipleMembers.default-light.png | Bin 6993 -> 7058 bytes .../test_emptyAppearance.default-dark.png | Bin 3867 -> 3870 bytes .../test_emptyAppearance.default-light.png | Bin 3867 -> 3870 bytes ...hannelAvatarViewInSwiftUI.default-dark.png | Bin 12024 -> 11982 bytes ...annelAvatarViewInSwiftUI.default-light.png | Bin 11087 -> 11068 bytes ...ngAppearanceAndComponents.default-dark.png | Bin 6509 -> 6584 bytes ...gAppearanceAndComponents.default-light.png | Bin 6511 -> 6583 bytes ...mization_usingSubclassing.default-dark.png | Bin 5675 -> 5729 bytes ...ization_usingSubclassing.default-light.png | Bin 5675 -> 5729 bytes ...nOnlineIndicatorDisabled.default-light.png | Bin 6666 -> 6716 bytes ...nce.default-dark-with-online-indicator.png | Bin 6622 -> 6683 bytes ....default-dark-without-online-indicator.png | Bin 6666 -> 6716 bytes ...ce.default-light-with-online-indicator.png | Bin 6622 -> 6683 bytes ...default-light-without-online-indicator.png | Bin 6666 -> 6716 bytes .../test_emptyAppearance.default-dark.png | Bin 3326 -> 3319 bytes .../test_emptyAppearance.default-light.png | Bin 3326 -> 3319 bytes ...ionUsingSubclassing.default-dark-empty.png | Bin 3278 -> 3277 bytes ...omizationUsingSubclassing.default-dark.png | Bin 6491 -> 6517 bytes ...onUsingSubclassing.default-light-empty.png | Bin 3278 -> 3277 bytes ...mizationUsingSubclassing.default-light.png | Bin 6491 -> 6517 bytes .../test_defaultAppearance.default-dark.png | Bin 3152 -> 3149 bytes .../test_defaultAppearance.default-light.png | Bin 3184 -> 3179 bytes .../test_emptyAppearance.default-dark.png | Bin 1987 -> 1964 bytes .../test_emptyAppearance.default-light.png | Bin 1987 -> 1964 bytes .../test_channelNameSet.default-light.png | Bin 3446 -> 3439 bytes ...nnelNameSet.extraExtraExtraLarge-light.png | Bin 5050 -> 5056 bytes ...annelNameSet.rightToLeftLayout-default.png | Bin 3446 -> 3439 bytes .../test_channelNameSet.small-dark.png | Bin 3369 -> 3362 bytes .../test_defaultAppearance.default-light.png | Bin 1781 -> 1858 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 2282 -> 2300 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 1786 -> 1837 bytes .../test_defaultAppearance.small-dark.png | Bin 1729 -> 1747 bytes ...efaultAppearance_SwiftUI.default-light.png | Bin 9485 -> 9588 bytes ...nce_SwiftUI.extraExtraExtraLarge-light.png | Bin 10348 -> 10217 bytes ...ance_SwiftUI.rightToLeftLayout-default.png | Bin 9443 -> 9548 bytes ...t_defaultAppearance_SwiftUI.small-dark.png | Bin 10603 -> 10526 bytes .../test_emptyAppearance.default-light.png | Bin 873 -> 895 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 873 -> 895 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 870 -> 905 bytes .../test_emptyAppearance.small-dark.png | Bin 873 -> 895 bytes ...nfiguredCorrectly.default-light-bigger.png | Bin 1806 -> 1874 bytes ...dCorrectly.default-light-isHighlighted.png | Bin 1300 -> 1240 bytes ...e_wasConfiguredCorrectly.default-light.png | Bin 1322 -> 1270 bytes ...ctly.extraExtraExtraLarge-light-bigger.png | Bin 1806 -> 1874 bytes ...traExtraExtraLarge-light-isHighlighted.png | Bin 1300 -> 1240 bytes ...edCorrectly.extraExtraExtraLarge-light.png | Bin 1322 -> 1270 bytes ...ectly.rightToLeftLayout-default-bigger.png | Bin 1806 -> 1874 bytes ...ightToLeftLayout-default-isHighlighted.png | Bin 1300 -> 1240 bytes ...redCorrectly.rightToLeftLayout-default.png | Bin 1322 -> 1270 bytes ...sConfiguredCorrectly.small-dark-bigger.png | Bin 1806 -> 1874 bytes ...uredCorrectly.small-dark-isHighlighted.png | Bin 1243 -> 1182 bytes ...ance_wasConfiguredCorrectly.small-dark.png | Bin 1322 -> 1270 bytes ...test_injectedSwiftUIView.default-light.png | Bin 3288 -> 3291 bytes ...mization_usingComponents.default-light.png | Bin 5536 -> 5620 bytes ...ization_usingSubclassing.default-light.png | Bin 12515 -> 12834 bytes .../test_defaultAppearance.default-light.png | Bin 4300 -> 4406 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 5018 -> 5161 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 4268 -> 4376 bytes .../test_defaultAppearance.small-dark.png | Bin 4444 -> 4647 bytes .../test_emptyAppearance.default-dark.png | Bin 2561 -> 2744 bytes .../test_emptyAppearance.default-light.png | Bin 2546 -> 2718 bytes ...rAlignmentLeftAppearance.default-light.png | Bin 4300 -> 4406 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 5018 -> 5161 bytes ...ftAppearance.rightToLeftLayout-default.png | Bin 4268 -> 4376 bytes ...atarAlignmentLeftAppearance.small-dark.png | Bin 4444 -> 4647 bytes ...AlignmentRightAppearance.default-light.png | Bin 4268 -> 4376 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 4972 -> 5113 bytes ...htAppearance.rightToLeftLayout-default.png | Bin 4300 -> 4406 bytes ...tarAlignmentRightAppearance.small-dark.png | Bin 4416 -> 4615 bytes ...mentAppearance.default-light-emptyText.png | Bin 4814 -> 4969 bytes ...FileAttachmentAppearance.default-light.png | Bin 5175 -> 5337 bytes ...e.extraExtraExtraLarge-light-emptyText.png | Bin 5396 -> 5556 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 6000 -> 6158 bytes ...ce.rightToLeftLayout-default-emptyText.png | Bin 4773 -> 4988 bytes ...ntAppearance.rightToLeftLayout-default.png | Bin 5135 -> 5341 bytes ...achmentAppearance.small-dark-emptyText.png | Bin 5050 -> 5361 bytes ...ithFileAttachmentAppearance.small-dark.png | Bin 5414 -> 5711 bytes ...ce_currentUser.default-light-emptyText.png | Bin 4774 -> 4996 bytes ...ntAppearance_currentUser.default-light.png | Bin 5135 -> 5361 bytes ...r.extraExtraExtraLarge-light-emptyText.png | Bin 5356 -> 5583 bytes ...currentUser.extraExtraExtraLarge-light.png | Bin 5962 -> 6180 bytes ...er.rightToLeftLayout-default-emptyText.png | Bin 4815 -> 5010 bytes ..._currentUser.rightToLeftLayout-default.png | Bin 5179 -> 5367 bytes ...rance_currentUser.small-dark-emptyText.png | Bin 5010 -> 5337 bytes ...hmentAppearance_currentUser.small-dark.png | Bin 5373 -> 5700 bytes ...mentAppearance.default-light-emptyText.png | Bin 7337 -> 7578 bytes ...iphyAttachmentAppearance.default-light.png | Bin 7942 -> 8200 bytes ...e.extraExtraExtraLarge-light-emptyText.png | Bin 7866 -> 8041 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 8807 -> 9001 bytes ...ce.rightToLeftLayout-default-emptyText.png | Bin 7294 -> 7506 bytes ...ntAppearance.rightToLeftLayout-default.png | Bin 7899 -> 8118 bytes ...achmentAppearance.small-dark-emptyText.png | Bin 7401 -> 7663 bytes ...thGiphyAttachmentAppearance.small-dark.png | Bin 8056 -> 8286 bytes ...mentAppearance.default-light-emptyText.png | Bin 7270 -> 7515 bytes ...mageAttachmentAppearance.default-light.png | Bin 7942 -> 8200 bytes ...e.extraExtraExtraLarge-light-emptyText.png | Bin 7708 -> 7907 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 8807 -> 9001 bytes ...ce.rightToLeftLayout-default-emptyText.png | Bin 7218 -> 7439 bytes ...ntAppearance.rightToLeftLayout-default.png | Bin 7899 -> 8118 bytes ...achmentAppearance.small-dark-emptyText.png | Bin 7362 -> 7590 bytes ...thImageAttachmentAppearance.small-dark.png | Bin 8056 -> 8286 bytes ...ce_currentUser.default-light-emptyText.png | Bin 7225 -> 7463 bytes ...ntAppearance_currentUser.default-light.png | Bin 7897 -> 8147 bytes ...r.extraExtraExtraLarge-light-emptyText.png | Bin 7667 -> 7930 bytes ...currentUser.extraExtraExtraLarge-light.png | Bin 8772 -> 9011 bytes ...er.rightToLeftLayout-default-emptyText.png | Bin 7267 -> 7491 bytes ..._currentUser.rightToLeftLayout-default.png | Bin 7945 -> 8170 bytes ...rance_currentUser.small-dark-emptyText.png | Bin 7324 -> 7566 bytes ...hmentAppearance_currentUser.small-dark.png | Bin 8017 -> 8264 bytes ...LinkAttachmentAppearance.default-light.png | Bin 9252 -> 9547 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 10822 -> 11104 bytes ...ntAppearance.rightToLeftLayout-default.png | Bin 9199 -> 9494 bytes ...ithLinkAttachmentAppearance.small-dark.png | Bin 9213 -> 9486 bytes ...ntAppearance_currentUser.default-light.png | Bin 9209 -> 9532 bytes ...currentUser.extraExtraExtraLarge-light.png | Bin 10775 -> 11088 bytes ..._currentUser.rightToLeftLayout-default.png | Bin 9222 -> 9495 bytes ...hmentAppearance_currentUser.small-dark.png | Bin 9174 -> 9458 bytes ...t_withLongTextAppearance.default-light.png | Bin 11318 -> 11572 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 13646 -> 13859 bytes ...xtAppearance.rightToLeftLayout-default.png | Bin 11304 -> 11504 bytes ...test_withLongTextAppearance.small-dark.png | Bin 11566 -> 11894 bytes .../test_withPoll.default-light.png | Bin 5397 -> 5529 bytes .../test_withTranslatedText.default-light.png | Bin 3214 -> 3369 bytes ...dText_whenHasAttachments.default-light.png | Bin 6980 -> 7228 bytes ...ithUnsupportedAttachment.default-light.png | Bin 4209 -> 4408 bytes ...dAttachment.extraExtraExtraLarge-light.png | Bin 4637 -> 4826 bytes ...edAttachment.rightToLeftLayout-default.png | Bin 4167 -> 4414 bytes ...t_withUnsupportedAttachment.small-dark.png | Bin 4566 -> 4873 bytes ...Attachment_whenEmptyText.default-light.png | Bin 6181 -> 6393 bytes ...dingAttachmentAppearance.default-light.png | Bin 7594 -> 7915 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 8144 -> 8459 bytes ...ntAppearance.rightToLeftLayout-default.png | Bin 7525 -> 7858 bytes ...cordingAttachmentAppearance.small-dark.png | Bin 7480 -> 7938 bytes .../test_wrappedInSwiftUI.default-light.png | Bin 11842 -> 11973 bytes ...ngAppearance.default-dark-new-disabled.png | Bin 1559 -> 1558 bytes ...ltAppearance.default-dark-new-disabled.png | Bin 822 -> 846 bytes ...mization_usingAppearance.default-light.png | Bin 5804 -> 5808 bytes ...ization_usingSubclassing.default-light.png | Bin 4521 -> 4524 bytes .../test_defaultAppearance.default-light.png | Bin 4187 -> 4193 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 4710 -> 4704 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 4181 -> 4186 bytes .../test_defaultAppearance.small-dark.png | Bin 3769 -> 3771 bytes ...default-light-online-indicator-visible.png | Bin 7266 -> 7279 bytes ...onents.default-light-user-name-not-set.png | Bin 7137 -> 7178 bytes ...mization_usingComponents.default-light.png | Bin 7316 -> 7326 bytes ...raLarge-light-online-indicator-visible.png | Bin 8627 -> 8640 bytes ...xtraExtraLarge-light-user-name-not-set.png | Bin 7771 -> 7801 bytes ...gComponents.extraExtraExtraLarge-light.png | Bin 8705 -> 8720 bytes ...ayout-default-online-indicator-visible.png | Bin 7383 -> 7387 bytes ...ToLeftLayout-default-user-name-not-set.png | Bin 7168 -> 7189 bytes ...ngComponents.rightToLeftLayout-default.png | Bin 7422 -> 7423 bytes ...ts.small-dark-online-indicator-visible.png | Bin 7162 -> 7176 bytes ...omponents.small-dark-user-name-not-set.png | Bin 7061 -> 7081 bytes ...stomization_usingComponents.small-dark.png | Bin 7234 -> 7250 bytes ...assing.default-light-user-name-not-set.png | Bin 5916 -> 5924 bytes ...ng.default-light-with-online-indicator.png | Bin 7271 -> 7271 bytes ...ization_usingSubclassing.default-light.png | Bin 7242 -> 7235 bytes ...xtraExtraLarge-light-user-name-not-set.png | Bin 6619 -> 6644 bytes ...ExtraLarge-light-with-online-indicator.png | Bin 9035 -> 9057 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 8997 -> 9014 bytes ...ToLeftLayout-default-user-name-not-set.png | Bin 5952 -> 5980 bytes ...ftLayout-default-with-online-indicator.png | Bin 7282 -> 7279 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 7249 -> 7255 bytes ...bclassing.small-dark-user-name-not-set.png | Bin 5663 -> 5691 bytes ...ssing.small-dark-with-online-indicator.png | Bin 6724 -> 6724 bytes ...tomization_usingSubclassing.small-dark.png | Bin 6695 -> 6686 bytes ...default-light-online-indicator-visible.png | Bin 7202 -> 7227 bytes ...arance.default-light-user-name-not-set.png | Bin 7193 -> 7222 bytes .../test_defaultAppearance.default-light.png | Bin 7153 -> 7174 bytes ...raLarge-light-online-indicator-visible.png | Bin 8576 -> 8587 bytes ...xtraExtraLarge-light-user-name-not-set.png | Bin 7825 -> 7842 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 8536 -> 8538 bytes ...ayout-default-online-indicator-visible.png | Bin 7235 -> 7236 bytes ...ToLeftLayout-default-user-name-not-set.png | Bin 7149 -> 7192 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 7189 -> 7187 bytes ...ce.small-dark-online-indicator-visible.png | Bin 7122 -> 7135 bytes ...ppearance.small-dark-user-name-not-set.png | Bin 6993 -> 7029 bytes .../test_defaultAppearance.small-dark.png | Bin 7081 -> 7086 bytes .../test_emptyAppearance.default-light.png | Bin 3824 -> 3811 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 3824 -> 3811 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 3845 -> 3843 bytes .../test_emptyAppearance.small-dark.png | Bin 3944 -> 3921 bytes ...LabelGetsShown.default-light-with-name.png | Bin 7202 -> 7227 bytes ...elGetsShown.default-light-without-name.png | Bin 7193 -> 7222 bytes ...mization_usingAppearance.default-light.png | Bin 1801 -> 1801 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 2012 -> 2012 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 1801 -> 1801 bytes ...stomization_usingAppearance.small-dark.png | Bin 1812 -> 1815 bytes ...ization_usingSubclassing.default-light.png | Bin 1257 -> 1257 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 1257 -> 1257 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 1257 -> 1257 bytes ...tomization_usingSubclassing.small-dark.png | Bin 1257 -> 1257 bytes ...t_defaultAppearance.default-light-full.png | Bin 2063 -> 2065 bytes ...Appearance.default-light-only-subtitle.png | Bin 1573 -> 1576 bytes ...arance.extraExtraExtraLarge-light-full.png | Bin 2743 -> 2746 bytes ...traExtraExtraLarge-light-only-subtitle.png | Bin 2198 -> 2197 bytes ....extraExtraExtraLarge-light-only-title.png | Bin 1440 -> 1444 bytes ...earance.rightToLeftLayout-default-full.png | Bin 2063 -> 2065 bytes ...ightToLeftLayout-default-only-subtitle.png | Bin 1573 -> 1576 bytes ...test_defaultAppearance.small-dark-full.png | Bin 1982 -> 1978 bytes ...ultAppearance.small-dark-only-subtitle.png | Bin 1507 -> 1507 bytes ...efaultAppearance.small-dark-only-title.png | Bin 1222 -> 1223 bytes .../test_swiftUIWrapper.default-light.png | Bin 13077 -> 13336 bytes ...ftUIWrapper.extraExtraExtraLarge-light.png | Bin 15316 -> 15316 bytes ...iftUIWrapper.rightToLeftLayout-default.png | Bin 13077 -> 13336 bytes .../test_swiftUIWrapper.small-dark.png | Bin 13043 -> 13043 bytes ...omization_usingComponents.default-dark.png | Bin 17493 -> 17530 bytes ...mization_usingComponents.default-light.png | Bin 16460 -> 16518 bytes ...ization_usingSubclassing.default-light.png | Bin 18074 -> 18421 bytes ...mmands_defaultAppearance.default-light.png | Bin 16748 -> 16811 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 19727 -> 19777 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 16778 -> 16856 bytes ..._commands_defaultAppearance.small-dark.png | Bin 16225 -> 16286 bytes ..._commands_emptyAppearance.default-dark.png | Bin 6247 -> 6322 bytes ...commands_emptyAppearance.default-light.png | Bin 6114 -> 6160 bytes ...omization_usingComponents.default-dark.png | Bin 16654 -> 16683 bytes ...mization_usingComponents.default-light.png | Bin 16259 -> 16390 bytes ...ization_usingSubclassing.default-light.png | Bin 16173 -> 16211 bytes ...ntions_defaultAppearance.default-light.png | Bin 16013 -> 16149 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 18163 -> 18258 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 16067 -> 16185 bytes ..._mentions_defaultAppearance.small-dark.png | Bin 15842 -> 15895 bytes ..._mentions_emptyAppearance.default-dark.png | Bin 3488 -> 3662 bytes ...mentions_emptyAppearance.default-light.png | Bin 3636 -> 3697 bytes ...light-horizontal-axisLeading-equal-0-0.png | Bin 3277 -> 3273 bytes ...ight-horizontal-axisLeading-equal-32-0.png | Bin 3344 -> 3343 bytes ...light-horizontal-axisLeading-equal-inf.png | Bin 3337 -> 3334 bytes ...ght-horizontal-axisLeading-natural-0-0.png | Bin 3126 -> 3130 bytes ...ht-horizontal-axisLeading-natural-32-0.png | Bin 3230 -> 3233 bytes ...ght-horizontal-axisLeading-natural-inf.png | Bin 3187 -> 3188 bytes ...ight-horizontal-axisTrailing-equal-0-0.png | Bin 3277 -> 3273 bytes ...ght-horizontal-axisTrailing-equal-32-0.png | Bin 3344 -> 3343 bytes ...ight-horizontal-axisTrailing-equal-inf.png | Bin 3337 -> 3334 bytes ...ht-horizontal-axisTrailing-natural-0-0.png | Bin 3126 -> 3130 bytes ...t-horizontal-axisTrailing-natural-32-0.png | Bin 3230 -> 3233 bytes ...ht-horizontal-axisTrailing-natural-inf.png | Bin 3187 -> 3188 bytes ...ault-light-horizontal-center-equal-0-0.png | Bin 3277 -> 3273 bytes ...ult-light-horizontal-center-equal-32-0.png | Bin 3344 -> 3343 bytes ...ault-light-horizontal-center-equal-inf.png | Bin 3337 -> 3334 bytes ...lt-light-horizontal-center-natural-0-0.png | Bin 3126 -> 3130 bytes ...t-light-horizontal-center-natural-32-0.png | Bin 3230 -> 3233 bytes ...lt-light-horizontal-center-natural-inf.png | Bin 3187 -> 3188 bytes ...efault-light-horizontal-fill-equal-0-0.png | Bin 3277 -> 3273 bytes ...fault-light-horizontal-fill-equal-32-0.png | Bin 3344 -> 3343 bytes ...efault-light-horizontal-fill-equal-inf.png | Bin 3337 -> 3334 bytes ...ault-light-horizontal-fill-natural-0-0.png | Bin 3126 -> 3130 bytes ...ult-light-horizontal-fill-natural-32-0.png | Bin 3230 -> 3233 bytes ...ault-light-horizontal-fill-natural-inf.png | Bin 3187 -> 3188 bytes ...t-light-vertical-axisLeading-equal-0-0.png | Bin 3123 -> 3125 bytes ...-light-vertical-axisLeading-equal-32-0.png | Bin 3303 -> 3307 bytes ...t-light-vertical-axisLeading-equal-inf.png | Bin 3183 -> 3185 bytes ...light-vertical-axisLeading-natural-0-0.png | Bin 3123 -> 3125 bytes ...ight-vertical-axisLeading-natural-32-0.png | Bin 3303 -> 3307 bytes ...light-vertical-axisLeading-natural-inf.png | Bin 3183 -> 3185 bytes ...-light-vertical-axisTrailing-equal-0-0.png | Bin 3111 -> 3112 bytes ...light-vertical-axisTrailing-equal-32-0.png | Bin 3291 -> 3298 bytes ...-light-vertical-axisTrailing-equal-inf.png | Bin 3174 -> 3176 bytes ...ight-vertical-axisTrailing-natural-0-0.png | Bin 3111 -> 3112 bytes ...ght-vertical-axisTrailing-natural-32-0.png | Bin 3291 -> 3298 bytes ...ight-vertical-axisTrailing-natural-inf.png | Bin 3174 -> 3176 bytes ...efault-light-vertical-center-equal-0-0.png | Bin 3142 -> 3145 bytes ...fault-light-vertical-center-equal-32-0.png | Bin 3310 -> 3313 bytes ...efault-light-vertical-center-equal-inf.png | Bin 3190 -> 3193 bytes ...ault-light-vertical-center-natural-0-0.png | Bin 3142 -> 3145 bytes ...ult-light-vertical-center-natural-32-0.png | Bin 3310 -> 3313 bytes ...ault-light-vertical-center-natural-inf.png | Bin 3190 -> 3193 bytes ....default-light-vertical-fill-equal-0-0.png | Bin 3119 -> 3121 bytes ...default-light-vertical-fill-equal-32-0.png | Bin 3304 -> 3302 bytes ....default-light-vertical-fill-equal-inf.png | Bin 3180 -> 3180 bytes ...efault-light-vertical-fill-natural-0-0.png | Bin 3119 -> 3121 bytes ...fault-light-vertical-fill-natural-32-0.png | Bin 3304 -> 3302 bytes ...efault-light-vertical-fill-natural-inf.png | Bin 3180 -> 3180 bytes ...thOneViewOnly.default-light-horizontal.png | Bin 1678 -> 1689 bytes ...withOneViewOnly.default-light-vertical.png | Bin 1678 -> 1689 bytes ...dCorrectly.default-light-isHighlighted.png | Bin 5175 -> 5243 bytes ...e_wasConfiguredCorrectly.default-light.png | Bin 5238 -> 5315 bytes ...traExtraExtraLarge-light-isHighlighted.png | Bin 5175 -> 5243 bytes ...edCorrectly.extraExtraExtraLarge-light.png | Bin 5238 -> 5315 bytes ...ightToLeftLayout-default-isHighlighted.png | Bin 5175 -> 5243 bytes ...redCorrectly.rightToLeftLayout-default.png | Bin 5238 -> 5315 bytes ...uredCorrectly.small-dark-isHighlighted.png | Bin 4180 -> 4257 bytes ...ance_wasConfiguredCorrectly.small-dark.png | Bin 5238 -> 5315 bytes ...ments_addedOneAfterThree.default-light.png | Bin 25127 -> 25700 bytes ...eAfterThree.extraExtraExtraLarge-light.png | Bin 26784 -> 27328 bytes ...neAfterThree.rightToLeftLayout-default.png | Bin 25091 -> 25576 bytes ...achments_addedOneAfterThree.small-dark.png | Bin 24893 -> 25604 bytes ...ttachments_addedSameTime.default-light.png | Bin 25127 -> 25700 bytes ...dedSameTime.extraExtraExtraLarge-light.png | Bin 26784 -> 27328 bytes ...ddedSameTime.rightToLeftLayout-default.png | Bin 25091 -> 25576 bytes ...urAttachments_addedSameTime.small-dark.png | Bin 24893 -> 25604 bytes ...ments_addedThreeAfterOne.default-light.png | Bin 25127 -> 25700 bytes ...reeAfterOne.extraExtraExtraLarge-light.png | Bin 26784 -> 27328 bytes ...hreeAfterOne.rightToLeftLayout-default.png | Bin 25091 -> 25576 bytes ...achments_addedThreeAfterOne.small-dark.png | Bin 24893 -> 25604 bytes ...chments_addedTwoAfterTwo.default-light.png | Bin 25127 -> 25700 bytes ...TwoAfterTwo.extraExtraExtraLarge-light.png | Bin 26784 -> 27328 bytes ...dTwoAfterTwo.rightToLeftLayout-default.png | Bin 25091 -> 25576 bytes ...ttachments_addedTwoAfterTwo.small-dark.png | Bin 24893 -> 25604 bytes ...review_withLongFileNames.default-light.png | Bin 17753 -> 18103 bytes ...hMultipleAttachmentTypes.default-light.png | Bin 51585 -> 52103 bytes ...chmentTypes.extraExtraExtraLarge-light.png | Bin 53323 -> 53834 bytes ...achmentTypes.rightToLeftLayout-default.png | Bin 51682 -> 52134 bytes ...withMultipleAttachmentTypes.small-dark.png | Bin 50151 -> 50849 bytes .../test_canNotSendMessage.default-light.png | Bin 12635 -> 12722 bytes ...SendMessage.extraExtraExtraLarge-light.png | Bin 12971 -> 13096 bytes ...tSendMessage.rightToLeftLayout-default.png | Bin 12708 -> 12817 bytes .../test_canNotSendMessage.small-dark.png | Bin 12248 -> 12487 bytes ...deIsOnWithCountdownShown.default-light.png | Bin 10803 -> 10930 bytes ...deIsOnWithCountdownShown.default-light.png | Bin 10760 -> 10858 bytes ...ntdownShown.extraExtraExtraLarge-light.png | Bin 11656 -> 11837 bytes ...untdownShown.rightToLeftLayout-default.png | Bin 10756 -> 10892 bytes ...wModeIsOnWithCountdownShown.small-dark.png | Bin 10725 -> 11015 bytes ...rgs_hasSendButtonEnabled.default-light.png | Bin 13920 -> 14149 bytes ...ttonEnabled.extraExtraExtraLarge-light.png | Bin 14209 -> 14414 bytes ...uttonEnabled.rightToLeftLayout-default.png | Bin 13978 -> 14221 bytes ...tyArgs_hasSendButtonEnabled.small-dark.png | Bin 13682 -> 13956 bytes ...gs_hasSendButtonDisabled.default-light.png | Bin 13163 -> 13388 bytes ...tonDisabled.extraExtraExtraLarge-light.png | Bin 13694 -> 13887 bytes ...ttonDisabled.rightToLeftLayout-default.png | Bin 13152 -> 13338 bytes ...yArgs_hasSendButtonDisabled.small-dark.png | Bin 12628 -> 12950 bytes .../test_dismissLinkPreview.default-light.png | Bin 22586 -> 22758 bytes ...abled_thenNoHighlighting.default-light.png | Bin 20447 -> 20599 bytes ...bled_thenHighlightsLinks.default-light.png | Bin 22586 -> 22758 bytes ..._quotedTranslatedMessage.default-light.png | Bin 17158 -> 17448 bytes ...atedMessage.extraExtraExtraLarge-light.png | Bin 18903 -> 19248 bytes ...latedMessage.rightToLeftLayout-default.png | Bin 17075 -> 17362 bytes ...est_quotedTranslatedMessage.small-dark.png | Bin 16727 -> 17238 bytes ...owCommandSuggestionsView.default-light.png | Bin 12257 -> 12468 bytes .../test_showLinkPreview.default-light.png | Bin 27227 -> 27377 bytes ...wLinkPreview.rightToLeftLayout-default.png | Bin 27214 -> 27378 bytes .../test_showLinkPreview.small-dark.png | Bin 26038 -> 26368 bytes ...review_whenNoDescription.default-light.png | Bin 22234 -> 22399 bytes ...wLinkPreview_whenNoImage.default-light.png | Bin 23941 -> 24072 bytes ...nkPreview_whenNoMetadata.default-light.png | Bin 22885 -> 23043 bytes ...wLinkPreview_whenNoTitle.default-light.png | Bin 24605 -> 24745 bytes ...owMentionSuggestionsView.default-light.png | Bin 14084 -> 14213 bytes ...ization_usingSubclassing.default-light.png | Bin 243858 -> 243853 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 244867 -> 244883 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 312585 -> 312605 bytes ...tomization_usingSubclassing.small-dark.png | Bin 244892 -> 244891 bytes ...tomization_usingUIConfig.default-light.png | Bin 243722 -> 243695 bytes ...ingUIConfig.extraExtraExtraLarge-light.png | Bin 244856 -> 244844 bytes ...singUIConfig.rightToLeftLayout-default.png | Bin 312438 -> 312399 bytes ...Customization_usingUIConfig.small-dark.png | Bin 243065 -> 243043 bytes .../test_defaultAppearance.default-light.png | Bin 243858 -> 243853 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 244867 -> 244883 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 312585 -> 312605 bytes .../test_defaultAppearance.small-dark.png | Bin 243820 -> 243809 bytes ...mization_usingAppearance.default-light.png | Bin 2070 -> 2070 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 2561 -> 2577 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 2082 -> 2080 bytes ...stomization_usingAppearance.small-dark.png | Bin 1925 -> 1934 bytes ...ization_usingSubclassing.default-light.png | Bin 2067 -> 2064 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 2597 -> 2599 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 2095 -> 2089 bytes ...tomization_usingSubclassing.small-dark.png | Bin 1874 -> 1877 bytes .../test_defaultAppearance.default-light.png | Bin 2056 -> 2055 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 2598 -> 2595 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 2088 -> 2087 bytes .../test_defaultAppearance.small-dark.png | Bin 2041 -> 2046 bytes ...pearance_whenDestructive.default-light.png | Bin 2079 -> 2079 bytes ...Destructive.extraExtraExtraLarge-light.png | Bin 2603 -> 2599 bytes ...nDestructive.rightToLeftLayout-default.png | Bin 2111 -> 2096 bytes ...tAppearance_whenDestructive.small-dark.png | Bin 1945 -> 1948 bytes ...pearance_whenHighlighted.default-light.png | Bin 1834 -> 1833 bytes ...Highlighted.extraExtraExtraLarge-light.png | Bin 2341 -> 2340 bytes ...nHighlighted.rightToLeftLayout-default.png | Bin 1883 -> 1884 bytes ...tAppearance_whenHighlighted.small-dark.png | Bin 1787 -> 1786 bytes ...ltAppearance_whenPrimary.default-light.png | Bin 2151 -> 2153 bytes ...whenPrimary.extraExtraExtraLarge-light.png | Bin 2697 -> 2699 bytes ..._whenPrimary.rightToLeftLayout-default.png | Bin 2176 -> 2176 bytes ...faultAppearance_whenPrimary.small-dark.png | Bin 2059 -> 2063 bytes ...henPrimaryAndDestructive.default-light.png | Bin 2079 -> 2079 bytes ...Destructive.extraExtraExtraLarge-light.png | Bin 2603 -> 2599 bytes ...dDestructive.rightToLeftLayout-default.png | Bin 2111 -> 2096 bytes ...e_whenPrimaryAndDestructive.small-dark.png | Bin 1945 -> 1948 bytes ...faultMultilineAppearance.default-light.png | Bin 5267 -> 5267 bytes ...eAppearance.extraExtraExtraLarge-light.png | Bin 6952 -> 6957 bytes ...neAppearance.rightToLeftLayout-default.png | Bin 5293 -> 5292 bytes ..._defaultMultilineAppearance.small-dark.png | Bin 4878 -> 4875 bytes ...mization_usingAppearance.default-light.png | Bin 20387 -> 20538 bytes ...gAppearance.extraExtraExtraLarge-light.png | Bin 24454 -> 24629 bytes ...ngAppearance.rightToLeftLayout-default.png | Bin 20434 -> 20589 bytes ...stomization_usingAppearance.small-dark.png | Bin 19394 -> 19500 bytes ...ization_usingSubclassing.default-light.png | Bin 18331 -> 18432 bytes ...Subclassing.extraExtraExtraLarge-light.png | Bin 21862 -> 22020 bytes ...gSubclassing.rightToLeftLayout-default.png | Bin 18363 -> 18473 bytes ...tomization_usingSubclassing.small-dark.png | Bin 17423 -> 17552 bytes .../test_defaultAppearance.default-light.png | Bin 20397 -> 20487 bytes ...tAppearance.extraExtraExtraLarge-light.png | Bin 24484 -> 24645 bytes ...ltAppearance.rightToLeftLayout-default.png | Bin 20444 -> 20567 bytes .../test_defaultAppearance.small-dark.png | Bin 19350 -> 19455 bytes .../test_emptyAppearance.default-light.png | Bin 8080 -> 7658 bytes ...yAppearance.extraExtraExtraLarge-light.png | Bin 8080 -> 7658 bytes ...tyAppearance.rightToLeftLayout-default.png | Bin 8080 -> 7658 bytes .../test_emptyAppearance.small-dark.png | Bin 8080 -> 7639 bytes ...tions_hasCorrectOrdering.default-light.png | Bin 26376 -> 26450 bytes ...omization_usingAppearance.default-dark.png | Bin 27443 -> 27840 bytes ...mization_usingAppearance.default-light.png | Bin 26483 -> 26743 bytes ...mization_usingSubclassing.default-dark.png | Bin 26338 -> 26464 bytes ...ization_usingSubclassing.default-light.png | Bin 25222 -> 25460 bytes ...nce_when_largeLongMessage.default-dark.png | Bin 45655 -> 45957 bytes ...ce_when_largeLongMessage.default-light.png | Bin 44107 -> 44492 bytes ...ouldOnlyHaveSmallerHeight.default-dark.png | Bin 21636 -> 21436 bytes ...uldOnlyHaveSmallerHeight.default-light.png | Bin 21421 -> 21143 bytes ...n4_shouldHaveSmallerWidth.default-dark.png | Bin 20451 -> 20386 bytes ...4_shouldHaveSmallerWidth.default-light.png | Bin 20289 -> 20298 bytes ...an4_shouldHaveBiggerWidth.default-dark.png | Bin 25809 -> 25964 bytes ...n4_shouldHaveBiggerWidth.default-light.png | Bin 25933 -> 26116 bytes ...d_snapshotsAreAsExpected.default-light.png | Bin 6454 -> 6424 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 6454 -> 6424 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 6481 -> 6441 bytes ...used_snapshotsAreAsExpected.small-dark.png | Bin 6615 -> 6547 bytes ...g_snapshotsAreAsExpected.default-light.png | Bin 6250 -> 6259 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 6250 -> 6259 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 6231 -> 6235 bytes ...ying_snapshotsAreAsExpected.small-dark.png | Bin 6392 -> 6400 bytes ...g_snapshotsAreAsExpected.default-light.png | Bin 3352 -> 3350 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 3352 -> 3350 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 3377 -> 3379 bytes ...ding_snapshotsAreAsExpected.small-dark.png | Bin 3423 -> 3424 bytes ...hotsAreAsExpected.default-light-Locked.png | Bin 1161 -> 1190 bytes ...e_snapshotsAreAsExpected.default-light.png | Bin 1503 -> 1544 bytes ...cted.extraExtraExtraLarge-light-Locked.png | Bin 1161 -> 1190 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 1503 -> 1544 bytes ...ected.rightToLeftLayout-default-Locked.png | Bin 1161 -> 1190 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 1503 -> 1544 bytes ...apshotsAreAsExpected.small-dark-Locked.png | Bin 1130 -> 1175 bytes ...ance_snapshotsAreAsExpected.small-dark.png | Bin 1509 -> 1625 bytes ...pected.default-light-IncreasedDuration.png | Bin 1886 -> 1885 bytes ...e_snapshotsAreAsExpected.default-light.png | Bin 1955 -> 1956 bytes ...xtraExtraLarge-light-IncreasedDuration.png | Bin 1886 -> 1885 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 1955 -> 1956 bytes ...ToLeftLayout-default-IncreasedDuration.png | Bin 1879 -> 1880 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 1949 -> 1949 bytes ...sExpected.small-dark-IncreasedDuration.png | Bin 1886 -> 1885 bytes ...ance_snapshotsAreAsExpected.small-dark.png | Bin 1955 -> 1956 bytes ...e_snapshotsAreAsExpected.default-light.png | Bin 3473 -> 3470 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 3473 -> 3470 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 3473 -> 3470 bytes ...ance_snapshotsAreAsExpected.small-dark.png | Bin 3529 -> 3525 bytes ...eAsExpected.default-light-AlmostHidden.png | Bin 2527 -> 2521 bytes ...e_snapshotsAreAsExpected.default-light.png | Bin 3259 -> 3265 bytes ...xtraExtraExtraLarge-light-AlmostHidden.png | Bin 2527 -> 2521 bytes ...eAsExpected.extraExtraExtraLarge-light.png | Bin 3259 -> 3265 bytes ...rightToLeftLayout-default-AlmostHidden.png | Bin 2533 -> 2529 bytes ...reAsExpected.rightToLeftLayout-default.png | Bin 3273 -> 3277 bytes ...sAreAsExpected.small-dark-AlmostHidden.png | Bin 2527 -> 2521 bytes ...ance_snapshotsAreAsExpected.small-dark.png | Bin 3259 -> 3265 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 13941 -> 14544 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 13927 -> 14332 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 14505 -> 14914 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 14402 -> 14704 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 13592 -> 13913 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 13404 -> 13731 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 14505 -> 14914 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 14402 -> 14704 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 15344 -> 15837 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 15395 -> 15864 bytes ...iewIsConfiguredAsExpected.default-dark.png | Bin 17000 -> 17588 bytes ...ewIsConfiguredAsExpected.default-light.png | Bin 16882 -> 17288 bytes fastlane/Fastfile | 3 +- 987 files changed, 123 insertions(+), 121 deletions(-) diff --git a/.github/workflows/cron-checks.yml b/.github/workflows/cron-checks.yml index 8e112dec9c..eb3ac1e9c9 100644 --- a/.github/workflows/cron-checks.yml +++ b/.github/workflows/cron-checks.yml @@ -41,6 +41,11 @@ jobs: strategy: matrix: include: + - ios: 18.1 + xcode: 16.1 + os: macos-15 + device: "iPhone 16 Pro" + setup_runtime: false - ios: 17.4 xcode: 15.4 os: macos-14 @@ -123,6 +128,11 @@ jobs: strategy: matrix: include: + - ios: 18.1 + xcode: 16.1 + os: macos-15 + device: "iPhone 16 Pro" + setup_runtime: false - ios: 17.4 xcode: 15.4 os: macos-14 @@ -138,16 +148,6 @@ jobs: os: macos-14 device: "iPhone 13 Pro" setup_runtime: true - - ios: 14.5 - xcode: 14.2 - os: macos-12 - device: "iPhone 12 Pro" - setup_runtime: true - - ios: 13.7 - xcode: 14.2 - os: macos-12 - device: "iPhone 11 Pro" - setup_runtime: true fail-fast: false runs-on: ${{ matrix.os }} env: @@ -189,11 +189,11 @@ jobs: fastlane/test_output/logs/*/Diagnostics/**/*.txt fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/* - build-xcode14: - name: Build LLC + UI (Xcode 14) - runs-on: macos-12 + build-old-xcode: + name: Build LLC + UI (Xcode 15) + runs-on: macos-14 env: - XCODE_VERSION: "14.0.1" + XCODE_VERSION: "15.0.1" steps: - name: Connect Bot uses: webfactory/ssh-agent@v0.7.0 diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index 48bfffd20b..e664c5a7e1 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -6,7 +6,7 @@ on: jobs: release: name: Publish new release - runs-on: macos-12 + runs-on: macos-15 steps: - name: Connect Bot uses: webfactory/ssh-agent@v0.7.0 diff --git a/.github/workflows/smoke-checks.yml b/.github/workflows/smoke-checks.yml index 0dc31813bc..babfcf2cea 100644 --- a/.github/workflows/smoke-checks.yml +++ b/.github/workflows/smoke-checks.yml @@ -19,7 +19,7 @@ concurrency: env: HOMEBREW_NO_INSTALL_CLEANUP: 1 # Disable cleanup for homebrew, we don't need it on CI - IOS_SIMULATOR_DEVICE: "iPhone 15 Pro (17.4)" + IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.1)" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_NUM: ${{ github.event.pull_request.number }} @@ -48,9 +48,9 @@ jobs: automated-code-review: name: Automated Code Review - runs-on: macos-12 + runs-on: macos-14 env: - XCODE_VERSION: "14.0.1" + XCODE_VERSION: "15.0.1" if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} steps: - uses: actions/checkout@v4.1.1 @@ -67,12 +67,12 @@ jobs: if: startsWith(github.event.pull_request.head.ref, 'release/') run: bundle exec fastlane pod_lint - build-xcode14: - name: Build LLC + UI (Xcode 14) - runs-on: macos-12 + build-old-xcode: + name: Build LLC + UI (Xcode 15) + runs-on: macos-14 if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} env: - XCODE_VERSION: "14.0.1" + XCODE_VERSION: "15.0.1" steps: - uses: actions/checkout@v4.1.1 - uses: ./.github/actions/ruby-cache @@ -87,7 +87,7 @@ jobs: test-llc-debug: name: Test LLC (Debug) - runs-on: macos-14 + runs-on: macos-15 if: ${{ github.event.inputs.snapshots != 'true' }} needs: build-test-app-and-frameworks steps: @@ -136,7 +136,7 @@ jobs: test-ui-debug: name: Test UI (Debug) - runs-on: macos-14 + runs-on: macos-15 needs: build-test-app-and-frameworks if: ${{ github.event_name != 'push' }} steps: @@ -152,7 +152,7 @@ jobs: SKIP_BREW_BOOTSTRAP: true - name: Run UI Tests (Debug) run: bundle exec fastlane test_ui device:"${{ env.IOS_SIMULATOR_DEVICE }}" skip_build:true record:${{ github.event.inputs.snapshots }} - timeout-minutes: 60 + timeout-minutes: 120 env: GITHUB_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} # to open a PR GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # to use github cli @@ -170,7 +170,7 @@ jobs: allure_testops_launch: name: Launch Allure TestOps - runs-on: macos-13 + runs-on: macos-14 if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} needs: build-test-app-and-frameworks outputs: @@ -189,7 +189,7 @@ jobs: test-e2e-debug: name: Test E2E UI (Debug) - runs-on: macos-14 + runs-on: macos-15 if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} needs: - allure_testops_launch @@ -216,8 +216,6 @@ jobs: run: bundle exec fastlane test_e2e_mock device:"${{ env.IOS_SIMULATOR_DEVICE }}" batch:'${{ matrix.batch }}' test_without_building:true timeout-minutes: 100 env: - XCODE_VERSION: "15.0.1" # the most stable pair of Xcode - IOS_SIMULATOR_DEVICE: "iPhone 15 Pro (17.0)" # and iOS MATRIX_SIZE: ${{ strategy.job-total }} STREAM_DEMO_APP_SECRET: ${{ secrets.STREAM_DEMO_APP_SECRET }} - name: Allure TestOps Upload diff --git a/.github/workflows/update-copyright.yml b/.github/workflows/update-copyright.yml index 1cd27ed3b3..1649699d35 100644 --- a/.github/workflows/update-copyright.yml +++ b/.github/workflows/update-copyright.yml @@ -13,7 +13,7 @@ env: jobs: copyright: name: Copyright - runs-on: macos-13 + runs-on: macos-14 steps: - uses: actions/checkout@v4.1.1 - uses: ./.github/actions/ruby-cache diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f3c4e7250..b125dffee3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ _December 03, 2024_ ### 🐞 Fixed - Fix a rare infinite loop triggering a crash when handling database changes [#3508](https://github.com/GetStream/stream-chat-swift/pull/3508) - Fix reconnection timeout handler not working in the token provider phase [#3513](https://github.com/GetStream/stream-chat-swift/pull/3513) +### 🔄 Changed +- Minor breaking change in the test tools. Some mock classes were made internal and now require a `@testable` annotation [#3509](https://github.com/GetStream/stream-chat-swift/pull/3509) ## StreamChatUI ### 🐞 Fixed diff --git a/StreamChatUITestsAppUITests/Robots/UserRobot.swift b/StreamChatUITestsAppUITests/Robots/UserRobot.swift index 4f78ab68c0..c08e7764a2 100644 --- a/StreamChatUITestsAppUITests/Robots/UserRobot.swift +++ b/StreamChatUITestsAppUITests/Robots/UserRobot.swift @@ -142,6 +142,9 @@ extension UserRobot { func clearComposer() -> Self { if !composer.textView.text.isEmpty { composer.inputField.tap() + if !composer.selectAllButton.waitForExistence(timeout: 1) { + composer.inputField.tap() + } composer.selectAllButton.wait().safeTap() composer.inputField.typeText(XCUIKeyboardKey.delete.rawValue) } diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelController_Mock.swift index 71cbaf7434..85937401b4 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelController_Mock.swift @@ -5,20 +5,20 @@ import Foundation @testable import StreamChat -public class ChatChannelController_Mock: ChatChannelController { +class ChatChannelController_Mock: ChatChannelController { var mockCid: ChannelId? - public override var cid: ChannelId? { + override var cid: ChannelId? { mockCid ?? super.cid } var mockFirstUnreadMessageId: MessageId? - public override var firstUnreadMessageId: MessageId? { + override var firstUnreadMessageId: MessageId? { mockFirstUnreadMessageId ?? super.firstUnreadMessageId } /// Creates a new mock instance of `ChatChannelController`. - public static func mock(chatClientConfig: ChatClientConfig? = nil) -> ChatChannelController_Mock { + static func mock(chatClientConfig: ChatClientConfig? = nil) -> ChatChannelController_Mock { .init( channelQuery: .init(cid: try! .init(cid: "mock:channel")), channelListQuery: nil, @@ -35,7 +35,7 @@ public class ChatChannelController_Mock: ChatChannelController { ) } - public static func mock( + static func mock( channelQuery: ChannelQuery, channelListQuery: ChannelListQuery?, client: ChatClient @@ -47,7 +47,7 @@ public class ChatChannelController_Mock: ChatChannelController { ) } - public static func mock(client: ChatClient) -> ChatChannelController_Mock { + static func mock(client: ChatClient) -> ChatChannelController_Mock { .init( channelQuery: .init(cid: try! .init(cid: "mock:channel")), channelListQuery: nil, @@ -56,7 +56,7 @@ public class ChatChannelController_Mock: ChatChannelController { } var createNewMessageCallCount = 0 - public override func createNewMessage( + override func createNewMessage( messageId: MessageId? = nil, text: String, pinning: MessagePinning? = nil, isSilent: Bool = false, @@ -71,61 +71,61 @@ public class ChatChannelController_Mock: ChatChannelController { createNewMessageCallCount += 1 } - public var hasLoadedAllNextMessages_mock: Bool? = true - public override var hasLoadedAllNextMessages: Bool { + var hasLoadedAllNextMessages_mock: Bool? = true + override var hasLoadedAllNextMessages: Bool { hasLoadedAllNextMessages_mock ?? super.hasLoadedAllNextMessages } - public var hasLoadedAllPreviousMessages_mock: Bool? = true - public override var hasLoadedAllPreviousMessages: Bool { + var hasLoadedAllPreviousMessages_mock: Bool? = true + override var hasLoadedAllPreviousMessages: Bool { hasLoadedAllPreviousMessages_mock ?? super.hasLoadedAllPreviousMessages } - public var markedAsUnread_mock: Bool? = true - public override var isMarkedAsUnread: Bool { + var markedAsUnread_mock: Bool? = true + override var isMarkedAsUnread: Bool { markedAsUnread_mock ?? super.isMarkedAsUnread } - public var channel_mock: ChatChannel? - override public var channel: ChatChannel? { + var channel_mock: ChatChannel? + override var channel: ChatChannel? { channel_mock ?? super.channel } - public var channelQuery_mock: ChannelQuery? - public override var channelQuery: ChannelQuery { + var channelQuery_mock: ChannelQuery? + override var channelQuery: ChannelQuery { channelQuery_mock ?? super.channelQuery } - public var messages_mock: [ChatMessage]? - override public var messages: LazyCachedMapCollection { + var messages_mock: [ChatMessage]? + override var messages: LazyCachedMapCollection { messages_mock.map { $0.lazyCachedMap { $0 } } ?? super.messages } - public var markReadCallCount = 0 - public override func markRead(completion: ((Error?) -> Void)?) { + var markReadCallCount = 0 + override func markRead(completion: ((Error?) -> Void)?) { markReadCallCount += 1 } - public var state_mock: State? - override public var state: DataController.State { + var state_mock: State? + override var state: DataController.State { get { state_mock ?? super.state } set { super.state = newValue } } - public private(set) var synchronize_completion: ((Error?) -> Void)? - override public func synchronize(_ completion: ((Error?) -> Void)? = nil) { + private(set) var synchronize_completion: ((Error?) -> Void)? + override func synchronize(_ completion: ((Error?) -> Void)? = nil) { synchronize_completion = completion } - public var loadFirstPageCallCount = 0 - public var loadFirstPage_result: Error? - public override func loadFirstPage(_ completion: ((Error?) -> Void)? = nil) { + var loadFirstPageCallCount = 0 + var loadFirstPage_result: Error? + override func loadFirstPage(_ completion: ((Error?) -> Void)? = nil) { loadFirstPageCallCount += 1 completion?(loadFirstPage_result) } - public var loadPageAroundMessageIdCallCount = 0 - public override func loadPageAroundMessageId( + var loadPageAroundMessageIdCallCount = 0 + override func loadPageAroundMessageId( _ messageId: MessageId, limit: Int? = nil, completion: ((Error?) -> Void)? = nil @@ -134,7 +134,7 @@ public class ChatChannelController_Mock: ChatChannelController { } } -public extension ChatChannelController_Mock { +extension ChatChannelController_Mock { /// Simulates the initial conditions. Setting these values doesn't trigger any observer callback. func simulateInitial(channel: ChatChannel, messages: [ChatMessage], state: DataController.State) { channel_mock = channel diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelListController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelListController_Mock.swift index c2f374a990..c20c0704a0 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelListController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatChannelListController_Mock.swift @@ -5,40 +5,40 @@ import Foundation @testable import StreamChat -public class ChatChannelListController_Mock: ChatChannelListController, Spy { - public let spyState = SpyState() - public var loadNextChannelsIsCalled = false - public var loadNextChannelsCallCount = 0 - public var resetChannelsQueryResult: Result<(synchedAndWatched: [ChatChannel], unwanted: Set), Error>? - public var refreshLoadedChannelsResult: Result, any Error>? +class ChatChannelListController_Mock: ChatChannelListController, Spy { + let spyState = SpyState() + var loadNextChannelsIsCalled = false + var loadNextChannelsCallCount = 0 + var resetChannelsQueryResult: Result<(synchedAndWatched: [ChatChannel], unwanted: Set), Error>? + var refreshLoadedChannelsResult: Result, any Error>? /// Creates a new mock instance of `ChatChannelListController`. - public static func mock(client: ChatClient? = nil) -> ChatChannelListController_Mock { + static func mock(client: ChatClient? = nil) -> ChatChannelListController_Mock { .init(query: .init(filter: .equal(.memberCount, to: 0)), client: client ?? .mock()) } - public var channels_mock: [ChatChannel]? - override public var channels: LazyCachedMapCollection { + var channels_mock: [ChatChannel]? + override var channels: LazyCachedMapCollection { channels_mock.map { $0.lazyCachedMap { $0 } } ?? super.channels } - public var state_mock: State? - override public var state: DataController.State { + var state_mock: State? + override var state: DataController.State { get { state_mock ?? super.state } set { super.state = newValue } } - override public func loadNextChannels(limit: Int?, completion: ((Error?) -> Void)?) { + override func loadNextChannels(limit: Int?, completion: ((Error?) -> Void)?) { loadNextChannelsCallCount += 1 loadNextChannelsIsCalled = true } - override public func refreshLoadedChannels(completion: @escaping (Result, any Error>) -> Void) { + override func refreshLoadedChannels(completion: @escaping (Result, any Error>) -> Void) { record() refreshLoadedChannelsResult.map(completion) } - override public func resetQuery( + override func resetQuery( watchedAndSynchedChannelIds: Set, synchedChannelIds: Set, completion: @escaping (Result<(synchedAndWatched: [ChatChannel], unwanted: Set), Error>) -> Void @@ -48,7 +48,7 @@ public class ChatChannelListController_Mock: ChatChannelListController, Spy { } } -public extension ChatChannelListController_Mock { +extension ChatChannelListController_Mock { /// Simulates the initial conditions. Setting these values doesn't trigger any observer callback. func simulateInitial(channels: [ChatChannel], state: DataController.State) { channels_mock = channels diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageController_Mock.swift index 3d07927091..88c27fc7fb 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageController_Mock.swift @@ -5,9 +5,9 @@ import Foundation @testable import StreamChat -public class ChatMessageController_Mock: ChatMessageController { +class ChatMessageController_Mock: ChatMessageController { /// Creates a new mock instance of `ChatMessageController`. - public static func mock( + static func mock( currentUserId: UserId = "ID", cid: ChannelId? = nil, messageId: String = "MockMessage" @@ -23,24 +23,24 @@ public class ChatMessageController_Mock: ChatMessageController { return .init(client: chatClient, cid: channelId!, messageId: messageId, replyPaginationHandler: MessagesPaginationStateHandler_Mock()) } - public var message_mock: ChatMessage? - override public var message: ChatMessage? { + var message_mock: ChatMessage? + override var message: ChatMessage? { message_mock ?? super.message } - public var replies_mock: [ChatMessage]? - override public var replies: LazyCachedMapCollection { + var replies_mock: [ChatMessage]? + override var replies: LazyCachedMapCollection { replies_mock.map { $0.lazyCachedMap { $0 } } ?? super.replies } - public var state_mock: State? - override public var state: DataController.State { + var state_mock: State? + override var state: DataController.State { get { state_mock ?? super.state } set { super.state = newValue } } - public var startObserversIfNeeded_mock: (() -> Void)? - override public func startObserversIfNeeded() { + var startObserversIfNeeded_mock: (() -> Void)? + override func startObserversIfNeeded() { if let mock = startObserversIfNeeded_mock { mock() return @@ -51,7 +51,7 @@ public class ChatMessageController_Mock: ChatMessageController { var synchronize_callCount = 0 var synchronize_completion: ((Error?) -> Void)? - override public func synchronize(_ completion: ((Error?) -> Void)? = nil) { + override func synchronize(_ completion: ((Error?) -> Void)? = nil) { synchronize_callCount += 1 synchronize_completion = completion } @@ -59,7 +59,7 @@ public class ChatMessageController_Mock: ChatMessageController { var loadPageAroundReplyId_callCount = 0 var loadPageAroundReplyId_completion: ((Error?) -> Void)? - override public func loadPageAroundReplyId( + override func loadPageAroundReplyId( _ replyId: MessageId, limit: Int? = nil, completion: ((Error?) -> Void)? = nil @@ -69,7 +69,7 @@ public class ChatMessageController_Mock: ChatMessageController { } } -public extension ChatMessageController_Mock { +extension ChatMessageController_Mock { /// Simulates the initial conditions. Setting these values doesn't trigger any observer callback. func simulateInitial(message: ChatMessage, replies: [ChatMessage], state: DataController.State) { message_mock = message diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageSearchController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageSearchController_Mock.swift index 5f66fcfb47..eb90beec21 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageSearchController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatMessageSearchController_Mock.swift @@ -5,18 +5,18 @@ import Foundation @testable import StreamChat -public class ChatMessageSearchController_Mock: ChatMessageSearchController { - public static func mock(client: ChatClient? = nil) -> ChatMessageSearchController_Mock { +class ChatMessageSearchController_Mock: ChatMessageSearchController { + static func mock(client: ChatClient? = nil) -> ChatMessageSearchController_Mock { .init(client: client ?? .mock()) } - public var messages_mock: LazyCachedMapCollection? - override public var messages: LazyCachedMapCollection { + var messages_mock: LazyCachedMapCollection? + override var messages: LazyCachedMapCollection { messages_mock ?? super.messages } - public var state_mock: DataController.State? - public override var state: DataController.State { + var state_mock: DataController.State? + override var state: DataController.State { get { state_mock ?? super.state } @@ -26,18 +26,18 @@ public class ChatMessageSearchController_Mock: ChatMessageSearchController { } var loadNextMessagesCallCount = 0 - override public func loadNextMessages(limit: Int = 25, completion: ((Error?) -> Void)? = nil) { + override func loadNextMessages(limit: Int = 25, completion: ((Error?) -> Void)? = nil) { loadNextMessagesCallCount += 1 completion?(nil) } var searchCallCount = 0 - override public func search(query: MessageSearchQuery, completion: ((Error?) -> Void)? = nil) { + override func search(query: MessageSearchQuery, completion: ((Error?) -> Void)? = nil) { searchCallCount += 1 completion?(nil) } - public override func search(text: String, completion: ((Error?) -> Void)? = nil) { + override func search(text: String, completion: ((Error?) -> Void)? = nil) { searchCallCount += 1 } } diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatThreadListController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatThreadListController_Mock.swift index 3bd9eb0502..0ff904f337 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatThreadListController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatThreadListController_Mock.swift @@ -5,25 +5,25 @@ import Foundation @testable import StreamChat -public class ChatThreadListController_Mock: ChatThreadListController { - public static func mock(query: ThreadListQuery, client: ChatClient? = nil) -> ChatThreadListController_Mock { +class ChatThreadListController_Mock: ChatThreadListController { + static func mock(query: ThreadListQuery, client: ChatClient? = nil) -> ChatThreadListController_Mock { .init(query: query, client: client ?? .mock()) } - public var threads_mock: [ChatThread]? - public override var threads: LazyCachedMapCollection { + var threads_mock: [ChatThread]? + override var threads: LazyCachedMapCollection { threads_mock.map { $0.lazyCachedMap { $0 } } ?? super.threads } - public var state_mock: State? - override public var state: DataController.State { + var state_mock: State? + override var state: DataController.State { get { state_mock ?? super.state } set { super.state = newValue } } - public var synchronize_completion: (((any Error)?) -> Void)? - public var synchronize_callCount = 0 - public override func synchronize(_ completion: (((any Error)?) -> Void)? = nil) { + var synchronize_completion: (((any Error)?) -> Void)? + var synchronize_callCount = 0 + override func synchronize(_ completion: (((any Error)?) -> Void)? = nil) { synchronize_callCount += 1 synchronize_completion = completion } diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatUserSearchController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatUserSearchController_Mock.swift index 004f2dbc50..dd17b86c96 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatUserSearchController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/ChatUserSearchController_Mock.swift @@ -5,25 +5,25 @@ import Foundation @testable import StreamChat -public class ChatUserSearchController_Mock: ChatUserSearchController { +class ChatUserSearchController_Mock: ChatUserSearchController { var searchCallCount = 0 - public static func mock(client: ChatClient? = nil) -> ChatUserSearchController_Mock { + static func mock(client: ChatClient? = nil) -> ChatUserSearchController_Mock { .init(client: client ?? .mock()) } - public var users_mock: [ChatUser]? - override public var userArray: [ChatUser] { + var users_mock: [ChatUser]? + override var userArray: [ChatUser] { users_mock ?? super.userArray } - override public func search(query: UserListQuery, completion: ((Error?) -> Void)? = nil) { + override func search(query: UserListQuery, completion: ((Error?) -> Void)? = nil) { searchCallCount += 1 completion?(nil) } - override public func search(term: String?, completion: ((Error?) -> Void)? = nil) { + override func search(term: String?, completion: ((Error?) -> Void)? = nil) { searchCallCount += 1 users_mock = users_mock?.filter { user in user.name?.contains(term ?? "") ?? true diff --git a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/CurrentChatUserController_Mock.swift b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/CurrentChatUserController_Mock.swift index ece0a7da07..88563e88f6 100644 --- a/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/CurrentChatUserController_Mock.swift +++ b/TestTools/StreamChatTestTools/Mocks/StreamChat/Controllers/CurrentChatUserController_Mock.swift @@ -5,13 +5,13 @@ import Foundation @testable import StreamChat -public class CurrentChatUserController_Mock: CurrentChatUserController { - public static func mock(client: ChatClient? = nil) -> CurrentChatUserController_Mock { +class CurrentChatUserController_Mock: CurrentChatUserController { + static func mock(client: ChatClient? = nil) -> CurrentChatUserController_Mock { .init(client: client ?? .mock()) } - public var currentUser_mock: CurrentChatUser? - override public var currentUser: CurrentChatUser? { + var currentUser_mock: CurrentChatUser? + override var currentUser: CurrentChatUser? { currentUser_mock } } diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_chatChannel_isPopulated.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_chatChannel_isPopulated.default-light.png index 225be7654df09ac83a817ff95f0656ccfb9b0d62..0078c5b7c477cd47dcb3e0750dfd4e4b4df4188b 100644 GIT binary patch literal 23014 zcmeFZcUV*3x-Fa#n#KT%f`+Q7fKsLRC`yqoNG}4?r1uU1MO37y6r~2KQbO+?ga`

x(k}x4d1Iz6Z?2>Sx(B=_2a$lUfFS3G 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 literal 22778 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 HoD!M<0temj diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.default-light.png index fd46829283037e00d0590e4371069ca0dd008289..d5fb462384534cd3781128b264282bda28266871 100644 GIT binary patch literal 24551 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 PPN4c!{Ylwl(+~d(e1`&A literal 24331 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 F2>|9;$G`vp diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.extraExtraExtraLarge-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.extraExtraExtraLarge-light.png index dfc4147fafb0c2ed1eff5df328b6cc3bdae4d8f2..c489c39b9679111c4ed8bbf3defbd7b9e6006749 100644 GIT binary patch literal 27300 zcmeFZWmuH&*EUKhA}xxbv@}Q~T}pR@v`9A$F*G6|C0zm%(nt)_0}M!)bTdN;gGdd{ z(CnMv|9STFet3_4?DxYy_LmMES#1mq zOfUup_DftG;1$Tz)iq#)>7lLg2BT_(Y7_V)%=)d8jhY$;JFt(7aUYWu1N-g};2#F& zbBz1{>|Y0pDX5J{rAzB z;5_XA-p776eNM;Oev&Y89NM?*2EBCL_%NpS0EZ4SYX=Z+#)%%_J5t4xys^DPn zJggIT9u=gdn-4C_5^bjvS}^b$)kYFzaAAnH&&`UM5hKWjqXPMJHbUvedB0ocOvZ4x zy-iIF)4i-eTaAg>hP1a0tD`y|&=N#YffR)g`x&|vXalEgM#XA1j;C}q!exjh1gN~{ zEPiK$m&%9?@RqI9O`}CoO>1$}2Cs7i4wZyY=PYA9TK3w`hO`$x5mG+=lVO|l{#X61 znQ?Q3YuV4w2Jh1PuXiHe{0#`gJrdGy69wac`%QenaRc|=a&FeRq~dq$C9YyXotyu7 zN=P2=c2Y~d_m`;%xK9K7vBc?I0f}#W&~+y;AY^GKpn=skkw0G;5J8u_&Y+LvCT_1! ze3tySD+PT=zOq2q(~Q6OogYtX2>C}s+HXX~Fa8$%E{C*zU%ElH?0pj1_*zThadUn^ zUQnlmIvN%-cVG6JH8uF32Mt7okw{XJcP{rCw8_hTx;;N6c^dz#?c8v3cVT0j*5+zO zbTw!3_WAk}LzpD>4%y(S)GgKNB6#@?YZAJL++1AkeA#C$wt7ODgY5F}GI#q`&7AGk z*+CC_IpAnmz_RTU)w0^=zSetRLcw>EG(3&YEa-fFAFzk;+@Omxzs9!NLrpYlF=k_X zs!YcR1>N{4d%hMgrH@uwW_{@BZ2bPEiohadV`gph%j85Pjmq|l5xi>A6V3r?C6&BB zo?K|jyskhqdb%XJ`K9vv?60f}*E1HVy;3y4Fx>vj-MatgOYqHk4DUvczsrwcBlFxG z#EHW@WPf7M!L*pS!~;sQFH9f^=bDDjo41#PBsXlzs4TqY`j#hB@wsmkuT%cCA590Y zf2<*9?p+Ry&B&+}59&mw^*MgL2%0#i^$kGm!R;5dspl*e)D5mK8zku3%MMBVwb&@&As=mq0b3!46=1%kN%_aG0%W}{qnG~(t zPt4aF`AWK$o^eAjYgL7}N(-VdBZz62-hpi4pPhjUU zMoRK3dsZ%yLE|fvr!I-{En2eHt|cs+;~)RLm<@9~SbmcbFj;JXX}tWTQzSlYzX$Ao zEm<`S@lmq=m3D9{X0GAiaOJvZ`({qyCJ08A?l2k?A7VWVw-AR2KA6Wk5lJx`-_ZT-Q{ z!r4_<$9BU0TI%Q*|7&~0D8Q11xO!)@p2P{SMy|H$8JNDh+LyVH!zsh~$a{C;)lTiG zceDLhOYz?hZ@x6YaeOT28qI-KsCu==*46wmoE=%9zZ zr%icRg|lAQJvT>3J4JIcteCft8f?Pb@mKGSudg!tWEbA(q9l2_Q(Jv=u}%J1*3XR7 zd{g+!jEXlT_|OKsm{&q^c2nQH&h=kK?O z=!2^WyizP@F0fMT?^cqumg<_Dpw7HOQgs=VP7$`7kzx`lz8m$C^Gg!J_|-+epld;{ zqpu`;QpgdKr_pPa%@J<)0TnZXQO)0Y!<<+5=3Ke)f1jP1i1jUNEzU4Wn(Z}lwe8=A zRo~{y2#etK>g6Nq3qfeZG8r_(oo=px;AeX_sju{N?_(=t>>w8jINv|cANB^ zyNV!tHhC3BGwH0}N3AAK381k&i73G~x>J0wJEpZWDze7myI%*$S3GbrT#Q&t)U*XS8|-OB=l z`+nlFv+0cGM@s1lE-kwaJ-f}Tidhako`1)-YE&Ct7NeOMI2Y~88-Zi>GZT)_{5(Wp z?Bk40T|{C}8n?-0{XVaToQ*=7v7Fh_koRueq)hNvW*GbK_P+X?K?Oc=#NrztA!Spz zzq<(7LP>ndTRLS==rKp*cDri;sm^K9!7$vXedgGB;pT|jJs<@6&%A^{Vi& zDSOqDm}18B^1&MWW}Am4u4S*jOR$3~u18OlRm7R{+R@;inR{QqPk?C^uEh`GXRT6R z=8NA9@cl+^Ty=ZFDYrR3t5M-}j3kx8qkjc!LFt;QKbhE=yp?#IjjFUr)$NTN%|Qc9 zJ#9(;=X|O~r=D^H^R~I!H2D`0Gr7Ma0*Q)eq;5$qTn8^*mFE@=%+brV<}cD3DjS!Y zn*u`#1#v~&(ga}(O7RE4>=1-k>Z6)$Fh3YD{~ND*{w9@^^>xCOUFyn-+L_M zCG^{3_JVuJ>~x?SIogR%u=?F)Dec5n^AbNfkU5>Q*Z7x@Op6PE`&qlus*s47TADoe zNV@!)^wSHnwC^ljlJqz0v?>5>7hpX$_SSH4oKtyA`EQrxw8n5F+&uQOcdbQ|MrEPO zmuuE|Bz@ST!rde4AlripXgRFW5-VOf6+ovm6>g81lHusv=`(2c7mifp2 zq_-+g1vGo%w{U^pGY|Y6K^r8zXmTwSn|v&w9wj(%T{o#-jw*4*A)a|OPtaWlh!4EuL{-__lQ|xCESbYOD!uC z12#ohdbeZ6AdS=;3vFEP8;P*j3~$CL;|&z(U6xstd6_pARJ5F4>lj!H#Krxz^r zzua9+w9j>5{v3_jH}B-8G~(^s;*3<}8sI7; zgQ*sdi^?rLAC{(lsVhuw*fx)Bl!I>jq2uZ{3DpN=K9<8!&8OmwB7yeyR(>EU06)a^ zP1mRzdCY=hmh3no>Dy4I(%r^o$-m#f)-fr~4oVa`!|1=GF&r8_+i7$RitPr9nV`fJ zJb8Yo`uJ%xWE3S#CIdR@oWN})Yit;E?y;6qZRTtL@?dI{foCj%+)Jd zsP~0T>!}2uNxCX~k&vum`nse>Yj7@n8*Q%}@M@V2)vmLAf!>~B1anrVG>*GhAkFrE zOp3ym!lw1ajpQ@=Y5G1MoH?}DIo0W!L~sw8+6Nu@7>mXq9yM(2G5xGl&#qc11-EKQ zo?HEpuM}dU^<`{BL>n7a%@~6zil_ z0wy%;;`LVH-qc{QEQ$>Z@vz2K=`$F%4H{}V3F*!_SelH0;T@S*mAQPMa_;eye|DBa95_SMI#4)v^imGHXuq?V<3 zDPt%0>JNDyitj?o_39uq*Gyc_N~lbqLC~y6$#yp|NXTQ7o_4=v;5+^ML*G2`WR*$%jDyP-B6n8&wI@_Q5 zW#%un%TOP0e79JwS_hFjSz22DDEubGmztu3HGRFw{)F1sk6&L!wAs`VVI-wtuXCw_ zGU|QC`(E~h?4wnVByQ1hM%Bew+a|VF^F6J#lOke)SQ?4ux9`V6V<8V{-Xf~jqn2R) z)Q~qwx=v3j>CDI0!bUc#4(E7 zq?(=ey0V{KP7#r)>M23yy6myu-eG+?QPup3c6%t}VsU$JlH_{X(Zq6rk}HuzuIF__ zm9A3R9U9;wtt$-ZeP(;Ns=1l6-Cs|7xhw(fY^$=w|H$L zh;4XV(3C8hi!cTEq=SAjXppT$z%hb`TS9&}mCJv(-oQP#>YM8>q2BdkR$VcqZz9YC z2>QrJYkQs=KZ*ZlAa6e@TcV;cdGx*4sB?lDS|X*EKqJ$b&OJQE@yv9)%I`1lajj(e zPx<@W_ieHeUer*e$qh+znqV4?XONGpdy8>atLp{lF@82$NDz5Or`TJ4a8y6^2S;92o_y#y~?}e?sx=0NxoUh z=xr6&LpAUIYVU@xLa&&sifDyc&0J~QXFm58TziU3-4w#u9gitZAG^js9(8Hdb=i)* zoi6fX$@bJf2%+OlRMc(0=em&%=DJs4{b51Ppu(wf(K~#FkvectXEtG5IpO$qk>_G# zcX4}9(&?;rC^Ht!SH!A6VIhL3xm6>+r2Tu-fJkAeYC*=wZHx9^P}XGvraXV zND2O;w|pxs5*B>z(JI)gakM>oa&}==8rEiIVq?NrWv#N+tY(nw31bV}kSe7LM^*{x zdcFEwr8WEDOVHyYs4P{ZF9BKbW>ZzUl*fKu{5N7l`(Ke~ zTXfF6PB<{FW<7C9>e@Kd+<@t6{$%C$y#+{Lg0NxF&*E|$(Fsc40ZH?Lf*_L+i+xhd_IJrJUSJDb}>w<=B zSi|XHp7+<&*@=-~Q_ZKmXY(yswQ?waZ9do|5w4r;w6q3Bw1lhUf{d&FmfA1TcDS0@ z@SibgoIJL^G8!jh|4(3`QpgV?3-1I$>dZr-Xm&XXdXh>)H2b>yL-s zi9taE-5!wBaOwQOLqdlmi^3HAo|2W4#Y0CBiI78SJO3}Q>t^Zx`#LZ_|Bl0d?Bw5Z z_;(!sT_65kC;wds{y$#_w&D;{*T*`S$YhP3E@G)VVnL_slkJ)L%RQLwUZts{<7~x` zSLFujfdNhKmNNqVp{@PNt!&uV-&9l7qE(_*0LRZB64FcuRy+b!L~koR-*zB_>J-Q~ zoCDGft+E82Yl5%0&Es^XE_e9X&PIc8l0_=Qr1}?cdnOMzC*6=rODQ2Wn#_YZzjgE< z!9;zSM4Ki`&8hBdph%e5GuD#-QhjtT3r>mUyExSL_8Pg^{p#RfA1FeBn}*P8qnv?& zxf0Y8hYDtHSou+uTXbX)bu)Dq1H?tQMglT!2>T>Pin39$@=6{-ZnT89N=G!aN9bAxtLQE0C_uK>4<9Gg?^uosvEIF>C-CB1f})~V z8BtCs9e6LUtVfUc99P0OSJdHSy=eApMuwJ8VIi3;=-Bb@GV`Gv#!k(48PrrpbHqLQ zX*nc2fi4mDD-G05rMlToS-RBLU{=MHY4$fz_UncePMJ<=5+u<;>ct;6ytC%*s#+jf z^zCw6V5NC`kf6{0yY1!n_Dd85^7co5&u8kXRM8lOoIHJE;+D3d_=DG|ogwY5; z3;*krS!!rJt(0Uka-v9O7chfb*!3wq!;$qyg&Q_y^Xp3@w0DIk;LNQBFdzO|n!sbN z%V|iEHO%j%M(XAu-etcZ@p3H;_#_<5^s;<4_N)}R9}yhTd!VIO-#A2HEM@w)CB1U} z`4O=_Cz%MMVH3dgGVx~%6ykr?uMefe)x~zLfMhjTi#L#;1_u&%T>;7Q<28~+>Iab3 z^lPEc-V(hCHfL5ZW0^8Ua=pL{kJODHv=qSw*^Z_vUl%2c*@O3%7Dt5FKC23noB4dB z_E`z>?x&BKTlm}a;-*+NV-+W)Cx#sURm6kpoL^-7_Dk#Td~L}tkU`h`L2HE8>nYTr zO(xRHYEqMj4y3{3BnYAv0Tu27xs46<3s@g|fo#RDSVz-l&mUzvCC$2A&3|8rtwu5+ z&i8_E{V!L^+wCYVr4Svlwz+{bi8t89;wzo07aB+|QoQgm-T19{hRB?Evrb6K;F|!) z#pZe#kpA27t^*71+J5ciRY!HudNjfx`L!Ja%*PSPhzNV`-hfn^?&|6@L8rHe`dZ6! zsOe3T7tiNkJpnw=Ro?#CLQyg<^Apcs${`B`ZehF*df zYviJ;)`DIyvY?wgtZUce#F{-x4araR{^z-XA>8OI;y6iFH5~}Y<;GDK(S#7^5;}fihWkk~*?j%Svl!~f5Xjl%lCr9bc zt2CI@tCl5bolp3Tue zu{+Q4a6ZzZK@GHuNiT=UfRqxw(EiDrFRE(IMsHusd?nT~D}G;3!1X19#;+g9^e#$5 z|5QqogA+%Fy`iU{E)ac7^bz5%Q8(p`l~iaFwFgYyAx@oab^4k_Q<c7ls^-gP290=-ouYeDL_& zMaa(92ia^5Z!#PQV(g9tu@!iA5G;_S(&XVue6yBs!qr@z>$T(dQA~K_IT}}IchKfZ0J2xn1)--BrZMl{lQ-A+Y4Q6am$JDm z3xSgafo>RroYUkz1G9Ryi^OQ-3>@6B=mEPL_FweN-s>bS$s{D~Sj)9Z zs!wX4s;kF&FsM3T7W(9JW}9TXyKq8Z%tehLMGnPbP}N|5eRaEYBt~nKJ-TV3aDyso za4c8Pdbs%bGED>Z=u>q!J(s<1ZD&RP>vPb4zK%*za%zp1yt&z+nHrqcIWd-pgbPQR z86CkQX+eD|#r5K_DsGHe9Q8!3&Vbl4c&E`hU7x!0gebyBF~_5-{5uUH`6#!;&4$?^bB|o=cJQZqXSAMU ztxBkv@ZK2=g))N=TQsm<$)^+AU%b&fdOTsp?J0QPnM;`QrlLuDrpnOLQCM&fu6;1d z>U>DYeaPrKC~e4^jB83=n>lB&a1sv59|%#yp zoZxXuTr2pq3IBM9$ZS)3Hln4eZa^m1G`ly=)Y`xzFNjBz2MRH&?gmP(xT2fh!(PO#t9*Dn}Rl#1ivF@yCRczm~_L~o$m z-q}vK1?qL!aguEK_O8$F;mW*S?Vg+iElpSEYgrn!{jk=V*QF?>C3qr>iXn$>r*XN^ zuM`gkHd43D(X`yAd!1X1%6Ilsugx^}bvn1nQvfz*_+{ArEwfS%*86J=E$7OHr#S2} zAs_n#k0+BWx*nDY8Lv{XY|OyD8n|Bt42hzJ;oh#phl*x4htaUwmR^ZYl9}b0;ME3; z0Y=|gKZm4#2_rtXpF=nR>!FEe@-rX?I+1+7d#o1fc&K1%!V#f3EbrbzV8MFxI%3w-P5yWNkiwAUi!I?WG~9 zv*TF6yOr3n`}j}ier5149sn+w{Cah4;qU!Iz@2sg5WwQ-&#;H~{{K=F_^f{)ACmfUjALra@;?yICCRYh+grDk37W6?xN6emb1ck|n&j z#xYZNnb80rG2O{qE8u)EvTNZ_>-m{seP+CH6SMED)$-pXW3f_r8S1&!FkqJo6jhHR znhIYV6+#tKPSc`ha2WR9OQV5ul7&*Of*qjLpc*LWcol{3zT`Qn<_+Xr8|F#|Rsd+g z`+PkeP7Ov_Q06zv;ty=38kqgS#KxIpN;g?Oq`NtpHFxFEudsWX+o;Z>k+X9M-TGd> z1G96@GVzt}Wsv{u_S+oDJDaMGdCFOH2ZMkd+`T2Y;Zz#yqBx)~A{IVEXYh6rA7WXq zHeKvHknQXbW8Zk(v$$Eo&+n2UffhwLbB?XI=FFV*Z5Ulzs(UMcb(1vP-X->$C5l8n zDyGL9GA{RTkZ2v}oV?&kw-G0D7o!e%&pyBug3mjW!QYp7nm{i@b?|0ElFGjx0Tctw zK+L85fvh*`44H<>Vm1CqFyMlpdBqIMjq_`sodx87e5fM&6%x}x^dU^?2!NiB`787m zkr#s;kh+f02Q5D5{n_Hr1Soi1+OJQUeJ?>iAlv;+34d<~icakapulNGCvWAW@~7Wop~M!#g@~^0I(z3TM~4kYU}9c2cn+By zM+B82Q!DOuN7H`YrWA7V#FJD7NAZEA%UCCf;IRW;lBqH;)bq0eGz--_7g>`((6L{lf|rC0ED(1 zE3{;%PjhIM_cO3tr+4g|Oc8=1ixF^;hqBC8}ZADs$f{}$ApB|lV<~Kly z;R-uRQ_1zkegbYKKyK%<=lG*U4F1%0d@3PCDCm@^*8@Nl?xv$PS_j(B#8s!jCCBz1 zfVCDSY&aX@J#)Uz@?x_(o_IXO5l^dsquu|$pE{h-p8xy{J`$+IYSuyBY|=eD1wau9 z`MFbLX-EOJBozc$k}cw;hSYVPO8jf4oE#Q#z_q06gjyIk4Vd6@KX}Qvq~G*A?BSTTxBa=*cM#7(0lL?AiC}-a zw-5!+3_y-3QzG8POPs!Cc18%4x*`M)>cpWsG+R;SxZ$X-{cc{TIUY(e?~0aBm-2%W zJ48Ehv)uoD*Tv|ax+gnM3wyy?FN>WRRE6v1K~&Pno0LAK7~vKKqGn=UVy zjiI>>g?zM7e)69`J6NK>)*n$N2n2cTwUnslAj|^}nZkS~R$BT^ zsU@SV10l4kfZM6BbAKxd$`u1wF-V&{wJ%q5OP2mqA$&j`qNHs?4b&VCm>i*T<41Ft zBJ4NUUw}Iwr%%5s1-EyG@7=uHEFR@hLIv0!rglX0oULTY?5~qRXEhW~DaK0{5SDp# zAQrbur}L~BgjPd>o#6YD9DH&v&+b8x@}7+Co1~Mi3R4YrP|fk9^;pMV%2ziTF^CN5 z@a}`_WFoHT!P1BndP)0CMleoVB7?&7A(5!Q6&}Z#3RMwV)Yf13ms_oE`+%RG9gO#~ zVgQ?wzTXv1&V@>koMOGC@17<#w>~^uix->4=P+J9xEA%Eh&M-XK>M?s2n1DwF7^*J za0qaSf~AyDVMXGlXkN?SruCF7!Ey~5q?vj4d}E8`H0oX6I}po0QfadMhTk8lMI=lQ z#&zHMqa-)+K3i;v0XmYEMIyenNE@K=<1!$5>+5zQ{$@d4Mt3*an}C2_)qwo`z^k(j z2{dBOO#J;=q4ZT8w*J=oM@MzFc(Hn(p``9?W72`DDA z%u*D(b*-2kTAU#XO%LBTd)g;&|9Vutw0ya;=I%-3Qlbz4?%W|gj#MxF7TW8yq*~G8 z%=^TEE;54UZKK&n z3ug#rFrr}Gda{Y%s$e^uGw>n*`_+34aq$ohOr3x3HTXX71rkLWuE)G1*JWcFd?gcX z$?Zcl0_}y>rLs!4NpirOYD#w42&TAk*p*RO+Sgc0&X5Lj9HXZISvHOck!GXB#qN~0 z1N5gD#H*%|4PI0 zO(6G860**FnWB^xMMnJ2%WqzlLa|TUG(oIzAm>j4Tj7w|*3RfiTJzPX@4=3z08hXl zcYC!VmC>bq7K*qw7w62Ce8;G9SWJ)-&Zi|fsAwp6y!k;-Aa=(TR8^+ zDEJ5mWJ#w8>RS)F=*f*WF4Vte74ypDdU1x3)>lXm3=1iyz>P!DzYdr^`yq2~+&E9W zw}EqSwU{nV!iv};PXy=V3veWLD*m%iryI5~(uXsDr1dw_)b1Xn)EBf&q4xEnen;sA!HF1BJ-e(0WAVvYO~ej8fx!E`KLd;H z(*r|NCx;5A*YF0cntoNlmL~4FDw+LMpQ99kV)bl?_VZ!a9iX16Hb=sL;R7c2PVViM zZOn5aRu->6ijKObI=1A1t<&{q2O17u8W+;4>iZ|yy+(Ex1uZy!>Kv{mi%w|n) z-*gVd_F8LUKymlYq2O)dh&F0#%0Am@HVpsnL4%(-XBdwx1697Ok=Fn}=Hb8xV8`mf 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 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.small-dark.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC+SwiftUI_Tests/test_customNavigationViewValues_arePopulated.small-dark.png index b4587955eac57b09d8ae4be7e4bbdb829780b4e1..f81bb4b243ab414c219b7454216cd86055e38429 100644 GIT binary patch literal 24086 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 literal 23596 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⩔Fy`leo8*{mEm9zZu?-5QxpMDaixv}uhfndv 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 S`~=(_%;4$j=d#Wzp$P!XxLVBs diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_defaultAppearance.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_defaultAppearance.default-light.png index a34e144e4bc1163b2895d5aae138758f9d50d6d5..63ca6d4d61267f2dc7047d7e1ade388625659474 100644 GIT binary patch literal 26383 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 literal 26167 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

AB{Z;X-gN!cP?s(nt$1PI#3O~ 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 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesVisibilityWhenAlwaysVisible.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesVisibilityWhenAlwaysVisible.default-light.png index 637a0220eb485f06c616c31fbc2fd1a1d3572ee6..e122c25ac47a6366844b88e8fb13e3b2e5a2108f 100644 GIT binary patch literal 21471 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%0ANA?89Cml-6SSz^nn?T_P7fymdk8*r z5G88Aki^>z3wa3_mS?MYE=jK5x`i4@VG@Awh#CWW*|e=?qJH+ZsR4=66hzR~&)npU zplN{B5YS+@A;7P~dg-WVMGCW9f5LIw4@745=6FPK0DR(s!qCK{b$=5MFPme;Z6V~# z;8vXx0!UguS84;~79ImvH@({OG?2%_Dy3#5BdAzbw4_-Ob$^mf6gfN$tisFpkrp&3 z5U>9x_vv5&-^6MfR1#3%)R4haZNmpA4sOzOVsYA zLblF7)vFER6=q%a_XfQ6A_qP|3T>-Q(3&Z8(S?C0oYec85D|O14zZMWGejn;ybG zX=M8QKRb`+FnPoe_lbV#8eNLeM7?OD4|ok-3qS!xt&joFm!D)eAFdTLtOZ>fkqHal zGf-$^rmkuTb$-^FxFvI2J^|i#e@c><2y?Q@F|-didsNy_5Tm;WE_0eG3@)bjJ!EH@ z?KQ2qUnZ3Ec!5!Pd1>G66j5|Q<}Fd&{E*sn9v2oIjn`f0EkbVns4=DNn556@MDjN_ zTfd1p;LRtPx<=0WsN>4MlKYQ-Va+{cItV&SZB(M2@xU-c(=eOQ90RzhzSSI$w?7vr znIRJ`TGhtp9W4h4GXxpX@w~GB`7`_#vJ9EtAIu1wQTjpym8_z+^^7rsCo9tcQZ%yT{b|%R$ zo$%Q=K84+H)klwHqX4r(?N*f7nDg=4F||@D-iDMobq0j-^Q+dbFIcXWs$<< z%@1$=6bQ{LRJ4F&GA6#4TxI;E{%hs^Mr}Ca#C467yl&dQ{PnHCu2Vi!+>);N#F}{d4R3P%#e+-_8 zELh-rC3g6u7_M0*xn2Ged$k<2uXt+lM;W?=m8;oDg{fYZQ4N}aj zH5th&u#GRCd)8l{@k;(D6zSoCQttWuW~yH&_P;`rDw8{%rEI~adVgQ`|NJeE^nrUt kyOGtA1dlX8SFG6wQfxt&c9giEkpw6|RezE%Z}R?s0g3+RjQ{`u diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesVisibilityWhenOnlyVisibleToYou.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesVisibilityWhenOnlyVisibleToYou.default-light.png index 61820a32bebe1a7365c2b5bed80d5a0f56529d7a..ba8298d37d6fc001fe4b14aecdd146c1d8106b2b 100644 GIT binary patch literal 17334 zcmeIa=U-F77B0L)Ab^yhsPrZZD7{H&A%Ie(3JORs(rcuK8U!hVprUk05EKvrQF?EJ z^w31<5PFr+`;F&4<-O@NjU2RpG3(OY)0H9G-silArOPb%^KoS#>r=F@3P}Ix1OccUxjnwV5w18X0JOw}ox&(m#R3W|r5Hmpb zk30a}1F`%&uLt7$XB`p%h;#%<|5?YFnErXG5f9?k|4hMH(0^LQlKiVS$N>xfSDvKy z&t-ZM2Uf&{(nIZ$Cjd~<|2aTFYC0pakk#>y&I4jf{K7vkkU8;#@Bd5x#Kj{Be^dn)n^>5Li!TCE9f9J$sRrtp`@mCf8 zs={AY_^S$kk-}eC@E0onMaci85C3n&0&)O2KY!WC;|~Cmet)Radd7YltK_K9zWdpv z@08h7Pwk&=7Z=gUYfR}SO}`k^x#Q3;I;_-dKG%#q#Av73<1SB#PsrPR%9K{vc{u#= z^}QPtGS#~ecDpUkj;GEIf?dFpSjZ3p#e5Kxp=X}^lXowgSr_bpK-4_-AbU?dlf_Jj zd*%~Mdykwbq0v`y)x5+jE)1j5LZvodI{%PJOVK~%^Ffljc@R>sEVk@`fj<%_maKF` zohC0-iI}BYXPij*BY{AISZ^IC1kL4-Ads0u`%SH|4y^Xm_f zR##Sw>j~n$V*neL+$$80>u}KdNaCN|Bt1&whB}>j&gi0Wc91Q?zDT#>a}6@OWLIh_ zh$Y*}>pMDyQ;IfLvn7Aow+l3XP8VRjZCsR)=7Q`Z^~-{za=6 zl>-qDCP0D@=NXz@VE7Wp=@E;Nb;oo{2hc=<$30|S_I)Tsr2^eP)r1W zzJjT4cMYESCt@;aMFuJHubi-B9+5LQM$n!m}5yJ%qW zs64`B15%XzwmhvumIzqclhC(IxzbgsD(l`1I_4=OsFslAOPGP<{Azp91eK90KlDgB zvZYXrj9Ay;dP{WPRIm8=ld8Q0@J@>ky8#A%Qd$uC6$1}63L;D=6cJ*tYHmMKDPYfP zm}!gq)0a!QL+q;UIX)g7ri&jb%2Z(>-)%!Iv{M&!B-3yW{N z_~#ew`5{+(otB?V4jWno|9V*8@0Kk%W?pnv_>rWOH*pyK#zB6t{`fX*UEuP)-3t2; z5Bsz;AIkgv#;&6$>hZ%)gxJN8FVf1(wZxfsmvhAy;1#9D4g{rEIyx;|Q0T;NPIoLHcb8nhQ=Eh9t>exx-<$IGIjl7Otd?>u36CFC4lb#(ky z{G)PYd^zjq{Y`~D9<2<0d3mJ4?yQEa$%o|~f18^VCwIFFu5{e>_0&NldruZ?NF?TU zGH+KHSCq(Bz#r88_!Lr-Ds6w?(3|6<97qt|&W4VpKh*_)81zgMw#Yx*T+SaZebo05 zSd8gYIB&rQt>R>drxLm{MQpXpmcOls^;*>U)Qu*NOVYX@_l^{-jwmpCW%}3dPyTWm zTv#8ba=vXKYd-mKqEZyrQCD*{Xu*j2l$lwjA4=D_St6}`Ezh8M z!nCg3S?BJ7UFBYNI?tD+@;bdFt-QqzORL;`~0pufma9m=22wc z-db_7VZ}sBlWTj>L@lboZK`awVrYG9tDVD;MNgK}A?wxyj%-Lo*gf7w(9YB)tZyz% z0t*k=J87KeRcOqV_eGK{{&1RXwhdEaZI8?Nl$k10mztD#;qCZg>E#PXhApn?EI)m_Qk;KA#Za8bCGXobz-)ZJU7;>{@=g$aY=KGD z6Er3$$(&nDdbgeIJiv`voDK{UKJlTy1-J7k)XnAL| zIY3ts^)~G~v^kC>M;jS6%acht9qvA67PEtz5yJ1wIkkg!S9blaxv3>lN43vSBBz2& z2dcbReQ4IzJIn@!G!hGo#x~|9e%+lA{;>DnWdK;R<^S;^+7?yDSGK%{iXk7kdt_eG zl0vD>8h??rMY4Vo(>)cj;Vm+M2uN_nQ85TV?8^n!-%=D&fU2FR_FAZG)6uC?A7$@& zTx4|D)|O!R19`FvaW?G+?=9PVyRaDDP05)74L4Ox7R49ph`Iu=W%t44P{TBRzWFZU z`n-wTNE7S%`w-gn4$=e9wec#dUEgUIN4U<&qoktaot#I*XW+;ce5K`dt^HJXU{27> zW+~upK>Tr(*sRw${s#=DPMe-O0AOD2!GD)d-gvJ#G$j z+p`JVv5?^#_a2_2S1dQ{KR9sbwZhAsHCxR~j_;Z;s#b%S%~Re8eRv3VOuoJ%k>7Bw z=T$cE%3f-XWk+KPY-H631|c$W`HgY^;;@^2fZlXHw~7KAwt*G~a;L5t4AUmf+ha()w=9JU2L zLFi;`P8{3h;U_L^2nz@1m(3X588h`&*!b~+6`(W^}ZSU`ioA6jD9W^ zA|cXWq`&s8ZIXE_XE=-h`XXi>A^|5c2I6G_DDP1}qY-F{iZTyvNhn1<3}*l&I>-1Ks%d5 zXD>i+V5jT3X*}>&tcV$A*iM7IxO~%TzaBfoa}5_6OH=+C7EYB%1+Qyz-R@hgXqx&C z3{?%EA2&qrUcWLDyPkD9#Qs`!h9yJ0bq(h;{aLOV;>^+iHMnvdPgvbkTW^tkbmgTm zxx|)#CuC>PUcsp)Z*VFzMMl?$AAx__q2b5Z*Cn|uKCQi0mnkr~!neX|VyP3wQy=do zn{MEZBMBS_1?Gf3KLIUmFADz%+btW}AHue-6VU7TD`zhXcp|>Gl7E!@OwxQvE;85U zHhzn~k>zG@9jCkz_Y`rVgEWDRwnSbh3n5I-nvX_9IkdWv1MX^2Xgr(3+sPKVMbfUz z1+z83!&hNE<}u>E%5>u_P>!4YtP-5|N;6zm<`zoV8HCNWdw2KgR7%&!ZjPhH7Zgoc zV+4`gQHmUL2R<|^vjo(yHP20spo9Av3gkOIP`CHdR(f~44_rPfXU5BY0xGZ4RxM*G zr9l?WGD8Z4FHgBP*Cnb3ppDhTHLKxYl3{prmFg@1ex7>izG|R!U^fP}f;%p1Yn9xe zd=j-fhhEU40u-07^|tSs`}33J{jN&bOY2RHbdmGGAJo-w7+@rnSWY}3?Jt~ztajT* z=T&~WP}2OKMjpGPgE#9uXEyqB9>yGRo_I6BTejE5Deej~|$zoO3jPKA9m85y+mxB|S=T;{vu9aXT#`$2U z!I6aXlQIkFq4liJdw&dU*DWK`aKjI)3X34mnc0cX7f&JJ;{7iw+rL!`_;#nMz&FQg zS1}{m=yuMT?UOC8EF7yZjTZamu6X747f{iv}qnxL9(9T zyeZeD#}V11Tr?(9T4zfFP-^mYg^yrO`gawS_If<()B~8W)#c`9{w`f@12mU z{!;ipE(L~{l;M$^e22Q#lt}rad_I%CZi29sJJ&j6p(cc>9#kC)G9fu;p51H1V!Bri zvnfGcw<@4EzvCVsKVqI6dClF;(FuY!{yNEqBLsYhOc|o+p!4o1;J7wDk3sv&eg{W-mS+H3n*rI;M_fTnuGI4vX9O{-Aw{hdBb>@MV*?8so|2j;*h<1GMT#|zkcwF&bI7%!6K^q7e^d@1k7s{ z-&^P_j&6HmjD8kyeFqeU<`kXzreQe3^`gf2`~cEsEKPjCUX{N2)WGHGI2t3!kM)Dtt zwTgCgZj^Fq?bpbz=awJrrMZWDJ@23*DCE-MOr-FCs7Dd$;ET#5uEMN11#(SoAbzxJ z5T_E$MkGh=l2|5+h7&>ztscYaPs!h_#SK34KZpco!&pMJCjPx(m}*jPTCgc|Bk7Kq z`JZxiSY1@%j+}tP3w5gH{%{HZmD`_Q#nThpBJ)xP*H3WesDcM3Y71W}OHVQ2UNogh z#T}m>+O;|CuoOjt7KCY^c}sm(5ni&pUL-wIOk^@LOI8w%mdF1;lGt!%6t4RTV+hzN zF)on=#S&w%c0|Bp?wtGW#WCfZ>&Lu>Ahy!aKNJi8?G)I~v3Dyj4tN08F$e#*{k~2P zwQtSwlU&F6zfYkC#P<^_;l($DGS7@o%A7|ALJWh8&p!8+^!q(qF4*z^nY(GW4s7Ddd0&SqNWVB z!$xSeTZU&6bl~|vK0VTx-yioJes?$K<1;D-1NYjkHVz1?=1E>3VZKYXFoW?xBT+#8 z{QC~!r7elcO2GC)kAI`E(P!+W`$HW|QR0u>fm$grf9W(?9D%5T_|k_Byz zIv3N7FGg|%8wr|}e=@H1LrzqTRk(9pda4;$${&PauV37)4?6Y8Ws6ZOQ~FZgUoTO=NTAhm3J-VzDTJ-0kP zLz{FLhb{GG%A4eJxdyvc290m7{rXxUAFwxMi;rcO^V5a)7MfI)d&{7zG%rzqJo)Ky zyw3Vyu0@?DDWWvT=D0ZIv>-wUc4%h~(1@g>-9E&uE{^T4ju;;AtvjPal;<}W#&sRH ztEtQS=1xzx`wUlq6c*fe`KddS)ZsQ+iyD^QtleHJzVzWCCB3NQ%^076?H;KDlM1)t zsRp%kt)PYOl-)VCF)?+5eENQta^#A$E_}rCA%{e3IJyYuk_idY&XlW4RR{?VTG#HI zUnT^BGGs*E>GsdZ_YiB9FSZx^puj3VUZJRkMc@%wm)c{1Ro3T|&Ay_=#$;X14O7ZA z%?z2c2+6P$B3Un_;1v-uEHr+|CjI0w7A}n?LeYm9stjFW(~Cv?aV6h|@7uAb&cJoj zVfS;n`%aJdSA!B)$)W6@LO&z%ZT@2KOh+NP2ft@ps@XgODpBbZop1S9UBeYp(F+Ge zjW^FV!2p_m*NZLIz+wpSkU7y{5^5{Y&$!au8qWP*_?nK3qg3z3TTwQj416}mr2$?Z zgCZU2QdP~*r3}-tfji>6wuD%l!>c&4XitmE5i~FD)jYiRaBlB{q^m&2bYM;7|UR$r2VyBP-3hM&)X<_U~oSZb@)ig4-k0L@_EGhVIZ-0KU z!0M3(Lt5_+Xb3;_-JC2eGOsh%!oY(#Nne3eJ%BhtG*D^Rlll<4QXAMT>bcOJpX>so zb)hUYt$OnQEN+bKX*&2vBY?XP|4qXujzjj0Q-LvJ9zk!Y{JyteN0=svN%#6Tg5(@^ znw2YClj#WlV)sEh*bAl|8jPVki@g~Ip&ct>tGAQ3hoUJ3eW$|X%3a3{rWg(#!5d7! zH-466)3V_(=`A#>W)2)HeW&dufoaNgI5O6DLuXNHtUo{;MOM~myaXw@lCGl*q()1uFz%|vkWQTT zB4Vn>*WI#F1Za*HLw5{zcz;)x6B*YRhlZtxLa@17X}2jX8&myX@{&t-9UN|j zkKo!;oxqnNvc=Y*FC4ajkYyu5wsTr0hwQc{^Bm~M;o~rt_mk)=#8})tN>9M36a2A} zMPwd1R!KY7lO_cXC!Li|P|1w&mq^-9Ut}jTZK}sr#S|?fAd+gn$YU$9Z1?D6F;rXC z_p#n(Rhe>7!wKW@P-puiqS|rJ^P*#{O)CD3|qTJXhee{_Hkx)+=ZAuPfE`qkA zEvRJ%M1FgOtu3M#WWmgNdc2+SM~k*!p+;4ZWh0->sfGq2VV*cZqRXe53U)8Cw-NLc zm;fYDKienTyqmrCwAaK_Kn*wbKMdi>PXayWs|H_){d5~G&41T}XPlNp5#}0wPXg zD`MpN+Lhd)w9zSMn38!qxUvs$3y0w@%P6XvM#6!CPuG_g)i}HzDkNK9F&CTR{Z6(j zv92P{K%pO(D=Df01_9xG_oT{dmebtQsOOmf1 z->I*&znSNPjNeap-%VwUqiSbBIOSe}z%{HBCyC1`Qh4Ylt3(25Be5D3vT_v-F}^s9 zWrfJ`Q;oy-FVmBXKrRy_((g<0Fiu)??Ztj2eO|cIQTHVCI5(~}Ho6JSM%bQ?-2=%K z5(bNa^y>KnI`+Iv1K6`S$^ozAqMvp=|4r?E4NAWmPDu|bq%$^)vC-s#>Fqgc@H}bM zad<}g{P;!3OUes;swWw@7tHfm=*9WT2=5Y3{D&eVza5HpS}M7Gu(h_nqGY_00LRM& z=DMR8wNQb%n+~}PcV1iY60uW$KLLU~?{kN?QZG^1ia4YOHH!AW;t8M96d&>h=n%FZ z)0T`PB|Gm=b~}RRfo2r`9Up_GD30L#`3^?Haey;#anS}N7V03!ItQb>u6?2MpckwN z(9!`==<7U|1cvrdT2v)D57lf3%rjjGkxQL^O*{F^0WB5{*`RBucziS7vj>Xun^r@; zX+Z_^-GRf?W1_#LNYMx^)!S45v2#St8B z;FY%Jnlkq*7H&^^^04hQh;GZV`Qr-{P8fCFue9@S=&c1Da*Q2#x;9M>@oFBSA{fz9cSP%HHI+xv;d@k;`h`U)~CcX1b?U;MzPD3kiT-n$Y zcZV!g-}-=O`j<$Vb679YA8?u*Qevi&BH@n-o?UE$T8NdQYe$>SMap*H#`vsAoxNtWJ%F#Omk2_s9R3r^ zaxZhZa16tdUD4BSpGI^`{9n;1?GkXdgj2VM#s3a6(S*lT7Z>P(@%sObT>C{|=(Im> z7~8CZoDoj<6^0bD=Iu-W6>r1DjP8+fU@Pr1`A-iBwsFTo0mF?4{~NQSi60dGwYe8i z^xx4lb6@k0t8Yn)!2c)OhHdb`OLMR0G}HONgJ=!~R_crH(ZuQyBW;90Jqm4e=lxp^ zKkLtqR*x|01ox4{ik*|LgBst>ALnfuA?q9Mw{^jF&eOdavb%oPrlR$X_9yyQZEX1B zwDYHv#q{au4FGpyavuzPOSVpV-KtWLE=>R|m) zATk+wWq)(FT+k(^1Pjt+z}Ilt3~-Z3NNIkuC&Jm`uYGV6tyGEp(a%=OrxIltnMCpn zL^sua1;-!NKDmZ%Qux5q(RHHZtML5pG!bF1e&)-%zjx?smCjPQ8cTs2-}(5k;A2Mu zuVJ6uw&p2lfCx^Ddoc)_u5R*kc@Th-FgJh-ZHrQdp=TZe{+iC z0LiS7H$zW6SRGZsL-OF%9CSiDR=WA zaC~-49Gk3x1%5dfQ^cd0tV;y*MT;GlpX#IzVWVSWWSd4fz%F)ca zzR@W?@X{y8YA_SfatONsET)Lt|KL0$lB^Y$#U!GOVl6+ufjG4F&wPGq&!{2zH1GT z3TE#VeyJix5iNajY}P(kXI5QQBcI659uPg5_^1t=>#mlQC1fQf3z@KiYOZy9(^L-@3;BQpmivQpR_~w4H6Lw za#*!&4d*Ev9BgXuhD zh~u=WipT3w(DqCZ4G^1Yd6ECf;N=JE&Xu`TRB93M!jD0~NEe*)UJ?op-6F1fs~7Z2 z{@^cK<}RIQ*1B^H>$Vusb5HW_R?Oia5_pyl52{{eS!|j$vDq|v9Y%*RBbe!fy>ag-cYBJA|yY`)0+9mk4H*YGgtap(%qB^rq zh0SYW0$BHn>W39fOscD6ePSiuE{f&vR z=}v4`;iI1Ww66CiC=!r$d@=Ph$k{t(9y84{W(8la6^@-nO5p1U8K?juI`#`V51==T zdwS}YffiF;xQ#4Cf?=v5B!uRU5>?~VP>}9yB)duZ9~Wbaer}7c*!Q%s3d2x+T93>( zjf^kbw7^jYMP8MwJ2Kh#h4#C~xEo*lFs>Y-lS(gMu+mVYs8nGix`NHaLPy9_4vI{x z^jf05O!u=LT8 z6>-GC8H!zzie<#b*B|4XmCqMOtNKhM>l!s_I>lZ?LIk4_4VaD>VhSjHwtPu{%qHYs zus!tZieiCh1}i=iHqPN~*{Cl(yCqP;t>CI6pC;-!iRZCsgoxa~+8kZm{X3`W7m~Vy z;$^D0`Byuwpcg*qwznjRBfd@*Q#2JXYdb*@{XsZwGs#mBkvIb4Wu+&beN5uG0IrRF0M0h=8fcd_aT$j<{Fp0OpJfYC98qO(HyI5&efbe0;VFUCGyV3T~#I*M_vQ- zajL1C@swn_8M!fU)oauRbXLz2BHg5d5E$PJ8UwpzSfmIAlVP*6s3})(JR>*q4uoe0 z3K0;or2~cn>3jyGl;3}wAzEd+o5UYvE=V)OS;E`SmM0;t%RuhQkC#pLs)GZfD*hj^6THvV^W?%0?Y3?S=X03PH!l2DVz@aqt64J z-*aPWa+naM(zv@}Z$fQ8tb2Y}twRN0qD?(&zr(nDLzrG+ojKv&ocEZ8h}*D5?6Edz zg2?V5>|xJs`DsNaLm{|8d&JjRJIgPowpg!Gib7^&o(+Iroym*1Cp9E(`K?v#L8@D? z=zZYA28&ep>+=lX$^5ZcKV+%8i#o%u{kx{n#S!r9a7GHSNBSPm_{&@?OvjVF3fK|{ z4_)Uwb5o9=gBXGJwE3+%HY}wHpq2h)4(uTZoff<_>)sgWj11X|4hWuqYq%2FnCJoC z@5$-24@$)nhOfFt-^612*+y>Yn5N+%^MgXI$yK~OrO623Hrn;dzRhm?h4=u=r`dwZ zh}7MA*Xz`(;{`jOlANIYhnXf(PQHM0fR zh6@ZwMmC1!^*PcF&vZYg$;>W|N*gF$LWkav&7wh*RYvK9UEwf=B8GKv9$Ljb67YgK zSSrRU5bqt*vZ%iZ-fFQdm41shX%){2`%xIiPK%35=^%MAx8D^!?ra_sH6T;zFIh=$Vx380Z_`|=&|dV)nlxoUBxLmc^ctW0Pbhq9dwWgw%-nAnNzKfKw_{X`!psZx-bg1e zaTuWEy`e=k(HB{bvMur;WoF=G?^!ndq%wvCsCc`AZYM3|;929Kj0289!C@lhNE=9{ z8^wo+42!FD-8cfVcKIWQXmRMMXo&`Lv?`nGpkg-VN{jMX)MlHcG;KJ(kb#G4g>Lbe z%1EgaF@BUCx|5Eh#eum^$msY+=j-IFwZDc&|1=~F35gf%o0q{A9@AP5tuBE z{_=A`3btnul%DI^aBewKDBVJe?c(v<-t38ddMHh>zT@A2uN`d%e5ST%icV-ja$1IK z)yBQQ{*HW9HJ*JvUo2xBkm}qu`F35lgTpau%cr_KTCRjF;uB|blt*_XWNCVu=f>}O zcLxt@PMmf)H(COupDG@xN`>Nv>+ z@J@z7DqBM-!CN??jnH{n-1AKr%DdCRwv=F=aEbnCiZkdkaMz;Lq(qmtNYok!BW`F| z8vAD00mh~-qWY4fuaiq$v%Q-j>j!8|RPk^WsaIDjbgIgZgNLCMoB)4Z}sI&p>O3D z7y3-!I$9?Wtj2YA5^--Tw>~~V>1G{Go6{+dZ-!clztUSt7f8FpnRN-$Z&c^IS#bJT zOi$ZN#V;aUmd8smFX_rnjy>+nN~s2I@5kzwDRC3#IdeOt`zBSRuUB0rMxl+ht{$ze zzbMV_L`5Emhuzd!47OkYwYlC3izgrEu49<)>ZHxpTzUmPW@VufQ9W&w$1Y1G3ifll zwNF~!7+1`*&FRuA>z^96Oy5sqV%bOA;kMBHAr6a(wark6^IsuaG$Qre?_!!qQ`xNoU`-z6vk(Kn;Wqtj1?Tn22N5 zbgTcgaUVQ~Mzb&N+o%7DD30)&s+ zx~!08mo7TV==%=~fhY&Y#?=DhOSx3S18nA&rF}JXNxCFK+-J0t?8AA3T5OebEr7T& z=_+x*$G^87C7auuZZH2J^2z@H*$Sj+(@yp)Y0tL!f6O|?;zfsE&Q6wV4%6pgsb$PP VV{#WP@h>a@^}E`4ij*v${vWgD7(xI5 literal 17236 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 diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesWithAttachmentsAppearance.default-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_deletedMessagesWithAttachmentsAppearance.default-light.png index f6fa977bf1a534f71943a9dbc74e15ed34ce9e36..d3fabea1214e707e154a4acddd892e7e96c817bc 100644 GIT binary patch literal 27518 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 literal 27366 zcmeFZbzIYJ`#-!fLR!EeMkpoST|-nv%1e|^k&=r914Mx{eRkWT3yFo}%`O2g=p zBSw#S#&zHK@Ar*=pFf`0>$%`H&XW&k9G^3ecpnGHyT^K(v{bBA004ki>*2j8007Vt z03d0;LQZ_r`IXm`SOB3K(_x=e*(Po?=~a=K%^6Z^xthviRI9=TZy>or)^41sP1pJXv{H*3jQSq;}vX_zM#l^)X zoe_+*Ib5%4-dBH}eW(Drnt|}ja(IPrU%d9aXc{|iW92&}NBJW24J=`hz5v${sJPy| zbr>=V9Z@-)BAjlzhq6um27s8`Au8m!T!Hh3?Q;=iC92TGU7| zek6Shq`4}suB}gO`xp6@Mn~H`{#8m4GneD5&spMO;bb7Qx*65eMSeM&^zs(Bqrsb* z$}Y;g-*-L}#ykWV@~$MzPst_!vIN zCQIjhL(;No=L?*YKTCOPs{=tp!5+}{J_o8cStW*89Lq?8LSyXWoI_Mz@vXE_je%tk zwQ8wAMpjVdb{@9bQGPc;-#B4MJ+h3AZgM+k?u|pHB)H0L;Vya|@i!SuDLm^Bm9WdK z4I?uFmZZAqK-#hvveI?NU~14!3$Im=uG^HHq4S}%6r49G-Oc)bj)Le+l-?h%EMzNy z{eI3ZY_2TmgX`=tr(+rE&WolE_WdcozM|?(dzL_FhxT#3vO^x?KtZeZtwEu}-w zC4udK*{%h*!#SEBB9wUMl@j-W&U9=X`-|8ZZB~UV`RWuJBam8aEG+^ewl`{#kisG5i0M%(G(_BKKd*1Qx_YiAWZ{@3qu zRle1?d3a|35<8tc4dm*CIdfK>{#QdjJj-@c9&19V$ph++?#7+H53LQ3)icewaC)}b z;E7Nggz{?MTrYp7EZApC>R%hYlmb>#lRJbWU*8x-iP7PW`&re9%Q9qbdgEi62D<-+ zb$^T;U1Vw7g~#khDHPiAp#EZerGN$@GLkr|wlW6~rdRg!8(YY#j^9y>t(zLG-RPH4 z@RiZRruj!J8*)Hd2E%hG0|dB4Ko3T_mRma7R~=kf=}eZAgK{5l#p83cc29Rop<103 zB?>`)T}mSWr|gn1A2*2d)FH4( zm2tr?M{7oH0dcCB<1rla(7o;KU@ifXRWWTvuD7bN-n)KN`-WEcEHmV0XTKB$*iTEgQ1&lUD(1#wu7i823 zdw;{Z3H8*S*^?X{Qyg)G9ic6=dGeG&g$-F?kEM5B+Jd@7zY0*-W*LoG)Y@H zDNoY6C!=SMdgRI=Og7C+BJL)~A#}r+t2B4mc5$|SwiOzB)IlF2&cW2dPj0&R)AY1wT^!g*du-|G3`@om!gtqhja)k3@qykoF(57*@v~EUG zb<4jcKe!cVi6(NhkUxjw*f^b$nTuQS-0YLB3;n7lroGy42|pGZ8hT|4=vceX9M@$@OO%76Ob*-Qq>6p{yx!ry-PD^~+ zXf!20b1MjYbe6B1-ou*+CQM?^ee1V7sUzi@=V%v1u)5C!wgNFqxTf7cp~%q|oDbYC z*+RB?D|m}7kq?U87?hC&z5x4|2$j`8m%lj0BW!QuH!iyPRVDJzV9g8c3!}meF9JFE zZT*MSXQXFtFY1S$4BIlI78WI{UL@GUd)s!f;cdAb^h$M3VjuvAw>w%&a zuqDFpnz1TdEZOdBAA=pT{Fk?fv(LSod(6?}aw4nEXPfSvq793Qx3JCorS9z67~(-I z-pOEdtG8(mvD{fq*%;)Ji|HPsH)P7g*o!+-9#qKwwe4VQe zx|2cEKJHdQ2hZRj&hz@Yj<|q6-@0aYoP>VpT*|9B<>hyin}O)(n1yVD8oaSv@_}1J zwkzIwF(Ypap}g>R!EAk*;H4Jl-`8MNzUQV-xJNvTCB(C+kG+r9`iLRS92#bA@w5r- zptAK}TvfL>J8)=G?Cd}E7s%S5n9@&+&beJWb^8;~*2ae%et{)|Ih1kvG)=2W>nq+a zCa)(-aP?$wSf8_-S>ZvxSm<#-;vL^YZ+-sKE9D2IpL==d2?GwQ)zgXE2j#x~^=i8b zaV~XYgX`;77bm`xlC9BF+FZjvlD~M)97y_v-Zrd2)rL@&cv6*{-Y;d6J^1Q)PWINL zrBKXC0a>uJ%yT=;-dJnd%%H!;l>mP9;D^O?ochE~nMY}7M+mjnT@Z(frhGz2Y#e8* z-t9-Gx{{eAn$-sZJKZcG-ZSE&5q5*HuTYCMO6m@UFErJ$Fc1qg3&tVz11T~XxYiN7uzR+qW*Z25x8T%d zJ}-}-SF&>2bPDBJ>82max=~(-ZzVE^(h^U;;0IOsH%g(ZT3@vK#y|7MUs+#Hcjssu z6kEJKx$$AjD>P9vafPRXJ;|v|K`XS;o=ATSk#V#0$6Z-r!yNUbBv$8V@W$)VX~Bmp zwUQDXc{tzc_J*vFlrDH__ay(AXwDQ*g4FWcVXt?*tU@(2igU~ygHImDflPK zuLfii{kU_d;9#!OY)9NkBrkg^y|!s}UnFm-NswqH zz4qv9Wc|v24V4_}PyCrD{dD~8^aD4(!QP-qG!WnE!){GE%a%7 zyb?4UMl|<^oaI!#&2eKpNh@^5Jo7<%h+habsChDK!uwK>YPadO=QVreY~e?d+3=TQIB^& znOezUa>BCqpX<-yu@BKi<(GL(jHP~c*(~y6+WXw&C?W=)2A7*kDAMP^9nRX~j_8Hh zdb+?Y4wIL50l4yEzk)2b*~QbXOycHR)fUqw8B}9c;XWz?0pm0-<6a9M%L+GX_*)iB zY~b^uSC`8{)p{x-4vT*)zP*(S4&w{Pn*qd$38XcDW~*adgd{3_);B*4D!18;1#SAk zsV#&0Dt3P6{ztbZ8a_meBbaKc_06PhDj>iiEQc~JM>clrS8H(hnMq}q10%b6W7hcON41dzX%grM)U zaR=8F(91l9&#?T*8vAGXe-`JTlk?BD`iCj}!!c_l{t+kt$l8B2g@4qje{{@$G~|EG zhyTCWR@*&r2NRP8H_{ja&)C2A?;T??V~rFdEy~INy2$Z zv~qP>D9shLV5R_;9ok$B%@ zdw|ozX|cwWlR5%T|E}CF0sTAbXnp0N~Dc@ zLflK=OMfU#nhQdW{=0JZFCu9SuFMVm4g5r^ujY_B{$2SG`BO=MQ~eM5|E&H$hv)x8 zS64uKyV&ZiuX%6&!!pse_|5-(?OE_s3JF%o%@t7QV&LQJIR@USAfx(SAsVB-?2F^< z<)vh+*wv_4)#L@<(qV3BebtjjBGQ2OD;f7c z7GKG&QY*uzbuufw7GO^{5p+Tuh`N~)nF^U>ak!bBJC%+XGBZEitj^8u&mfVPDGJTq z>)v0^1$$>b@$^<4Y`Uq5Abn9}L}XhiW9iiQ!hNd^r`Kw595s(haZ=0+~uU zbTkN2Q0{$xXTw08Ihr)-UH#WA!)h5)Y}uP?HAB8?CF0TqW|aWk(6#;YBYmW|XL!dF$S>r+kTgq+gM`=2-x=s9G2qSGHI{T2Ll^mpoR z2e%Z--ja4QGOu@dVBSthO3_erUn}H{BIc)d$cp%<50{(s@wOK4*SnKhadkuNW1;BN zX0ufPDg%T2bx8$roLw|wW*ZPdgSDiF`7?^`= z+SVF;cF3N#Tg(5G{w^s$O#y!+om=zyFj&pEbHJja>!}G$!DqsyI+%b;Q5LnVw`OG> zX|jE)UnKP*xlFnsO}{&@Az-O!yvnYr@W)k<>iVdA)y^E=e(tNC{ou@*gcIfPZ)A#X zk#m0P+YiZXopOb1E^X{T?NM1zZUeG&i#71w2Rn?!0)J|_>{E#^0gudPGGO#(wO(fQzY()Gw$mYO za;{F=O!O;By8N3Bah0#F8id4loX9nvcXbugb0}|+%XU6)A<#=~VCrl4A7PJnnCK?# zMl1}(YTc3Vl~wi7)PW@SpQ^riYNnX2I%)T>qeoIh_A;NH z268dqJ2PU3lgf3aD6hIog9qfrO>R<@Fp+j~pbIvU_pOzYihqT|sZ$m_fRts2^KUmOzw4k{eF^lGvkp#@s^{BwHj<*Z(q8#WAjQeawN{9V)V@$2?Nxcw# zXmf}!7p42d#6x*AJEfS9D!jx7PZwup7qrradH*j@^@s{AaSL zrKFMwntl6l0~*HuVp@)lpfje7q?5a?@!?JPwP(V7J!bBlL*HqOh~O5TK)iO+QSO{+mMC$@#O8t z^ITyN(G=*r{YJeKz*gt{jlF&Nr>e8wo?^mAyY(dyne3dWI3r|prIa3 zN{^bY_bg>9E>KKf$J=W;hOx!%*8$Hqs+-KdwC$phkj`6gY#Wn5)ph42PxyCDZP-p& zr*Jw6K!X&tG*&2n9 zG<#Dx2L8DkAumtihCV4~Z{yS^2a&UVmiO#@IOlu!7ELpa_}qzkD>a(LqZcUuY31*e z3P3Kkz|bZ9G#w?B<^mo&PX6tkh@92M>j&i5L}?yo|3G)`JR2``4nCpxX-lQjbV*^e zlYf~ZJ&a2ED=eKXYAVQf1T;MCu?eO(nqW0hb+`XB2$Lhm2Z}PRctk&1FUww2K%6Uh$ZE~*?d%ucoC=gI^Qvk(zOs@^f!er6P77HX z{3Avw7R_q5)ECXf+oNrg`sptFae7f6n}q!<>g>nKfW0@Fc5`m8CKRo6ZtDYdg)#Kx zG+}KOAb<_~+LiB&Ord?B1Mwr9Zk+j3o*Ho;G;$AHhWYbR){o@hc`;~U1>c%ThU8eU zu{+hDsR=`&k#Y5GhV|<6?iqsRyeRh@(|{+Y#yY#qn$(E z?m6@(l-c^TFi|?nEKJ@7Z@?8i-Aet95IId^Xo4S)trqcu)o;d`F?nRvX|aOlX>PNh$Bqu{F^F7*!y=oDC#Qxv^^F8B8YR+ z-^>uiB~fVkRdmC9-4O~>lR!iiVUO;YJH_*^XRwX2B{0{zXCfeFD^LHUn5V5<9)sqA ze`VJhQ{wCy_rP6Bb>@8PHjqZ&Lzbwms?DyQd|8K$Vat}FZg3Sexi>vrR8^F&>s<_C zFGMSg=22Io{&cJn!8N4!I;8$+(48DUd6RUfJBx)y_3{B);`1DAw@ zsjP`WG;burpn!fvf8x;Qo4@oZDm>!er~(+SlD6me7&gWC^d@aOSl>GiqAGO>Fi9k8 z+WfyDUwoEPf?_z2c-r#qYaF*oIz=@!qvPI{!bU2!RWRN<@9jN#R@+yfW)0nwi%uwV z-RnG8(${Bw5IJ7R*cQsMuMWF1Pgc`r3*&?Npro9+nU_t-E?m=di@t%n8Zgm=Yd>9{qp0u zOEicg^Dd}aD*Wc;;)00ZxVPUX(`Gn{MNXXeOesUBT;>*u_j^>T9nn8Y3iL817kXl(av#J9qC`7su`JqM?C61YhpCv4I98>|*Gb=G4;50*!tf7&`Dm+Mc&7;RX+ z;1AZ&c&$W!49&QQB{yfe+SlK|X=Q<7Ns5Rx?Ca|rK!4GgRH^T*ooNZ=pZdHaU&2H* z+nB?7nck03cfkxmVYQW&zh)nMmUCpi5e$3D9BW+Tn2;*t{CQYr-TCFq4UE~;LP(PD zP@a}VT6tNSZy3LD$AR-`St>GJu1*^}ctL!H{Hm&92g*!9KI;`D&$^*T{j2ow4eG~m zJa>fovuD?K)DW&fV;zvAHn zhMGC}#K}+OL!7u zzUg9E?zNQprP76NiEc!lh>92F0=<(q#2Q}|1zv*duVaS+p|sqYvEQXhd^K4inyDlT zsx1KaQH2GehixAa*9%^1A5uMfDc=fs9mo}o_unU|=c|^c@!Q0Re*N$wXZ2@& z`M%xqjdbApcu{`E4*);tp=Mhmk+&_J9hCFk3}|AVxOHM6UA4XlMX>t(sf_J1yyRf6Gg;ud8~0(oZ${S24<-^hXQ zs`-Oy&OL^Dl1Am`y^d``qx}Qp_<`>d&-?{66t{3h$HGb?NLsA6_s0Sb18etQpBda+ zQTdsn5-95wvJbtHG6RZ8FZ8KS%Rjh%*e-Q_8UX(e%;H6yQ{rq$ls-8gN)7yeIo5y}a)8S_n$ib#hsr-R7;g6r1(m`(v3~=c}8JL5%RlgkqEO;L@eqG`nT0q$ZO{?5{ZzGGbgk)|Ne?L8Y{+iOIEP29Hc<-s>WRg#c&d3%fv|V|}+iKVy?IGp8 z=m$L>`sSPIs|#1e=lP7Q5T2$quI@`r(z7eN*qgy(xQnx!eu7nlr0tdL{13)0^4&~Z zQsteBQl;E06})(4kvq2h15;$$I-h)!4GNI5lXY9sy$kbisq??sv?x8;&r_`STYUsA zI)18?R%}$3CSq2bZb~gNTOD%7$HuAZenZsM{$OL8GwHLq?sT+5exrSwNxfggt)QeL z)WKx9%ksvtsQX|mx8_k(A(pgo4bbLg^|uU)1^TRT|U;||}}y)ZW?Cy9O|W!sl7 z?0SXiuCnek_Q06{Jbop?);>Z7H>^UDa=ye(s~(In4lvnX5Of%?UwKm`PzI*HA?mZ_!39?7XgmzhpCAcIeCs|qvt%FU6N&`p z0Y?{VPa#YXjmEY?==n9k(QzXHM}!Fw(O{`xZrN@pbj&Z+;EZ&_A=$b&QuGg2+{uk0 z^Uud&14ml+IkeAozGn@6mcvfNKbKC8fc7Q)#*FJQJ-TKSLtUVg7sFbCINOa`BV3<$ zP+CVkvxMi`YYO_N@EGx@Tjv@y1i3QTmLY|Z(>JeuQ+-B%_osONDZ?#~cc79pJKi;G z85k(Rql-%<;F}N~l~436e?FrM27ObDwl1A;0N3y|Ckha{&9AD?CzUYZIN4DwObS;9 ztSxym8p)`5QlFMmr4PIj%?1fAkN5JRgt`b8NEa(G?`Yi*if#1 zzutPbImm83Bu~W|E=MDr(WFM79f{F9j*_vez%JH_SXOn?N`H*;85mfxgG1^MwQq_w z`Yg)*QJm-S^_Y{-Bii|dLpFI~`wEjfw_MjGRa_sOvpk#qVJBPSqDriKC*4!|=h<#Q zRE)^KwcHrUvx&Fn>Tn`Rugkgk?%$`GF7NjdfKa#dQp`U6I{3q&QY|cBgHzrE?K0gs z4J=u`XJCfl6_)5!G#;9-SI(ilRe|}Up$U!x?tc4_JfKJIO>wG109#X-9L8vL2~?}J z4nSSy0kC>cyx~pRC=ACr`4|{Gka~k6gMp?)U|B8>VG|DO zS~F&KIFD83obgC6akOw%g+tiOY3wT{`sXOsj4s)X5a!ozFJJnCuJb?RAOifwZu$TA8Fh$9o^TA6l_ z+L4>(!`5isU8Q_9xlMlkFPH{zW9Vd`3 zCT7Q1W;Oz=IF92FXecHP)oF97*nyFMWxC-Tl4(Up{Txj^F%!*%2K?c1(@DiXT%tkH zy6q~uYrU5ZeJJK$s$s>~XW;}_*+{yAmVa@;t9%XDFX1FLtLF!&{d}M3mgK_@EeaYvjZ4EUzmbF zFl;>gTyD$`qOk5pK78H?a6RoZ#kR{CqoElB2g`HBo13Y@U(O-xE#Y8U{F=}5gVb`q zwK4xx5Rcea4p0F^B}WP0WxPG^%&tnG^@e~CE~S;5jc)jLqb;VsAx>QlKVVAnV1CzT zCa9pfKtI!$5E-WGyI0T7+(#p^U{Omm7qS7r4nTC>LMS=j)oV|#pj$d5c#*+d`8Q@C zDFN2+K}RX=Bs_Yu4QksAoSxB{0>l);941pc&*p(hU7@i03B}GHzHBI}#R(eBMPk>(MJsFs|ZJ_^L zp9ywa&~C@+G_m>JJG>I9G>8gBdy6%DMC=_)c9V+OG;qRF=FKfSR5)AB`AftWBC#W^ zBZ5~iL;Oj7=Hn|MF_2EZYVxH8X6^;h<2|`NsW%}||1EaubxI9!XA&bS^B_}>ifsu; zMgO-gz_-+(AqNp@&!A_%Yo^)f8q@CioeXTt4_IPZ`H?kJ_Sa_Zfw$!_Df{hv(&kDC z_@~;QkAvwZ`}k>OJ+?%fR1usz)VN*{K<90MxWg7!n*Nu&ZFlg7L4b@~*@3u{L3qW_ z;TCdZifL9$E_eH|=;DkGH&v2=N5L;G)!HP7<} zS06;D&UW(u<^`zOIGEI@=hV_MfB(q@Vd_784Ft`KZ2%y~k%}ZmU0vB#OEb+rO_PxV zuqiY*7*6|SYwum5R0^ZsSMx4(!y}u|(VTZu0yJ66RPQi>`mas4(ug){-T6*cl=(e8 zNclVCR!;bpWP<*fo-Xzv=Q)d_V~7;;16vdzOkS|;#+X;{=ApBBT}Q)@tQ$|dG*gc| zo{Fg*9&OKY<07uR#UDBAuir_%i(U8)`DA;wXvG%JWWKgg(eQ5Bo$+((sP{TDZJW7V;;z(+N%@<54{XC z=b7ttuey3*q|l_6*9T$b8#)Ym88lJyFIC^fGy4UZgo)$PEZ0t@70H$De<|D9^oKo| z_R=e@HZ$eq<)>5o)fiOv(2+X>??Qc`)wPMg_Il*CVCGn_L4&kw9F8*`iO8L~>B_J6 zg5Ac?fX)wqI!ZnPRHFX^(R1BZ_D;_P(QLqjl+8Vg>h(Ez<~nZB^S7~M2V5w?+_+(- zdu{Ad3`WzHw#m@25`-3sb!(F9U#(p+4G9mxls~al-^&f5|%x+NwTEmYa3Qyhc1a*Z16} z$_v0Bo$E@Q#1FRWs$Zze;A;xyLXwQW)(6zwo#AE2jMjt+3>hyYA9da<1eTS>L(}1{B6lCz3V(%uSO~AK9<&nM zxap_O*t}ZLIJBZ~ISur7fImF0D|bHY6}nW6zl5)kmiG%xuvw8fj*b8uwMQS`=}P#@ zRA83y$S9?9)A=B?ndIpxNzuo3widfiDqk~RGsvZzG~!Vd^-`&&40jbyMIi_uRE5`Gi@1aR zV(zquN9(D$6-&IPT0c@sNZ!N*=wPQ(ii0}NW4d3^C&gog%9|6V z#g-NLCk}s%T1v^eO^FLLeR^#~RiW~$_TD-X2vl^f2IlT z)~+7>E;O*8s`s@2{rxZdt|*55*49>yE4azJ!Dz6;P&A8F&nA3p8?2WhKNl+zdVZR+ zZ<9vLCYxddk7$TY?c5h@-hR~|IGnFbd1%q>SD7mB`PBw+tv zi=ww<6NS;(NE2-9%_Jjxqz_RZuya?uxce(0{K)Mk04*yk%L*36{edSvCVNZ^XZUbK zM6%i*>D6c-tg9Py7Wg4>%6&*LOZ! zrm-veG9S>wS!k}xuXntrNN))|>;Xsag4|}aa0ZcoPkLMIt_ay85ej<4m4gq972}5V zsBcaD5c*P9pr7q#SZ2;r?RvbsWZx6bLPP}1t+KD7+c_gqm0=Q?7an0~7!-%_Dm zF*yn7T|xP?N?QaKy0x?Bnqyx0{18ME!c>(a>zel3wJQ1gpOFzozlbzIZ3+D-FKF+> zK_*+hH7DaOy_VL z4iICIsRS!~ZGB2Z-@du-v^?*K@yb{d*kG8fp^%%*BrdK_3`es?d7&k#2)U48FL;A2^E z%>~EjTjMa|?T=+}mi*$_!o_}_c2?&sM)fYs8)iX4K^+5wBvOTUn=_~N3X=OYP-Fd%5+TX*>ApFa&XMw=Ml7lxFGTW!Qm zPHhb))V_U|mY!~Lg(rlIGLAju=HJL>#5@|NuJE3Q7MJ2an*D6T81m52 zS8XuWyWXjtBm46zl=_BnlnMQB`0;2+HWZ6$NWER})29KR0&yagZ93n`T4$?;&Rivm zF2``W2j-SKrc{mHMZmjP&y&``o-;ZH)C*~{gtyf75 z#Jr4$`oA%s|F2qHV;>bX@?@FEkv~eq1#L#oCnRMpKDC8FjD@C8xDVaB< z9DV+meIH8Ur!Mu=Z*)aZR4%@fN^b@5))J~>HXn>j6tGI)QNp%2Tp4=hU3jr$wnXu-%xk&i@5#|2wGVC~G7M;iGt!9&+P&^8w=)f%Tihhe zp>(~r<`VPtaV!Ss09(nod9GfZTWtAW3v?gocyaZS^1%E3y3mwwDQ~_*8H~S$AF$q` zf`CfyW~^sy0y-PKP>kMz>cx6b`MdMNUr|U`%rmS8b!GYQ1uXS_S}ssKD?BDTIxLi-EgIB2vR~$#er^q5p`(1c(T=f(@Gk1hJzuA z8IEi@{1+MU^cUOo%f#5fBL8(W%*&abSXc@%unZdz)r=cdfZ`avOLCrZ7R5auf^>k= zU`Z!bln4z#(y{`TLq6M|1Sb?bF>6UnCQg; zZhC!os?@CR&A54^ckgBP3<+Yw54maIFx3}7uT}>gd%;_YnPK!Z2pr0O75*JP5%AE_ zaw|EatdP4*(J(+CvJH}Qov29xa_OY^!e(9}8nn@suMC5~s}dKMjNWmkP-jCvIdo}h zX*tF{C|ALE!+6N$d=qnye5+Ju-Y`EDw4%W&nSJuRV1T%WP88Vk;7#Y{{qoS3E|NVT!FHdQnz}luuT2MP=C|REmm<%+q>$9wd`% zo)eSOAdiBL8=iMl;TuO=P&(PF)8BdzE(cG}u_Y@#c^rH#iTphYdi*YGE3zqgyMtny zZQ-=>XemPh3Jy|WIvhnUbdf2#a|e*=9A!)N zFwwOVBRFaO+3=ZcZ#a+IDJHn+axRvv&UyKCwY9a`a{T44%+Z3SZ^cDKMAQzR?5`uw z&j_{$$h}CSf8{TU@Q2t$<3Td|m7pmeWf(4_DFG4FdQT24=Q^?I1~{L;+2#S})zu8k z61RD!eb}oXGNgPkX1h5S_@^iKcyU)>j*^Mml-*+gi4N->KM2+~jXh`Y7EL}}!Y6js z>!z5cG|@37z7=xVgoM+pxrkb|Zlq9wFY|Hmc%uiB%SuYTSMzmJ=Q9+l?}?h%&+euZ zwV8&kRzh@Sy>?1>Xqr9$)$2@A-lFgJ&9}o)h}VKyaRWvn#56SP`BN>#%rnqx=@ieM zPvt?~(lRo~FHm-{#T=C!p#R1BnZ@_l%yK!{-Y)(uzuQmFsaN;TtTUL)t;vY=; zrp<~}3%S4`2^c)f;hfU?*n_knqZ~`QBE3|1T>&*GK`Pdt)H&%Qevu+6PO2BBoN0kp z7xDi67k-NeSevHB;gfXN?27|>3)6#MBeIpZXKOmgLy5ZypTFjXX8?kacc0;tIDMqt zLx;CgB3qABju+d`la6BoRYTbNI8d<9F5I+E>alfEWH`+{s`PNQhD^Tr$Tu+7Med7)*CtqYC1pl$c_k*SMz z&J@DTX%u1mtfTEXZPNE*QyP}x>wNTD8Csf=ys5omRlD_2bR;x`4V&Vu;uISGko67? z?F*U}C68EI3&092bbEM2Aatr3%N_cH<8-n-HL`V|_FrqsIy3{U8N@Oq3FT4xY|m0% z6{-y#-SBUS^x9A;f?j`seWFyD>GcQlAk4D0MLc_AlUY>vi_ToKUr zD?(u-a;wDF%nPEnvAfLNkZ}!~;Q#I_MCfxUjeG_Z=&`6zZZH{*Q%;3+ylhUnx&O@R z0Vvcd(c?(X6Z%0^69kukGsj}i1Z6^zLSL}>riVqZdeq#8JzM8A%VXosMZ8m z8(_54)Ex&%*^!|>s&M+`C{tBKi>80OIROJU^4~7QL(f0?4rA}O&k!0T2M8R;26(hB zM%=w6xe%sYF`tRoaATi*sA1YBV$MinqsW0^t@gB;nSBG=r?1|QlHRJEwbN*3h`q@= zP3s8NiPdGfLv8ofr9HK(Po@}3g&u-Df?%5c`-7ItTU|NMFrn@oXLGOtrBHm*jaGU- z@Afw$GlcEzG|kovSA6?c2dOUupvANA>uS?i$Dabc1+=xuTM$1u0rFA)S`2qtI{F+d2t7(`+poLb=%+D`gh zlc!W;PuWJ;F^Bn@QyKzogoQ0ORpp#c#oD*AsasRRLF;B5KK_Yv#4QFV*=n1=6%zfC zIibh;Qx_xvY+QqA480s!YZ!M%~61am>ic276NcC3d5VzyG^&i9RwoQG$H z#4AziYatJX>o;-JXF+)Mclo-0rHyji?|hXZscA_PN+_nw3m^JTT%C(;!bLePdTK0i zax!Ez=+xOt&fR|)zO0d59R~}=O5kzy!9C&omVwaiI#v9AJmM_GUUl!d&37FjiZMaR z4pqbkk0mSr{Gi-RKq29pG>FgQ+6E~vVLzIr<9no)ELqm3CA2fP5Er<0*ITi$=5?ap zGDRP{Ww!i_GYAp1EfqQkmRLOvIcz;=a+`J^cg^$f%3oUTgiT!pmfngD3`H!l;NY#C zM@ThBqM`o{=#=w9CVoiWfy$9f=O@V>evq^{Hkh5H#yrtHk@){qJfoL;j=YLcJDludqcOAVmhYz6vK1+pfmlA_6-N$r1-Xx-J(nluq?;=(fZWs zeVj*d)s}Jt!fLiP@o}R#zD#=uP8XZC8Ek}u8WJ~FX&cej*WxjkNnx&+skn50wEq3C+<_~j5FcPAFr@^%_8e!+%)>C)tVD> zYfCp>mUjxaGv94bY?ryq-_g0d8o27?^}~Oz*8dTtPUZV9T$uA|B|bxmp#Dk5c_igm zu4Z~~5Lb&HcY#N58A^)(^gA8 z$lcL~vb((zI3p^K2^}W{cE8N5yR#{3~fQ8GB3^fkJkS&=QZoc|6|T;u2a>) z3paoJraE%*=JdLh1aBywX|`OHX>;zA*TlrckVn1`+~4MT3VaIp==ys9!$65iHCW!n z%D}+(U}Jokd{!%ouN(5Cv2g;JwN2{3Lp4kce@H*_ZtWy`U0w3cy0qLJXH-mOt?x z{(m|-&!{H1E{_Kzy^UmD)G#{UJ)^pZMo^{UN|Gj_zU1@V(#jz%BxB7WLsU^>;fh-G~TnC7l#h$rdtG=QPF6%get2t7S&wlIQdE2aa zkTu*HZ7P?z+B9$zt$0&CU_^`k$IX?iH7{R=ukz@E|Ao6C*DlW9i#5kUw(g6ljBK+~ zI&h6}3nX)Mo*F30S7Mk*dy$)noXBa2izFUHUrVi3&>pyuWQbHY*cQoWe3I(JHc%Gz8Gckss{ z&H)?$Ve#c~>gt~`wd-#>zBnI~;@58zz=(oWfcvRnC*-?$o`|5q;-7!u#E<61x4uR% zEswn)OOD#els9uNk)d?-d@S^N%mL@`NlMtJwQJ19%tu%QSed>&Og?Y(!0(r@(B8mz z@%e$80sb^!Ntt@G#K3z+Z01Z7-kL-30D!9iFj@FgPU z#u$%ve_rYGSU`Pa9#W7~YQ$eMlf=V#gR_4PH_$oXTW+Y~o!B z@EM^E>3;`iG&27mzznzj*4}~h<7>VSG0#6vp34xyb>AEwG~F2I-^))_iPM{&T;??X z*}B$BKJZ>FT>9l<<{xvcYpFTAEvC$({q{u{4?RXzZ^DNO?#E;rMs82(DiIQdrzWn= zJ1{dMtF=aINJ@YQH2;>|ZCDttH}_RR>0VVKGbWKgc0+xmJ8r)+FH%1S##FFX>^Dx= zo7skYtbeYjTv99h4df{M$tl5@T(|V2J9%6nROG=A1H>!&fY{c!+dJhVq?d3Wccn`O zaBd%o?KS4@XC%eHt*kM;Q>+x?jnvYTdb(TF(}6uI|3Uj|^%Z@juk;ULuK*ec@u1#e z?6>Q+D*nR}XrB{JK?|sPWUz%&(VzgYdBMzu-%n4fetT5Ef)s#V|I53YI^kEN(d~T+ z?DqVh{?%uQm-cqC&xz%KzxOY1E4?Jw{qFEbrF)SV=gOfOfbrE|PC^3RA4>T{TBkg! zu|h+cM~)Zq^6$EC?z{hH6~%ONYQj%d2Mt9E|ARxyJBgh+mF0@pqP+bFhm=-y=^IpJ z=-q)gO7$0~!>|ifCY~hPC^~;x=KxMWp z9r#1$j_^`wbCH_{jN|*6sOv9C?r3Y4xo_?<{i$?-akCc7RdowpIc+HRE^tiaj@q@5 zxera-q1U#Gn~3v4o4O3y6`nGKBX<}|i}zm|a8aZ|1#FdTYOVy&z)`|+fk<1&dzWt! zs<6;k*tyb8dxpw>gVO>~@CQko!X=o$hU;b=n;BOJv?5-oT$>$;#;I&JRWuI<%{PCd z<5}k*u&~{ZlY4F4Y8-tb;r4UIj?-$=wbZ!zuFYAaz(^J-THxXE=%}khu6g2V>zt1W z^oV$X)%OI+okSjg7KS#?-$bG=Z^E(o_}yt`KhZ~QbL6}lqeK8wV6l2}zxVhUhcJ?h zQ~%WMyLY$FGr83ji-mAH@Edvn*oikwm%+by(Px>j@yRM$`NUeVv7!3xW{11^QuUi^ ztB-7Rw9PQU3!#85@<;V`=|`_WWv&*7?;;j;SPHUgs;f1C+OGE4`^ZRHIX%Rj?Z#*r zdHSVB=*vFrwl8A3Cdkac-b&g{;v|xnLJs4FAEC{b#{I0Xug?Q6SAt5AOvxHQr4}3T zw41%Ej%^c&H~pIA3toV<^#z2rFBXV9K+N$GJ?-RqcWc2riAQ|G8mEc*7&2)ZnO0ef z8rcK_mu1NX9hDXaB?&($f|_0ADOM&=46^PQ+4?k;@deEU_jJ6?(lhMS9-Q)medeMR z$+3b+V0J!)9BOwuSNcTiBp_u+UwYL0*Ju|as|y+Um7qD3#nZR87|XbWo!!b2!NsovF|`k8n9$dgqtahy zoZJUMto@JAxD>st#9{Pq-M+nXP_ze7mp?`|$FqTosyD0eDRh@{*hh8qzEsoMOe)fK za3{$kGJ0#_YMoaXU)Vll>&4>nF)w8|xRJ$DMCI7r$|lot0fSmHKDH)cy(MX07u0YE z_*u;Dr7%+X=G*|O)A8E1hEK)fXS4y~Ke`3PsyDh(3Z3qpL~CBCNgBgb$N%D zuNrN~J==8^(`*R6_2pz;%wNkdHu~y$o*D$x(a+gy{N457W(NIkmh|)Tt+Y0v`4S!+c;}9m8CFUi zSP#*364Q!U9?ic>l$O>UZUDAvYQ2P3ZFy9)?)*uC^I*+0a`j*Bv zocYk&Z#cRz-J3h6RJ`A=1@UYX8gD{0uh5!ljn|BH$Mv;9YisIWo%NDs9^oM6;a@H*gqi|MMFgA_leGUexlJc z6|F>{L13okxa$SP{uk&d1Y~Mco1(%n$x!59zciZ%FGvGDj7sK}oI$6BP5Q{4Edg2; zDsrrnXFbtj6ekqdlKP-u4Y%eY9|7Zy4-RWQ{NOr|f!!u6RS?7nP z(T)jFY-LU&7(o6?h)-*R!*2WerLc4Wc~d{or5GLJuor%2-)4q+)VBA`gALS>#lO`I z^d+*<`lvm^bKULBk0Ya`K%Yd8)OkNvbz7)$KB-F^ZUFN6Z=IM(u{43(1cL-N%@~L% zGX%Ak8wHfR&dHl$5zZ5)nty5K6-;d$w;3r6Kys81SnNeC0PWv5F) z+lrN%GR%b@JHT*^Lj5Ys^or6`yyB&*BeO zt@GT>Q0!xo6KouG=qhUyY^-u%zAoPI-sY%%Dg%Y;(-mIwC)S=ganyDHb!WQlN=pmE zkWGK0rzI63)hnCDU_-*hDSbsc)ObPmCF<^l{YP70#Q6nYlgHbW-5~eFIl3#kb2;+7 zSUNvFIQBl)FXqNl_H#VGGbhWIZ`Bz5GhAcnQ7G6I`{^p5+{~mKWV({KvDH#Hm^j6P z`2%`hpXJuekKLACI4l6`FOb?3N}B%UO;G4^1)5^-o1PRMxDpDC<-eSx!W#206_(kN z+AGVgs`$4RT&Gvca2rT*p19LzR`luff6b{DH=uRr$l!t%Bq3B@R$qoR#jd38x2EpD z-JO)^4=%u3S5CKg1MR-XmA*uL1_CN2qMCS*@<;HW-wzR|{=6yym9tKBI!|X8MTFjH zezt8@U(8jmArx@gSDJq!7?mB*XVVxAAFmLi9-dSx%Rg&Vq|A)|4pLli6Ja2JU6xqC zDINHSoVox*>$H+p!4x)=heEglGMC)l7dS?5<79@93&N<6-->38-^H?iZquM+_CbcR z8t4x4Wp=`^u6?fc_SPrm0;rUN&^Oq4%qCoE;u6NN)GI3~{xs^Y0$5Zv&x^u06~D+& zj=ww6^B@eax2ui|zAA*@a8&GOdwupL@eqn%e&Q}Wmwixbt;5Ymfrw$!R9e01Tp_3q zu~hj%bg4o{j4`tQbr8I`5SZ;Z-u~WcbTN0KC zx^nMte^Z@Z559}!=*|$8%fzx&YV#$*gj2>fEWlA!HpFDvbsqt9HowxxZv@#Vce3*t z50W3*aN~pmy6h$}vCzjY!a!Eg32NUx;@NiU0D1k28gY-Ox+RPD#Sl`JsRRS2by`1D zA)U#@qO~*dXP$-O9##?3?p$~!uqZDC zJ7$>z#!;RT?tEfl=ukifG=!gO`Fx&h&7j?z*PHWN5D+~IQjHi?x@6qdFS?w%F0Te_ zjh;;6jQOo!hs4)zcqpMPpdKhT38|<&wTu%TbQY^vp+FAmYH{nE@HP+g71MN^sKh zPsw_usINb#qV!EcseA1MvrpSV_4y<`BhVdkouqj%ShPQ!Gzm`9l4!YK>TTpI#y;mo zl4cpv^^<+4P&C!cNhiEuH|YlPrihvE>z{7yDNEZ$Q2g$#2UEXxMeeI#=f~{7IMybS z-5TWE9noXbbzIF7#N5@Y7n$YU8uI?^@a=g5RDIBs!!JtBjMsvL0`2g`Eq`1HF z`i+KU@&ko{1TUK}op5NZ+6B+@3d<1@A++jbtKP!T zk3$5`wkf)IRh)RjJ|d}o=X3Sh`67@~&zjJu6Vzc^C0v+Sm*7!K5)=z%ZG~aHI)_+z zrKB=Aef?_r-c&2l=5F*kOn2uZ`%3@wCQCe<*ByFpZSq@Dkab<+0UZg z(>R~Pxq7p9dPZZM6VZv1D*dhx*VvXf;5o87vw&F_x+3r1r`~v^^>lCrOPUT}xG7QU zL8$%8RJWC-Y=WY6xXJrnrV1f&A!VCW{*Q`O zJ-kh>Hf}gR^C&z_`I1@7SV-1=tSQG)M~lkVXFK4jm~KvRhwBFGDv!qSjIqwGfKlNL z`Y$vnmqZw>RR{3}`$)DZ@L7tb6h<6;cO`<)92P2+aY%VWsBL6ySxGk;oY-I<@ySS^ zU@Du?X$QUqD?Lr@(FdJE=^kfgdn7=Cz-#=B*!ew`b-Sk8)%A+@8_T3gEN9l>wJaZq zd=!!3tskl4nk~CaJXh{is)BUEvN(l35x$?8Gh!gIybrf$rI0)Ydl1>>a@+JNv;0OQ zp5Dpy=icMs0+j5n6UExBbDPon^XPmn{aD2WL*#XhBU-v){%Dn_lX5;SN1q0h2t_96 zy(jn!dV^H;j6pMxj(KmXYX3l1@vpOFNS`~31NF419XO>ZWO_o#CX0FJf>YZAUcb(ws?kJ9e>F zY%%$ugj-8pe$=>4TBxbzVc5l<t^!Xl6W=82#B{)I&z29ghUVLzIw`HrLfa0 z>T%pT!kxX*CHyiW!S=E$X+AK=t*gIOhSNs4fbEjZ@3R)uRv57$yt^n|eR;@RSPOQj z+7XNg#p>co6*grLYwQGwJ#rv3H}I%fpQB&-bMjSm0~$Y=Dj70qo*^3C)FiYJRa~jV z(ELkkUHsT`&$b{g2s~n3(AgKh;O3}}!wy9kyM()Z59cmYcT42*-Bg0Hqwz+5ma56Z zS*pKC%7n)e%mF~|Ci3{QK>0{SdrjVCNv_eYA>j{$%X98R&Z0?tbFVgC7(x1Y>ey05 zZi4j@e~F~aCjfQr0#9$7!$rO~p5KWyQ`)p)DDS_`TbAeit zjRaLKy${b8by((ea9GLzrn~STwcy z0ayQ%DwN9quf@_e|2kVfyj0;|`8DmUm!19N$3-AfzIM_tUQTY~*43B1TtU$epinEq z(d!(L0$;d#$b*5mz5kuA=Cz{l+ql>Osg|+O)OloQtnAk}*YaCCYcBn| z>;4w`=Ar}pHR?{StsB2n@GMk6G-s{ioAQ(ozh&Iu-@U=F-4t8GmOpnozbLgj2PM3y zyF5CA*y(A!V)&zd$_ja%M@)j*v-lt{Y+n@}DP71To2t|0l@8swnY3xdWv}3P);)LN z!=Yn6V28xDcjPzy8hWENO{vTw;`EMJat>RYgtz~v%r?U7f6ET;_|b=veyS(TwOxOg zm1J4xU8#sOq4ECB!GVQT`{mN_*%z}80X zJUZx#+n|sKLctNQ8^JxB6W@*vgtjwE#LdK`_RqAJ($$-7g^Y$Ri_-tDMkvOVbJCh} zB|W{L6T52TR*ia7r~dMTL)Qi@**K)S$B(;Z(lRc|SFauSC<{xNeM#3Fy_J!e#DHcJ ztEdhxT4oR`geso=oSyaa@T4;>!iAy+*pZKPc{Su&kM>Za*@#CXkV|)~Wa8l@e%*sa zzxG0*gdtRw{b+~oWGCSac@H@eeSUeg3w~9!&o!thMUS2XsaN~|)X4ng+i@&+mk{yl zrZ)%q>WvODoWd~u7ErioR4BZfnfxujQvboh$nhi`g~%^Oiy16j4VKgfihZ|@`-f)q1!YIgwexIy8C?9C zVkh*q&9j#+(YcX9Vt?_cD!YEv!b42$N+9X`9pfe}TEgjT(Utw6F!D%?6*(-5b9{?| z4#vJ4_4cAmv>@+hJc5?AAWhRxYx>q~@9u}7GBXs3*8_7;3PF*Kv=BUgPcbZE9B5P6 zS4E_;+M*$Tq?cwVp1uC{jyew3KBmpxhD~%5PkZ_D&qnRGA7L#I;D>9#%>|vYzO>zO zG=412lHDXC@{rs|-kuQ{*$Ufte-EC>g>ZY_jEg&0M%Z?EBMu>sl+ikdH3e?v<>Dqb zvJyIR5Ofgh#tZC;!+rj)$vXQV9m2LjVzhPv)re3_oPQ7# zC`0Y6#7JhtxPxRVR7``B`bc6X&r|I9owYJ)uFi=JKyU8gp+to3U6a`yz6JTmJL6#w zbEc_TZ%p!-CRaq3Nj~jAJSifHh=M<|cyx=gbYUTDr81PPyYgk7VQ&$oYp}>mV`|~{ z0>xe$yKKkK5f+LIMBNsaSK#T|AiBimuU6UYLrTkv1V@=Lxq>P3nnRF~sCGCiPDaI^ z9$liraH`2)6#7U*CG4XV5LzPW+hH%A&#VfWq#VkG^SjNx7aCXn;x;&fWErrmvB z_Q>Hd)V&{FUZ@7*LJl@cJt%qp({iKZpJJM1JP<5f9`wpvzjOq%^kH%T@1lo%TK2n@ z$JZClx{s2bD;9suM1AtK6?~fB<|XXn=8sRt&kKZWk+eH`P2?dY z-Su?@fv?ZNX(c8i-e2^J5HTTr%fb;93uNvQgDo5^e*eq^1|570Ai?i?=l{_87!Ic#jB!!yy+9(<%Jp}{KQ{X z(H2OIfD=y#iEEzUg=~j(-o4!D{wF8v?Au~a7FXGzsAm@=8I!wnU)2MYOw7V`dd1Tq z5f#70Xu$P~;)^PBu&svdqU-S4mlRKxBa{lLORX;$K4Iz^?PX1aSQ8vGbeDTlal-~% zyVZfITZaoxcQ?v+oSa{%)_dqhqQ}Q}Tv98DNh@c`q#`et@kT2K+e~!QJi8>bYhG6} z)q3j{jc#|7LK^5hW_`Vy{)UO|tiumM>v2XsOuo=GMgSQQj zWrScP7zp{@VP~V(5(qV9{BaY{#g@C&7r@Dlp$bOW=;Br(zcDL)ebW4`<}8D2k3x1& znf?_6EL@ySST1WMF;Ca+@)n0H0nzj%!ODWQF{|%Ie8BK!#cdH2YR}8zY~0CxYYHjd zj~frgw9j|CR%V6od0_f+BJ@G+Lzi{L8)RQ0 z?RKcThhFZ(fOUDmvJ^w@^whADVqgI;9G|~3a?ox3 zd`Dav22k-51o!nO#Ul#l7RI^-MUm0e_^c~M960oQR%Y_$wh~`WDrcMr zry~aPoZ_PPn(o)xBzSVVM7gc=s2ru}( zRTRzeHT6Q{czo0_AI>f|f1n#ni+r3F&tOYA5!&S^IDUH|Vmp`Oj z>v#%fYwzU4jnN)d`dByL+&-0W?000y(0()!WAMsGJ>Hu(?+b$Vn@aWb0vq~6x`!86 z_8V+Ht5@80h@I0F;{rFtlyUG9cTsX7^U3HH7-OqSTfeRPQU@lKP|Y^`b^(>f1ZkT$ z1b}BQ=!9+mx`5LLv4nxWSJ+B~vXF%xlfKHQRB;z_kk`p;v9M$vNxk||;w;mkc;y}l)KWddbM)~#;ll1VJYq^Dj#?*zgpb5Ri zD!YTzHqt08&z zpezV$a94vLR5@V_Zboj`b%f6BWaG+$lH(ZdKXh*|abB%3s^ONqSCvU9X0|ZI2dTr* z%q&%2j+TcYz7IL$a(2AO++m*}FJMk**h+6-|I(4_nHNaMjo`}Yank||z#UcAP}s5e zFF6NwmCC{NsKB~y3S)rYQmnJRD5v1G^S7y|9pRQ^Oi$ACov%@+n3d z?%16}EyFrWofmJED*Gc|%PHMIe5}Xm*2lQc2+M}-^TtYm^=5-j!KHf@6hWqs!ABZm zn{79xzxfa0Hj&;JcUiv%ya^bzNI=6KJEOF|E&LGi%H^@Eh#fmpAbCv&9NoVTL zs)_ffe26=K3r`s+0VdDWOKv$a+x2 zy%??K`+%R|(!aN9+HAL`FXPQCi~p#kKh46>#iwEB-M_b~FVgvFJudZT z?0;0UsVLSzqxN!t+P}By?~aG4{_Oal9shI2|6FQ*E;T>b_@A3=_@SSh>rb!dr#lJ6 zJAS&88bAH`|7!y3iwp=T%4ES#nIGijbdIe?5xLCJyxm>R&KG6TeUJ0=DIfkmqB8Rb zdbxEI-#s`!{m(wx!aVzJbeqbv)y8H&&tED3gj|hP1X-&>Zpd#64%Sf+oqYs%IXAc2#R>yzGv}+Pz2+*t*fMyK_G^=gXq27n9h5%ve1_;wvrCPKe>}tQVtke)sd@q|EZv@>pxM-pB4Ps zgFols&zt1uGV^nx{<)L<+>3uY3qReh{{s%|7cgvOK9$Ks%MkxKUySEKvsGcf|fa**VOG_e?Kx_)`RgG_)$GbI3jIPykq zufqZW_FPfz!blgZKo}V}2F-Y*b_nB5Q$~FJ64LkZi{;aj=Pr^Oln>gCCLk|g zl$hKbv=^_`+f))l7>dZ7rJ7FwW{AggnJaCXD-$r~OOa}l?!%|awdmXz9ISv*$ees6 zP+s2TV4fsftg>eU6o!49&%2T}#bdus5boa`4fj^yZqST28{fgq=GMx-|{nySWO1i3^*2 z;n4-9GQ%n7VG`VdrUxz7gL>KLZELH)n!RUAGbOsdn)<|f1Yy-fW6438JN72@ld<25 z7Cn^Pwno>p0ha6C9Kb&D=5UN?hAm){#quDYa+>=i#WL(t+o=y$1JrqcSv`hTeO)YO z$w)F@$0~0&Tjf-!!G+3@!5C(>WaLq)^>mmm$B(ei=8HT*3?N=&mu%FB5S>QxY?wWQ zx_QB;c-D{M2Sd`AKOpirio82WMNeS`puG>9!+gyfJO!J@HBXJmWaeH zKx2pmmShf(80DA17J{!aN#=0hCOkxq2MsPgs1Qx9ESkRxSbf<}%uVI?qsiU(^ z)2=DeSIZPm(o_+j-w1a}-{?wT*w3S;`MLP^P??kiOv#6uW9`nfZqxL{&LhH0M$Pu$ zZ>o*}@R_}Jggx`v6qU>7QpIm?-{ibICXqaff$9xs$7b^1CjXH7ORwl5vr8X-r-FqI zOu+PaCSz2HW3F;5%rPBN3)97JAq!c{J60%ckq8+vOIV(UyxUX-yV84=JHqIFR?0`| z3>*I$UAgrr`_qVzy*1H#?pN48!9B0!OCkVGo3EseT^WAWHt2R~u(d=WT1HA_pZQVM zPce^zoM~NKAeZs_uV&oH0Ag5Z*a?Zbk4N;eD z0a|1Z03e6w;xXb8spdfy4a~~8f!FYylh}sWSP#CcnzDz*-!U&mH=ZG5RdxG}^jVXS z=!NlflffA1HYPBcPk)M(c%NOYP-KR7to9!=X^x?(ecD{1aAxXN+XoaUfYpY0e?q50 zHp6^Az1aSTTXJMlS>dgU{-Bj_>S79n zO7-4bOn0IT3H@W3g%%?yG(M9h72;)K3`Qu!h0>l8D)z%hrq*BaL1>{yS=y151{%St zxZlsJMA*L&2B9EihHW*&Is);s%!HzghR>aD10h9Ig__D1C2?nb7sFiJAWd~4!dB4a z*_6$r08RQ5@jEPn+5PJBO0_TXD*A@@=hcaTOfg!39jozM4Mrcl1DfEQ2gZiP{Mp8JK5NIxxVG!rX}7)5Wf+kI65p)FMI1u_NTDPs zB@yVHcEp$_tA(sFec*m`M4yX?K7>&%gvd?tao%FIl#d~MJD^u#MLdX8jOTJuYUg~{ zdz>dud&CR}H7Cpx=Nea8O|gbKu`l@7XAFU6%kmX3@l_&?_g#%w2C!~(%3g`DODgK` zw^hC5nnD_r@F%r!Vr%%dVs^e{qcu+`$e*6b4cE1%WPUaz41ajMq#b9fKnfmT#XpjQ;%2l(pkF*d&UyrMq zt6Z>nx*DpgPm4MK>VkM7S+tSVL6oB14KHEsNQz93jz?DQftUJhT%N(k@YML;y7>DW zGq)#b6FnJao`Tovq-(M^-f>tdv`y{&z6yosyB|5;mr+dL78`o6J9tk&?=9xw%y_qC zbf_&1Icjp<>DoXTrF~E}){30*WHT$)OqVqw^anb`LX}-E)`4*hhx96O+bklP&OdVZ z4GF*zCckUz@Z(GPMG`yO)`aJ#@;+tF+%KmB^}h;6g_aJ!)Hl35Jk}9s`$zV7jo(rl z<;SlPZ!?mby~J=P2aFF3J3ua-vp`^PmQRdDY5V%_Qd#B_LN(rR_CBrPv#$kOeS)!9 zfQ2juT0h_>BL)*NAJ|0u8fLa~Dj^l4Er#7O`u*s; zK68s~aD%4~r0jW~9)Mz_lQ0XXl5CU6pVrX7$suWO*;*~6jQ=vx5` zv%KM8>u1f~w@2m96b|?lGyJslxq6^=)!h%HH{l+r#Y4zBD^_!Jm|8{VJoe@_?HJC{ z?}PP`r~NodB>%&9HDG}_WGynZ(qbkNT5S~Ic7tQxqufU3^njcPO$dQ?Wm=5&VP@Z) zc=|VlzE9i2Thr{^d{hpq8^-6;HTJ4Gu|XPh*)qWOW0ATGjKPqGl7MJ!w1S6nGJ&i& z^y`T}IbsmPocRJ&IjEAWj!Y|CHoehQmr)}z5YG%%NWKb}#WoJ+kStTTzaoi>gOVF0 zr{0x-hRC2|R#I&|3P2MZgN%ocGJD|WQ=%40r(82}xY}^z+J4Kq;TTRW(!BYjFftGL zX-Jh)li3ZuSw+M^dyp?0^cA{U{;#c8a$Utn^7WSNG)1D?Vga66DODT{Meefl z>bdvqW&&cfGB%_=N7-tRRY~-4{Svd8KI-+F6JV^eUHi>)JKKzVMlB}b&W(Wps@@#! z$da#Ek@*U5=k<&!+q?Je$;`?xYS;PiCB?IZ2*#JDjF%d?I#NUV|< z$ks3DXwkMc-xf}{Gsvnj8=~zanJMr0)oK||Ssly!3UbaJKcywF^|^Zxx^L&At5`wz z$1B%$@gI~Eo^oZimR%tOK~z%;Vm6fKA7*Rtrv5jLyQe;M?U{b`C7SR%iED0}Wc>Rl zPY)M8PWi_+?Gp_5s~{SdD+=6STUW^E@q|O|QHQ<29%gkhv91WgI9GHgIbGMsZ!5GL&goJ@7l3SQ3{T0`Z>WpHrr-vbQ~mU z7tJ3l5gn0McKKtu+qPuGd=0eG-dDTT@$~v*8#aO>^u~nVh0RQ1f9&8Kq_OaEr5L6#vfS=aO^-}_JNnAk+Fa6H7tyy}MNY;2Kr?JJ&~h%+j_Kn14T24s+YpPe zi6oa`aiv~d(b~%8(4Om8rg@_+u#*{<|`xp!gc-seORYstjhlDMI^Ma8tct{_2 zUeJb+Qwe4OdyQ)nfcy&JjG7V#4upY|hA)8yHRM4aua;apfv3lQ+!pA)z54*hV8$-M z8){DNtys&Hhs8l_v(M)J@PO()|H3NiSsc{nfox0NV{UPhl1+vaoV^cJ2r5g}uKV8b z$oX`yp3`cL<*$2KC^&bq9C5N@tkS4phI_xs1v_}|B(-Q;piw~KLq+6Ju{)U5C22g% z9S^x4#fH6tFdp4442zk$7SO- zk)W&ftN}D2v-uYdSDyr6ovS}1V;YR{qK)OG`er-+3c2`rKzJJA;mzexNh2zWi5fiC zqrN`LVNlD*UKL_j6SP5qeI{`Gt8_{iG|e}vSWZcLVH&4vH-NKwxKoLC<;x5DB24le zbzWAD>1WNr{(e&N66Ggr|0}+mZQ{`5vObBCDDT~{IU7aWsrO)n6Nc&NHSVX0i%BAK z1tfapZf8d^-T`=Y(u6t=vaccc^JdV3H_Kxjr}zNdG=5L>WSz75oz_*j;%AO gyZB}K(06;(^M&ho&JF3U{#Mo1$c*WL<>cg4fldyda&qz^a&qe$Hz>(IX?|%CEi2?9o{qoEp()yI**|xKE&;E* zxyc=n)i=nkmsgilSZgBtlat>mxBl zhQ^ZpkCZ6a*&;K8*d^ z^OnIHxB`mnvQWO3e;1ZcRV(E+z^yoqd?Ats>9Z9MiB`E_l-5v>oWhO|CvBB@ul6tG zyfjKkl2^GapR~BK*?6DI<)VEGivG1`>Q5E#$*XKRX7A!5YkN*<11==6*odvHuwz$9 zQdYs?TesIM_+p3cR>zDiRC22bQANlPk6QDhSLQGb389zPw=H#r)b6hUAGndFlSBU7jPYms94Bkm#LkAk;e-H1w@$b!ny|i-qmJ05py?mOzVUI7 zvL5OOO7$1L?aE-^FP~`&o4u_c3MWSkEwyic9vS6Mj(TWggP5!RdAZ?ZJ`LB~pT)%; zve%dokPi?3FyM|B>dQJxWY-fDSC4`kBMHl?4mO(noV^m{QYi}A^zgClyG)SBkX^BT zuOXEc=UId8$S9d1F3Dj7PjI?rrgv^1JY50*a4v8P@u5W*??krN|6!dmFCV^HOLt+6 zmEy9~yYI6&f_|=Z*^c(PE~6O24Kjtveo~ENO1uS?p~Uvc7L7u2^SNRmp}ftK-}8C# z6b*3W<}_(lI5R^Az#7Mqm>^KQj!^uAWnFE7q;GLjYaVC>JxP8(O8*d9;)Y`NeRiN;O69ht77 z>JsN)o0>pv_z5)peKpil%cwa(G(b(wv=3+GkwjkFzLoGf)y3C2DiZXRS8_hl9}h3JTA)vATxlFP0edeaH+Qd%(uj~G70-zI zDAZDu8uGBNMw8Kc$#gJ)&dURc*&Z!0q9A|w%MLNyinQDTzV92=5ae2H$)}yEk;VX$b+sIzNZWBKpDxFU}UuYv)-R5j~s|P^74iC!}kt7RM zFNlyIWoruJENE)p(70%Q@sE|4(+kBAfKPeS`wGI<+d7RXp87fNnHI*^QL5r#u3#~6PDZ61U{T; z&BM=qF;1otc+i%hZ2#kpd<0)B!w}LjO*KCve@#2S!WdnD^@Ma)Kn~m^n3jGtvNJ0Y z!x~3*MrjAPUW4lz1;%&h4j&udGv=?+w}P)h9@u&2 z$xPha^Vn3ww-rLMWK|q|(8#jo|5gZ|dWr}xh@Y70E|kPJw)%ArSeURI#ayu7p@y-H z-K@riO0Z5LQ#R4cXY;h8>aR2+17^pbO;hzPQa;iAh2{(KpYCO=p?Yeq*7NPdFJgkF2sOW>L_(C$9SWUW9ccx#xgJe9m5P{pH#<2R7b8A(-%Zp1 z+mLb6aEBV7FrK`t%ThQ5!DhO5`RJ>+@s@0;*8Iki!SE^_tm9Z|LBiCJ(e0=s$ifBA zhP^BYo6Haa!a;CbE%EY@=9SY!1G)pmxxcEkgL3(qM+E)PwUP6$^ipUZF%)8P*Pj*- zY}6^ynYDA~v}Fb#X;ISA?QR|ET3~5fW_?w>$^rlajMzunCq!}3_GcF0;YNnp^N_Xv zBCsa3&tnF1+(9bF@$d zXu*9tawe*wFj5dcmRHOt+l<~D_2o>6VgPCJUmCos=A%4B4zjseA)AXHtka#qr%chX z@L~a9pR|9LQs{AQi~V)q#bAO}bGtBpf5F1wkVnqrqCJ&Ed;ZerPd_R$+CMJxgQ!oe z<^bOUUkZX!id+9Yz+Rc}_R#yZ!}3gtDQdZ${J?Out-fSD$>xk=R-3^O(br(R8b*f8 zVpUvwJzy?9Edpyw<#0gKl{oql;^U((ySkxAzUhmD*L^X**DwhIbWz?56m2zQ!_2d9 z7-IET<~fg#Qg&n}6u{8=k|5@MKM_4ljrZS>VAM%{G$!HM4{Dk_=ZKfc0OFj2uD9cf z^rqA_z31+GoPFGm^xjdw|HP^MyMz-ewjFC=dMrp?3SNI3FNwR5GA4$f#+;s@t<|_1Uuc;PbDv2?(+^ zlboZME%G)lG}SN=%LYv}m&i(@jMZA(2bW!Qv}eH-euEUibdBpeOsMdwrqt0n@f08s z4tp>fiue0*Lh!>H6v_=n=}&%A>nqq^g%uEG&Y`j*+7NN3T5#7IWe0o#{4$Vb@MHsL zA{VSnqMDBFp-(>=ia}*KW=!h8)5#1)TLMwI>oWTZGRLiBl(u0~i@DVLETg6*&)|vc zW?)PAdthdIh`!zfw>BiFuW~fTr8T>5urdE|=1GiE5NlggSTzL~ll8}3B7||!W$Z$e z%{Pxa;9HN34$Jsen#>CtyI28nULXXkeQ=0+3BqgK?%lOC=?JijqOQanzGScPQBsjt z*6Eli!{@FJWnKa4uI(qgXNkNOmat&e;EHTP0IV$tR`2w=XWpbk`ch$wE~N(zT#x+u zOyFsg^wm7$=H6FBX)_s1F&ziN`eyF?O+#Y}HhbZ(e|!!*d=0oa@X<_6C2%hOaWTuq zln~p9{AgLJ%8K4ozpU<;1yRyb4$K)yD>A>ktprz)Ue#3nhwuO1wb!_$p_bDBq$LN=MYYuJx z88M1kLs&kJcZBCM7C$L5W2VyeR`){>m6vQKubRZc6BwVPh&^T`ihlDlCZEBKJ_xMY z%AurE7j2S@d;N8ea((**`Dko;Rs5m&ZSTqhr+vl2dk=D_)Go{o?1Zl*AF!n9y{*W& z`k~(H@l>?{=g`@0ybd}TpU+FFn=KvIKfw4k_~beUso174gx8mBpz~bK#i!;=vO%SH z;-O?Ump!;2FLUqkB@$!8Z~{q8P8nWSyMjd!&)D5WC8ud2hS@OW(4>I(g`A>0GI|Dn zr}?I`ih}u$&&iX3kpa_wj$VHudFHm*v&3uXjt?Ig*DjBP0!-`(Jf66{oRy|$VfC83 zOj{j*q5lFMTgmo<)$HzaNtu7CwsQ8~?NuQ+QF}5<8amw_EIk$%Ej=Xe?kCI?5(sKJ z^9E)r(_ShLUEvmXv3|V%+04n!m-K%mx|6?=0T91z%3$o8jPK}%P&xpQI_hFN2xiJ# zYxO9Eb$!FPdd&@HgUp_cryAL^PQSW|MO>0%sPPoktlfxrsY-GMz5YqG-3OHTrcB3! zSB56@G(uTB+a(^u0+v&!O#JTXH~p=iJ>i=yWyDHuEZt9O$!W0|N`LF2%M*SNDyFXz-C1N0E^u~mxriu|^ ztl~<`57d^4Duo(%Ta)0izlCqxd&}T~(M#L}*@Z=lwY}eKQX-7a-a$FsM^qcqmHtF7 zv}IF3;+J=`pI`l}ZDoOvEaE_H93tMO2R@fe2)-I~PEwSHP=j{Yqr1^)p zr&!6jDmmP-5&oz>pE+h!w zbnW-%f2~lOMjVr@7G+$-^;6m1OuCRV%tzySgEvDJR4&UY2zJyLzWi$ZFz1c3(%~%% zirkIO+kRC#eE6w+lCIAVW#=SW;Pp>1ds&t{w5>hdl{tU+zq!K?XO%W2gk1Tbxx*JK zTjo2PojkfUln$TlR5Y=@BByZbw_TGj?xhzL%cA0cquu+mX!q2ny|zGE5>n1yqjs%d zm7rTi$=lB)WXO_`|3=F@WYMyk$>VwbwT@)b`dYvL7{~^$h0Q+={5gU@=itwqt{FGZVmGu9bU=`v86aZKc|9KMi)$^TJvVQly=l> z?s!A$x^ZFhD zr*wg~!iAOr>JPi54$k)FlTA-8!w+-#(K88*1oYgRUU?_jccOjTPMB zu?o^>25z0wZLy~-p3y=jQMvw3F+orI<`knUPIj0D`0oU;MQ1Z|Q{rlzWcer1# zgfgZ9t(I&TWt>J7nq^)U-!UO$P`*!K=uz~>rB9~Ac5^YVx8hDUW{u-( z!&6mZhJJg_W6=FoI1J&j(g7oXTkZkoZ@yB5L=No#Iwrz1#ZiLH!qsbnQ9bER_&7t4 zS^+3xkYS?mHApE~&}u=97JUB&a8n=~ zJS2Qw^0A@#>}44tfMbwll$W&Qj_!O>$D@Gxmz$L1+#+v2b^irmdM68DcYTWG78DTs zHt=3UMvP#vRJ=Z#RQL6Q$_7o@7wVVSXF1wVo%7u)U8bUjovY)A*1#n?U&cvUfSmGz zo0x@AJC-GN;9*0LL`Eyc3fe)Ex!*-)O;vN%tcuY^`YbfW9FH_FCxP@&W8K^8X`xq# zrAQN0y4Ym#kp86p>RT^Dm_TM|f&dL8gbPx@iGhM*Bim5H1CPY3S{&=n65A*lhG#6b zUe*&&I!axrZl#T~xkh@D7k*1(Ghc0?lnZ$~DQ;t5@aw8*)?SgUaaw}s)Wquo8L2kj z%)K#5JO~rtg@VdM#RMd(K!65Sl|4czGpCtA9Mp8`{wC!WW6<)K;|+G)P!D?RQm_oS zljg#rYM1)Sb{IEW6@nXXnrIpAqmcDQ1Hx_)3XU%hMgbe!^B4F6qEN3c7U_SwLaW#V zF?HTT#xrOhYU~i`o@z&N!$EY+DX(Li-b|}vI4H14c6I4xwuOwTi);OU@Hb6u4-tVl zaQsjgg|$6aaDs~9L9pzGk3;3PtJT?r2vP7i9oNv6=rs7yac|IAk-IO8V$C0N&(~*7 zG=RiYUZBZhI#K~xCagu|FCbpc94(lAT$u-$xvdsKlwn_yYb0T0;pNcIr6HCb>;<== zj@peBt&P+6-_eY&y=0owIbsOMI?4g)aI;E9y6zZY%~Oh{DV;KKg^5j@%a1)(t%WYHT*s<# zgub;`=v`M481li&p|g^fX%P;>lZn!XKp%_qIMO@7y{_dvXkKKMxDu`*l1)bL=o*YD zr7!ZTxvv5P$kig>Lal=|ly!rYz5*i;zON9V-Ho7GsilazRUev&F&?KgxVPl$#1ly9 zfDP7^u@K@PY9miRe`xBVL?4Jv!9YLT!Llv0i|zV%vVPx-CS-55#u?&OdMe+d+VpcTK21wj5sVvbX;y8 zPA?P7X0a*rk4~nT2g63v5=tZCFo5z~d{j0J)1Mi*B`UMOF4-nnbN(Z}5f`+WLDvzzcplv7bz zpR$E=p~0lh6V{J6vB<8JkC^CmcK@CA49c3-;CuZ&zgNEr)PMQ|F^BwQ9PmDVI#3Vq zkACWH#N;<>u5aY(v*=NOMgwu7sfy8_2M7bmuy>iBJso`hnHPkr09q5!t7= zrH-<8({W?}V6N}-i4xl0qI+FUZ1)|m_Aec@pbbY8X6~5|=?0&-Y%^85I5mB)J=J;y zQ-zLEkFNTw*;*3TuR1Z+xr|BC*Pdi7xxT?N>)ZUuZ&E;W8QBrkzz0N3*mI@!#bp^w zdjk&bjYdP*VTaCyadZ{9*Tc*oeWL`Lc)5k8^+n>s7^fZx$~W!^2MvP>-#Nl)n3Ktz z`>Kh(u))hKDzcQ80im~NuCEnavilnT+@!WWR)^qDFVBRtT|hYTP)(=KwS2V01!wlj zsSO6{Kcu@=qiceuZW+9vz-geW-(*?{;Wbc?6@pT^na2wE34i5O9;GVqO$*HL^*e@3 zsjifBA~$D%alNf}AuB@tJpI5n^tcZ;Xz)7ouk9M13L`!xLe0kS>*-h|CaY{#9fxG2en7jbx<0kMqCtWz7*STemKrNGnRa{&4S$o-$m7i99;E zNF!E?J_Y;DpFAB?ml~7qgmP-qI4Lqdr&GNOZ10ISJs`})&@k$!S^hht21ifnt#o2K za!dmvtA~A~bWjRz%84*MuzLS}gULZW`#vLRW$1EzpIdXuHk@N8#tOYyI9(o`y(pq{ zn5D|N&_~4$@bUB=c)iZN00FoSjesIKb(CdQ@XeMuR2znUpMtk1(YO{$Zy4p3gVkrx z=8vMq7|I~*4l|5X;%!x`RBL`K)=zn{IG%)-;F>vpxh38T9LenBG0)qh#mDCuvk!5^ zgsu+=Pq(xQ!ze);TT4boTG8fA_Z5g%VR zg=D^SfcadFblzhY+cw;DrrFs~86Q6wU_hdv>O5XL@5Dz|D-tID$UF^M#kbE}Hr1we zrz$=SN#cLnfK8$4efm-?-B$$>*&**@mgj zcM=UXEH>mOxoPxX1d`;7nu@r>U`+27X*zk3C|~m{BgSP6+Rq3auKH$moliENxPZTD zId6C+)jO@NGJcXFOmZNRuX()@!-Yb-ss+;@<#$*`3Ju53J8qO5g1H>>$7R{%Jc@cg z0rb6&Lf$Z^1Tn4K7O`Ed(^y*20#Ri%<023v7$O}5i;>2&1}zV>-Ypg$2@R-Mte?oE zs?R%jh7V)d#n3!ubo+`!Y)+BJIR&;)sSq7w)mrY_Y4&Y4wmYtak47va)B`*S$11;> zRWRXvVQN`wH)f-JB{r+?PzRx%7AJ74ok!-RMfC(8s;+ zA{T1OgBSU|B_ENVDX?t8^3q)$7gkyL?p=q3pYS5SI5!DTs*AE8+f$)^aMJ2z_K5$P ztTAV8dF}oV8g&0}^FYyFz2(pMHcvd!m~@~^fshQD2*?WkmBIba5uF;&yyCS*)xluG z)4yw9lfiR_(Xo|7yL;T-9Q8TH-*6pAv80b(@03%y~CS!P7ddVi8#8=-pUC&fDGwuOW=|k#3gM$Rorb`GGJatI;itu9hz7w`sBt<{-OG# zi|2Fe7>m8pG+ty)?z8aCxbd)8Qy5;=Q(X8f4Ay!Vrh+z$wHFg5&=8Z+{lq}1S7UNw zRDPeot1gaOH`J6Ab?;2Z2cBnb>RBAe@Pba|{wJP6`6b2GaW{JT`8R%VoQ~5-yz})m zwmW(V8900_{pobZ$!yB&F2+^;ys;s$GB*Bu$!%OHc9Ag-@A8rI2xWh&f9GXx=dhm* zHgHW|{PCz8eQD6WEV{!!`;7+lB_I-62UYKp@ZI(wdosNdr$4l=g1C}QRXc4psOL&fgu^Ws(v`3T&`tM(SNiVY!891;5q+Y(a@O=*hc(}worj^;@qnVJd@%-05;5yih+tH(YG2)HF18>oKor2| zRvo9?@)msgsz`h!4xWhM>7G=E!}6!jW<=Q`grYivx*&?qGaY4;O(s`Fr**bz`Zt*e zeQTTxeaXX`Ux0aMQA{S~Dh0joot^!ESoD4a{vtJ#_Z#IJk^-&b$O)KzS8LgiOD;Nd z-0Tge(Q>&5$}~b-YUndo7!R@dNY}x~v1(0A%oF>y~_;-OXA&Tk4YP?8ArI!bf~r#Aw5(Me?ioafy{Bgpo@ok z0;}wVj0=Cp>o5^Mo#xHB2yfLN;sVYt?Ayp(UdY?=BW>)9I(Tt_PMVvCww8i0-kv6p zn;sy9mY(BpxpluP^4(!43M2%gnj23IN7+Q?W~*f5O1zcMv! z)cfTZ*+xL5Sa?9U6yFQYF7il^y~kEBJ6C@-ckx8(=7e(Vr()(#_o>2#?iCIcm*%jx zuR!VB=hq~1X?w^-)poT^B532?&>gRV<9$x2@r5J?2fTn^0g2y9E|Drwiwr17_QaKj zJwNWH!SP22^lpR9*Rqs~DgS0OC*C?FerWPK~vyqcL((Emy`Y%OeZqf diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_emptyAppearance.extraExtraExtraLarge-light.png b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/__Snapshots__/ChatChannelVC_Tests/test_emptyAppearance.extraExtraExtraLarge-light.png index f7a4d1339ebe512a96b791301b187e63da657eae..0338a46b717a313940c92ff7f43d3f7ee7288562 100644 GIT binary patch literal 16193 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